Django翻译转义%符号

时间:2015-10-08 18:16:02

标签: python django internationalization django-i18n

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

{% 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格式化而感到困惑?

3 个答案:

答案 0 :(得分:4)

根据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

答案 1 :(得分:1)

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

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

当你在你的trans文本中添加%符号时,它基本上包含了它认为你试图做的python格式。它很冗长,很糟糕,但它确实有效。

答案 2 :(得分:1)

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

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