3

我有

配置.yml

#Here locale is en
translator:      { fallback: %locale% }
...
session:
    default_locale: %locale%

路由.yml

AcmeDemoBundle_homepage:
    pattern:  /{_locale}/index
    defaults: { _controller: AcmeDemoBundle:Default:index, _locale: de}
    requirements:
    _locale: en|de

所以在这里通过手动输入 URL 将导致 /en/index英语和/de/index德语。

如果浏览器接受语言是 de_DE 或 de(德语),我们如何自动转到德语,否则转到英语(所有其他浏览器接受语言)?

4

2 回答 2

5

基本上你可以做这样的事情

$this->get('session')->setLocale(
    $request->getPreferredLanguage(array('en', 'de'))
);

它应该可以解决问题。但是,是的,在每个动作中添加它可能很难......这就是为什么你可以创建自己的内核事件监听器。

我认为这些链接可能会有所帮助:

Symfony2 错误的语言环境检测?

http://symfony.com/doc/current/cookbook/service_container/event_listener.html

于 2012-07-10T12:16:13.080 回答
3

我一直在使用JMSI18nRoutingBundle,它会自动处理 URL 中的语言环境。在默认 URL 上,它可以选择使用首选语言环境。

内核事件侦听器是一个不错的选择,您可以在文档中找到相关信息。但是,请记住,您应该只在新会话上触发它,以确保用户仍然可以手动选择他们查看网站时使用的语言。

于 2012-07-10T12:48:17.697 回答