与带有格式说明符的旧式python字符串不同,Gettext不会使用“python-format”标记python格式字符串

时间:2012-09-07 11:11:14

标签: python internationalization gettext format-string

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

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'}

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

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

请帮我找一个解决此问题的方法。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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 flag for the .format() syntax is python-brace-format