我之前使用的是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());
// ...
}
答案 0 :(得分:2)
您似乎属于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)),
);
}
答案 1 :(得分:1)
您的翻译字符串没有限定词:
name_qualifier: Passer à la caisse
这样的东西应该在你的翻译yml文件中,那么这应该是你获得翻译所需的全部内容:
{{ 'name_qualifier' | trans({}, "checkout") }}
的更新强>
您可以为孔模板设置默认域:
{% trans_default_domain "app" %}