【发布时间】:2011-05-29 11:50:50
【问题描述】:
您能解释一下ugettext 和ugettext_lazy 之间的主要区别吗?
当我尝试时
return HttpResponse(ugettext_lazy("Hello"))
我什么也没看到,但是
return HttpResponse(ugettext("Hello"))
正在工作。
为什么?
【问题讨论】:
标签: python django internationalization
您能解释一下ugettext 和ugettext_lazy 之间的主要区别吗?
当我尝试时
return HttpResponse(ugettext_lazy("Hello"))
我什么也没看到,但是
return HttpResponse(ugettext("Hello"))
正在工作。
为什么?
【问题讨论】:
标签: python django internationalization
ugettext 用于加载字符串的翻译现在。 ugettext_lazy 返回一个最终可以变成字符串的对象。如果在设置正确的语言环境之前评估了 ugettext_lazy 调用,则需要这样做。
ugettext_lazy 可用于使用 Unicode 对象的地方。仔细检查您的 HTML 输出,它可能如下所示:
<django.utils.functional...>
并且浏览器将其全部忽略为无法识别的标签。
在这种情况下,您不需要惰性翻译,因为您会立即使用该字符串。如果您出于某种原因确实想继续使用 ugettext_lazy,请尝试以下操作:
return HttpResponse(ugettext_lazy("Hello").encode('utf-8'))
请参阅docs 了解更多信息。
【讨论】:
ugettext_lazy在models.py中更有用。
ugettext 在您位于方法或函数(例如视图)中或在加载设置和 co 后调用的位置时很有用。 ugettext_lazy 在想要翻译类属性时更有用(正如@SergeyOrshanskiy 在定义模型或表单时建议的那样),这些属性在服务器启动时加载并且需要延迟加载。对吗?
reverse_lazy 而不是reverse 的原理相同。例如,您可以在基于类的视图上使用reverse_lazy 来定义succes_url,在这种情况下,除非需要,否则不应评估反向