Symfony为什么忽略浏览器的区域设置(HTTP请求接受语言标头)?

问题描述 投票:15回答:2

我目前正在尝试在Symfony 2.0中启用翻译器。 Symfony忽略了Accept-Language Header变量,并使用default_locale(并且在未定义后备时)。

我的请求看起来像:

Accept-Language de-DE,de;q=0.8,en-us;q=0.5,en;q=0.3

但是$this->getRequest()->getLocale();使我得到en的相同请求。

有人可以告诉我怎么了吗?

是,我试图清除缓存并删除我的cookie(omnomnom):)

symfony locale http-accept-language
2个回答
20
投票

这是预期的行为。默认情况下,Symfony不使用“接受语言”标头,而是依赖于symfony配置进行区域设置。实际上,建议不要对不同语言环境的内容使用相同的URL,请参阅此文档:

Symfony 2 The Book - Translations - The Locale and the URL

但是,如果您想忽略此建议并使用“接受”语言标头,则可以在控制器中使用以下代码来实现:

$request = $this->getRequest();
$session = $this->get('session');

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

0
投票

Symfony Demo项目正在使用事件订阅者根据客户端的浏览器设置来设置区域设置。这是source

这是创建自己的订户的有用参考。

© www.soinside.com 2019 - 2024. All rights reserved.