Symfony - Twig的trans过滤器没有拾取区域设置

时间:2015-04-15 21:58:59

标签: symfony localization twig

我已经确认如果我将以下行添加到我的twig模板中,它会输出所需的区域设置:

{{ app.request.locale }}

但是,以下输出为英文:

{{ 'String'|trans }}

如果我强制使用trans过滤器的语言环境:

{{ 'String'|trans({}, 'messages', 'ja') }}

输出正确的翻译。请注意,我使用eventListener设置语言环境:

public function onKernelRequest(GetResponseEvent $event)
{
    $request = $event->getRequest();
    $locale = $request->cookies->get('_locale') ? $request->cookies->get('_locale') : $request->getPreferredLanguage($this->availableLanguages);

    $request->setLocale($locale);
}

2 个答案:

答案 0 :(得分:2)

我通过Symfony Documentation找到了答案:

  

在控制器中使用$request->setLocale()设置区域设置为时已晚,无法影响翻译。

     

设置区域设置

     
      
  • 通过听众(如上所述)
  •   
  • 通过网址(参见下一页)
  •   
  • 或直接在翻译服务上致电setLocale()
  •   

我最后通过更改服务的优先级来修复它,就像此线程中接受的答案一样:Symfony 2.1 set locale

答案 1 :(得分:2)

Mabey迟到了回复,但我遇到了同样的问题,经过一番阅读后我找到了更好的解决方案。您可以使用trans function代替trans filter,这似乎是一个更清洁的解决方案。

{% trans from "your-trans-domain" into app.user.locale %} trans.key {% endtrans %}

请参阅symfony docs:

Docs v2.7 for translations