Django的國際化非常好(基於gettext,LocaleMiddleware),但是翻譯模型名稱和管理頁面屬性的正確方法是什麼?我沒有在文檔中找到這事:用於管理頁面的Django國際化 - 翻譯模型名稱和屬性
- http://docs.djangoproject.com/en/dev/topics/i18n/internationalization/
- http://www.djangobook.com/en/2.0/chapter19/
我想有 「Выберитезаказдляизменения」,而不是 「Выберите爲了дляизменения」。請注意,「訂單」未翻譯。
首先,我定義了一個模型,在settings.py中激活USE_I18N = True
,運行django-admin makemessages -l ru
。模型名稱和屬性默認不創建任何條目。
Grepping在Django的源代碼,我發現:
$ ack "Select %s to change"
contrib/admin/views/main.py
70: self.title = (self.is_popup and ugettext('Select %s') % force_unicode(self.opts.verbose_name) or ugettext('Select %s to change') % force_unicode(self.opts.verbose_name))
所以verbose_name
元屬性似乎在這裏發揮一些作用。試圖使用它:
class Order(models.Model):
subject = models.CharField(max_length=150)
description = models.TextField()
class Meta:
verbose_name = _('order')
現在更新po
文件包含msgid 'order'
可以翻譯。所以我把翻譯進去了。不幸的是,運行管理頁面顯示了「Выберитеorderдляизменения」的相同組合。
我目前正在使用Django 1.1.1。 有人可以指點我的相關文件嗎?因爲谷歌不能。 ;-)在同時,我將深入Django的源代碼Django文檔中沒有提到
不好意思問,但在更新.po文件之後,是否運行了./manage.py makemessages來更新.mo文件? – 2010-05-30 13:01:38
'makemessages'只更新po文件。我認爲 你的意思是'django-admin compilemessages' - 謝謝 你的提示!我想因爲Python是一種 動態語言,翻譯文件不是 編制而成的,相反C. 不幸的是我的解決方案仍然不能正常工作 提供一個混合的翻譯(語言 混合在一個句子)。對於型號名稱,將使用項目的 LANGUAGE_CODE設置。用於剩餘消息的 語言由用戶代理('Accept-Languages')的 確定。我將 實驗與懶惰翻譯,並告訴它是否 的作品。 – geekQ 2010-05-31 16:20:10