如this section of Translation | Django documentation中所述,函数ugettext_noop是用于国际化的效用函数:
ugettext_noop(消息)¶
标记字符串以进行翻译,但现在不翻译它们。这个可以 用于存储应保留在全局变量中的字符串 基本语言(因为它们可能在外部使用)并且将是 稍后翻译。
此外,this answer提供了一个使用示例:
import logging
from django.http import HttpResponse
from django.utils.translation import ugettext as _, ugettext_noop as _noop
def view(request):
msg = _noop("An error has occurred")
logging.error(msg)
return HttpResponse(_(msg))
尽管有这些文档,我仍然不明白为什么我应该将字符串标记为可翻译的。对我而言,ugettext_noop
似乎只是一个提醒,即使如此,提醒程序员在一些字符串(在这种情况下为msg
)稍后要翻译的目的是什么?< / p>
答案 0 :(得分:4)
我有一项任务是创建事件日志并将其消息存储在数据库中。它必须支持i18n。首先,我使用ugettext_noop
函数标记了所有事件日志消息。在这种情况下,在添加到数据库之前,它们未被翻译。但与此同时,它们被添加到* .po文件中。
在此示例中,仅在从数据库中提取消息后才应使用ugettext
或ugettext_lazy
函数。