【问题标题】:Make Django admin use translated field names让 Django 管理员使用翻译后的字段名称
【发布时间】:2010-11-11 13:28:10
【问题描述】:

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

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

【问题讨论】:

    标签: django localization internationalization admin


    【解决方案1】:

    原来我是在为 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"))
    

    【讨论】:

    • self.OPTIONS 中的self 名称从何而来?这不会引发 NameError 吗?
    • @ChrisWesseling 我对 Python 不是很擅长,但在这种情况下不会自我引用模块本身吗? OPTIONS 定义在 "class Order" 的正上方...
    • 绑定方法的第一个参数是对象本身。按照惯例,这被命名为 self,但 self 不是像 this 在 JavaScript 或 PHP 中那样的神奇关键字;它必须明确绑定。但我可能是错的。
    【解决方案2】:

    TomA 得到了正确的答案。

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-01-02
        • 1970-01-01
        • 1970-01-01
        • 2013-12-27
        • 1970-01-01
        • 2012-05-06
        • 1970-01-01
        • 1970-01-01
        • 2012-01-09
        相关资源
        最近更新 更多