我已经确认如果我将以下行添加到我的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);
}
答案 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: