public function __invoke() { if (!$this->config->getAvailableLanguages()) { return ''; } /** @var PhpRenderer $view */ $view = $this->getView(); $appLang = $this->config->findLanguageByLocale(\Locale::getDefault()); list($params, $routeName) = $this->prepareParamsAndRouteName(); $languages = ''; foreach ($this->config->getAvailableLanguages() as $lang) { list($nameOfLanguage, $nameOfCountry, $countryCode) = $this->prepareDisplayProperties($lang); $params = $this->prepareLanguageInParams($params, $lang); $url = $view->url($routeName, $params); $liClass = ''; if ($lang === $appLang) { $liClass = ' class="disabled"'; } $languages .= str_replace(['{url}', '{nameOfLanguage}', '{nameOfCountry}', '{countryCode}', '{liClass}'], [$url, $nameOfLanguage, $nameOfCountry, $countryCode, $liClass], $this->getElementTemplate()); } $selectedLanguage = \Locale::getDisplayName($appLang); $countryCode = \Locale::getRegion($this->config->findLocaleByLanguage($appLang)); $template = str_replace(['{availableLanguages}', '{currentLanguage}', '{currentCountryCode}'], [$languages, $selectedLanguage, $countryCode], $this->getMainTemplate()); return $template; }
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()); }