Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2自2.6以来的翻译问题_Symfony_Twig - Fatal编程技术网

Symfony2自2.6以来的翻译问题

Symfony2自2.6以来的翻译问题,symfony,twig,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.

我以前使用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());
        // ...
 }

翻译字符串没有限定符:

name_qualifier: Passer à la caisse
类似的内容应该在翻译yml文件中,然后这就是获得翻译所需的全部内容:

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

更新

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

{% trans_default_domain "app" %}
看来你是

似乎没有人承认这是可取的行为还是一个真正的bug

您最好的解决方案是严格按照指南进行操作。人们似乎把
17
作为相关问题和食谱本身的一个很好的优先顺序

在您的
服务.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)),
    );
}

我用checkout.en.yml更新了我的答案。你的例子会起作用,但不会解决我的问题。如果我使用这种格式,我将需要格式化我的整个应用程序,我显然不希望这样。我希望它使用trans块工作。那么
{%trans从“checkout”转换到app.request.locale%}
呢?只想再测试一个变体。@sjar Hughhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh。。。为什么?我可能应该在github上打开一个问题?如果您将
config.yml
更改为?将
放入app.request.locale
中,从
trans
标记中取出。@sjar则相反。如果用户选择“fr”语言环境,它将以英语输出,除非我添加“into app.request.locale”。我将用更多关于我的配置的信息来更新这个问题。上一次测试,如果在渲染之前在控制器中设置一个区域设置会怎么样<代码>$this->get('request')->setLocale('en_US')