Djangoの`gettext_noop()`関数:翻訳対象としてマークする方法


この関数は、以下の状況で使用されます。

from django.utils.translation import gettext_noop

ERROR_MESSAGE = gettext_noop("An error has occurred.")

def view(request):
    if some_condition:
        message = ERROR_MESSAGE
        # 後で翻訳
    return HttpResponse(message)

gettext_noop() 関数の利点

gettext_noop() 関数を使用する利点は次のとおりです。

gettext_noop() 関数の注意点

gettext_noop() 関数を使用する際には、以下の点に注意する必要があります。



from django.utils.translation import gettext_noop

def get_greeting(user):
    language = user.get_profile().language
    greeting = gettext_noop("Hello, %s!") % user.get_full_name()
    return translate(greeting, language)

def view(request):
    user = request.user
    greeting = get_greeting(user)
    return HttpResponse(greeting)
from django.utils.translation import gettext_noop

def send_email(user, message):
    subject = gettext_noop("Welcome to our site, %s!") % user.get_full_name()
    body = gettext_noop("We are happy to have you as a member!")
    email = EmailMessage(subject, body, from_email="[email protected]", to=[user.email])
    email.send()

def view(request):
    user = request.user
    send_email(user)
    return HttpResponse("Email sent.")
from django.utils.translation import gettext_noop

ERROR_MESSAGE = gettext_noop("An error has occurred.")

def view(request):
    if some_condition:
        message = ERROR_MESSAGE
        # 後で翻訳
    return HttpResponse(message)


これらの欠点を回避するために、gettext_noop() 関数の代替方法を使用することができます。

代替方法 1: lazy() 関数

from django.utils.translation import lazy

ERROR_MESSAGE = lazy(gettext_noop("An error has occurred."))

def view(request):
    if some_condition:
        message = ERROR_MESSAGE()
        # 後で翻訳
    return HttpResponse(message)

代替方法 2: ugettext_lazy() 関数

from django.utils.translation import ugettext_lazy

ERROR_MESSAGE = ugettext_lazy("An error has occurred.")

def view(request):
    if some_condition:
        message = ERROR_MESSAGE
        # 後で翻訳
    return HttpResponse(message)
ERROR_MESSAGE = _("An error has occurred.")

def view(request):
    if some_condition:
        message = ERROR_MESSAGE
        # 後で翻訳
    return HttpResponse(message)