懒惰,为什么要在Django中使用它们?

这是一个非常基本的问题。 我试图谷歌找到我可以用简单的语言理解的答案。 但这并没有帮助。 我在Django's UserCreationForm遇到了下面的代码片断,然后才知道一些ugettext_lazy _ exists。 我不知道,如果它是一个django specific module/function ,它的目的是什么以及它应该被使用。

SO中有这篇文章,其中有更多讨论。 但我首先要掌握基本原理。 请赐教!

from django.utils.translation import ugettext, ugettext_lazy as _

///// what is the _ means here and why is it used

class UserCreationForm(forms.ModelForm):
    """
    A form that creates a user, with no privileges, from the given username and
    password.
    """

    error_messages = {
        'duplicate_username': _("A user with that username already exists."),
        'password_mismatch': _("The two password fields didn't match."),
    }

ugettext是可翻译字符串的Unicode版本。

ugettext_lazy是一个“懒惰”版本。 懒惰的字符串是一个Django主义; 它们是类似字符串的对象,直到最后一分钟才真正转向真正的字符串。 通常,在这个过程中,你无法知道如何翻译字符串。 我不知道浏览器使用哪种语言,直到我看到他们的请求为止,所以我希望翻译字符串是“懒惰”的,并且不会评估,直到它绝对需要在模板中呈现为止。

出于您的目的,这意味着这些将显示为字符串 - 但这也意味着它们可能会被翻译覆盖。 因此,例如,您可以将重复用户名消息更改为_(“对不起,但具有该名称的用户存在,请再试一次”)。 对于讲英语的浏览器,他们会看到你的新消息。 但是,如果该字符串已经有一个已经注册的翻译,那么您将会破坏它 - 现在查找西班牙语版本将会失败,因为它无法为您的西班牙语找到匹配的字符串。

对于95%的网站,这并不重要,因为您不会提供网站的翻译版本。 如果有,请阅读https://docs.djangoproject.com/en/dev/topics/i18n/。

链接地址: http://www.djcxy.com/p/78257.html

上一篇: lazy and why to use them in django?

下一篇: CMake cannot resolve runtime directory path