Twig不在Symfony 3中设置语言环境

时间:2016-08-29 09:43:52

标签: php symfony localization twig

我创建了一个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

我现在很丢失,有什么提示吗?

2 个答案:

答案 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());