0

Djangoは、ここに記載されている順序でメッセージファイル(.mo)を検索します: https ://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations

Djangoに、現在使用されているアプリのロケールディレクトリでメッセージファイルを最初に検索させることは可能ですか?

最近、プロジェクトでバグを発見しました。これは、メッセージIDが同じで翻訳が異なる2つのアプリが原因で発生しました。すべてのアプリには独自のロケールディレクトリがあります。

4

1 に答える 1

0

残念ながら、これはさまざまな理由で django がどのように機能するかではありません。

  1. 1 つのフレーズには 1 つの翻訳が必要です。Django は別として、これは gettext (翻訳メッセージに使用されるエンジン) の問題でもあります。さらに、システムが単一のフレーズをすべてのページで一貫して翻訳することを期待するのは普通のことのように思えます。結局、元の言語でも同じフレーズです。
  2. 「現在のアプリケーション」とはどういう意味ですか? 現在のアプリケーションは、現在のビューを生成するアプリケーションですか? 翻訳自体は、別のアプリケーションのモジュールからのものである可能性があります。これら 2 つのアプリケーションのどちらが適切かを判断するにはどうすればよいでしょうか? 翻訳も遅延する可能性があり、そのような決定がさらに複雑になります。

お好みの翻訳に合わせてアプリケーションを並べ替えるか、独自の翻訳を提供する設定をINSTALLED_APPS使用して新しい翻訳メッセージ パスを定義することをお勧めします。LOCALE_PATHS

注:技術的には、このモジュールのカスタム実装を提供して、必要に応じて動作を変更することにより、django.utils.translation.trans_real のデフォルトの動作をオーバーライドすることができます (translation()選択アルゴリズムを実装するのは、このモジュールのメソッドです)。Trans次に、moduleで最初に定義されたクラスをオーバーライドしてdjango.utils.translation.__init__、カスタムの trans_real モジュールを返し (MyCustomTransたとえば、この新しいクラスに名前を付けます)、プロジェクトの init モジュールのどこかに変換クラスとして明示的に設定して、コードの早い段階でロードされるようにする必要があります。

from django.utils import translation
translation._trans = MyCustomTrans()

代わりにカスタムアルゴリズムが使用されますが、これには多くの作業が必要であり、私の意見では手間をかける価値はありません.

于 2012-11-23T16:15:30.447 に答える