Twig_Extension里面的Symfony2翻译器

时间:2015-07-14 20:19:11

标签: php symfony twig translation

我正在使用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"区域信息。

提前感谢您的帮助。

2 个答案:

答案 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');