【问题标题】:Why does Symfony ignore the browsers locale-setting (HTTP-Request Accept-Language Header)?为什么 Symfony 会忽略浏览器的区域设置(HTTP-Request Accept-Language Header)?
【发布时间】:2012-08-21 20:00:34
【问题描述】:

我目前正在尝试在 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


    【解决方案1】:

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

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

    但如果您想忽略此建议并使用 Accept 语言标头,您可以在控制器中使用以下代码:

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

    【讨论】:

    • 是否有可能在每个控制器中执行该代码而不实际在每个控制器中编写它?我的意思是只写一次?
    • 你可以为 kernel.request 事件写一个监听器并在那里做。
    • 如果您还在那里,请查看指向区域设置和 url 的链接,并告诉我应该在哪里设置:“contact: path: /{_locale}/contact”?另外,这是否意味着我需要为我可能拥有的每个单一视图做些什么?非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    相关资源
    最近更新 更多