モデルまたは管理者の現在のスレッドで現在の言語を取得するにはどうすればよいですか?
特に興味深い関数は、現在のスレッドで使用されている言語を返すDjango.utils.translation.get_language()
です。 ドキュメント を参照してください。
または、これをビューで取得することもできます
request.LANGUAGE_CODE
言語を取得するために使用する方法に注意してください。どの方法に応じて、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でこれらの違いを見つけるのは簡単ではないことがわかったので、ここでさらに参照します。
Django.utils.translation.get_language()
を使用する場合、コードのそのセクションが非同期的に呼び出される場合(たとえば、セロリタスクとして)に実行されるため、このアプローチは機能しないことに注意してください別のスレッド。
これを使用できます
from Django.utils import translation
translation.get_language()