/** * Handling the request event. * * @param GetResponseEvent $event */ public function onKernelRequest(GetResponseEvent $event) { $request = $event->getRequest(); if (!($locale = $this->determineLocale($event))) { return; } $this->chooser->setLocale($locale); if (self::FALLBACK_HARDCODED == $this->fallback) { return; } // expand language list to include base locales // copy-pasted from Request::getPreferredLanguage $preferredLanguages = $request->getLanguages(); $extendedPreferredLanguages = array(); foreach ($preferredLanguages as $language) { $extendedPreferredLanguages[] = $language; if (false !== ($position = strpos($language, '_'))) { $superLanguage = substr($language, 0, $position); if (!in_array($superLanguage, $preferredLanguages)) { $extendedPreferredLanguages[] = $superLanguage; } } } $order = array_intersect($this->allowedLocales, $extendedPreferredLanguages); $this->chooser->setFallbackLocales($locale, $order, self::FALLBACK_REPLACE == $this->fallback); }
public function testSubRegion() { $orderEnGB = array('en', 'de'); $this->localeChooser = new LocaleChooser(array('en_GB' => $orderEnGB, 'en' => $this->orderEn, 'de' => $this->orderDe), 'en'); $order = $this->localeChooser->getFallbackLocales(null, $this->mockMetadata, 'en_GB'); $this->assertEquals($orderEnGB, $order); $this->localeChooser->setLocale('en_GB'); $locale = $this->localeChooser->getLocale(); $this->assertEquals('en_GB', $locale); $order = $this->localeChooser->getDefaultLocalesOrder(); $this->assertEquals($orderEnGB, $order); }
public function testSetLocaleRegionNotConfigured() { $this->localeChooser->setLocale('en_GB'); $locale = $this->localeChooser->getLocale(); $this->assertEquals('en', $locale); }
/** * @expectedException InvalidArgumentException */ public function testSetLocaleNonexisting() { $this->localeChooser->setLocale('nonexisting'); }