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。未翻译的文本确实与有效的文本一起出现在语言环境文件中。

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

4

3 回答 3

20

原来我正在为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"))
于 2009-07-16T23:18:04.317 回答
9

TomA 得到了正确的答案。

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

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

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

user = models.ForeignKey(User, verbose_name=_("User"))
于 2011-07-27T15:41:11.243 回答
0

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

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

于 2009-07-16T22:58:13.420 回答