2016-11-25 5 views
0

Djangoプロジェクトでは、モジュールのugettextを使用して文字列を翻訳します。たとえば、私はmodels.pyの文字列を翻訳します。ジャンゴクリスピーフォーム:いいえi18n?

翻訳は完全に機能しますが、クリスピーフォームでは機能しません。それはなぜですか、どうすればこの問題を解決できますか?

models.py

ビューで
from django.utils.translation import ugettext as _ 

class CustomerUser(models.Model): 
    LANGUAGE_CHOICES = (
     ('en', _('English')), 
     ('de', _('German')), 
    ) 

    name = models.CharField(null=False, blank=False, max_length=50) 
    user = models.ForeignKey(User, blank=True, null=True) 
    email = models.EmailField(blank=True, null=True) 
    language = models.CharField(choices=LANGUAGE_CHOICES, default='en', max_length=2) 
    customer = models.ForeignKey(Customer) 
    changed_password = models.BooleanField(default=False) 

    def __unicode__(self): 
     return self.name 

、私は次の操作を行います

from django.utils import translation 

translation.activate('de') 

が、クリスピーフォームが翻訳されていません。 languageのオプションは、 "Deutsch"の代わりに "German"と表示されます。

答えて

1

ugettext_lazyをお試しください。

c.f.この定義のコードのみ(ほとんどDjangoの起動時に)一度だけ実行されますので、あなたがugettext_lazy使用する必要がありますフォームやモデルのような定義において、This great answer on "When should I use ugettext_lazy?"

。 ugettext_lazyは、文字列を怠惰な方法で変換します。モデルの属性の名前にアクセスするたびに、文字列が新たに翻訳されます。これは、djangoが開始されてから異なる言語でこのモデルを見ている可能性があるため、完全に意味があります。

c.f.また、crispy_forms test suite

+0

ありがとう、それは助け! – Daniel

+0

優秀! –