diff --git a/core/includes/config.inc b/core/includes/config.inc index 8d0eea1..d0b0a64 100644 --- a/core/includes/config.inc +++ b/core/includes/config.inc @@ -86,3 +86,26 @@ function config_get_storage_names_with_prefix($prefix = '') { function config($name, $class = 'Drupal\Core\Config\DrupalConfig') { return new $class(new DatabaseStorage($name)); } + +/** + * Load and parse a config file directly from a module's config directory. + * + * This function should be used to parse config files during installation. It + * does not use config's active store. + * + * @param $name + * The name of the configuration to retrieve. The name corresponds to a + * configuration file. For book.admin, the array returned will contain the + * contents of book.admin configuration file. + * @param $module + * The name of a module that provides the configuration file. + * + * @return + * An array containing the configuration data. + */ +function config_install_load_from_module($config_name, $module) { + $file_storage = new FileStorage($config_name); + $module_config_dir = drupal_get_path('module', $module) . '/config'; + $file_storage->setPath($module_config_dir); + return $file_storage->read(); +} diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc index eb9dff9..afa7914 100644 --- a/core/includes/install.core.inc +++ b/core/includes/install.core.inc @@ -1357,10 +1357,9 @@ function install_select_language(&$install_state) { * Form API array definition for language selection. */ function install_select_language_form($form, &$form_state, $files) { - include_once DRUPAL_ROOT . '/core/includes/standard.inc'; include_once DRUPAL_ROOT . '/core/modules/language/language.negotiation.inc'; - $standard_languages = standard_language_list(); + $standard_languages = config_install_load_from_module('system.standard.languages', 'system'); $select_options = array(); $languages = array(); @@ -1514,8 +1513,7 @@ function install_import_translations(&$install_state) { include_once drupal_get_path('module', 'locale') . '/locale.bulk.inc'; $langcode = $install_state['parameters']['langcode']; - include_once DRUPAL_ROOT . '/core/includes/standard.inc'; - $standard_languages = standard_language_list(); + $standard_languages = config_install_load_from_module('system.standard.languages', 'system'); if (!isset($standard_languages[$langcode])) { // Drupal does not know about this language, so we prefill its values with // our best guess. The user will be able to edit afterwards. diff --git a/core/includes/standard.inc b/core/includes/standard.inc index 808073f..03d8949 100644 --- a/core/includes/standard.inc +++ b/core/includes/standard.inc @@ -278,125 +278,3 @@ function standard_country_list() { return $countries; } - -/** - * Some common languages with their English and native names. - * - * Language codes are defined by the W3C language tags document for - * interoperability. Language codes typically have a language and optionally, - * a script or regional variant name. See - * http://www.w3.org/International/articles/language-tags/ for more information. - * - * This list is based on languages available from localize.drupal.org. See - * http://localize.drupal.org/issues for information on how to add languages - * there. - * - * The "Left-to-right marker" comments and the enclosed UTF-8 markers are to - * make otherwise strange looking PHP syntax natural (to not be displayed in - * right to left). See http://drupal.org/node/128866#comment-528929. - * - * @return - * An array of language code to language name information. - * Language name information itself is an array of English and native names. - */ -function standard_language_list() { - return array( - 'af' => array('Afrikaans', 'Afrikaans'), - 'am' => array('Amharic', 'አማርኛ'), - 'ar' => array('Arabic', /* Left-to-right marker "‭" */ 'العربية', LANGUAGE_RTL), - 'ast' => array('Asturian', 'Asturianu'), - 'az' => array('Azerbaijani', 'Azərbaycanca'), - 'be' => array('Belarusian', 'Беларуская'), - 'bg' => array('Bulgarian', 'Български'), - 'bn' => array('Bengali', 'বাংলা'), - 'bo' => array('Tibetan', 'བོད་སྐད་'), - 'bs' => array('Bosnian', 'Bosanski'), - 'ca' => array('Catalan', 'Català'), - 'cs' => array('Czech', 'Čeština'), - 'cy' => array('Welsh', 'Cymraeg'), - 'da' => array('Danish', 'Dansk'), - 'de' => array('German', 'Deutsch'), - 'dz' => array('Dzongkha', 'རྫོང་ཁ'), - 'el' => array('Greek', 'Ελληνικά'), - 'en' => array('English', 'English'), - 'en-gb' => array('English, British', 'English, British'), - 'eo' => array('Esperanto', 'Esperanto'), - 'es' => array('Spanish', 'Español'), - 'et' => array('Estonian', 'Eesti'), - 'eu' => array('Basque', 'Euskera'), - 'fa' => array('Persian, Farsi', /* Left-to-right marker "‭" */ 'فارسی', LANGUAGE_RTL), - 'fi' => array('Finnish', 'Suomi'), - 'fil' => array('Filipino', 'Filipino'), - 'fo' => array('Faeroese', 'Føroyskt'), - 'fr' => array('French', 'Français'), - 'ga' => array('Irish', 'Gaeilge'), - 'gd' => array('Scots Gaelic', 'Gàidhlig'), - 'gl' => array('Galician', 'Galego'), - 'gsw-berne' => array('Swiss German', 'Schwyzerdütsch'), - 'gu' => array('Gujarati', 'ગુજરાતી'), - 'he' => array('Hebrew', /* Left-to-right marker "‭" */ 'עברית', LANGUAGE_RTL), - 'hi' => array('Hindi', 'हिन्दी'), - 'hr' => array('Croatian', 'Hrvatski'), - 'ht' => array('Haitian Creole', 'Kreyòl ayisyen'), - 'hu' => array('Hungarian', 'Magyar'), - 'hy' => array('Armenian', 'Հայերեն'), - 'id' => array('Indonesian', 'Bahasa Indonesia'), - 'is' => array('Icelandic', 'Íslenska'), - 'it' => array('Italian', 'Italiano'), - 'ja' => array('Japanese', '日本語'), - 'jv' => array('Javanese', 'Basa Java'), - 'ka' => array('Georgian', 'ქართული ენა'), - 'kk' => array('Kazakh', 'Қазақ'), - 'kn' => array('Kannada', 'ಕನ್ನಡ'), - 'ko' => array('Korean', '한국어'), - 'ku' => array('Kurdish', 'Kurdî'), - 'ky' => array('Kyrgyz', 'Кыргызча'), - 'lo' => array('Lao', 'ພາສາລາວ'), - 'lt' => array('Lithuanian', 'Lietuvių'), - 'lv' => array('Latvian', 'Latviešu'), - 'mfe' => array('Mauritian Creole', 'Kreol Morisyen'), - 'mg' => array('Malagasy', 'Malagasy'), - 'mi' => array('Maori', 'Māori'), - 'mk' => array('Macedonian', 'Македонски'), - 'ml' => array('Malayalam', 'മലയാളം'), - 'mn' => array('Mongolian', 'монгол'), - 'mr' => array('Marathi', 'मराठी'), - 'mt' => array('Maltese', 'Malti'), - 'my' => array('Burmese', 'ဗမာစကား'), - 'ne' => array('Nepali', 'नेपाली'), - 'nl' => array('Dutch', 'Nederlands'), - 'nb' => array('Norwegian Bokmål', 'Bokmål'), - 'nn' => array('Norwegian Nynorsk', 'Nynorsk'), - 'oc' => array('Occitan', 'Occitan'), - 'or' => array('Oriya', 'ଓଡ଼ିଆ'), - 'pa' => array('Punjabi', 'ਪੰਜਾਬੀ'), - 'pl' => array('Polish', 'Polski'), - 'pt' => array('Portuguese, International', 'Português, Internacional'), - 'pt-pt' => array('Portuguese, Portugal', 'Português, Portugal'), - 'pt-br' => array('Portuguese, Brazil', 'Português, Brasil'), - 'ro' => array('Romanian', 'Română'), - 'ru' => array('Russian', 'Русский'), - 'sco' => array('Scots', 'Scots'), - 'se' => array('Northern Sami', 'Sámi'), - 'si' => array('Sinhala', 'සිංහල'), - 'sk' => array('Slovak', 'Slovenčina'), - 'sl' => array('Slovenian', 'Slovenščina'), - 'sq' => array('Albanian', 'Shqip'), - 'sr' => array('Serbian', 'Српски'), - 'sv' => array('Swedish', 'Svenska'), - 'sw' => array('Swahili', 'Kiswahili'), - 'ta' => array('Tamil', 'தமிழ்'), - 'ta-lk' => array('Tamil, Sri Lanka', 'தமிழ், இலங்கை'), - 'te' => array('Telugu', 'తెలుగు'), - 'th' => array('Thai', 'ภาษาไทย'), - 'ti' => array('Tigrinya', 'ትግርኛ'), - 'tr' => array('Turkish', 'Türkçe'), - 'ug' => array('Uighur', 'Уйғур'), - 'uk' => array('Ukrainian', 'Українська'), - 'ur' => array('Urdu', /* Left-to-right marker "‭" */ 'اردو', LANGUAGE_RTL), - 'vi' => array('Vietnamese', 'Tiếng Việt'), - 'xx-lolspeak' => array('Lolspeak', 'Lolspeak'), - 'zh-hans' => array('Chinese, Simplified', '简体中文'), - 'zh-hant' => array('Chinese, Traditional', '繁體中文'), - ); -} diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigFileContentTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigFileContentTest.php index bfd27ac..54669a8 100644 --- a/core/modules/config/lib/Drupal/config/Tests/ConfigFileContentTest.php +++ b/core/modules/config/lib/Drupal/config/Tests/ConfigFileContentTest.php @@ -246,4 +246,20 @@ class ConfigFileContentTest extends WebTestBase { $key = 'invalid xml'; $this->assertIdentical($config_data[$key], $config_parsed[$key]); } + + /** + * Test loading and parsing a config file from a module's config directory. + */ + function testLoadAndParseModuleConfig() { + $expected = array( + 'parent' => + array( + 'bar' => 'Bar', + 'baz' => 'Baz', + ), + 'foo' => 'Foo', + ); + $module_config = config_install_load_from_module('config_upgrade.test', 'config_upgrade'); + $this->assertIdentical($module_config, $expected); + } } diff --git a/core/modules/language/language.admin.inc b/core/modules/language/language.admin.inc index 8fe85be..5005302 100644 --- a/core/modules/language/language.admin.inc +++ b/core/modules/language/language.admin.inc @@ -325,8 +325,7 @@ function language_admin_add_custom_form_submit($form, &$form_state) { function language_admin_add_predefined_form_submit($form, &$form_state) { // Predefined language selection. $langcode = $form_state['values']['predefined_langcode']; - include_once DRUPAL_ROOT . '/core/includes/standard.inc'; - $predefined = standard_language_list(); + $predefined = config('system.standard.languages')->get(); $language = (object) array( 'langcode' => $langcode, ); @@ -407,9 +406,8 @@ function language_admin_delete_form_submit($form, &$form_state) { * Prepare a language code list for unused predefined languages. */ function language_admin_predefined_list() { - include_once DRUPAL_ROOT . '/core/includes/standard.inc'; $languages = language_list(); - $predefined = standard_language_list(); + $predefined = config('system.standard.languages')->get(); foreach ($predefined as $key => $value) { if (isset($languages[$key])) { unset($predefined[$key]); diff --git a/core/modules/language/language.module b/core/modules/language/language.module index 7acc783..92fa457 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -159,8 +159,7 @@ function language_save($language) { // If name was not set, we add a predefined language. if (!isset($language->name)) { - include_once DRUPAL_ROOT . '/core/includes/standard.inc'; - $predefined = standard_language_list(); + $predefined = config('system.standard.languages')->get(); $language->name = $predefined[$language->langcode][0]; $language->direction = isset($predefined[$language->langcode][2]) ? $predefined[$language->langcode][2] : LANGUAGE_LTR; } diff --git a/core/modules/locale/locale.bulk.inc b/core/modules/locale/locale.bulk.inc index 7a8a977..577ba1e 100644 --- a/core/modules/locale/locale.bulk.inc +++ b/core/modules/locale/locale.bulk.inc @@ -96,8 +96,7 @@ function locale_translate_import_form_submit($form, &$form_state) { // Add language, if not yet supported. $language = language_load($form_state['values']['langcode']); if (empty($language)) { - include_once DRUPAL_ROOT . '/core/includes/standard.inc'; - $predefined = standard_language_list(); + $predefined = config('system.standard.languages')->get(); $language = (object) array( 'langcode' => $form_state['values']['langcode'], ); diff --git a/core/modules/system/config/system.standard.languages.yml b/core/modules/system/config/system.standard.languages.yml new file mode 100644 index 0000000..8c92adf --- /dev/null +++ b/core/modules/system/config/system.standard.languages.yml @@ -0,0 +1,309 @@ +# Some common languages with their English and native names. +# +# Language codes are defined by the W3C language tags document for +# interoperability. Language codes typically have a language and optionally, +# a script or regional variant name. See +# http://www.w3.org/International/articles/language-tags/ for more information. +# +# This list is based on languages available from localize.drupal.org. See +# http://localize.drupal.org/issues for information on how to add languages +# there. +# +# The "Left-to-right marker" comments and the enclosed UTF-8 markers are to +# make otherwise strange looking syntax natural (to not be displayed in +# right to left). See http://drupal.org/node/128866#comment-528929. +af: + - Afrikaans + - Afrikaans +am: + - Amharic + - አማርኛ +ar: + - Arabic + - العربية + - 1 +ast: + - Asturian + - Asturianu +az: + - Azerbaijani + - Azərbaycanca +be: + - Belarusian + - Беларуская +bg: + - Bulgarian + - Български +bn: + - Bengali + - বাংলা +bo: + - Tibetan + - བོད་སྐད་ +bs: + - Bosnian + - Bosanski +ca: + - Catalan + - Català +cs: + - Czech + - Čeština +cy: + - Welsh + - Cymraeg +da: + - Danish + - Dansk +de: + - German + - Deutsch +dz: + - Dzongkha + - རྫོང་ཁ +el: + - Greek + - Ελληνικά +en: + - English + - English +en-gb: + - 'English, British' + - 'English, British' +eo: + - Esperanto + - Esperanto +es: + - Spanish + - Español +et: + - Estonian + - Eesti +eu: + - Basque + - Euskera +fa: + - 'Persian, Farsi' + - فارسی + - 1 +fi: + - Finnish + - Suomi +fil: + - Filipino + - Filipino +fo: + - Faeroese + - Føroyskt +fr: + - French + - Français +ga: + - Irish + - Gaeilge +gd: + - 'Scots Gaelic' + - Gàidhlig +gl: + - Galician + - Galego +gsw-berne: + - 'Swiss German' + - Schwyzerdütsch +gu: + - Gujarati + - ગુજરાતી +he: + - Hebrew + - עברית + - 1 +hi: + - Hindi + - हिन्दी +hr: + - Croatian + - Hrvatski +ht: + - 'Haitian Creole' + - 'Kreyòl ayisyen' +hu: + - Hungarian + - Magyar +hy: + - Armenian + - Հայերեն +id: + - Indonesian + - 'Bahasa Indonesia' +is: + - Icelandic + - Íslenska +it: + - Italian + - Italiano +ja: + - Japanese + - 日本語 +jv: + - Javanese + - 'Basa Java' +ka: + - Georgian + - 'ქართული ენა' +kk: + - Kazakh + - Қазақ +kn: + - Kannada + - ಕನ್ನಡ +ko: + - Korean + - 한국어 +ku: + - Kurdish + - Kurdî +ky: + - Kyrgyz + - Кыргызча +lo: + - Lao + - ພາສາລາວ +lt: + - Lithuanian + - Lietuvių +lv: + - Latvian + - Latviešu +mfe: + - 'Mauritian Creole' + - 'Kreol Morisyen' +mg: + - Malagasy + - Malagasy +mi: + - Maori + - Māori +mk: + - Macedonian + - Македонски +ml: + - Malayalam + - മലയാളം +mn: + - Mongolian + - монгол +mr: + - Marathi + - मराठी +mt: + - Maltese + - Malti +my: + - Burmese + - ဗမာစကား +ne: + - Nepali + - नेपाली +nl: + - Dutch + - Nederlands +nb: + - 'Norwegian Bokmål' + - Bokmål +nn: + - 'Norwegian Nynorsk' + - Nynorsk +oc: + - Occitan + - Occitan +or: + - Oriya + - ଓଡ଼ିଆ +pa: + - Punjabi + - ਪੰਜਾਬੀ +pl: + - Polish + - Polski +pt: + - 'Portuguese, International' + - 'Português, Internacional' +pt-pt: + - 'Portuguese, Portugal' + - 'Português, Portugal' +pt-br: + - 'Portuguese, Brazil' + - 'Português, Brasil' +ro: + - Romanian + - Română +ru: + - Russian + - Русский +sco: + - Scots + - Scots +se: + - 'Northern Sami' + - Sámi +si: + - Sinhala + - සිංහල +sk: + - Slovak + - Slovenčina +sl: + - Slovenian + - Slovenščina +sq: + - Albanian + - Shqip +sr: + - Serbian + - Српски +sv: + - Swedish + - Svenska +sw: + - Swahili + - Kiswahili +ta: + - Tamil + - தமிழ் +ta-lk: + - 'Tamil, Sri Lanka' + - 'தமிழ், இலங்கை' +te: + - Telugu + - తెలుగు +th: + - Thai + - ภาษาไทย +ti: + - Tigrinya + - ትግርኛ +tr: + - Turkish + - Türkçe +ug: + - Uighur + - Уйғур +uk: + - Ukrainian + - Українська +ur: + - Urdu + - اردو + - 1 +vi: + - Vietnamese + - 'Tiếng Việt' +xx-lolspeak: + - Lolspeak + - Lolspeak +zh-hans: + - 'Chinese, Simplified' + - 简体中文 +zh-hant: + - 'Chinese, Traditional' + - 繁體中文