我对 Symfony2.2 有一个奇怪的问题。我有一个使用两种语言的项目:en/fr。所以我像往常一样(如 Symfony2.0)在 Ressources/Views/translations/ 中创建两个翻译文件“messages.en.yml”和“messages.fr.yml”。但是即使我们设置了请求对象和语言环境会话,twig 中的翻译也不会改变。翻译始终由 default_locale (config.php) 设置。
示例:如果 default_locale = en,即使我在 fr(请求和会话)中设置了 _locale 对象,我的所有网站(在 twig 中)都被翻译成 en。当然,如果我手动将 default_locale 更改为 fr 网站自然是在 fr...
但是,_locale 会话有效,但我不知道语言环境请求是否有效,当然翻译也适用于控制器......
有我的文件:
配置.yml:
framework:
#esi: ~
translator: { fallback: %locale% } # = en
# ...
default_locale: %locale% # = en
控制器 :
public function indexAction()
{
$this->get('session')->set('_locale', 'fr');
$this->getRequest()->setLocale($lang);
exit($this->getRequest()->getLocale()); // = fr
exit($this->get('translator')->trans('Symfony2 is great')); // = Symfony2 est génial
return $this->render('TestBundle:Controller:test.html.twig');
看法 :
{% block content %}
<p>lang : {{ app.request.locale }}</p> {#} = "fr", OK{#}
<p>{{ 'Symfony2 is great'|trans }}</p> {#} = "Symfony2 is great", WAIT WHAT?{#}
我必须辞职以强制方法控制器开头的语言环境具有请求的语言环境(存储在会话中),如下所示:
控制器:
if($this->get('session')->get('_locale')){
$lang = $this->get('session')->get('_locale');
$this->getRequest()->setLocale($lang);
}
换句话说,我确实对请求对象的注册有问题......因为最后一个代码在控制器中运行良好,并且在带有 app.request.locale 的树枝页面中很好地显示了语言环境,但不是翻译...... . (抱歉我的英语不好,感谢您的帮助)