Как я могу получить текущий язык в Django?


Как я могу получить текущий язык в текущем потоке в модели или в Администраторе?

6 65

6 ответов:

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

вы можете прочитать системы locale для информации о языке.

вы можете использовать этот

from django.utils import  translation
translation.get_language()