2010-04-22 21 views
10

Ich habe Formen, die ich in verschiedenen Sprachen angezeigt werden soll: Ich verwendete die Bezeichnung Parameter einen Parameter zu setzen, und verwendet ugettext() auf den Etiketten:Django Form und i18n

agreed_tos = forms.BooleanField(label=ugettext('I agree to the terms of service and to the privacy policy.')) 

Aber wenn ich Rendering das Formular in meiner Vorlage mit

{{form.as_p}} 

Die Etiketten sind nicht übersetzt. Hat jemand eine Lösung für dieses Problem?

Antwort

19

sollten Sie ugettext_lazy() verwenden:

from django.utils.translation import ugettext_lazy 

# ... 
    agreed_tos = forms.BooleanField(label=ugettext_lazy('I agree to the terms of service and to the privacy policy.')) 

Modell und Form Attribute initialisiert werden, wenn Ihr beginnt Django-Anwendung. Wenn Sie ugettext() verwenden, wird die Übersetzung einmalig bei der Initialisierung festgelegt und ändert sich nie. ugettext_lazy() löst dieses Problem, indem die Zeichenfolge beim Zugriff auf den Wert und nicht beim Aufruf der Funktion übersetzt wird.

+0

Ehrfürchtig. Vielen Dank! – dfrankow

+0

Anscheinend ist das wichtige Bit, dass ugettext_lazy den Kontext des angemeldeten Benutzers/der Sitzung hat. – BastiBen