私は心の中で2つのゴールで、Pythonアプリケーションを国際化しています:複数のi18nドメインを持つPythonアプリケーションを国際化する最良の方法は何ですか?
アプリケーションの負荷クラス複数のパッケージから、独自の国際化ドメインとそれぞれ。したがって、パッケージAのモジュールはドメインAを使用し、パッケージBのモジュールはドメインBなどを使用しています。
ロケールは、アプリケーションの実行中に変更することができます。
Pythonのgettext
モジュールでは、単一ドメインの単一言語アプリケーションを国際化するのが非常に簡単です。ロケールを設定するだけでgettext.install()
を呼び出すと、右にTranslation
が見つかり、そのugettext
メソッドがグローバル名前空間に_
としてインストールされます。しかし明らかにグローバル値は単一のドメインに対してのみ機能し、単一のTranslation
をロードするので、そのロケールでのみ動作します。
代わりにTranslation
を各モジュールの先頭にロードし、ugettextメソッドを_
としてバインドすることができます。各モジュールはそれ自身のドメインに_
を使用します。しかし、_
が間違ったロケール用であるため、ロケールが変更されたときにもこれは破損します。
私はすべての機能の先頭に正しいugettext
を読み込むことができたと思いますが、それは非常に面倒なようです。代わりにそれはまだモジュールごとに行うことですが、ugettext
をバインドする代わりに、現在のロケールをチェックし、そのTranslation
を取得し、それに文字列を転送する私自身の関数に置き換えます。誰かがよりクリーンなソリューションを持っていますか?
def _(message):
return my_gettext(__name__, message)
これは同時に、モジュールごと-パー上の任意のルックアップを実行しながら、あなたはgettextを使用することができます:あなたは(モジュールごと)おおよそ次のように関数に_バインドについてどのように