自 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
- 翻译文件在 "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" %}
你好像在 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)),
);
}
我之前使用的是 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" %}
你好像在 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)),
);
}