Django 中 ugettext_noop 的目的是什么?

nal*_*zok 2 python django translation internationalization django-i18n

正如本节中提到的翻译 | Django 文档中,函数ugettext_noop是一个用于国际化的实用函数:

ugettext_noop(消息)

标记要翻译的字符串,但现在不翻译它们。这可用于将字符串存储在应保留在基本语言中的全局变量中(因为它们可能在外部使用)并且稍后将被翻译。

此外,此答案提供了其用法示例:

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))
Run Code Online (Sandbox Code Playgroud)

尽管有这些文档,我仍然不明白为什么要将字符串标记为可提取以进行翻译。对我来说,这似乎ugettext_noop只是一个提醒,即便如此,提醒程序员一些字符串(msg在这种情况下)稍后将被翻译的目的是什么?

小智 7

一旦我有一个任务来制作事件日志并将其消息存储在数据库中。它必须支持 i18n。所以首先我用ugettext_noop函数标记了所有事件日志消息。在这种情况下,它们在添加到数据库之前没有被翻译。但同时它们被添加到 *.po 文件中。

在这个例子中ugettextugettext_lazy函数应该只在从数据库中提取消息后使用。