/** * @param MvcEvent $event * * @return MvcEvent */ public function __invoke(MvcEvent $event) { if (!($result = $this->langRecognizer->recognize($event))) { return false; } list($lang, $newLocale, $routeMatchLang) = $result; if ($result = $this->langRedirector->checkRedirect($event, $lang, $routeMatchLang)) { return $event; } \Locale::setDefault($newLocale); /** @var Translator $translator */ $translator = $this->mvcTranslator->getTranslator(); $translator->setLocale($newLocale); AbstractValidator::setDefaultTranslator($this->mvcTranslator); return $event; }
/** * @dataProvider dataProviderForTestRecognize_WhenShouldRedirectToRecognizedLanguageIsEnabled * * @param string $browserLangLocale * @param string $routeMatchLang * @param array $expectedResult */ public function testRecognize_WhenShouldRedirectToRecognizedLanguageIsEnabled($browserLangLocale, $routeMatchLang, $expectedResult) { $this->prepareTestedObject($this->prepareConfig(true)); $request = new Request(); $request->getHeaders()->addHeaderLine('Accept-Language', $browserLangLocale); $paramsBefore = ['__NAMESPACE__' => 'Module\\Some', 'controller' => 'TestController', 'action' => 'index', 'lang' => $routeMatchLang, '__CONTROLLER__' => 'test']; $routeMatch = new RouteMatch($paramsBefore); $matchedRouteName = 'some\\test'; $routeMatch->setMatchedRouteName($matchedRouteName); $event = new MvcEvent(); $event->setRequest($request); $event->setResponse(new Response()); $event->setRouteMatch($routeMatch); $result = $this->testedObject->recognize($event); $this->assertSame($expectedResult, $result); }