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