通过 pyBabel 分别处理位于不同位置的相同 msgid

问题描述 投票:0回答:1

我正在尝试使用 pyBabel 翻译我的应用程序。问题在于提取消息 ID。 pyBabel 正在合并

.pot
文件中的相同 msgid。这仅适用于英文翻译(默认)。

#: file.py:1
#: file.py:2
msgid "foo"
msgstr ""

其他本地化需要不同的翻译,例如:

  • 第 1 行中的“foo” file.py 的 1 被翻译为“bar”
  • 第 1 行中的“foo” file.py 的 2 被翻译为“baz”

是否可以根据本地化强制分割相同的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"
python gettext
1个回答
0
投票

这就是消息上下文的用途。您必须使用

_(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”提供两种不同的翻译,因为出现的情况可以通过消息上下文来区分。

© www.soinside.com 2019 - 2024. All rights reserved.