自动检测用户的区域设置

时间:2013-07-15 15:32:14

标签: 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:
   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>

我如何做我想做的事?

我必须创建一个监听器?我已经把本地会议?

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

1 个答案:

答案 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