1

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

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

当时我以这种方式设置路线:

# 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>

我该如何做我想做的事?

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

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

4

1 回答 1

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

于 2013-07-15T16:21:59.707 回答