#python #python-import #gettext
Вопрос:
Я сталкиваюсь с проблемой, что только части моего проекта переведены/локализованы должным образом.
Проблема в том, что gettext
функция _
определяется по-разному в двух модулях. print_text1()
переводится и print_text2()
не переводится.
Решение, похоже, имеет какую-то глобальную переменную или флаг для языка. Как будет выглядеть решение, которое считается хорошей практикой?
Модуль A.py
import gettext
from B import *
language='de'
if language is 'de':
de = gettext.translation('base', localedir='locales', languages=['de'])
de.install()
_ = de.gettext
else:
_ = gettext.gettext
def print_text1():
print(_("Power consumption"))
print_text1()
print_text2()
Модуль B.py
import gettext
_ = gettext.gettext
def print_text2():
print(_("Warm Water"))
Комментарии:
1.
language is 'de'
это хлопотно. Сравните равенство, а не идентичность, т. е.language == 'de'
2. Проще всего использовать
gettext.install
в главном модуле. Это добавляет_
пространство имен builtins, что означает, что вам вообще не нужно ничего импортировать в другие модули. Однако обратите внимание, что это означает, что модули больше нельзя использовать по отдельности без основного модуля, поэтому он не подходит для модульности.3. В качестве альтернативы вы можете создать
_
объект так же, как вы делаете это сейчас, но в отдельном модуле, а затем импортировать его везде, где он вам нужен.