我正在尝试实现一个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);
}
}
代码正在工作,首选语言被存储在会话中,但Symfony没有考虑存储在会话中的区域设置来翻译字符串。在我的情况下,我的首选语言是“pt_BR”,当我转义时:
{{ app.request.locale }}
symfony正在转义 'en'。symfony不应该考虑存储在session('_locale')中的值来定义请求语言环境吗?这是正确的行为吗?我该怎么做才能实现这个功能?
_locale
。过去当我引入它时,它没有起作用。$user->getLanguage()
只是我的用户实体中的语言字段,因为我的用户可以独立于浏览器区域设置决定使用什么语言来使用Web应用程序。 - Emii Khaos