这是一个非常基本的问题。我试图用谷歌搜索我能用简单的语言理解的答案。但这并没有帮助。我在 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/