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

时间:2009-07-16 22:50:06

标签: django localization internationalization admin

我正在进行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"))

我得到了:

  1. 翻译标准管理文字,例如顶部的“欢迎”和“退出”
  2. 付款类型的翻译SELECT选项
  3. 未翻译字段的列名和表单标签(“用户”,“付款”)
  4. 我正在使用Django 1.0.2。未被翻译的文本确实出现在区域设置文件中以及有效的文本中。

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

3 个答案:

答案 0 :(得分:15)

原来我设置的是名称的翻译版本,而不是 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"))

答案 1 :(得分:8)

TomA得到了正确答案。

但Django现在将第一个参数作为字段的详细名称except作为ForeignKeyManyToManyFieldOneToOneField字段类型。 所以如果你很懒,你也可以写:

payment = models.IntegerField(_("Payment"), choices=self.OPTIONS)

但仍需要为ForeignKey示例使用关键字参数:

user = models.ForeignKey(User, verbose_name=_("User"))

答案 2 :(得分:0)

您是否正在为此模型使用自定义ModelForm(在admin.py中)?您需要为您覆盖的字段的标签添加gettext-ed值。

从Django 1.0开始,无法本地化应用程序名称 - 不确定1.1。