Django 中的“gettext()”与“gettext_lazy()”

2023-12-09

我有一个关于使用 ugettext 的问题gettext_lazy()用于翻译。 我了解到在模型中我应该使用gettext_lazy(),而在视图 ugettext 中。 但是还有其他地方我应该使用吗gettext_lazy()也?表单定义又如何呢? 它们之间有性能差异吗?

Edit:还有一件事。有时,代替gettext_lazy(), gettext_noop()用来。正如文档所说,gettext_noop()字符串仅被标记为翻译,并在向用户显示之前在最近可能的时刻进行翻译,但我在这里有点困惑,这不是类似于gettext_lazy()做?我仍然很难决定应该在我的模型和表单中使用哪一个。


gettext() vs. gettext_lazy()

在表单或模型等定义中,您应该使用gettext_lazy因为这个定义的代码只执行一次(主要是在django启动时);gettext_lazy以惰性方式翻译字符串,这意味着,例如。每次你访问模型上的属性名称时,字符串都会被重新翻译 - 这完全是有道理的,因为自从 django 启动以来你可能会用不同的语言查看这个模型!

在视图和类似的函数调用中,您可以使用gettext没有问题,因为每次调用视图时gettext将是新执行的,因此您将始终获得符合要求的正确翻译!

关于gettext_noop()

As Bryce在他的回答中指出,此函数将字符串标记为可提取以进行翻译,但确实返回未翻译的字符串。这对于在两个地方使用字符串非常有用 - 翻译的和未翻译的。请参见以下示例:

import logging
from django.http import HttpResponse
from django.utils.translation import gettext as _, gettext_noop as _noop

def view(request):
    msg = _noop("An error has occurred")
    logging.error(msg)
    return HttpResponse(_(msg))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 中的“gettext()”与“gettext_lazy()” 的相关文章

随机推荐