【问题标题】:How to translate language in Symfony 2, according to accept language header?如何根据接受语言标题在 Symfony 2 中翻译语言?
【发布时间】:2012-07-10 11:34:35
【问题描述】:

我有

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

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

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

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    基本上你可以做类似的事情

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

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

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

    Symfony2 wrong locale detection?

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

    【讨论】:

    • 我应该在哪里创建内核事件监听器以及如何创建?我不熟悉它。
    【解决方案2】:

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

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

    【讨论】:

    • @louis-philippe-huberdeau 你知道如何只在新会话上触发监听器吗?问候!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 2015-04-03
    相关资源
    最近更新 更多