我正在尝试实现一个检测用户首选语言的LocaleListener(考虑Accept-Language标头)并将其存储在会话中以避免每次请求都检查它.我已经开发了以下代码来完成此任务:
public function onKernelRequest(GetResponseEvent $event) {
$request = $event->getRequest();
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
return;
}
$preferredLocale = $request->getPreferredLanguage($this->availableLocales);
if ($this->container->has('session')) {
$session = $this->container->get('session');
if (!$session->has('_locale')) {
$session->set('_locale', $preferredLocale);
}
} else {
$request->setLocale($preferredLocale);
}
}
Run Code Online (Sandbox Code Playgroud)
代码正在运行,首选语言存储在会话中,但symfony不考虑存储在会话中的语言环境来翻译字符串.在我的情况下,我的首选语言是'pt_BR',当我逃脱时:
{{ app.request.locale }}
Run Code Online (Sandbox Code Playgroud)
symfony正在逃避'en'.symfony不应该考虑存储在session('_ locale')中的值来定义请求语言环境吗?这是正确的行为吗?我怎么能做到这一点?