Как я могу получить текущий язык в Django?
Как я могу получить текущий язык в текущем потоке в модели или в Администраторе?
6 ответов:
функции, представляющие особый интерес
django.utils.translation.get_language(), который возвращает язык, используемый в текущем потоке. Смотрите документация.
будьте осторожны с методом, который вы используете, чтобы получить язык. В зависимости от того, какой метод, 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>vswww.example.com/fr/<somepath>используйтеdjango.utils.translation.get_language_from_request(request, check_path=False). Кроме того, он всегда будет возвращать допустимый язык, установленный вsettings.LANGUAGESя обнаружил, что не очень легко найти эти различия через Google по этому вопросу, так что здесь это для дальнейшего использования.
только добавить, что если вы используете
django.utils.translation.get_language()тогда вы должны иметь в виду, что если этот раздел кода будет вызываться асинхронно (например, как задача сельдерея), то этот подход не будет работать из-за его запуска в другом потоке.
вы можете прочитать системы
localeдля информации о языке.