【问题标题】:Django translation escape % signDjango 翻译转义 % 符号
【发布时间】:2016-01-06 12:12:10
【问题描述】:

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

{% 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%% 蝴蝶”。我也尝试使用 blocktrans 标签来翻译文本,结果相同。

手动擦除 .po 文件中多余的 % 以及 #, fuzzy, python-format 行是可行的,但我宁愿不必为我尝试翻译的每个 % 符号都这样做。

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

【问题讨论】:

  • 看起来{% trans "100% butterfly" %} 可以解决问题,但可能会让翻译人员感到困惑。
  • 您是否尝试在 msgstr 的 .po 文件中使用 "100%% shmetterling"
  • 刚刚,是的。我得到“100%% shmetterling”作为呈现的 html 输出
  • 有一个相关的票#24257,在即将发布的 Django 1.9 中修复。该票的创建者说他们使用 blocktrans 作为解决方法,但我看到你已经尝试过了。

标签: python django internationalization django-i18n


【解决方案1】:

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

【讨论】:

  • 在Javascript中,我成功使用了 // Translators: xgettext:no-c-format
【解决方案2】:

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

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

【讨论】:

  • 这对开发人员来说是正确的,但对于不懂 html 代码的翻译人员来说,这又是一种困惑
  • 是的,但遗憾的是,你不能用 django javascript 翻译来做到这一点。 % 并警告您的翻译人员是当今最好的方式。
【解决方案3】:

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

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

当您在反式文本中添加 % 符号时,它基本上包含了它认为您正在尝试执行的 python 格式。它很冗长而且很糟糕,但它确实有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2011-12-25
    相关资源
    最近更新 更多