Как я могу получить текущий язык в Django? - PullRequest
77 голосов
/ 29 июля 2010

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

Ответы [ 6 ]

118 голосов
/ 29 июля 2010

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

77 голосов
/ 29 июля 2010

Или вы также можете получить это в ваших взглядах

request.LANGUAGE_CODE
30 голосов
/ 11 ноября 2015

Будьте осторожны с методом, который вы используете, чтобы получить язык . В зависимости от того, какой метод, 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> против www.example.com/fr/<somepath>, используйте django.utils.translation.get_language_from_request(request, check_path=False). Кроме того, он всегда вернет правильный язык, установленный в settings.LANGUAGES

Мне было не очень легко найти эти различия в Google по этому вопросу, поэтому здесь для дальнейшего использования.

7 голосов
/ 30 октября 2013

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

1 голос
/ 11 августа 2016

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

from django.utils import  translation
translation.get_language()
0 голосов
/ 29 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...