使Django管理界面使用翻译后的字段名

15

我正在对一个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. 为什么字段(“用户”、“支付”)的列名称和表单标签没有被翻译

我使用的是Django 1.0.2版本。那些没有被翻译的文本已经在区域设置文件中出现,并且与正常工作的文本一起。

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

3个回答

20

事实证明,我设置的是verbose_name的翻译版本,而不是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"))

self.OPTIONS 中的 self 名称从哪里来?这不会引发 NameError 吗? - Chris Wesseling
@ChrisWesseling 我不太擅长Python,但在这种情况下,self是指模块本身吗? OPTIONS 在“class Order”上面定义了。 - Tomas Andrle
绑定方法的第一个参数是对象本身。按照惯例,它被命名为self,但是self不像JavaScript或PHP中的this一样是魔法关键字;它必须显式地绑定。但我可能是错的。 - Chris Wesseling

9

TomA得到了正确的答案。

但是Django现在把第一个参数作为字段的详细名称,除了 ForeignKeyManyToManyFieldOneToOneField 字段类型。 所以如果你懒得写,也可以这样:

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

然而,对于ForeignKey示例,您仍需要使用关键字参数:

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

0

你可能正在使用自定义的 ModelForm(在 admin.py 中)来处理该模型吗?您需要为覆盖字段的标签添加gettext-ed值。

截至Django 1.0,无法本地化应用程序名称——不确定1.1是否可行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接