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