ugettext和ugettext_lazy
你能解释一下 ugettext
和 ugettext_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'))
想了解更多信息,可以查看 文档。