2010-12-22 5 views
23

Podría explicar qué diferencia principal de ugettext y ugettext_lazy.ugettext y ugettext_lazy en Django

cuando estoy tratar de

return HttpResponse(ugettext_lazy("Hello")) 

no he visto nada, pero

return HttpResponse(ugettext("Hello")) 

está trabajando.

¿Por qué?

Gracias.

Respuesta

38

ugettext se utiliza para cargar una traducción de una cadena en este momento. ugettext_lazy devuelve un objeto que eventualmente puede convertirse en una cadena. Lo necesita si la llamada ugettext_lazy se evalúa antes de que se haya establecido la configuración regional adecuada.

ugettext_lazy se puede utilizar cuando se utiliza un objeto Unicode. Compruebe la salida HTML, que podría tener este aspecto:

<django.utils.functional...> 

y el navegador está haciendo caso omiso de todo como una etiqueta no reconocida.

usted no necesita traducción perezosa en este caso, ya que están inmediatamente utilizando la cadena. Si realmente desea continuar con ugettext_lazy por alguna razón, intente esto:

return HttpResponse(ugettext_lazy("Hello").encode('utf-8')) 

Véase el docs para más información.

+3

pienso 'ugettext_lazy' es más útil en' models.py'. – osa

+1

Así que déjame ver si te entendí. 'ugettext' es útil cuando se está dentro de un método o función (como una vista, por ejemplo), o en lugares a los que se llama después de que se hayan cargado las configuraciones & co. 'Ugettext_lazy' es más útil cuando se quiere traducir propiedades de clase y tal (como se sugiere @SergeyOrshanskiy la hora de definir un modelo o una forma) que se carga cuando se inicia el servidor y necesitan carga diferida. ¿Derecha? –

+0

@EduardLuca asa e :) Es el mismo principio que usar '' reverse_lazy'' en lugar de '' reverse''. Puede usar '' reverse_lazy'' en una vista basada en clases para definir el '' succes_url'' por ejemplo, en cuyo caso el reverso no se evaluará hasta que se necesite –