【问题标题】:Symfony -- Twig's trans filter not picking up localeSymfony——Twig 的反式过滤器没有选择语言环境
【发布时间】:2017-03-06 15:56:34
【问题描述】:

我已经验证,如果我将以下行添加到我的 twig 模板,它会输出所需的语言环境:

{{ app.request.locale }}

但是,以下是英文输出:

{{ 'String'|trans }}

如果我强制使用 trans 过滤器的语言环境:

{{ 'String'|trans({}, 'messages', 'ja') }}

它以正确的翻译输出。请注意,我正在使用 eventListener 设置语言环境:

public function onKernelRequest(GetResponseEvent $event)
{
    $request = $event->getRequest();
    $locale = $request->cookies->get('_locale') ? $request->cookies->get('_locale') : $request->getPreferredLanguage($this->availableLanguages);

    $request->setLocale($locale);
}

【问题讨论】:

    标签: symfony localization twig


    【解决方案1】:

    我通过Symfony Documentation找到了答案:

    在控制器中使用$request->setLocale() 设置语言环境来不及影响翻译器。

    设置语言环境

    • 通过侦听器(如上)
    • 通过URL(见下文)
    • 或直接在翻译服务上致电setLocale()

    我最终通过更改服务的优先级来修复它,就像这个线程中接受的答案:Symfony 2.1 set locale

    【讨论】:

      【解决方案2】:

      也许回复晚了,但我遇到了同样的问题,经过一番阅读,我找到了更好的解决方案。您可以使用trans function 而不是trans filter,这似乎是一个更清洁的解决方案。

      {% trans from "your-trans-domain" into app.user.locale %} trans.key {% endtrans %}
      

      查看 symfony 文档:

      Docs v2.7 for translations

      【讨论】:

        猜你喜欢
        • 2019-12-04
        • 1970-01-01
        • 2017-06-02
        • 1970-01-01
        • 2013-07-20
        • 2012-12-25
        • 1970-01-01
        • 1970-01-01
        • 2019-07-21
        相关资源
        最近更新 更多