Як я можу отримати поточну мову в поточному потоці в моделі чи в адмініструванні?
Відповіді:
Особливо цікавими функціями є 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для отримання інформації про мову.