web-dev-qa-db-ja.com

ジャンゴで現在の言語を取得するにはどうすればよいですか?

モデルまたは管理者の現在のスレッドで現在の言語を取得するにはどうすればよいですか?

77
diegueus9

特に興味深い関数は、現在のスレッドで使用されている言語を返すDjango.utils.translation.get_language()です。 ドキュメント を参照してください。

119
micha480

または、これをビューで取得することもできます

request.LANGUAGE_CODE
79
Ignas Butėnas

言語を取得するために使用する方法に注意してください。どの方法に応じて、Djangoはさまざまな方法と情報を使用して、使用する適切な言語を決定)します。

Django.utils.translation.get_language()関数を使用する場合、thread言語にリンクされます。 Django 1.8より前、翻訳が無効になっている場合は常にsettings.LANGUAGE_CODEを返しました。スレッド言語を手動でオーバーライドしたい場合は、override()またはactivate()関数は、あまり明示的に名前は付けられていませんが、まだ便利です。

from Django.utils import translation

with translation.override('fr'):
    print(_("Hello")) # <= will be translated inside the with block

translation.activate('fr') # <= will change the language for the whole thread.
# You then have to manually "restore" the language with another activate()
translation.activate('en') # <= change languages manually

Django)がパスおよび/またはリクエスト(言語Cookie、...)を確認する場合、より一般的な例:www.example.com/en/<somepath> vs www.example.com/fr/<somepath>Django.utils.translation.get_language_from_request(request, check_path=False) を使用します。また、settings.LANGUAGESに設定された有効な言語を常に返します。

このテーマについてGoogleでこれらの違いを見つけるのは簡単ではないことがわかったので、ここでさらに参照します。

31
achedeuzot

Django.utils.translation.get_language()を使用する場合、コードのそのセクションが非同期的に呼び出される場合(たとえば、セロリタスクとして)に実行されるため、このアプローチは機能しないことに注意してください別のスレッド。

7
Stefan Magnuson

これを使用できます

from Django.utils import  translation
translation.get_language()
1
Sarath Ak