namespace Drupal\language\EventSubscriber;
+use Drupal\Core\DrupalKernelInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\StringTranslation\Translator\TranslatorInterface;
use Drupal\language\ConfigurableLanguageManagerInterface;
/**
* The current active user.
*
- * @return \Drupal\Core\Session\AccountInterface
+ * @var \Drupal\Core\Session\AccountInterface
*/
protected $currentUser;
* 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.
}
/**
- * 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.
*
*/
public static function getSubscribedEvents() {
$events[KernelEvents::REQUEST][] = ['onKernelRequestLanguage', 255];
+ $events[DrupalKernelInterface::CONTAINER_INITIALIZE_SUBREQUEST_FINISHED][] = ['onContainerInitializeSubrequestFinished', 255];
return $events;
}