Как получить текущий язык в django?
Как я могу получить текущий язык в текущем потоке в модели или в Администраторе?
6 ответов
функции, представляющие особый интерес, являются 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.get_language()
тогда вы должны иметь в виду, что если этот раздел кода будет вызываться асинхронно (например, как задача сельдерея), то этот подход не будет работать из-за его работы в другом потоке.