似乎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格式字符串的任何内容。
请帮我找一个解决此问题的方法。
答案 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
。