问题 Django i18n:{%blocktrans%}块的建议大小和格式?


我刚刚开始使用Django国际化并尝试了解使用的最佳实践 {% blocktrans %}。是否最好使用一个 {% blocktrans %} 每个段落,或者我应该有一个大 {% blocktrans %} 那包含很多段落?

有一个大 {% blocktrans %} 更快,让我的模板看起来更干净,但我担心的是:

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

我也想知道格式化。内线断线是否有任何复杂情况 {% blocktrans %}?还是有领先的空间?例如。:

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

欢迎任何建议。


1571
2017-11-22 17:20


起源

如果你有很多东西放在你的blocktrans中,你可能想考虑使用一些内容管理系统 - 不一定是一个完整的cms但至少有点硬编码的东西。 - bruno desthuilliers
(@brunodesthuilliers撰写的评论是指编辑前我在问题中的代码示例。) - RexE
它仍然有意义。 - Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams谢谢。有没有人有CMS推荐? - RexE
我会使用mezzanine,但使用CMS无法解决你的问题i18n,trans和blocktrans仅适用于TEXT,所以你不应该在blocktrans中使用HTML标签。 - Francisco Valdez


答案:


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

  • 每个可翻译的字符串最终都在翻译文件中,并且这些文件应该由说这种语言的人翻译。他们不应该处理HTML标签的正确性,但他们应该纯粹将几个句子翻译成该语言。次要标记很好但不是整个页面的HTML。

    您也可以这样考虑:可翻译字符串中的标记越少,翻译人员出错的可能性就越小(可能有也可能没有技术背景)。

  • 如果巨大的翻译块发生变化,则每个译员都需要再次完成所有翻译。如果您使用小的可翻译块,那么您可以重用大多数现有的翻译段落/文本,您只需要获得实际更改的部分的更新翻译。

所以回答你的问题:每个段落的块转换标签是更好的选择。如果您最终更改了一个段落,那么翻译者只需要再次检查该段落。

关于空白和换行:默认情况下,这些最终会出现在PO翻译文件中。在Django 1.7中,blocktrans将有一个 trimmed 删除空格和换行符的选项(资源):

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


9
2017-12-06 14:42



谢谢Simeon! - RexE