PyGtk3 и Gettext - проблема выбора языка во время выполнения - PullRequest
0 голосов
/ 09 января 2020

Короче говоря, когда я думал, что строки будут переведены, ничего не происходит.

У меня есть приложение 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. Вот джерарки, которые у меня есть:

  • / locales
    • / es
      • LC_MESSAGES
        • base.mo
        • base. po
    • / ru
      • 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()

Но Испанский sh язык все еще используется в виджетах. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 10 января 2020

Итак, что я делал неправильно, я переводил строки, но я не обновлял ярлыки GTK Widgets, среди прочего.

Я решил это следующим образом:

i) Создан класс, в который я помещаю все строки, которые хочу перевести, когда пользователь выбирает язык. Этот класс является единственным для импорта модуля gettext .

ii) Когда пользователь выбирает язык, вызывается метод этого класса, и он переводит все строки на этот язык.

iii) Другой метод вне этого класса обновляет все метки и виджеты, которые используют эти строки.

...