Symfony2 长文本翻译

Posted

技术标签:

【中文标题】Symfony2 长文本翻译【英文标题】:Symfony2 translation of long texts 【发布时间】:2012-04-10 06:59:58 【问题描述】:

几周后,我开始使用 Symfony2。 看起来是个很强大的框架,但是有些东西我还是看不懂。

在文档中,我看到 i18n(即翻译)由 Translator 服务管理。如果我理解正确,翻译网站的主要方法是将我要翻译的消息集合放在不同的文件messages.XX.yml (XX=en,fr,it,etc...) 中,每种语言一个。

这对于可能不包含任何 html 标记的短文本来说是完美的。但是你如何处理长文本?例如,如何管理服务条款或关于页面的翻译?

我想我应该为我想使用的每个语言环境包含不同的模板。我说的对吗?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

您可以在 .yml 翻译文件以及 html 标签中包含长文本。将您的服务条款文本放入 messages.xx.yml 文件中,如下所示:

TermsOfServiceText: >
  <p>Here goes my Terms of service code</p>
  <p>It can be put in several lines and <strong>can include html tags!</strong></p>
  <p>It can also include <a href="http://symfony.com/doc/current/book/translation.html" rel="nofollow">links</a></p>
  <p>Just make sure that you put '>' sign after your translation keyword like in the first line of this example code 
  and start your message in next line with double space indentation</p>

现在,在您的 twig 模板调用翻译中:

 'TermsOfServiceText'|trans|raw 

raw 用于跳过转义的 html 标签。

【讨论】:

好的,我这就走。再次感谢! 嗨。但是我如何在控制器中翻译这个? 和其他翻译一样:$translated = $this-&gt;get('translator')-&gt;trans('TermsOfServiceText');【参考方案2】:

我不认为不同的模板可以作为解决方案。但请随意选择您喜欢的。我会选择https://github.com/stof/StofDoctrineExtensionsBundle,尤其是Translatable behaviour。

【讨论】:

以上是关于Symfony2 长文本翻译的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 2 Dom Crawler:如何在 Element 中仅获取 text()

Symfony2 翻译 URL 和路由

在 symfony2 原则可翻译中将翻译后备更改为 true 的位置

翻译 Symfony2 类表单中的选择选项

在 Doctrine (symfony2) 中对可翻译实体进行版本控制

从 Symfony2/Twig 中的 2 位国家代码获取翻译的国家名称?