Django 详细名称和翻译

Nic*_*ton 2 django translation

有人可以告诉我以下方法在翻译方面是否有问题吗?

我担心冗长的名称在数据库迁移时变得固定。

模型.py

from django.utils.translation import gettext as _
class UserClient(models.Model):
    user             = models.OneToOneField(User,related_name='profile_client')
    phone_cell       = PhoneNumberField(verbose_name=_(u'Phone (Cell)'),null=True,blank=False)
    phone_home       = PhoneNumberField(verbose_name_(u'Phone (Home)'),null=True,blank=True)
Run Code Online (Sandbox Code Playgroud)

如果以上有问题,实施以下是否更好?

表格.py

class ClientForm(forms.ModelForm):
    def __init__(self,*args,**kwargs):
        super(ClientForm,self).__init__(*args,**kwargs)
        self.fields['phone_cell'].label = _(u'Phone (Cell)')
        self.fields['phone_home'].label = _(u'Phone (Home)')
Run Code Online (Sandbox Code Playgroud)

Der*_*wok 9

如果您使用 gettext 的惰性版本,则 models.py 中的方法将正常工作:

from django.utils.translation import ugettext_lazy as _

class UserClient(models.Model):
    phone_cell = PhoneNumberField(verbose_name=_('Phone (Cell)'), ...)
    ...
Run Code Online (Sandbox Code Playgroud)

事实上,Django 自己的模型使用相同的技术进行翻译 - 查看AbstractUser类。您可以确定这种方法会正常工作。

即使verbose_name存在于数据库迁移中,也未使用。任何依赖的代码verbose_name都会直接从模型中检索它。例如,ModelForm 字段的默认标签将使用模型的verbose_name,并且由于翻译是惰性的,实际标签将在评估时进行翻译(例如在模板上渲染)。

  • @NicholasHamilton 这个答案总结得很好:http://stackoverflow.com/a/4510998/189362 (2认同)