gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:47:32 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com