提问人:gryznar 提问时间:9/29/2023 更新时间:10/11/2023 访问量:16
通过 pyBabel 分别处理位于不同位置的相同 msgid
Treat the same msgid localized in different location separately via pyBabel
问:
我正在尝试使用pyBabel翻译我的应用程序。问题出在提取消息 ID 时。pyBabel 正在合并文件中的相同 msgid。这仅适用于英语翻译(默认)。.pot
#: file.py:1
#: file.py:2
msgid "foo"
msgstr ""
其他本地化需要不同的翻译,例如:
- file.py 第 1 行中的“foo”被翻译成“bar”
- file.py 第 2 行中的“foo”被翻译成“baz”
是否可以根据本地化强制拆分相同的 msgid 以自动实现:
#: file.py:1
msgid "foo"
msgstr ""
#: file.py:2
msgid "foo"
msgstr ""
我知道,我可以在第 1 行和第 2 行中使用不同的,但这种方法将强制使用相同的msg_str准备自定义:msgid
.po
区域设置\en\LC_MESSAGES\file.po
#: file.py:1
msgid "foo_1"
msgstr "foo"
#: file.py:2
msgid "foo_2"
msgstr "foo"
答:
0赞
Guido Flohr
10/11/2023
#1
这就是消息上下文的用途。而不是 or 你必须使用:_(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”提供两种不同的翻译,因为可以通过消息上下文来区分这些匹配项。
评论