Djangoの国際化は非常に優れています(gettextベース、LocaleMiddleware)が、管理ページのモデル名と属性を変換する適切な方法は何ですか?ドキュメントでこれについて何も見つかりませんでした:
「Выберитеorderдляизменения」の代わりに「Выберитезаказдляизменения」をお願いします。 'order'は翻訳されないことに注意してください。
まず、モデルを定義し、settings.pyでUSE_I18N = True
をアクティブにして、Django-admin makemessages -l ru
を実行しました。モデル名と属性のエントリはデフォルトでは作成されません。
私が見つけたDjangoソースコードをgrepしている:
$ 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дляизменения」の同じ組み合わせが表示されます。
私は現在Django1.1.1を使用しています。誰かが私に関連するドキュメントを教えてもらえますか?グーグルはできないので。 ;-)それまでの間、Djangoソースコードについて詳しく説明します。
Djangoドキュメントに記載されていない重要なこと:
Django-admin compilemessages
_を実行します。例:ビルドプロセスの一部として。 stevejalimに感謝します!ugettext_lazy()
をモデル名に適用します(Meta
クラスと_verbose_name
_)verbose_name
_)の名前は、ugettext_lazy()
で変換することもできます。上記の原則を使用した例:
_from Django.utils.translation import ugettext_lazy as _
class Order(models.Model):
subject = models.CharField(max_length=150, verbose_name = _('Order|subject'))
description = models.TextField( verbose_name = _('Order|description'))
class Meta:
verbose_name = _('order')
verbose_name_plural = _('orders')
_
または、モデルと管理ページを翻訳するためのより良い方法はありますか?
いずれにせよ、Djangoドキュメントを強化し、ギャップを埋める必要があります!