/** * Sets the request on the language manager. * * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event * The Event to process. */ public function onKernelRequestLanguage(GetResponseEvent $event) { if ($event->getRequestType() == HttpKernelInterface::MASTER_REQUEST) { $request = $event->getRequest(); $this->negotiator->setCurrentUser($this->currentUser); $this->negotiator->reset(); 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); } }
/** * {@inheritdoc} */ public function reset($type = NULL) { if (!isset($type)) { $this->initialized = FALSE; $this->negotiatedLanguages = array(); $this->languageTypes = NULL; $this->languageTypesInfo = NULL; $this->languages = NULL; if ($this->negotiator) { $this->negotiator->reset(); } } elseif (isset($this->negotiatedLanguages[$type])) { unset($this->negotiatedLanguages[$type]); } return $this; }
/** * Causes the container to be rebuilt on the next request. * * This event subscriber assumes that the new default langcode and old default * langcode are valid langcodes. If the schema definition of either * system.site:default_langcode or language.negotiation::url.prefixes changes * then this event must be changed to work with both the old and new schema * definition so this event is update safe. * * @param ConfigCrudEvent $event * The configuration event. */ public function onConfigSave(ConfigCrudEvent $event) { $saved_config = $event->getConfig(); if ($saved_config->getName() == 'system.site' && $event->isChanged('default_langcode')) { $new_default_langcode = $saved_config->get('default_langcode'); $default_language = $this->configFactory->get('language.entity.' . $new_default_langcode); // During an import the language might not exist yet. if (!$default_language->isNew()) { $this->languageDefault->set(new Language($default_language->get())); $this->languageManager->reset(); // Directly update language negotiation settings instead of calling // language_negotiation_url_prefixes_update() to ensure that the code // obeys the hook_update_N() restrictions. $negotiation_config = $this->configFactory->getEditable('language.negotiation'); $negotiation_changed = FALSE; $url_prefixes = $negotiation_config->get('url.prefixes'); $old_default_langcode = $saved_config->getOriginal('default_langcode'); if (empty($url_prefixes[$old_default_langcode])) { $negotiation_config->set('url.prefixes.' . $old_default_langcode, $old_default_langcode); $negotiation_changed = TRUE; } if (empty($url_prefixes[$new_default_langcode])) { $negotiation_config->set('url.prefixes.' . $new_default_langcode, ''); $negotiation_changed = TRUE; } if ($negotiation_changed) { $negotiation_config->save(TRUE); } } // Trigger a container rebuild on the next request by invalidating it. ConfigurableLanguageManager::rebuildServices(); } elseif ($saved_config->getName() == 'language.types' && $event->isChanged('negotiation')) { // If the negotiation configuration changed the language negotiator and // the language path processor have to be reset so that they regenerate // the method instances and also sort them accordingly to the new config. $this->languageNegotiator->reset(); if (isset($this->pathProcessorLanguage)) { $this->pathProcessorLanguage->reset(); } } }
/** * {@inheritdoc} */ public function processOutbound($path, &$options = array(), Request $request = NULL, BubbleableMetadata $bubbleable_metadata = NULL) { if (!isset($this->multilingual)) { $this->multilingual = $this->languageManager->isMultilingual(); } if ($this->multilingual) { $this->negotiator->reset(); $scope = 'outbound'; if (!isset($this->processors[$scope])) { $this->initProcessors($scope); } foreach ($this->processors[$scope] as $instance) { $path = $instance->processOutbound($path, $options, $request, $bubbleable_metadata); } // No language dependent path allowed in this mode. if (empty($this->processors[$scope])) { unset($options['language']); } } return $path; }
/** * {@inheritdoc} */ public function processOutbound($path, &$options = array(), Request $request = NULL) { if (!isset($this->multilingual)) { $this->multilingual = $this->languageManager->isMultilingual(); } if ($this->multilingual) { $this->negotiator->reset(); $scope = 'outbound'; if (!isset($this->processors[$scope])) { $this->initProcessors($scope); } // Execute outbound language processors. $options['mixed_mode_sessions'] = $this->mixedModeSessions; foreach ($this->processors[$scope] as $instance) { $path = $instance->processOutbound($path, $options, $request); } // No language dependent path allowed in this mode. if (empty($this->processors[$scope])) { unset($options['language']); } } return $path; }