【问题标题】:Glib equivalent of `textdomain()` and `bindtextdomain()`Glib 等效于 `textdomain()` 和 `bindtextdomain()`
【发布时间】:2022-08-03 18:43:01
【问题描述】:
我正在将 I18N 支持添加到一些使用基于 GLib 的接口的 Python 代码到应用程序的其余部分。为了与应用程序的其余部分保持一致,我想使用 GLib\'s gettext implementation/wrapper。
我使用以下命令导入 GLib API:
import gi
from gi.repository import GLib
但是,如果我在库中看到一些 *gettext() 函数(dcgettext、dgettext、dngettext、dpgettext、dpgettext2)我找不到与 textdomain() 和 bindtextdomain() 等效的函数。
我错过了什么吗?
标签:
python
internationalization
gettext
glib
【解决方案1】:
GLib 没有自己的 gettext 实现。虽然它肯定会使用它进行翻译,并且 - 特别是在 C 端 - 为它提供了有用的包装器。
在 Python 上使用 GTK 时,这意味着您通常会调用 bindtextdomain():您使用 Python 提供的 locale 模块。如果 Python 是在没有 gettext 支持的情况下构建的,则必须导入 gettext 模块
import gettext
import locale
try:
locale.bindtextdomain(app_id, locale_dir)
locale.textdomain(app_id)
except AttributeError as e:
# Python built without gettext support does not have
# bindtextdomain() and textdomain().
gettext.bindtextdomain(app_id, locale_dir)
gettext.textdomain(app_id)