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

时间:2013-11-22 17:20:11

标签: python django django-templates django-i18n

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

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

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

我也想知道格式化。在{% blocktrans %}内部换行是否有任何问题?还是有领先的空间? e.g:

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

欢迎任何建议。

1 个答案:

答案 0 :(得分:9)

多个小{% blocktrans %}块因各种原因而受益:

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

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

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

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

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

  

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