自 2.6 以来的 Symfony2 翻译问题

Symfony2 translation issues since 2.6

我之前使用的是 Symfony 2.4.1,最近升级到 2.6.*。我不知道它是否与我的问题有关,但我最近才看到这个问题,无法弄清楚为什么我的文字无法翻译。

我正在使用以下语法来翻译我的文本:

{% trans from "checkout" %}Passer à la caisse{% endtrans %} // Should output Checkout

在测试时,我寻找了一种替代方法来输出我的翻译:

{{ 'Passer à la caisse' | trans({}, "checkout", app.request.locale) }}

而且...它有效!显然,我想在不重构整个应用程序的情况下解决我的问题。

干杯。

编辑:这是我的 checkout.en.yml

的内容
Passer à la caisse : Checkout

编辑 2:这是我的 config.yml

framework:
    translator:      { fallback: "fr" }
    default_locale:  "fr"

我有一个跟踪他的会话的客户实体。

public function indexAction(Request $request)
{
        // ...
        $request->setLocale($customer->getDefaultLocale()->getIsoCode());
        $request->setDefaultLocale($customer->getDefaultLocale()->getIsoCode());
        // ...
 }

您的翻译字符串没有限定符:

name_qualifier: Passer à la caisse

类似的东西应该在你的翻译 yml 文件中,那么这应该是你获得翻译所需的全部内容:

{{ 'name_qualifier' | trans({}, "checkout") }}


更新

您可以为孔模板设置默认域:

{% trans_default_domain "app" %}

你好像在 a handful who are experiencing this problem. Here is a more recent issue.

似乎没有人承认这是理想的行为还是实际的错误。

您最好的解决方案是完全按照 configuring the "sticky locale" during a User's session 的指南进行操作。人们似乎在链接的问题和食谱本身中提到 17 作为一个很好的优先级数字。

在你的 services.yml 中确保你有类似的东西:

acme.demo.event_listener.locale:
        class: Acme\DemoBundle\EventListener\LocaleListener
        tags:
            - { name: kernel.event_subscriber }

并且在实际的侦听器中,定义了优先级的getSubscribedEvents()方法:

public static function getSubscribedEvents()
{
    return array(
        // must be registered before the default Locale listener
        KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
    );
}