2010-04-22 22 views
10

tengo formas que desea mostrar en diferentes idiomas: He utilizado el parámetro de etiqueta para establecer un parámetro, y se utiliza ugettext() en las etiquetas:forma Django y i18n

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

Pero cuando estoy renderizado el formulario en mi plantilla, usando

{{form.as_p}} 

Las etiquetas no están traducidas. ¿Alguien tiene una solución para este problema?

Respuesta

19

Debe utilizar ugettext_lazy():

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.')) 

del modelo y de forma atributos se inicializa cuando se inicia la aplicación de Django. Si usa ugettext(), la traducción se establecerá una vez en la inicialización y nunca cambiará. ugettext_lazy() resuelve este problema traduciendo la cadena cuando se accede a su valor en lugar de cuando se llama a la función.

+0

Impresionante. ¡Gracias! – dfrankow

+0

Aparentemente, el aspecto más importante es que ugettext_lazy tiene el contexto del usuario/sesión conectado. – BastiBen