【问题标题】:ugettext and ugettext_lazyugettext 和 ugettext_lazy
【发布时间】:2011-05-29 11:50:50
【问题描述】:

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

当我尝试时

return HttpResponse(ugettext_lazy("Hello"))

我什么也没看到,但是

return HttpResponse(ugettext("Hello"))

正在工作。

为什么?

【问题讨论】:

    标签: python django internationalization


    【解决方案1】:

    ugettext 用于加载字符串的翻译现在ugettext_lazy 返回一个最终可以变成字符串的对象。如果在设置正确的语言环境之前评估了 ugettext_lazy 调用,则需要这样做。

    ugettext_lazy 可用于使用 Unicode 对象的地方。仔细检查您的 HTML 输出,它可能如下所示:

    <django.utils.functional...>
    

    并且浏览器将其全部忽略为无法识别的标签。

    在这种情况下,您不需要惰性翻译,因为您会立即使用该字符串。如果您出于某种原因确实想继续使用 ugettext_lazy,请尝试以下操作:

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

    请参阅docs 了解更多信息。

    【讨论】:

    • 我认为ugettext_lazymodels.py中更有用。
    • 那么让我看看我是否理解你。 ugettext 在您位于方法或函数(例如视图)中或在加载设置和 co 后调用的位置时很有用。 ugettext_lazy 在想要翻译类属性时更有用(正如@SergeyOrshanskiy 在定义模型或表单时建议的那样),这些属性在服务器启动时加载并且需要延迟加载。对吗?
    • @EduardLuca asa e :) 这与使用reverse_lazy 而不是reverse 的原理相同。例如,您可以在基于类的视图上使用reverse_lazy 来定义succes_url,在这种情况下,除非需要,否则不应评估反向
    猜你喜欢
    • 2013-05-06
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2023-02-05
    • 1970-01-01
    相关资源
    最近更新 更多