2009-07-16 57 views
11

我正在做一个Django应用程序的本地化。使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。没有得到翻译的文本确实出现在语言环境文件以及那些工作的文件中。

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

回答

13

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

如果没有在`自我`self`名。 OPTIONS来自?这不会引发NameError吗? – 2011-11-09 10:39:41

+0

@ChrisWesseling我不是很擅长Python,但在这种情况下不会自指代模块本身? OPTIONS定义在“class Order”上面...... – 2012-06-21 08:22:32

0

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

本地化应用程序名称是不可能的,从Django 1.0开始 - 对1.1的不确定。

7

托马得到正确的答案。

但Django现在将第一个参数作为字段的详细名称,exceptForeignKey,ManyToManyFieldOneToOneField字段类型作为参数。 所以,如果你是懒惰的,你也可以这样写:

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

你仍然必须使用关键字参数为ForeignKey例如,虽然:

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