Django 翻译转义 % 符号

Django translation escape % sign

我正在尝试翻译一些包含百分号的文本,如下所示:

{% trans "100% butterfly" %}

当我 运行 makemessages 命令时,我在德语 .po 文件中得到以下输出:

#: .\appName\templates\appName\butterflies.html:54
#, fuzzy, python-format
#| msgid ""
#| "100% butterfly"
msgid ""
"100%% butterfly"
msgstr ""
"100% shmetterling"

编译时无法将文本翻译成德语。我试过 {% trans "100%% butterfly" %},但这会导致页面在以德语和英语查看时显示“100%% butterfly”。我也尝试过使用 blocktrans 标签来翻译文本,结果相同。

手动删除 .po 文件中多余的 % 以及 #, fuzzy, python-format 行是可行的,但我不想对我尝试翻译的每个 % 符号都执行此操作。

我如何在我的 HTML 中转义它,以便 Django 停止在 .po 文件中生成模糊翻译并且不会因为我正在尝试进行一些 python 格式化而感到困惑?

原来这是一个 Django 问题,可能会在 Django 1.9 中修复。 一种解决方法是:

{% blocktrans with percent="%" %}100{{percent}} butterfly{% endblocktrans %}

它本质上包含了 python 格式,它认为您在将 % 符号放入您的反式文本中时正在尝试这样做。它冗长而糟糕,但它有效。

我认为更好的方法是使用 html 代码:%

这是处理 django 翻译的最优雅的方式。

根据 Django 的 Trac 中的 this comment,在要翻译的字符串上方添加翻译注释以停用 python 格式可以解决/解决此问题。

如果要翻译的文本在您的 Python 代码中,请使用:

# Translator: xgettext:no-python-format
_('100% butterfly')

对于trans模板标签,您可以尝试:

{# Translators: xgettext:no-python-format #}
{% trans "100% butterfly" %}

作为explained in the doc.