diff --git a/core/modules/language/language.services.yml b/core/modules/language/language.services.yml index 19d0f21..4fda648 100644 --- a/core/modules/language/language.services.yml +++ b/core/modules/language/language.services.yml @@ -14,7 +14,7 @@ services: - { name: event_subscriber } language.config_factory_override: class: Drupal\language\Config\LanguageConfigFactoryOverride - arguments: ['@config.storage', '@event_dispatcher', '@config.typed'] + arguments: ['@config.storage', '@event_dispatcher', '@config.typed', '@language.default'] tags: - { name: config.factory.override, priority: -254 } - { name: event_subscriber } diff --git a/core/modules/language/src/Config/LanguageConfigFactoryOverride.php b/core/modules/language/src/Config/LanguageConfigFactoryOverride.php index cb41969..d1dd753 100644 --- a/core/modules/language/src/Config/LanguageConfigFactoryOverride.php +++ b/core/modules/language/src/Config/LanguageConfigFactoryOverride.php @@ -68,11 +68,16 @@ class LanguageConfigFactoryOverride extends ConfigFactoryOverrideBase implements * An event dispatcher instance to use for configuration events. * @param \Drupal\Core\Config\TypedConfigManagerInterface $typed_config * The typed configuration manager. + * @param \Drupal\Core\Language\LanguageDefault $default_language + * The default language. */ - public function __construct(StorageInterface $storage, EventDispatcherInterface $event_dispatcher, TypedConfigManagerInterface $typed_config) { + public function __construct(StorageInterface $storage, EventDispatcherInterface $event_dispatcher, TypedConfigManagerInterface $typed_config, LanguageDefault $default_language) { $this->baseStorage = $storage; $this->eventDispatcher = $event_dispatcher; $this->typedConfigManager = $typed_config; + // Prior to negiotiation the override language should be the default + // language. + $this->language = $default_language->get(); } /** diff --git a/core/modules/language/src/Config/LanguageConfigFactoryOverrideInterface.php b/core/modules/language/src/Config/LanguageConfigFactoryOverrideInterface.php index e79e90b..56dfc47 100644 --- a/core/modules/language/src/Config/LanguageConfigFactoryOverrideInterface.php +++ b/core/modules/language/src/Config/LanguageConfigFactoryOverrideInterface.php @@ -36,6 +36,10 @@ public function setLanguage(LanguageInterface $language = NULL); * The default language. * * @return $this + * + * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.0. This + * method has been replaced by injecting the default language into the + * constructor. */ public function setLanguageFromDefault(LanguageDefault $language_default = NULL); diff --git a/core/modules/language/src/LanguageServiceProvider.php b/core/modules/language/src/LanguageServiceProvider.php index cb4ad88..2d2004f 100644 --- a/core/modules/language/src/LanguageServiceProvider.php +++ b/core/modules/language/src/LanguageServiceProvider.php @@ -54,13 +54,6 @@ public function alter(ContainerBuilder $container) { $container->setParameter('language.default_values', $default_language_values); } - // For monolingual sites, we explicitly set the default language for the - // language config override service as there is no language negotiation. - if (!$this->isMultilingual()) { - $container->getDefinition('language.config_factory_override') - ->addMethodCall('setLanguageFromDefault', array(new Reference('language.default'))); - } - } /** diff --git a/core/modules/language/tests/src/Kernel/LanguageConfigFactoryOverrideTest.php b/core/modules/language/tests/src/Kernel/LanguageConfigFactoryOverrideTest.php new file mode 100644 index 0000000..b8b31a9 --- /dev/null +++ b/core/modules/language/tests/src/Kernel/LanguageConfigFactoryOverrideTest.php @@ -0,0 +1,43 @@ +installConfig('system'); + $this->installConfig('language'); + + /** @var \Drupal\language\Config\LanguageConfigFactoryOverride $config_factory_override */ + $config_factory_override = \Drupal::service('language.config_factory_override'); + $this->assertEquals('en', $config_factory_override->getLanguage()->getId()); + + ConfigurableLanguage::createFromLangcode('de')->save(); + + // Invalidate the container. + $this->config('system.site')->set('default_langcode', 'de')->save(); + drupal_flush_all_caches(); + + $config_factory_override = \Drupal::service('language.config_factory_override'); + $this->assertEquals('de', $config_factory_override->getLanguage()->getId()); + } + +}