猿问

Python:翻译文本显示 msgid 而不是 msgstr

我是使用 gettext 库翻译文本的新手。我想翻译下一个文件中的文本:


dobles_message.py


def set_message(self, language):

    t = gettext.translation("basketmetrics_i18n", "../i18n", fallback=True, languages=["'" + language + "'"])

    t.install()

    _ = t.gettext

    self.message = _("mensaje_dd_1")

为此,首先我使用以下指令创建了 dobles_message.po:


xgettext -i dobles_message.py -o dobles_message.pot -d basketmetrics_i18n

然后,我创建了这些目录结构 i18n/es/LC_MESSAGES 和 i18n/en/LC_MESSAGES,并使用以下说明为每个语言创建了 .po 版本:


msginit -i dobles_message.pot -o ../i18n/es/LC_MESSAGES/basketmetrics_i18n.po -l es

msginit -i dobles_message.pot -o ../i18n/en/LC_MESSAGES/basketmetrics_i18n.po -l en

第三,我更改了字符集并翻译了每个文件的文本。第四,我在目录 i18n/es/LC_MESSAGES 和目录 i18n/en/LC_MESSAGES 中使用此指令从每个 .po 文件创建了 .mo 文件


msgfmt basketmetrics_i18n.po -o basketmetrics_i18n.mo

但是,当我运行我的应用程序而不是翻译文本时,我的应用程序会向我显示 msgid。


这些是我的文件和目录结构:

有只小跳蛙
浏览 341回答 2
2回答

慕森王

最后,我发现了错误。由于语言目录所在目录的路径而导致的错误。您必须从项目的根目录而不是从要翻译文本的文件中指定此路径。所以,我的功能最终是:def set_message(self, language):    t = gettext.translation("basketmetrics_i18n", "../i18n", fallback=True, languages=["'" + language + "'"])    t.install()    _ = t.gettext    self.message = _("mensaje_dd_1")因为我的目录语言“i18n”在项目的根目录下

慕运维8079593

问题:使用 gettext 库翻译文本从文档:获取文本(消息)在目录中查找消息 id 并返回相应的消息字符串,作为 Unicode 字符串。如果目录中没有消息 id 的条目,并且已设置回退,则查找将转发到回退的 gettext() 方法。否则,返回消息 ID。如果您更改以下内容,您的代码将对我有用languages=[language]:def set_message(self, language):    t = gettext.translation(package, localedir, fallback=True, languages=[language])    t.install()    _ = t.gettext    message = _("mensaje_dd_1")set_message('es')根据Python Documentation,您必须执行以下操作:import gettextgettext.bindtextdomain('myapplication', '/path/to/my/language/directory')gettext.textdomain('myapplication')_ = gettext.gettext# ...print(_('This is a translatable string.'))
随时随地看视频慕课网APP

相关分类

Python
我要回答