python - 我什么时候应该使用 ugettext_lazy?

我有一个关于使用 ugettext 和 ugettext_lazy 进行翻译的问题。 我了解到在模型中我应该使用 ugettext_lazy,而在 View 中应该使用 ugettext。 但是还有其他地方,我也应该使用 ugettext_lazy 吗?表单定义呢? 它们之间有性能差异吗?

编辑: 还有一件事情。有时,使用 ugettext_noop 代替 ugettext_lazy。正如文档所说, ugettext_noop 字符串仅被标记为翻译,并在将它们显示给用户之前在最晚可能的时刻进行翻译,但我在这里有点困惑,不是类似于 ugettext_lazy 做什么?我仍然很难决定,我应该在我的模型和表单中使用哪个。

最佳答案

gettext()gettext_lazy()

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

在 View 和类似的函数调用中,您可以毫无问题地使用 gettext,因为每次调用 View 时,都会重新执行 gettext,因此您总能得到正确的翻译符合要求!

关于gettext_noop()

作为 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))

https://stackoverflow.com/questions/4160770/

相关文章:

python - 我可以在 pip 要求文件中添加注释吗?

python - 目前在 Python 中进行 RPC 的选择是什么?

linux - Linux 上的 NuGet : Error getting response st

php - 如何在 CentOS 6.2 上安装 PHP mbstring

python - Django 设置 ‘SECRET_KEY’ 的目的是什么?

python - 如何在 Python 中进行并行编程?

linux - 如何找到今天在 Unix/Linux 中创建的所有文件?

linux - svn over HTTP 代理

linux - fuse 错误 : Transport endpoint is not connec

linux - 是否在/usr/local/lib 中搜索共享库?