Django中ugettext_noop的目的是什么?

时间:2017-03-29 04:52:57

标签: python django internationalization translation django-i18n

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>

1 个答案:

答案 0 :(得分:4)

我有一项任务是创建事件日志并将其消息存储在数据库中。它必须支持i18n。首先,我使用ugettext_noop函数标记了所有事件日志消息。在这种情况下,在添加到数据库之前,它们未被翻译。但与此同时,它们被添加到* .po文件中。

在此示例中,仅在从数据库中提取消息后才应使用ugettextugettext_lazy函数。