Symfony 检测用户';自动设置语言环境

Symfony 检测用户';自动设置语言环境,symfony,symfony-2.3,Symfony,Symfony 2.3,我的目标是识别本地用户的浏览器并自动设置语言 然后允许用户更改语言并将其保留在其他页面上 当时我是这样设置路线的: # homepage not localized: load the homepage with default language index_not_localized: path: / defaults: { _controller: "AcmeSiteBundle:Default:index", _locale: %locale% } acme_site

我的目标是识别本地用户的浏览器并自动设置语言

然后允许用户更改语言并将其保留在其他页面上

当时我是这样设置路线的:

# homepage not localized: load the homepage with default language
index_not_localized:
   path:   /
   defaults:  { _controller: "AcmeSiteBundle:Default:index", _locale: %locale% }


acme_site:
   resource: "@AcmeSiteBundle/Controller/"
   type:     annotation
   prefix:   /{_locale}
   defaults:  { _locale: %locale% }
   requirements:
        _locale:  %route_locale_requirements%
当用户进入页面example.com而未指定本地路由中的语言时,默认情况下会设置该页面,并且该页面有一个允许您更改语言的切换器:

<ul class="dropdown-menu">
     {% for locale in ['en', 'it'] %}
         <li>
             <a href="{{ path('homepage', {'_locale': locale}) }}">
         </li>
     {% endfor %}
</ul>
    ['en','it']%中的区域设置为{%
  • {%endfor%}
我怎么做我想做的

我必须创建一个侦听器?我把本地会议放在哪里了


我很困惑,我读了几个答案,但没有找到一个明确的答案

至少有两种方法,但这两种方法都不能100%保证检测区域设置并正确检测

第一种是使用
$\u服务器['HTTP\u ACCEPT\u LANGUAGE']
变量。它是通过HTTP头获得的,甚至可能根本不存在

第二种方法是使用第三方服务按IP地址检测国家,然后将国家名称与一些国家及其地区的本地表进行比较。例如:

有关更多信息和评论,请查看此问题:


最后一点是将现场检测集成到symfony2项目中。这是最简单的部分。您只需要使用
kernel.request
event listner。这里的每件事都有很好的解释(举例说明):

类似这样的内容:是的,谢谢,但只对问题的一部分做出了回应。如何自动检测用户的区域设置?您不应该这样做,即使您通过IP实现了检测,因为说英语的人可以从俄罗斯打开您的站点。只要做一个语言切换器。