为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

有只小跳蛙 2021-07-07 18:37:11
我是使用 gettext 库翻译文本的新手。我想翻译下一个文件中的文本:dobles_message.pydef 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 esmsginit -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。这些是我的文件和目录结构:
查看完整描述

2 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

最后,我发现了错误。由于语言目录所在目录的路径而导致的错误。您必须从项目的根目录而不是从要翻译文本的文件中指定此路径。所以,我的功能最终是:


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”在项目的根目录下


查看完整回答
反对 回复 2021-07-13
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

问题:使用 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 gettext

gettext.bindtextdomain('myapplication', '/path/to/my/language/directory')

gettext.textdomain('myapplication')

_ = gettext.gettext

# ...

print(_('This is a translatable string.'))


查看完整回答
反对 回复 2021-07-13
  • 2 回答
  • 0 关注
  • 340 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信