Symfony2 里面的翻译器 Twig_Extension

Symfony2 translator inside Twig_Extension

我正在使用 Symfony 2.6,我正在尝试在我的 \Twig_Extension 中使用翻译,但译者总是使用 return default_locale 翻译的文本。 (在我的例子中 "EN")

我在 services.yml 中创建了一个服务:

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;
}

在我的方法中我有:

return $this->translator->trans('message');

但是当我 运行 代码时,它总是 return "EN" 语言环境消息。

在此先感谢您的帮助。

您不需要自定义 twig 扩展来进行翻译。只需将所有翻译文件放在资源 > 翻译 > BUNDLENAME.local.yml (AcmeBundle.en.yml) 下的包中。根据您当前的默认设置或设置的语言环境,它将 select 正确的文件。

您将获得默认语言环境,在本例中为 EN。

您需要将语言环境设置为与您的 parameters.yml 不同的语言环境,或者指定在翻译过程中使用的语言环境。

http://symfony.com/doc/current/components/translation/introduction.html

首先,您必须在扩展程序中获取用户的当前语言环境。

您可以强制将翻译语言环境设置为您的用户在每种翻译方法中使用的语言环境:

#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');