【问题标题】:Gettext does not flag python format strings with "python-format" unlike old style python strings with format specifiers与带有格式说明符的旧式 python 字符串不同,Gettext 不会用“python-format”标记 python 格式字符串
【发布时间】:2012-09-01 06:27:53
【问题描述】:

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

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

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

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

【问题讨论】:

  • 不确定字符串格式的表现如何,但您是否看过Babel?提取字符串肯定比xgettext和friends好,而且是可插拔的。
  • @MartijnPieters 感谢您的回复。我尝试了 Babel。它也无法将 Python 格式字符串检测为 Python 字符串:\
  • 很抱歉听到这个消息;它需要一些自定义开发,然后才能将这样的解析器添加到 Babel。
  • 也许你可以试试 C# 解析器?不确定是否可以处理命名参数。

标签: python internationalization gettext format-string


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    对于刚加入并被告知使用.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

    【讨论】:

    • 如何在别处照顾这种翻译?
    • @Jay:我不明白你的问题:“其他地方”是什么意思?但是,要做的事情可能是:创建一个问题...
    猜你喜欢
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    相关资源
    最近更新 更多