如何在我的Twig模板中使用Symfony Translator?

时间:2016-11-07 09:48:19

标签: php symfony twig

我一直致力于翻译我的应用程序,从数据库中提取翻译并将其添加到目录中。一切都在Symfony中工作,如果我用$translator->trans('TEST_TRANSLATION')回显一个翻译,例如它回应正确的值,那么我认为我的翻译是正确的。

现在我使用Twig作为我的模板引擎,它支持使用{%trans%}标签进行翻译。可悲的是,译者变量的翻译在Twig内不起作用,经过谷歌搜索很长一段时间后,我似乎无法找到有效的解决方案。
  我已经阅读了使用$twig->addExtension()添加扩展程序的操作,但我无法解决这个问题。

如果有人能指出我正确的方向,或者甚至可以更清楚地解释如何使用带有{%trans%}标签的翻译器,我将不胜感激。

提前致谢。

编辑:这里是我用来创建翻译器的控制器代码:

$this->translator = new Translator('en');
$this->translator->addLoader('array', new ArrayLoader());
$this->translator->addResource('array', $translations, 'en');

echo $this->translator->trans('TEST_TRANSLATION');

$ translations变量包含一个带有翻译的数组,当使用echo时,它正确显示给定的翻译。使用<p>{% trans %}TEST_TRANSLATION{% endtrans %}</p>时,如何让这个翻译器在Twig中工作?

编辑2 :我在过去的1.5小时内一直在尝试各种各样的东西,但没有任何效果。我发现,将转换器提供给数组以获取Twig模板的渲染功能使我可以访问它的变量,我这样做如下:

return $this->render('test/transTest.html.twig', array('translator'=>$this->translator));

如果我使用上述内容,我可以通过以下方式访问Twig中的翻译变量:

<p>{{ translator.trans('TEST_TRANSLATION') }}</p>

使用<p>{{ translator.locale }}</p>也可以获得正确的区域设置信息。

我很确定翻译没有任何问题,但我正在使用的网站使用{%trans%}进行Twig内的翻译,我仍然不知道如何使我的译者翻译工作那些。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用标记{% trans %}或过滤器|trans进行翻译时,翻译不起作用,因为您没有使用Symfony的默认翻译服务,而只是实例化。

您可以在容器中使用标记translation.loader声明的自定义加载器服务中加载数据库中的转换,以便转换程序服务了解它们。

请参阅此SO post和(相当陈旧)建议tutorial