Подтвердить что ты не робот

Ugettext и ugettext_lazy в Django

Не могли бы вы объяснить, в чем принципиальное отличие ugettext и ugettext_lazy.

Когда я пытаюсь

return HttpResponse(ugettext_lazy("Hello"))

Я ничего не видел, но

return HttpResponse(ugettext("Hello"))

работает.

Почему?

Спасибо.

4b9b3361

Ответ 1

ugettext используется для загрузки перевода строки прямо сейчас. ugettext_lazy возвращает объект, который в конечном итоге может быть превращен в строку. Вам нужно, чтобы вызов ugettext_lazy был оценен до того, как был установлен правильный языковой стандарт.

ugettext_lazy можно использовать, когда вы используете объект Unicode. Дважды проверьте свой вывод HTML, он может выглядеть так:

<django.utils.functional...>

и браузер игнорирует все это как непризнанный тег.

В этом случае вам не нужен ленивый перевод, потому что вы немедленно используете строку. Если вы действительно хотите продолжить работу с ugettext_lazy по какой-либо причине, попробуйте следующее:

return HttpResponse(ugettext_lazy("Hello").encode('utf-8'))

Подробнее см. docs.