3

似乎 gettext 无法正确识别带有替换字段的 Python 格式字符串,因此不会将它们标记为“python-format”。例如

ugettext("This is a sample format string with a {kwarg}").format(kwarg='key word argument')

然而,gettext 用格式说明符正确识别 Python 字符串,并用“python-format”标记这些源字符串,例如,

ugettext("This is a sample string with a %(format_spec).") % {'format_spec': 'format specifier'}

我曾尝试使用xgettextDjango 的manage.py makemessages工具为 Python 格式字符串生成 PO 文件,但没有看到 Python 格式字符串被标记为“python-format”。

此外,http: //www.gnu.org/software/gettext/manual/html_node/Python.html 没有指定有关新 Python 格式字符串的任何内容。

请帮助我找到解决此问题的方法。

4

2 回答 2

2

我想你被这个 错误击中了:这些gettext工具只支持旧的 Python 字符串格式进行替换。所以你应该使用旧的字符串格式。或者您可以使用其他工具进行翻译。

于 2012-09-07T16:07:18.200 回答
0

该标志python-format是指__mod__使用运算符的经典替换方法%。较新的格式迷你语言完全不同,当然不能共享相同的格式标志。

对于刚加入并被告知使用它的人来说,.format因为它是新的和灵活的,这可能会让人感到困惑;但是出于一致性原因,标志名称必须包含-format,并且与使用的 Python 机制的名称完全无关。

“经典”风格的优点是速度更快。就像是

kwarg = 'keyword argument'
ugettext('This is a sample format string with a %(kwarg)s') % locals()

应该被识别并标记为python-format.

就像是

ugettext('This is a sample format string with a %s') % (kwarg,)

将被标记为c-format.

(当然,您需要自己在其他地方处理“关键字参数”的翻译。)

更新:显然,语法的格式标志.format()python-brace-format是.

于 2014-03-20T14:58:43.287 回答