Symfony2自2.6以来的翻译问题
我以前使用Symfony 2.4.1,最近升级到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.
{% 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')我认为这个答案很好,因为它应该适合大多数人的需要。在我的特殊情况下,我的应用程序相当复杂,我选择添加“到app.request.locale”来解决我的问题。谢谢你抽出时间。