我创建了一个EventListener来根据用户首选项设置语言环境,我在我的监听器中设置了这样的语言:
$request->setLocale($user->getLanguage());
$request->getSession()->set('_locale',$user->getLanguage());
我试过了两个..
我在service.yml
:
app.event_listener.locale:
class: 'AppBundle\EventListener\LocaleListener'
arguments:
- '@security.token_storage'
tags:
- {name: 'kernel.event_listener', event: 'kernel.request', method: 'onKernelRequest'}
我还尝试在服务中添加priority: 17
,但它不会改变任何内容......
监听器似乎有效,我可以使用$request->getLocale()
(或会话)在我的控制器中获取Locale。
但Twig仍然是我在config.yml
中定义的默认语言:
parameters:
locale: fr
我现在很丢失,有什么提示吗?
答案 0 :(得分:0)
我尝试了很多东西(更改优先级,检查语言环境是否传递到前端等等) 最后,我在EventListener中强制翻译:
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if ($this->tokenStorage->getToken()) {
$user = $this->tokenStorage->getToken()->getUser();
if ($user && $user instanceof User) {
$request->setLocale($user->getLanguage());
} elseif ($request->query->has('locale')) {
$request->setLocale($request->query->get('locale'));
} else {
$request->setLocale($request->getPreferredLanguage());
}
}
$this->translator->setLocale($request->getLocale());
}
我不明白为什么,这应该在Symfony翻译中完成,但它有效......
答案 1 :(得分:0)
您必须设置翻译器的语言环境才能在模板中获得正确的翻译。
例如在控制器中:
$this->get('translator')->setLocale($user->getLanguage());