Noop 用例

(u)gettext_noop 允许你将字符串标记为可翻译而无需实际翻译。

一个典型的用例是当你想为开发人员记录消息时(英文),但也希望将它显示给客户端(以所请求的语言)。你可以将变量传递给 gettext,但其内容不会被发现为可翻译字符串,因为根据定义,它是变量。

# THIS WILL NOT WORK AS EXPECTED
import logging 
from django.contrib import messages

logger = logging.getLogger(__name__)

error_message = "Oops, something went wrong!"
logger.error(error_message)
messages.error(request, _(error_message))

错误消息不会出现在 .po 文件中,你必须记住它是否存在以手动添加它。要解决此问题,你可以使用 gettext_noop

error_message = ugettext_noop("Oops, something went wrong!")
logger.error(error_message)
messages.error(request, _(error_message))

现在生成字符串 Oops, something went wrong! 将在 .po 文件中被发现并可用。对于开发人员,错误仍将以英语记录。