X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Flanguage%2Fsrc%2FEventSubscriber%2FLanguageRequestSubscriber.php;fp=web%2Fcore%2Fmodules%2Flanguage%2Fsrc%2FEventSubscriber%2FLanguageRequestSubscriber.php;h=b1effda1db7fe1ae0e10f934baf3c1c0606564cc;hp=37a6048a6645d084cefa80f3019d3d8099fe44c7;hb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;hpb=aea91e65e895364e460983b890e295aa5d5540a5 diff --git a/web/core/modules/language/src/EventSubscriber/LanguageRequestSubscriber.php b/web/core/modules/language/src/EventSubscriber/LanguageRequestSubscriber.php index 37a6048a6..b1effda1d 100644 --- a/web/core/modules/language/src/EventSubscriber/LanguageRequestSubscriber.php +++ b/web/core/modules/language/src/EventSubscriber/LanguageRequestSubscriber.php @@ -2,6 +2,7 @@ namespace Drupal\language\EventSubscriber; +use Drupal\Core\DrupalKernelInterface; use Drupal\Core\Session\AccountInterface; use Drupal\Core\StringTranslation\Translator\TranslatorInterface; use Drupal\language\ConfigurableLanguageManagerInterface; @@ -40,7 +41,7 @@ class LanguageRequestSubscriber implements EventSubscriberInterface { /** * The current active user. * - * @return \Drupal\Core\Session\AccountInterface + * @var \Drupal\Core\Session\AccountInterface */ protected $currentUser; @@ -51,7 +52,7 @@ class LanguageRequestSubscriber implements EventSubscriberInterface { * The language manager service. * @param \Drupal\language\LanguageNegotiatorInterface $negotiator * The language negotiator. - * @param \Drupal\Core\StringTranslation\Translator\TranslatorInterface $translation; + * @param \Drupal\Core\StringTranslation\Translator\TranslatorInterface $translation * The translation service. * @param \Drupal\Core\Session\AccountInterface $current_user * The current active user. @@ -64,25 +65,39 @@ class LanguageRequestSubscriber implements EventSubscriberInterface { } /** - * Sets the default language and initializes configuration overrides. + * Initializes the language manager at the beginning of the request. * * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event * The Event to process. */ public function onKernelRequestLanguage(GetResponseEvent $event) { if ($event->getRequestType() == HttpKernelInterface::MASTER_REQUEST) { - $this->negotiator->setCurrentUser($this->currentUser); - if ($this->languageManager instanceof ConfigurableLanguageManagerInterface) { - $this->languageManager->setNegotiator($this->negotiator); - $this->languageManager->setConfigOverrideLanguage($this->languageManager->getCurrentLanguage()); - } - // After the language manager has initialized, set the default langcode - // for the string translations. - $langcode = $this->languageManager->getCurrentLanguage()->getId(); - $this->translation->setDefaultLangcode($langcode); + $this->setLanguageOverrides(); } } + /** + * Initializes config overrides whenever the service container is rebuilt. + */ + public function onContainerInitializeSubrequestFinished() { + $this->setLanguageOverrides(); + } + + /** + * Sets the language for config overrides on the language manager. + */ + private function setLanguageOverrides() { + $this->negotiator->setCurrentUser($this->currentUser); + if ($this->languageManager instanceof ConfigurableLanguageManagerInterface) { + $this->languageManager->setNegotiator($this->negotiator); + $this->languageManager->setConfigOverrideLanguage($this->languageManager->getCurrentLanguage()); + } + // After the language manager has initialized, set the default langcode for + // the string translations. + $langcode = $this->languageManager->getCurrentLanguage()->getId(); + $this->translation->setDefaultLangcode($langcode); + } + /** * Registers the methods in this class that should be listeners. * @@ -91,6 +106,7 @@ class LanguageRequestSubscriber implements EventSubscriberInterface { */ public static function getSubscribedEvents() { $events[KernelEvents::REQUEST][] = ['onKernelRequestLanguage', 255]; + $events[DrupalKernelInterface::CONTAINER_INITIALIZE_SUBREQUEST_FINISHED][] = ['onContainerInitializeSubrequestFinished', 255]; return $events; }