Django i18n:{% blocktrans %}块的推荐大小和格式?

11

我刚开始学习Django国际化,并尝试了解使用{% blocktrans %}的最佳实践。是优先每段落使用一个{% blocktrans %},还是应该有一个包含多个段落的大型{% blocktrans %}呢?

使用一个大型{% blocktrans %}更快且使模板看起来更干净,但我的担忧是:

  • 它会导致HTML标签(如<p>...</p>)成为翻译字符串的一部分。
  • 如果我在巨大的块的其中一个部分进行更改,msgid将会更改,似乎会影响其他段落。如果我有更小的块,更改将更加隔离(我想)。
  • 如果我进行格式更改,例如在段落之间添加/删除换行符,那么将更改msgid

我还想知道有关格式的事情。在{% blocktrans %}中有换行符是否会有任何复杂性?或者有前导空格吗?例如:

{% blocktrans %}
    You have {{ num_messages }} messages.
    Another sentence.
{% blocktrans %}

欢迎提出任何建议。


如果你有那么多的内容要放在你的blocktrans中,你可能需要考虑使用一些内容管理系统 - 不一定是一个完整的cms,但至少是一些不太硬编码的东西。 - bruno desthuilliers
(@brunodesthuilliers的评论是指我在编辑前提出的代码示例。) - RexE
虽然这仍然有意义。 - Ignacio Vazquez-Abrams
@IgnacioVazquez-Abrams谢谢。有人有CMS推荐吗? - RexE
1
我会使用Mezzanine,但使用CMS无法解决您在i18n方面的问题,trans和blocktrans仅适用于文本,因此您不应在blocktrans中使用HTML标记。 - Paco Valdez
1个回答

10

对于各种原因,多个小的{% blocktrans %}块是有益的:

  • 每个可翻译的字符串最终都会出现在翻译文件中,这些文件应该可以由讲该语言的人翻译。他们不应该处理HTML标签的正确性,而应该仅将几个句子翻译成该语言。一些小的标记是可以接受的,但不要包括整个页面的HTML。

    你还可以这样想:翻译字符串中的标记越少,翻译者(有或没有技术背景)出错的机会越少。

  • 如果一个大的翻译块发生了变化,那么所有的翻译都需要由每个翻译者重新完成。如果您使用小的可翻译块,则可以重复使用大部分现有的已翻译段落/文本,并且只需要为实际更改的部分获取更新的翻译。

所以回答你的问题:每段文字一个blocktrans标签是更好的选择。如果你最终改变了一段话,那么只需要翻译该段话。

关于空格和换行符:默认情况下,它们将出现在PO翻译文件中。在Django 1.7中,blocktrans标签将具有trimmed选项,该选项将删除空格和换行符(来源):

此选项将从 {% blocktrans %}标记的内容的开头和结尾移除换行符,替换任何一行开头和结尾的空格,并使用空格字符将所有行合并为一个。这对于缩进{% blocktrans %}标记的内容非常有用,而不必使缩进字符最终出现在PO文件的相应条目中,这样可以使翻译过程更加容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接