首页 文章

我怎样才能翻译django模型

提问于
浏览
1

如何在不使用每个字段的 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 回答

  • 1

    我想你需要阅读this article .

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

    然后你可以运行 manage.py makemessages --locale=<locale> ,其中 <locale>language code .

    它在./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

    而已 .

  • 1

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

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

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

相关问题