我一直致力于翻译我的应用程序,从数据库中提取翻译并将其添加到目录中。一切都在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内的翻译,我仍然不知道如何使我的译者翻译工作那些。任何帮助将不胜感激。
答案 0 :(得分:1)
使用标记{% trans %}
或过滤器|trans
进行翻译时,翻译不起作用,因为您没有使用Symfony的默认翻译服务,而只是实例化。
您可以在容器中使用标记translation.loader
声明的自定义加载器服务中加载数据库中的转换,以便转换程序服务了解它们。