如何在Django中翻译表单?

axr492tv  于 2023-06-25  发布在  Go
关注(0)|答案(5)|浏览(97)

我想翻译一个Django表单。如何翻译字段的标签?
我尝试了field.label=ugettext_lazy(field.label),但是标签没有被填充到django.po文件中
我想我可能把ugettext_lazy的概念搞错了
简单地说,我想把字段标签放到django.po文件中。
使用ugettext{% trans %}标记完成的其他翻译工作正常
我已经能够通过设置verbose_name来转换基于模型的字段,但是当我尝试为表单字段转换时,我得到了TypeError

hs1rzwqc

hs1rzwqc1#

我将精确地说:

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

这可能会引发错误,因为表单无法很好地管理_(u 'First name')这样的代理对象,并且呈现的结果是一个空表单。我在python2.x和django 1.3/1.4上测试了这个
原因是由于编译的.po消息最初由不同的操作系统创建。和库(它可以依赖于Python,Django,OS。库版本)。出现此错误时,必须重新创建本地化消息。

qmelpv7a

qmelpv7a2#

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

gblwokeq3#

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

j2qf4p5b4#

作为替代方法,您可以将脚本添加到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>
o8x7eapl

o8x7eapl5#

你应该在forms.CharField()中使用gettext_lazy()和label,如下所示:

from django.utils.translation import gettext_lazy as _

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

相关问题