Як я можу отримати поточну мову в поточному потоці в моделі чи в адмініструванні?
Відповіді:
Особливо цікавими функціями є django.utils.translation.get_language()
повернення мови, що використовується в поточному потоці. Див. Документацію .
Або ви також можете отримати це у своїх поглядах
request.LANGUAGE_CODE
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>
vs www.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
для отримання інформації про мову.