如何在不使用每个字段的 verbose_name
参数的情况下翻译django模型?是否通过中间类继承所有模型,寻找添加新字段并按字段名称自动提供arg verbose_name
?或者是将翻译整合到表单中的最佳实践?也许我应该在create上提供每个模型 verbose_name
属性?
我不想这样做:
class Currency(models.Model):
name=models.CharField(max_length=32, verbose_name=_("name"))
symbol=models.CharField(max_length=32, verbose_name=_("symbol"))
iso_4217=models.CharField(max_length=3)
def __unicode__(self):
return self.name
class Meta:
verbose_name=_(u'currency')
verbose_name_plural=_(u'currencies')
我想做这样的事情:
class BaseModel(models.Model):
__setattr__(self, name, value):
''' Some needles parts of method was cutted out to make it easily
'''
value.verbose_name=_(name)
value.verbose_name_plural=_("%ss" % name)
self.super(BaseModel, name, value)
class Currency(models.Model):
''' Every field of this class whould be supplied by verbose_name and verbose_name_plural
'''
name=models.CharField(max_length=32)
symbol=models.CharField(max_length=32)
iso_4217=models.CharField(max_length=3)
也许django有自己的解决方案?
2 回答
我想你需要阅读this article .
要本地化您的应用程序,您需要将每个eglish字符串包装到函数ugettext的参数中,例如
'foo'
- >ugettext('foo')
.然后你可以运行
manage.py makemessages --locale=<locale>
,其中<locale>
是language code .它在./locale/language_code/*.po中生成一个文件,您需要将此文件中的字符串翻译成您的语言,例如
之后你需要运行命令
manage.py compilemessages
而已 .
您可以覆盖Model的add_to_class类方法 . 每个添加的字段都会调用它 .
如果未提供,请查看字段中contribute_to_class如何从属性名称设置
verbose_name
.但是,我不推荐这种方法,因为
gettext
无法为此字段创建翻译目录 .