如何在Django中翻译表单?

7
我想翻译一个Django表单。如何翻译字段的标签?
我尝试了field.label=ugettext_lazy(field.label),但是标签没有出现在django.po文件中。
可能是我对ugettext_lazy的概念理解有误。
简单来说,我希望将字段标签放入django.po文件中。
使用ugettext{% trans %}标签进行的其他翻译工作得到了很好的结果。
我已经能够根据模型设置verbose_name来翻译字段,但是当我尝试对表单字段进行相同操作时,出现了TypeError错误。
5个回答

11

我想澄清一下:

from django.utils.translation import ugettext_lazy as _
...
first_name = forms.CharField(label=_(u'First name'))

由于表单无法很好地处理代理对象,比如_(u'First name'),所以可能会导致错误,结果呈现为空表单。 我在Python 2.x和Django 1.3/1.4上进行了测试。

原因是由不同操作系统和库最初创建的编译的.po消息引起的(这可能取决于Python、Django、os.库版本)。 当出现此错误时,您必须重新创建本地化消息。


8
class ExampleForm(forms.Form):
    f1 = forms.CharField(label= ugettext_lazy('field label'))

8
from django.utils.translation import ugettext_lazy as _
first_name = forms.CharField(label=_(u'First name'))

0
你应该按照下面的示例在forms.CharField()中使用gettext_lazy()label
from django.utils.translation import gettext_lazy as _

first_name = forms.CharField(label=_('First name'))

0
作为另一种选择,您可以向您的 template.html 中添加脚本。
<script>
        labels = document.getElementsByTagName('label');
        for (var j = 0; j < labels.length; j++) {   
             if (labels[j].textContent == "Username:") labels[j].textContent =    "Логін   ";
             if (labels[j].textContent == "First name:") labels[j].textContent =  "Ім'я    ";
             if (labels[j].textContent == "Last name:") labels[j].textContent =   "Прізвище";
             if (labels[j].textContent == "Email address:") labels[j].textContent =   "Email адреса ";
             if (labels[j].textContent == "Password:") labels[j].textContent =        "Пароль            ";
             if (labels[j].textContent == "Confirm password:") labels[j].textContent =        "Підтвердити пароль";
             };
</script>

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