2009-07-16 59 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"))