在Django中,如何翻译表单字段标签?

5

我正在努力提升我的网站翻译水平,我已经成功将.po/.mo文件与我的模板中的所有{% trans %}标签配合使用。但我无法弄清楚如何使我的表单良好地进行翻译。字段未显示在我的.po文件中...

app/forms.py:

from django import forms
from django.utils.translation import ugettext_lazy as trans

class ContactForm(forms.Form):
    subject = forms.CharField(required=True, label=trans(u'Subject'))
    name = forms.CharField(required=True, label=trans(u'Name'))
    email = forms.EmailField(required=True, label=trans(u'Email'))
    content = forms.CharField(required=True, widget=forms.Textarea, label=trans(u'Content'))

我不确定还需要在这里包括什么,如果还需要其他内容,请告诉我。我已经尝试运行过了。
django-admin makemessages -l lang

但它不会填充这些字段


请尝试使用 python manage.py makemessages -l 而不是 django-admin - Ivan Semochkin
2个回答

4

很遗憾,您不能使用trans作为标记需要进行翻译的字符串的别名。您必须使用函数的原始名称或_。例如:

from django.utils.translation import ugettext_lazy as _
_('Subject') # this string will be marked for translation

或者

from django.utils.translation import ugettext_lazy
ugettext_lazy('Subject') # this string will be marked for translation

编辑

Django在幕后使用xgettext进行makemessages,并具有非常特定的关键字列表,用于提取翻译:

--keyword=gettext_noop
--keyword=gettext_lazy
--keyword=ngettext_lazy:1,2
--keyword=ugettext_noop
--keyword=ugettext_lazy
--keyword=ungettext_lazy:1,2
--keyword=pgettext:1c,2
--keyword=npgettext:1c,2,3
--keyword=pgettext_lazy:1c,2
--keyword=npgettext_lazy:1c,2,3

请查看第489行及其后面的内容,链接为https://github.com/django/django/blob/1.9/django/core/management/commands/makemessages.py

1
你应该使用gettext_lazy()作为_或者作为替代,而不是tran,因为它无法正常工作,如下所示。*推荐使用_
from django.utils.translation import gettext_lazy as _

class ContactForm(forms.Form):                   # ↓ Here
    subject = forms.CharField(required=True, label=_('Subject'))
    ...

或者:

from django.utils.translation import gettext_lazy

class ContactForm(forms.Form):                   # ↓ ↓ Here ↓ ↓
    subject = forms.CharField(required=True, label=gettext_lazy('Subject'))
    ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接