我有
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(德语),我们如何自动转到德语,否则转到英语(所有其他浏览器接受语言)?
答案 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。但是,请记住,您应该只在新会话上触发它,以确保用户仍然可以手动选择他们查看网站的语言。