/**
  * 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;
 }
Ejemplo n.º 3
0
 /**
  * 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();
         }
     }
 }
Ejemplo n.º 4
0
 /**
  * {@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;
 }