2009-03-29 8 views
2

私は心の中で2つのゴールで、Pythonアプリケーションを国際化しています:複数のi18nドメインを持つPythonアプリケーションを国際化する最良の方法は何ですか?

  1. アプリケーションの負荷クラス複数のパッケージから、独自の国際化ドメインとそれぞれ。したがって、パッケージAのモジュールはドメインAを使用し、パッケージBのモジュールはドメインBなどを使用しています。

  2. ロケールは、アプリケーションの実行中に変更することができます。

Pythonのgettextモジュールでは、単一ドメインの単一言語アプリケーションを国際化するのが非常に簡単です。ロケールを設定するだけでgettext.install()を呼び出すと、右にTranslationが見つかり、そのugettextメソッドがグローバル名前空間に_としてインストールされます。しかし明らかにグローバル値は単一のドメインに対してのみ機能し、単一のTranslationをロードするので、そのロケールでのみ動作します。

代わりにTranslationを各モジュールの先頭にロードし、ugettextメソッドを_としてバインドすることができます。各モジュールはそれ自身のドメインに_を使用します。しかし、_が間違ったロケール用であるため、ロケールが変更されたときにもこれは破損します。

私はすべての機能の先頭に正しいugettextを読み込むことができたと思いますが、それは非常に面倒なようです。代わりにそれはまだモジュールごとに行うことですが、ugettextをバインドする代わりに、現在のロケールをチェックし、そのTranslationを取得し、それに文字列を転送する私自身の関数に置き換えます。誰かがよりクリーンなソリューションを持っていますか?

def _(message): 
    return my_gettext(__name__, message) 

これは同時に、モジュールごと-パー上の任意のルックアップを実行しながら、あなたはgettextを使用することができます:あなたは(モジュールごと)おおよそ次のように関数に_バインドについてどのように

答えて

2

ロケールの切り替えも可能なコールベース。

関連する問題