我的目标是识别本地用户的浏览器并自动设置语言。
然后允许用户更改语言并将其保存在其他页面上。
当我以这种方式设置路线时:
# 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>
我如何做我想做的事?
我必须创建一个监听器?我已经把本地会议?
我很困惑,我读了几个答案,但没有找到明确的答案!
答案 0 :(得分:0)
至少有两种方法,但它们都不能100%保证检测区域设置并正确检测它。
首先是使用$_SERVER['HTTP_ACCEPT_LANGUAGE']
变量。它是通过HTTP标头获得的,甚至可能不存在。
第二种是使用第三方服务按IP地址检测国家/地区,然后将国家/地区名称与国家/地区的某些本地表及其区域设置进行比较。例如:
http://api.hostip.info/get_html.php?ip=127.0.0.1
有关更多信息和评论,请查看以下问题:Simplest way to detect client locale in PHP
最后一点是将区域设置检测集成到symfony2项目中。这是最简单的部分。您只需使用kernel.request
事件列表器。这里完整地解释了所有内容(带示例):Symfony 2.1 set locale