diff -u b/core/core.services.yml b/core/core.services.yml --- b/core/core.services.yml +++ b/core/core.services.yml @@ -228,7 +228,7 @@ arguments: ['@language.default'] language.default: class: Drupal\Core\Language\Language - arguments: ['%language.default%'] + arguments: ['%language.default_values%'] string_translator.custom_strings: class: Drupal\Core\StringTranslation\Translator\CustomStrings arguments: ['@settings'] diff -u b/core/includes/install.core.inc b/core/includes/install.core.inc --- b/core/includes/install.core.inc +++ b/core/includes/install.core.inc @@ -301,22 +301,20 @@ exit; } - + // If we have a language selected and it is not yet saved in the system (eg. + // pre-database data screens we are unable to persistently store the default + // language), we should set language_default so the proper language is used to + // display installer pages as early as possible. $default_language_values = Language::$defaultValues; - // If we have a language selected and it is not yet saved in the system - // (eg. pre-database data screens we are unable to persistently store - // the default language), we should set language_default so the proper - // language is used to display installer pages as early as possible. if (!empty($install_state['parameters']['langcode']) && $default_language_values['id'] != $install_state['parameters']['langcode']) { $default_language_values = array('id' => $install_state['parameters']['langcode']); } - // Register the 'language_manager' service. - $container->setParameter('language.default', $default_language_values); + $container->setParameter('language.default_values', $default_language_values); $container->register('language.default', 'Drupal\Core\Language\Language') - ->addArgument('%language.default%'); + ->addArgument('%language.default_values%'); $container->register('language_manager', 'Drupal\Core\Language\LanguageManager') - ->addArgument(new Reference('language.default')); + ->addArgument(new Reference('language.default')); require_once __DIR__ . '/../modules/system/system.install'; require_once __DIR__ . '/common.inc'; @@ -364,8 +362,6 @@ $kernel = new DrupalKernel('install', drupal_classloader(), FALSE); $kernel->boot(); $container = $kernel->getContainer(); - // Ensure that the default language is set correctly. - $container->setParameter('language.default', $default_language_values); // Add the file translation service to the container. $container->set('string_translator.file_translation', install_file_translation_service()); $container->get('string_translation')->addTranslator($container->get('string_translator.file_translation')); @@ -387,9 +383,9 @@ ->addArgument(new Reference('config.storage.schema')) ->addArgument(new Reference('cache.config')); - $container->setParameter('language.default', Language::$defaultValues); + $container->setParameter('language.default_values', Language::$defaultValues); $container->register('language.default', 'Drupal\Core\Language\Language') - ->addArgument('%language.default%'); + ->addArgument('%language.default_values%'); $container->register('config.factory', 'Drupal\Core\Config\ConfigFactory') ->addArgument(new Reference('config.storage')) @@ -2702,7 +2698,6 @@ \Drupal::config('system.site') ->set('name', $form_state['values']['site_name']) ->set('mail', $form_state['values']['site_mail']) - ->set('langcode', language_default()->id) ->save(); \Drupal::config('system.date') diff -u b/core/includes/install.inc b/core/includes/install.inc --- b/core/includes/install.inc +++ b/core/includes/install.inc @@ -654,7 +654,7 @@ // Ensure default language is saved. if (isset($install_state['parameters']['langcode'])) { \Drupal::config('system.site') - ->set('default_language', $install_state['parameters']['langcode']) + ->set('langcode', $install_state['parameters']['langcode']) ->save(); } diff -u b/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php --- b/core/lib/Drupal/Core/DrupalKernel.php +++ b/core/lib/Drupal/Core/DrupalKernel.php @@ -518,11 +518,11 @@ $container->setParameter('container.namespaces', $namespaces); $system = BootstrapConfigStorageFactory::get()->read('system.site'); - $default_language = Language::$defaultValues; - if ($default_language['id'] != $system['default_language']) { - $default_language = array('id' => $system['default_language'], 'default' => TRUE); + $default_language_values = Language::$defaultValues; + if ($default_language_values['id'] != $system['langcode']) { + $default_language_values = array('id' => $system['langcode'], 'default' => TRUE); } - $container->setParameter('language.default', $default_language); + $container->setParameter('language.default_values', $default_language_values); // Register synthetic services. $container->register('class_loader')->setSynthetic(TRUE); diff -u b/core/modules/language/language.module b/core/modules/language/language.module --- b/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -472,7 +472,7 @@ if (!empty($language->default)) { // Update the config. Saving the configuration fires and event that causes // the container to be rebuilt. - \Drupal::config('system.site')->set('default_language', $language->id)->save(); + \Drupal::config('system.site')->set('langcode', $language->id)->save(); } $language_manager = \Drupal::languageManager(); diff -u b/core/modules/language/lib/Drupal/language/EventSubscriber/ConfigSubscriber.php b/core/modules/language/lib/Drupal/language/EventSubscriber/ConfigSubscriber.php --- b/core/modules/language/lib/Drupal/language/EventSubscriber/ConfigSubscriber.php +++ b/core/modules/language/lib/Drupal/language/EventSubscriber/ConfigSubscriber.php @@ -24,8 +24,9 @@ */ public function onConfigSave(ConfigEvent $event) { $saved_config = $event->getConfig(); - if ($saved_config->getName() == 'system.site' && $saved_config->get('default_language') != $saved_config->getOriginal('default_language')) { - // Trigger a container rebuild by deleting compiled from PHP storage. + if ($saved_config->getName() == 'system.site' && $saved_config->get('langcode') != $saved_config->getOriginal('langcode')) { + // Trigger a container rebuild on the next request by deleting compiled + // from PHP storage. PhpStorageFactory::get('service_container')->deleteAll(); } } diff -u b/core/modules/language/lib/Drupal/language/LanguageServiceProvider.php b/core/modules/language/lib/Drupal/language/LanguageServiceProvider.php --- b/core/modules/language/lib/Drupal/language/LanguageServiceProvider.php +++ b/core/modules/language/lib/Drupal/language/LanguageServiceProvider.php @@ -52,8 +52,8 @@ $definition->setClass('Drupal\language\ConfigurableLanguageManager') ->addArgument(new Reference('config.factory')) ->addArgument(new Reference('module_handler')); - if ($default_language = $this->getDefaultLanguage()) { - $container->setParameter('language.default', $default_language); + if ($default_language_values = $this->getDefaultLanguageValues()) { + $container->setParameter('language.default_values', $default_language_values); } } @@ -78,16 +78,17 @@ } /** - * Gets the default language. + * Gets the default language values. * * @return array|bool - * Returns the default language configured in system.site if it - * exists. Otherwise FALSE. + * Returns the default language values for the language configured in + * system.site:langcode if the corresponding configuration entity exists, + * otherwise FALSE. */ - protected function getDefaultLanguage() { + protected function getDefaultLanguageValues() { $config_storage = BootstrapConfigStorageFactory::get(); $system = $config_storage->read('system.site'); - $default_language = $config_storage->read(static::CONFIG_PREFIX . $system['default_language']); + $default_language = $config_storage->read(static::CONFIG_PREFIX . $system['langcode']); if (is_array($default_language)) { return $default_language + array('default' => TRUE); } diff -u b/core/modules/language/lib/Drupal/language/Tests/LanguageDependencyInjectionTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageDependencyInjectionTest.php --- b/core/modules/language/lib/Drupal/language/Tests/LanguageDependencyInjectionTest.php +++ b/core/modules/language/lib/Drupal/language/Tests/LanguageDependencyInjectionTest.php @@ -59,7 +59,10 @@ 'default' => TRUE, )); language_save($new_language_default); + // Saving a new default language will have deleted the container from PHP + // storage but we need to rebuild it to update the container in memory. $this->rebuildContainer(); + // Initialize the language system. $this->languageManager->init(); diff -u b/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php --- b/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php +++ b/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php @@ -108,14 +108,19 @@ )); language_save($language); + // Saving a new default language will have deleted the container from PHP + // storage but we need to rebuild it to update the container in memory. + $this->rebuildContainer(); + // We will look for this string in the admin/config screen to see if the // corresponding translated string is shown. $default_string = 'Configure languages for content and the user interface'; - $this->rebuildContainer(); + // First visit this page to make sure our target string is searchable. $this->drupalGet('admin/config'); + // Now the t()'ed string is in db so switch the language back to default. - \Drupal::config('system.site')->set('default_language', 'en')->save(); + \Drupal::config('system.site')->set('langcode', 'en')->save(); $this->rebuildContainer(); // Translate the string. reverted: --- b/core/modules/system/config/system.site.yml +++ a/core/modules/system/config/system.site.yml @@ -9,4 +9,3 @@ admin_compact_mode: false weight_select_max: 100 langcode: en -default_language: en