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实现了检测,因为说英语的人可以从俄罗斯打开您的站点。只要做一个语言切换器。