django - 什么是 ugettext 和 ugettext_lazy 以及为什么在 django 中使用它们?

标签 django django-models django-views

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

this article在 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 主义;它们是类似字符串的对象,直到最后一分钟才真正变成真正的字符串。通常,直到过程的后期,您才知道如何翻译字符串。在我可以查看他们的请求之前,我不知道浏览器使用什么语言,所以我希望翻译字符串是“惰性的”并且在它绝对需要在模板中呈现之前不进行评估,例如。

出于您的目的,这意味着这些将显示为字符串——但这也意味着它们可能会被翻译覆盖。因此,例如,您可以将重复用户名消息更改为 _("Sorry, but a user with that name exists. Please try again") .对于说英语的浏览器,他们会看到您的新消息。但是,如果该字符串已经注册了翻译,那么您将破坏它-现在查找西类牙语版本将失败,因为它找不到与您的西类牙语匹配的字符串。

对于 95% 的网站,这无关紧要,因为您不会提供网站的翻译版本。如果是,您应该阅读 https://docs.djangoproject.com/en/dev/topics/i18n/ .

关于django - 什么是 ugettext 和 ugettext_lazy 以及为什么在 django 中使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22516017/

相关文章:

django - 翻译项​​目外应用程序中的字符串(ej.django-rest-framework)

django - 使用Nginx和Gunicorn运行多个Django项目

python - 类型错误 : Direct assignment to the reverse side of a related set is prohibited

python - 如何使用 Django 连接

django - 将变量(标志)从 urls.py 传递到 django 中的 views.py

python - 如果条件在 django 模板的内循环中不起作用

python - 为什么我偶尔会使用 django-constance 遇到 ImportError?

django - 在 raw_id_fields 中一次插入更多记录

python - Django:跟踪模型中的字段是否已更改

django - 数据库中的数据格式值更改