我正在使用Symfony 2.6,我试图在我的\ Twig_Extension中使用翻译,但翻译人员总是使用并返回default_locale翻译文本。 (在我的情况下" EN")
我在services.yml中创建了一个服务:
/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre
并在我的扩展程序中:
utils.twig_extension:
class: Skaphandrus\AppBundle\Twig\UtilsExtension
public: false
arguments: ["@service_container", "@translator.default"]
tags:
- { name: twig.extension, alias: utils.twig_extension }
在我的方法中,我有:
private $container;
private $translator;
public function __construct($container, Translator $translator) {
$this->container = $container;
$this->translator = $translator;
}
但是当我运行代码时,它总是返回" EN"区域信息。
提前感谢您的帮助。
答案 0 :(得分:0)
您不需要自定义树枝扩展名进行翻译。只需将所有翻译文件放在资源>下的捆绑包中;翻译> BUNDLENAME.local.yml(AcmeBundle.en.yml)。根据您当前的默认或设置区域设置,它将选择正确的文件。
您将获得默认语言环境,在本例中为EN。
您需要将您的语言环境设置为您的parameters.yml中的不同内容或指定在翻译期间使用的语言环境。
http://symfony.com/doc/current/components/translation/introduction.html
答案 1 :(得分:0)
首先,您必须在扩展程序中获取用户的当前区域设置。
您可以强制翻译器区域设置为您在每个trans方法中使用的区域设置:
#translation for the french version
$this->translator->trans('message', array(), 'messages', 'fr_FR');
http://symfony.com/doc/current/components/translation/usage.html#forcing-the-translator-locale
您也可以在扩展程序中使用方法setLocale。您的所有翻译都将与区域设置匹配,而不会强制它:
$this->translator->setLocale('fr_FR');
$this->translator->trans('message');