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)