1

如何verbose_name在每个字段上不使用参数的情况下翻译 django 模型?发生通过寻找添加新字段并verbose_name通过字段名称自动为其提供参数的中间类继承所有模型的练习?还是将翻译整合到表格中的最佳实践?也许我应该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 有自己的解决方案?

4

2 回答 2

2

我认为你需要阅读这篇文章

要本地化您的应用程序,您需要将每个 eglish 字符串包装到函数 ugettext 的参数中,例如'foo'-> ugettext('foo')

然后就可以运行了manage.py makemessages --locale=<locale>,哪里<locale>语言代码

它在 ./locale/language_code/*.po 内创建一个文件,您需要将此文件中的字符串翻译成您的语言,例如

#: env_website/lib/python2.6/site-packages/Django-1.3.1-py2.6.egg/django  /conf/global_settings.py:44
msgid "Arabic"
msgstr "Арабский"

之后,您需要运行命令manage.py compilemessages

而已。

于 2012-12-06T08:41:54.100 回答
1

您可以覆盖模型的add_to_class类方法。每个添加的字段都会调用它。

如果未提供属性名称,请查看字段中的contribute_to_class如何从属性名称中设置。verbose_name

但是,我不推荐这种方法,因为gettext无法为该字段创建翻译目录。

于 2012-12-06T15:12:11.517 回答