Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Функции, представляющие особый интерес, django.utils.translation.get_language(), который возвращает язык, используемый в текущем потоке. См. документация.

Ответ 2

Или вы также можете получить это в своих представлениях

request.LANGUAGE_CODE

Ответ 3

Будьте осторожны с методом, который вы используете для получения языка. В зависимости от метода 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 по этому вопросу, поэтому здесь для дальнейших ссылок.

Ответ 4

Просто добавьте, что если вы используете django.utils.translation.get_language(), тогда вы должны иметь в виду, что если этот раздел кода будет вызываться асинхронно (например, как задача celery), этот подход не будет работать из-за его работы в другой поток.

Ответ 5

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