2009年8月16日日曜日

DjangoのLazy translationのメモ

Djangoは多言語化用のモジュールが充実しているので、わりと気軽に多言語サイトを構築できます。

これまで何も考えずに、とりあえず ugettext() を使用してきましたが、formでそれを使った場合に上手い具合に言語の切り替えができなくてハマりました。

from django.utils.translation import ugettext as _

class BookForm(forms.Form):
status = forms.ChoiceField(widget=forms.RadioSelect, choices=(
(1, _(u'already read')),
(2, _(u'want to read')),
(3, _(u'reading now')),
))

※ Django 1.0で確認しています。

上記のように記述して、ブラウザの言語設定を変更しても上手く反映されません。

マニュアルをざっと読んだ所、どうやら ugettext_lazy() というのが使えそう。
from django.utils.translation import ugettext_lazy as _

ugettext を ugettext_lazyに変えただけで期待どおりの動きをするようになりました。


マニュアル
にはModelの使用例のみが書いてありますが、formでもそのように書く必要があるようです。

from django.utils.translation import ugettext_lazy as _

class MyThing(models.Model):
name = models.CharField(_('name'), help_text=_('This is the help text'))
class Meta:
verbose_name = _('my thing')
verbose_name_plural = _('mythings')



細かいメカニズムなどは時間がある時に調べてみようと思います。

0 件のコメント: