モジュールレベルやクラスレベルの変数にgettextを使用すると、いくつか問題が発生します。Python、gettext:モジュールレベルとクラスレベルの変数の正しいロケールを取得する方法は?
まず、インポート時に私はデフォルトのロケールを使用してインストールします。 設定を解析してプロジェクトを開始するときに特定のロケールを取得した後、適切なロケールにgettext.translation.install
を使用します。すべて正常に動作しますが、私のコードでは、すべてのモジュールレベルとクラスレベルの変数は、正しくはなくデフォルトのロケールで翻訳されたままです。
├── foo.py
├── i18t
│ └── __init__.py
├── __init__.py
└── run.py
i18t/__init__.py
が含まれています:
import gettext
from os import path
SUPPORTED_LANGUAGES = ('en', 'fr')
DEFAULT_LANGUAGE = SUPPORTED_LANGUAGES[0]
locale_path = path.abspath(path.join(path.dirname(__file__), 'locale'))
TRANSLATIONS = {
lang: gettext.translation(
'domain',
locale_path,
languages=[lang]
) for lang in SUPPORTED_LANGUAGES
}
def install_language(language):
lang = TRANSLATIONS.get(language)
if lang is None:
lang = TRANSLATIONS[DEFAULT_LANGUAGE]
lang.install()
__init__.py
:
from i18n import DEFAULT_LANGUAGE, install_language
install_language(DEFAULT_LANGUAGE)
foo.py
:
私はこのようなプロジェクトを持っています210
foo = _('Bar')
run.py
:
from i18t import install_language
import foo
def main():
...
read config and get right locale
...
install_language(right_locale)
bar = _('Bazz')
print(foo.foo)
print(bar)
私はrun.py
を実行し、私は右のロケールをデフォルトのロケールとbar
でfoo.foo
を翻訳します。 私はモジュールをインポートするときにfoo.foo
_
(gettext)を実行することを知っていますが、正しく翻訳された文字列を取得する必要があります。 これを行うには良い方法はありますか?