PyGtk3 和 Gettext - 在 运行 时间选择语言时出现问题
PyGtk3 and Gettext - problem choosing the language at run-time
长话短说,当我认为字符串会被翻译时,没有任何反应。
我有一个 PyGtk 应用程序和一个模块,我在其中存储了我想要按以下方式翻译的所有字符串:
'''
Strings module.
'''
....
CANCEL_BUTTON_TEXT = _("Cancel")
BACK_BUTTON_TEXT = _("Back")
....
等等。然后它们被其他模块使用,如:
'''
View module.
'''
import strings
# Usage example
button.set_label(strings.CANCEL_BUTTON_TEXT)
button.set_tooltip(strings.TOOLTIP)
window_title.set_title(strings.WINDOW_TITLE)
...
我已经创建了必要的 .mo 文件。这是我的杰拉基:
- /语言环境
- /es
- LC_MESSAGES
- base.mo
- base.po
- /zh
- LC_MESSAGES
- base.mo
- base.po
- base.pot
如文档所述 (https://docs.python.org/3/library/gettext.html),在我的 main.py 中有以下几行:
import gettext
gettext.install('myapplication')
es_lang = gettext.translation('base', localedir='locales', languages=['es'])
en_lang = gettext.translation('base', localedir='locales', languages=['en'])
es_lang.install()
然后,在我的应用程序中有一个按钮,当按下时,将执行以下行:
en_lang.install()
但是小部件上仍然使用西班牙语。谁能帮帮我?
所以,我做错的是我正在翻译字符串,但我没有更新 GTK 小部件标签,等等。
我解决这个问题的方法是:
i) 创建了一个 class ,当用户选择一种语言时,我将所有要翻译的字符串放在其中。 class 是唯一导入 gettext 模块的模块。
ii) 当用户选择一种语言时,调用 class 的方法并将所有字符串翻译成该语言。
iii) class 之外的另一种方法更新所有使用这些字符串的标签和小部件。
长话短说,当我认为字符串会被翻译时,没有任何反应。
我有一个 PyGtk 应用程序和一个模块,我在其中存储了我想要按以下方式翻译的所有字符串:
'''
Strings module.
'''
....
CANCEL_BUTTON_TEXT = _("Cancel")
BACK_BUTTON_TEXT = _("Back")
....
等等。然后它们被其他模块使用,如:
'''
View module.
'''
import strings
# Usage example
button.set_label(strings.CANCEL_BUTTON_TEXT)
button.set_tooltip(strings.TOOLTIP)
window_title.set_title(strings.WINDOW_TITLE)
...
我已经创建了必要的 .mo 文件。这是我的杰拉基:
- /语言环境
- /es
- LC_MESSAGES
- base.mo
- base.po
- LC_MESSAGES
- /zh
- LC_MESSAGES
- base.mo
- base.po
- LC_MESSAGES
- base.pot
- /es
如文档所述 (https://docs.python.org/3/library/gettext.html),在我的 main.py 中有以下几行:
import gettext
gettext.install('myapplication')
es_lang = gettext.translation('base', localedir='locales', languages=['es'])
en_lang = gettext.translation('base', localedir='locales', languages=['en'])
es_lang.install()
然后,在我的应用程序中有一个按钮,当按下时,将执行以下行:
en_lang.install()
但是小部件上仍然使用西班牙语。谁能帮帮我?
所以,我做错的是我正在翻译字符串,但我没有更新 GTK 小部件标签,等等。
我解决这个问题的方法是:
i) 创建了一个 class ,当用户选择一种语言时,我将所有要翻译的字符串放在其中。 class 是唯一导入 gettext 模块的模块。
ii) 当用户选择一种语言时,调用 class 的方法并将所有字符串翻译成该语言。
iii) class 之外的另一种方法更新所有使用这些字符串的标签和小部件。