自2.6以来Symfony2的翻译问题

时间:2015-01-28 16:27:36

标签: symfony twig

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

我使用以下语法翻译我的文字:

{% trans from "checkout" %}Passer à la caisse{% endtrans %} // Should output Checkout
  • 翻译文件位于" app / Resources / translations / checkout.en.yml"文件夹中。
  • 如果我输出{{app.request.locale}},则输出" en"。

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

{{ '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());
        // ...
 }

2 个答案:

答案 0 :(得分:2)

您似乎属于a handful who are experiencing this problemHere 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)),
    );
}

答案 1 :(得分:1)

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

name_qualifier: Passer à la caisse

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

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


更新

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

{% trans_default_domain "app" %}