/** * 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 testSetFallbackLocalesReplace() { $this->localeChooser->setFallbackLocales('de', array('fr'), true); $this->assertEquals(array('fr'), $this->localeChooser->getFallbackLocales(null, $this->mockMetadata, 'de')); }