Symfony2错误的区域设置检测?

gre*_*emo 11 translation localization symfony

在关于翻译的 Symfony2指南之后,我发现从http标头(存储在$this->get('session')->getLocale())中的推断区域设置是错误的(发送,推断en):

主机localhost用户代理Mozilla/5.0(Windows NT 6.1; WOW64; rv:7.0.1)Gecko/20100101 Firefox/7.0.1接受text/html,application/xhtml + xml,application/xml; q = 0.9,/ ; q = 0.8 Accept-Language it-it,it; q = 0.8,en-us; q = 0.5,en; q = 0.3

这是正常行为吗?或者我应该设置一些东西,以使本地化开箱即用?

gre*_*ire 7

我今天更仔细地研究了代码,因为我遇到了和你一样的问题,而且看起来语言来自于Session::getLocale().但Symfony2从不调用Session::setLocale(),并设置对象的locale成员Session.谷歌搜索"symfony2 session setlocale"会导致文档的这个§

所以我最终将这一行放在我正在处理的控制器之上,并且它有效:

$this->getRequest()->getSession()->setLocale(
    $this->getRequest()->getPreferredLanguage());
Run Code Online (Sandbox Code Playgroud)

现在我想这是不可接受的,因为你不会在每个控制器的顶部添加它.此外,这不应该针对每个请求执行,只应在第一个请求时完成,此时用户还没有会话.如果有人知道如何做到这一点随时编辑这个答案.