如何在Symfony 2中翻译语言,根据接受语言标题?

时间:2012-07-10 11:34:35

标签: php symfony

我有

config.yml

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

的routing.yml

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

因此,手动输入网址会将/en/index引导至英语,/de/index引导至德语。

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

2 个答案:

答案 0 :(得分:5)

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

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

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

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

Symfony2 wrong locale detection?

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

答案 1 :(得分:3)

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

内核事件侦听器是一个很好的选项,您可以在其中找到信息in the documentation。但是,请记住,您应该只在新会话上触发它,以确保用户仍然可以手动选择他们查看网站的语言。