ugettext和ugettext_lazy

27 投票
1 回答
15611 浏览
提问于 2025-04-16 08:54

你能解释一下 ugettextugettext_lazy 之间的主要区别吗?

当我尝试使用

return HttpResponse(ugettext_lazy("Hello"))

时,我什么也看不见,但

return HttpResponse(ugettext("Hello"))

却能正常工作。

这是为什么呢?

1 个回答

43

ugettext 是用来立即加载一个字符串的翻译的。也就是说,当你需要翻译的时候,直接用这个就行。ugettext_lazy 则返回一个可以在以后变成字符串的对象。你需要用这个的原因是,如果在设置好语言环境之前就调用了 ugettext_lazy,它能帮你处理这个问题。

ugettext_lazy 可以在你使用 Unicode 对象的地方使用。你可以检查一下你的 HTML 输出,可能会是这样的:

<django.utils.functional...>

而浏览器会把它当作一个不认识的标签给忽略掉。

在这种情况下,你不需要懒翻译,因为你是立刻就要用这个字符串。如果你真的有某种原因想继续使用 ugettext_lazy,可以试试这个:

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

想了解更多信息,可以查看 文档

撰写回答