pythonxgettext合并了gettext和ngettext字符串,中断了翻译查找

2024-10-06 13:00:16 发布

您现在位置:Python中文网/ 问答频道 /正文

运行中:

> xgettext test.py -o out.pot

关于Python片段测试.py公司名称:

^{pr2}$

生成具有以下行的pot文件(已翻译的字符串位于po文件中):

#: test.py:3 test.py:4
msgid "TEST"
msgid_plural "TESTS"
msgstr[0] "TEST-SINGLE"
msgstr[1] "TEST-PLURAL"

在将其转换为采购订单文件和生产任务文件后。我无法获取gettest(“TEST”)调用的翻译。在

> ngettext("TEST", "TESTS", 1)
> TEST-SINGLE
> gettext("TEST")
> TEST

我使用的是Python的标准gettext包。我不确定这些合并行为是否在意料之中,但它似乎破坏了查找非复数字符串翻译的能力。有没有办法避免这种情况?在

我在考虑为gettext设计一个备用方法,如果第一个调用失败,就尝试一个ngettext调用。不过,这看起来很老套。在


Tags: 文件字符串pytesttests公司outgettext
2条回答

两个条目完全相同,即单数项与复数项相同。演示:

msgid "Test"
msgstr "Toets"

msgid "Test"
msgid_plural "Tests"
msgstr[0] "Toets"
msgstr[1] "Toetse"

然后使用msgfmt编译它:

^{pr2}$

Gettext使用msgid作为字符串的键,因此它将看到这些单数和复数字符串是重复的。在

问题似乎源于gettext包查找翻译的方式。对于gettext和ugettext调用,它只需在目录内查找_catalog['TEST'],而不搜索_catalog[(“TEST”,0)]。在

我不相信这是正确的行为,因为xgettext决定合并这两个字符串,但是我在文档中找不到任何东西来证明这种或那种方式。在

为了解决这个问题,我在gettext和ugettext的两个替换方法中进行monkey修补,如果简单查找失败,这将回退到(message,0)目录查找。在

相关问题 更多 >