モデルの現在のスレッドまたは管理者で現在の言語を取得するにはどうすればよいですか?
回答:
特に興味深い関数はdjango.utils.translation.get_language()
、現在のスレッドで使用されている言語を返す関数です。ドキュメントを参照してください。
または、ビューでこれを取得することもできます
request.LANGUAGE_CODE
django.utils.translation.get_language()
django.utils.translation.get_language()
は常により良い解決策だと思います。
言語を取得するために使用する方法に注意してください。どの方法を使用するかによって、Djangoはさまざまな方法と情報を使用して、使用する適切な言語を決定します。
django.utils.translation.get_language()
関数を使用すると、スレッド言語にリンクされます。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
翻訳ではなくであることに注意してください。提供されたリンクにスペルミスがあります。スニペットでは正しいです。
django.utils.translation.get_language()
とdjango.utils.translation.get_language_from_request(request, check_path)
。ビューでは、あなたが後者を使用する必要がある場合はcheck_path = True
、あなたのテンプレートがでレンダリングされます言語を取得する。
追加するだけで、使用するdjango.utils.translation.get_language()
場合は、コードのそのセクションが非同期に呼び出される場合(たとえば、セロリタスクとして)、別のスレッドで実行されているため、このアプローチは機能しないことに注意してください。
あなたはこれを使うことができます
from django.utils import translation
translation.get_language()
システムのlocale
言語情報を読むことができます。