gettext()可以在函数内部工作,但在函数外部无法工作。
gettext_lazy()可以在函数内部和外部工作。
*根据翻译的示例,最好在函数外部使用gettext_lazy()
。
<gettext()>
下面是gettext()
可以工作的地方:
from django.http import HttpResponse
from django.utils.translation import gettext as _
def hello(request):
HttpResponse(_("Hello"))
<gettext_lazy()>
以下是gettext_lazy()
可以使用的地方:
from django.utils.translation import gettext_lazy as _
LANGUAGES = (
('en', _('English')),
('fr', _('French'))
)
from django.http import HttpResponse
from django.utils.translation import gettext_lazy as _
def hello(request):
HttpResponse(_("Hello"))
from django.urls import path
from . import views
from django.utils.translation import gettext_lazy as _
app_name = "my_app1"
urlpatterns = [
path(_('hello'), views.hello, name="hello"),
]
from django.db import models
from django.utils.translation import gettext_lazy as _
class Person(models.Model):
name = models.CharField(max_length=20, verbose_name=_("name"))
class Meta:
verbose_name = _('person')
verbose_name_plural = _('persons')
from django.contrib import admin
from django import forms
from .models import Person
from django.utils.translation import gettext_lazy as _
admin.site.site_title = _('My site title')
admin.site.site_header = _('My site header')
admin.site.index_title = _('My index title')
class PersonForm(forms.ModelForm):
name = forms.CharField(label=_('name'))
class Meta:
model = Person
fields = "__all__"
@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
form = PersonForm
from django.apps import AppConfig
from django.utils.translation import gettext_lazy as _
class App1Config(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'my_app1'
verbose_name = _('my app1')
_noop
,Django将无法找到需要翻译的字符串吗?为什么需要msg =“An error has occurred”;logging.error(msg); return HttpResponse(_(msg))
中的_noop
? 注:此处的_noop
指 Django 中的占位符函数_noop()
。 - WeizhongTuugettext
)导入为“_”,然后使用“import as”(例如import ugettext_noop as _noop
)导入第二个函数(例如ugettext_noop
),那么xgettext
将无法识别和提取后者。换句话说,除了你用“import as _”导入的那个之外,所有其他导入都必须通过它们的全名导入和引用。 - Eric P