我正在尝试使用 pyBabel 翻译我的应用程序。问题在于提取消息 ID。 pyBabel 正在合并
.pot
文件中的相同 msgid。这仅适用于英文翻译(默认)。
#: file.py:1
#: file.py:2
msgid "foo"
msgstr ""
其他本地化需要不同的翻译,例如:
是否可以根据本地化强制分割相同的msgid以自动实现:
#: file.py:1
msgid "foo"
msgstr ""
#: file.py:2
msgid "foo"
msgstr ""
我知道,我可以在第 1 行使用不同的
msgid
。 1 和行号。 2,但这种方法将强制使用相同的 msg_str 准备自定义 .po
:
区域设置 n\LC_MESSAGES ile.po
#: file.py:1
msgid "foo_1"
msgstr "foo"
#: file.py:2
msgid "foo_2"
msgstr "foo"
这就是消息上下文的用途。您必须使用
_(MSGID)
而不是 gettext(MSGID)
或 pgettext(CONTEXT, MSGID)
:
import gettext
print(gettext.pgettext('bar context', 'foo'))
print(gettext.pgettext('baz context', 'baz'))
这是英语的输出
$ python file.py
foo
foo
从
file.py
中提取可翻译字符串应该会产生如下所示的 .po
文件:
#: file.py:1
msgctxt "bar context"
msgid "foo"
msgstr ""
#: file.py:2
msgctxt "baz context"
msgid "foo"
msgstr ""
翻译器现在可以为字符串“foo”提供两种不同的翻译,因为出现的情况可以通过消息上下文来区分。