让Django管理员使用翻译的字段名称

Tom*_*rle 12 django localization admin internationalization

我正在做一个Django应用程序的本地化.

前端网站运行正常,Django管理站点也可以选择所选语言.

但它仅在某些地方应用语言设置,并使用字段和列名称的默认英语版本,即使这些已被翻译.为什么?如何让它在管理界面中使用列和字段名称的翻译名称?

例:

class Order(models.Model):
    OPTIONS = ( (0, _("Bank transfer") ), (1, _("Cash on delivery") ), )

    user = models.ForeignKey(User, name=_("User") )
    payment = models.IntegerField(choices=self.OPTIONS, name=_("Payment"))
Run Code Online (Sandbox Code Playgroud)

我得到了:

  1. 翻译标准管理文本,例如顶部的"欢迎"和"注销"
  2. 已转换的付款类型的SELECT选项
  3. 未翻译字段的列名和表单标签("用户","付款")

我正在使用Django 1.0.2.未被翻译的文本确实出现在区域设置文件中以及有效的文本中.

子问题:是否可以本地化应用程序名称?

Tom*_*rle 15

事实证明我正在为name而不是verbose_name设置翻译版本.

这有效:

class Order(models.Model):
    OPTIONS = ( (0, _("Bank transfer") ), (1, _("Cash on delivery") ), )

    user = models.ForeignKey(User, verbose_name=_("User") )
    payment = models.IntegerField(choices=self.OPTIONS, verbose_name=_("Payment"))
Run Code Online (Sandbox Code Playgroud)


Gui*_*dre 9

TomA得到了正确的答案.

但现在的Django取第一个参数字段的详细名称,除了ForeignKey,ManyToManyFieldOneToOneField字段类型.所以如果你很懒,你也可以写:

payment = models.IntegerField(_("Payment"), choices=self.OPTIONS)
Run Code Online (Sandbox Code Playgroud)

但是,您仍然必须使用关键字参数作为ForeignKey示例:

user = models.ForeignKey(User, verbose_name=_("User"))
Run Code Online (Sandbox Code Playgroud)