Могу ли я вручную передать код языка в Django gettext()?

У меня есть несколько строк в бэкенде, которые нужно иногда переводить на другой язык перед их использованием. Я планирую сохранять выбор языка пользователя в базе данных, чтобы было легко получить его оттуда. Но вот что мне непонятно: если я реализую локализацию и у меня есть несколько разных языковых файлов, как я смогу использовать нужную языковую версию? Я не могу считать выбор языка из cookies, url, сессии пользователя и т.д. Могу ли я использовать код языка из моей базы данных, чтобы выбрать, какой перевод я буду использовать?

Вы можете вручную активировать язык с помощью activate. Вот пример, если у пользователя есть атрибут language с действительным кодом языка:

from django.utils.translation import activate, deactivate
from django.utils.translation import gettext as _

user = MyUserModel.objects.get(username=username)
activate(user.language)
my_string_translated_into_users_language = _("Hello")
deactivate()

Таким образом, вы переопределяете текущий язык сессии. Затем deactivate() деактивирует активный в данный момент объект перевода, так что дальнейшие вызовы _ будут снова разрешаться против объекта перевода по умолчанию.

Вернуться на верх