Django翻译转义%符号

11

我正在尝试翻译一些包含百分号的文本,就像这样:

{% trans "100% 蝴蝶" %}

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

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

当编译时,无法将文本翻译成德语。我尝试使用{% trans "100%% butterfly" %},但这会导致页面在德语和英语中都显示“100%蝴蝶”。我还尝试使用blocktrans标签来翻译文本,结果相同。
手动删除.po文件中的额外%以及#,fuzzy,python-format行可以解决问题,但我不想为每个要翻译的%符号都这样做。
我该如何在HTML中转义它,以便Django停止在.po文件中生成模糊翻译,并且不会混淆我正在尝试进行一些python格式化?

3
似乎执行“{% trans "100%蝴蝶泳" %}”可以解决问题,但可能会使翻译人员感到困惑。 - tayden
1
你尝试在.po文件的msgstr中使用“100%% shmetterling”了吗? - Joey Wilhelm
刚才是的。我得到了“100% shmetterling”作为渲染的HTML输出。 - tayden
1
这里有一个相关的票证[#24257](https://code.djangoproject.com/ticket/24257),该问题在即将发布的Django 1.9中得到解决。该票证的创建者表示他们使用blocktrans作为解决方法,但我看到你已经尝试过了。 - Alasdair
3个回答

8
根据 Django 的 Trac 中的 此评论,在要翻译的字符串上方添加一个翻译者注释以停用 Python 格式化可以解决/规避此问题。
如果要翻译的文本位于您的 Python 代码中,请使用:
# Translator: xgettext:no-python-format
_('100% butterfly')

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

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

文档中所解释的那样


1
在Javascript中,我成功地使用了// Translators: xgettext:no-c-format - Greg Ball

2

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

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


这对开发人员来说是正确的,但对于不理解HTML代码的翻译人员来说会很困惑。 - tayden
是的,但遗憾的是,您无法使用Django JavaScript翻译来完成它。并警告您的翻译人员是目前最好的方法。 - Guillaume Cisco

1
原来这是Django的问题,可能在Django 1.9版本中会有修复。一种解决方法是:使用以下代码:{% blocktrans with percent="%" %}100{{percent}} butterfly{% endblocktrans %}。这实际上是采用了Python格式化的方式,以此避免在翻译文本中使用%符号时出现问题。虽然冗长且不太好用,但它确实有效。

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