/** * If shouldRedirectToRecognizedLanguage is enabled * or * If we are here: "/pl" and default language is different (ie. EN) * then set lang to router, to achieve all urls with this language * * @param MvcEvent $event * @param string $lang */ private function setLangToRouterIfLangIsDifferentFromDefaultLangOrShouldRedirectOptionIsEnabled(MvcEvent $event, $lang) { if ($this->config->shouldRedirectToRecognizedLanguage() || $lang !== $this->config->getDefaultLanguage()) { /** @var SimpleRouteStack $router */ $router = $event->getRouter(); $router->setDefaultParam('lang', $lang); } }
public function recognize(MvcEvent $event) { if (!$this->config->getAvailableLanguages()) { return false; } $lang = $this->config->getDefaultLanguage(); /** @var Request $request */ $request = $event->getRequest(); $routeMatchLang = $this->getRouteMatchLanguage($event); $browserLang = null; if ($this->config->shouldRedirectToRecognizedLanguage()) { $browserLang = $this->getBrowseAcceptLanguage($request->getHeaders()); } if ($routeMatchLang || $browserLang) { $lang = $routeMatchLang ? $routeMatchLang : $browserLang; } $locale = $this->config->findLocaleByLanguage($lang); return [$lang, $locale, $routeMatchLang, $browserLang]; }
public function testConstructor_WithNotEmptyConfig_WhenShouldRedirectIsDisabled() { $testedObject = new LangConfig($this->prepareConfig(false)); $this->assertSame('en', $testedObject->getDefaultLanguage()); $this->assertSame('en_GB', $testedObject->getDefaultLocale()); $this->assertSame(['de', 'en', 'pl', 'pt-br'], $testedObject->getAvailableLanguages()); $this->assertSame('de', $testedObject->findLanguageByLocale('de_DE')); $this->assertSame('pt_BR', $testedObject->findLocaleByLanguage('pt-br')); $this->assertFalse($testedObject->shouldRedirectToRecognizedLanguage()); }
/** * @param array $params * @param string $lang * * @return array */ private function prepareLanguageInParams(array $params, $lang) { // when error occurred (404) we don't have routeMatch if ($this->routeMatch) { // we change lang only there when lang parameter exists if ($this->routeMatch->getParam('lang') !== null) { $params['lang'] = $lang; } } else { $params['lang'] = $lang; } // if default app language is the same as lang and shouldRedirect is disabled if ($this->config->getDefaultLanguage() === $lang && !$this->config->shouldRedirectToRecognizedLanguage()) { $params['lang'] = ''; } return $params; }