要するに、私は同じ時間に同じ言語の多くの.mo
ファイルをPythonで使用できますか?gettext変換に複数の.moファイルを同時に使用するにはどうすればよいですか?
私のpythonアプリケーションでは、I18Nにgettext
を使用する必要があります。このアプリは、プラグインシステムの種類を使用しています。つまり、プラグインをダウンロードして適切なディレクトリに置くことができ、他のPythonパッケージと同様に動作します。メインのアプリケーションには、./locale/en/LC_MESSAGES/main.mo
という名前で使用されている.mo
ファイルが保存されています。また、プラグインnr 1には同じディレクトリにplugin1.mo
というファイル.mo
があります。
私はmain.mo
I18Nメッセージをロードするためにこれを使用します。
gettext.install('main', './locale', unicode=False)
がどのように私はすべてのプラグインは、彼らがあるべき姿を翻訳しているように、あまりにも他の人をインストールすることができますか?私が考え
ソリューション:
は、私は、各パッケージの名前空間にgettext.install()
べきでしょうか?しかし、これは先に定義した_()
を上書きし、メインアプリケーションの将来の翻訳を混乱させるでしょう。
.mo
ファイルを2つ組み合わせる方法はありますか(新しいプラグインがインストールされている場合など)。
実行時に1つのGNUTranslation
オブジェクトに結合できますか?または、グローバル名前空間に追加されたデフォルトの_()
メソッドをオーバーライドしますか?それでは、どうすればそのオプションを使うことができますか?アプリケーションがインストールされるすべてのプラグインを認識することが想定されていないので、すでにそのmain.mo
ファイルに翻訳されたすべてのメッセージを持つことはできません。代わりに_('Hello World')
の は、私が_('plugin1', 'Hello World in plug-in 1')
注意を使用します。
だから、私はメインのアプリケーション以外のために_ショートカットを使用していない、とプラグインでは、私が使用すると言っています。 'plugin_translation = gettext.translation( 'plugins.plugin1'、locale_dir) plugin_translation( '翻訳対象のテキスト') ' これはドキュメントに示唆されているようですが、抽出ツールによってi18n対応のメッセージとして識別されますまたはそれを識別するためにモジュールの名前空間でその変数_を呼び出さなければなりませんか? – jadkik94