diff -u b/core/modules/language/language.services.yml b/core/modules/language/language.services.yml --- b/core/modules/language/language.services.yml +++ b/core/modules/language/language.services.yml @@ -10,5 +9,0 @@ - language_config_subscriber: - class: Drupal\language\LanguageConfigSubscriber - tags: - - { name: event_subscriber } - arguments: ['@language_manager', '@config.factory'] diff -u b/core/modules/language/lib/Drupal/language/ConfigurableLanguageManager.php b/core/modules/language/lib/Drupal/language/ConfigurableLanguageManager.php --- b/core/modules/language/lib/Drupal/language/ConfigurableLanguageManager.php +++ b/core/modules/language/lib/Drupal/language/ConfigurableLanguageManager.php @@ -104,17 +104,10 @@ } /** - * Initializes per-language overrides for configuration. - * - * @todo Remove this and just set the current language onto the config - * factory. See https://drupal.org/node/2098119. + * {@inheritdoc} */ public function initConfigOverrides() { - $service_id = 'locale_config_subscriber'; - if (\Drupal::getContainer()->has($service_id)) { - $subscriber = \Drupal::service($service_id); - \Drupal::service('event_dispatcher')->addSubscriberService($service_id, get_class($subscriber)); - } + $this->configFactory->setLanguage($this->getCurrentLanguage()); } /** diff -u b/core/modules/language/lib/Drupal/language/ConfigurableLanguageManagerInterface.php b/core/modules/language/lib/Drupal/language/ConfigurableLanguageManagerInterface.php --- b/core/modules/language/lib/Drupal/language/ConfigurableLanguageManagerInterface.php +++ b/core/modules/language/lib/Drupal/language/ConfigurableLanguageManagerInterface.php @@ -88,2 +88,7 @@ + /** + * Initializes per-language overrides for configuration. + */ + public function initConfigOverrides(); + } diff -u b/core/modules/language/lib/Drupal/language/EventSubscriber/LanguageRequestSubscriber.php b/core/modules/language/lib/Drupal/language/EventSubscriber/LanguageRequestSubscriber.php --- b/core/modules/language/lib/Drupal/language/EventSubscriber/LanguageRequestSubscriber.php +++ b/core/modules/language/lib/Drupal/language/EventSubscriber/LanguageRequestSubscriber.php @@ -80,6 +80,9 @@ $request = $event->getRequest(); $this->negotiator->setContext($this->currentUser, $request); $this->languageManager->setNegotiator($this->negotiator); + if ($this->languageManager instanceof ConfigurableLanguageManagerInterface) { + $this->languageManager->initConfigOverrides(); + } $this->languageManager->setRequest($request); // After the language manager has initialized, set the default langcode // for the string translations. diff -u b/core/modules/language/lib/Drupal/language/LanguageConfigSubscriber.php /dev/null --- b/core/modules/language/lib/Drupal/language/LanguageConfigSubscriber.php +++ /dev/null @@ -1,68 +0,0 @@ -languageManager = $language_manager; - $this->configFactory = $config_factory; - } - - /** - * Sets the negotiated interface language on the configuration factory. - * - * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event - * Kernel event to respond to. - */ - public function onKernelRequestSetDefaultConfigLanguage(GetResponseEvent $event) { - if ($this->languageManager->isMultiLingual()) { - $this->configFactory->setLanguage($this->languageManager->getCurrentLanguage()); - } - } - - /** - * Implements EventSubscriberInterface::getSubscribedEvents(). - */ - static function getSubscribedEvents() { - $events[KernelEvents::REQUEST][] = array('onKernelRequestSetDefaultConfigLanguage', 48); - return $events; - } -} - 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 @@ -7,6 +7,7 @@ namespace Drupal\language; +use Drupal\Core\Config\BootstrapConfigStorageFactory; use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Core\DependencyInjection\ServiceProviderBase; use Drupal\Core\Language\Language; @@ -22,7 +23,7 @@ */ public function register(ContainerBuilder $container) { // The following services are needed only on multilingual sites. - if ($this->isMultilingual($container)) { + if ($this->isMultilingual()) { $container->register('language_request_subscriber', 'Drupal\language\EventSubscriber\LanguageRequestSubscriber') ->addTag('event_subscriber') ->addArgument(new Reference('language_manager')) @@ -48,22 +49,22 @@ $definition = $container->getDefinition('language_manager'); $definition->setClass('Drupal\language\ConfigurableLanguageManager') ->addArgument(new Reference('config.factory')) - ->addArgument(new Reference('module_handler')) - ->addMethodCall('initConfigOverrides'); + ->addArgument(new Reference('module_handler')); } /** * Checks whether the site is multilingual. * - * @param \Drupal\Core\DependencyInjection\ContainerBuilder $container - * The container builder services are being registered to. - * * @return bool * TRUE if the site is multilingual, FALSE otherwise. */ - protected function isMultilingual(ContainerBuilder $container) { + protected function isMultilingual() { $prefix = 'language.entity.'; - $config_ids = array_filter($container->get('config.storage')->listAll($prefix), function($config_id) use ($prefix) { + // @todo Try to swap out for config.storage to take advantage of database + // and caching. This might prove difficult as this is called before the + // container has finished building. + $config_storage = BootstrapConfigStorageFactory::get(); + $config_ids = array_filter($config_storage->listAll($prefix), function($config_id) use ($prefix) { return $config_id != $prefix . Language::LANGCODE_NOT_SPECIFIED && $config_id != $prefix . Language::LANGCODE_NOT_APPLICABLE; }); return count($config_ids) > 1;