在Symfony 3中没有设置语言环境


Twig do not set the locale in Symfony 3

我创建了一个EventListener来根据用户偏好设置语言环境,我在侦听器中这样设置语言:

$request->setLocale($user->getLanguage());
$request->getSession()->set('_locale',$user->getLanguage());

I tried both.

我在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()(或会话)获得区域设置。

但是Twig仍然使用我在config.yml中定义的默认语言:

parameters:
    locale: fr

我现在迷路了,有什么建议吗?

我尝试了很多东西(改变优先级,检查区域设置是否传递到前面等…)最后,我在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翻译器中完成,但它工作…

您必须为翻译人员设置语言环境,以便在模板中获得正确的翻译。

E。控制器中的G:

$this->get('translator')->setLocale($user->getLanguage());