2016-05-27 30 views
0

Django 1.9 class-based generic viewsを使用しています。例えば、CreateViewです。 「作成」ページにアクセスすると、いくつかの部分が翻訳されます(私の例ではフランス語)ので、自分の設定と配線は正しいが、フォームフィールド(ビューで自動命名)はそうではありません(つまりform.as_p )。Djangoクラスベースの汎用ビュー(CreateView)を国際化するには?

フォームフィールドを翻訳ファイルから使用するにはどうすればよいですか? (たとえば、「名前」は、すでに翻訳されているフィールドですが、form.as_pによって選択されません)。

答えは、{%trans%}タグを使用してテンプレート内のフィールドを個別に一覧表示することです。私はそれを避けることを望んでいた。

私の例はthe docsの例と似ていますので、ここでその例を繰り返します。まず、コード:

from django.views.generic.edit import CreateView 
from myapp.models import Author 

class AuthorCreate(CreateView): 
    model = Author 
    fields = ['name'] 

次に表示テンプレート:

<form action="" method="post">{% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Save" /> 
</form> 

答えて

1

Lazy Translationを見てください:

これらの関数の呼び出しがあるコードパスに配置されているとき、これが不可欠ですモジュールのロード時に実行されます。

これはmodelsformsmodel formsを定義するときDjangoはそれぞれの分野が実際にclass-level属性であることをこれらのようにを実装しているため、容易に、起こることができるものです。だから、

フォームを持っている場合、あなたは翻訳しugettext_lazyを使用することができます。

from django.db import models 
from django.utils.translation import ugettext_lazy as _ 

class MyThing(models.Model): 
    name = models.CharField(help_text=_('This is the help text')) 

あなたは自分のverbose_nameオプションを使用するなど、翻訳ForeignKeyManyToManyFieldまたはOneToOneField関係の名前をマークすることができます。

class MyThing(models.Model): 
    kind = models.ForeignKey(
     ThingKind, 
     on_delete=models.CASCADE, 
     related_name='kinds', 
     verbose_name=_('kind'), 
    ) 
+1

verbose_name works! – dfrankow

関連する問題