私は Django 1.5.1 を使用していますが、翻訳で「奇妙な動作」が発生しています。同じ Python ファイルでugettext
andを使用しています。ugettext_lazy
インポートを次のように整理すると:
from django.utils.translation import ugettext as trans
from django.utils.translation import ugettext_lazy as _
また
from django.utils.translation import ugettext as trans, ugettext_lazy as _
としてマークされた文字列は、コマンドのtrans("string")
実行時にスキップされますmakemessages
。
ただし、名前を変更しないugettext
と、両方のバージョンでうまく機能します。
from django.utils.translation import ugettext
from django.utils.translation import ugettext_lazy as _
また
from django.utils.translation import ugettext, ugettext_lazy as _
今trans("string")
はうまくいきます。
では、このインポートの名前変更によって、名前が変更された関数が呼び出されない理由を知っている人はいますか? これは、同じモジュール内で複数の関数の名前を変更するときに知らなかった実際の Python の「制限」ですか?
アップデート
いくつかのテストの後、次のコードを使用してアプリ内に空の python モジュールを作成しても機能しないことがわかりました。
from django.utils.translation import ugettext_lazy as translate
a = translate("string")
ただし、_
エイリアスに使用すると機能します。
from django.utils.translation import ugettext_lazy as _
a = _("string")
私の結論は次のとおりです。Django ではand (またはその他の関連する変換関数)のエイリアスのみを使用できます。そうしないと、 command_
ugettext
ugettext_lazy
makemessages
によって認識されません。技術的な説明は、Robert Lujo の回答にあります。
ありがとう!