2009-07-16 12 views
11

Estoy haciendo una localización de una aplicación de Django.Hacer que el uso de administrador de Django traduzca los nombres de los campos

El sitio web front-end funciona bien y el sitio de administración de Django también selecciona el idioma seleccionado.

Pero solo aplica la configuración de idioma en algunos lugares y usa las versiones predeterminadas en inglés de los nombres de campos y columnas, aunque se hayan traducido. ¿Por qué? ¿Cómo puedo hacer que use los nombres traducidos para los nombres de columnas y campos en la interfaz de administración?

Ejemplo:

class Order(models.Model): 
    OPTIONS = ((0, _("Bank transfer")), (1, _("Cash on delivery")),) 

    user = models.ForeignKey(User, name=_("User")) 
    payment = models.IntegerField(choices=self.OPTIONS, name=_("Payment")) 

Por lo que me sale:

  1. Tradujo textos de administración estándar, tales como "Bienvenido" y "Salir" en la parte superior
  2. opciones SELECT traducidos para el pago tipo
  3. NO se han traducido nombres de columnas y etiquetas de formulario para los campos ("Usuario", "Pago")

Estoy usando Django 1.0.2. Los textos que no se están traduciendo aparecieron en los archivos de configuración regional junto con los que funcionan.

Subpregunta: ¿es posible localizar los nombres de las aplicaciones?

Respuesta

13

Resultó que era la creación de una versión traducida de nombre en lugar de verbose_name.

Esto funciona:

class Order(models.Model): 
    OPTIONS = ((0, _("Bank transfer")), (1, _("Cash on delivery")),) 

    user = models.ForeignKey(User, verbose_name=_("User")) 
    payment = models.IntegerField(choices=self.OPTIONS, verbose_name=_("Payment")) 
+0

de dónde vino el nombre de '' self' en uno mismo. OPCIONES' vienen de? ¿Esto no genera un NameError? –

+0

@ChrisWesseling No soy muy bueno en Python, pero en este caso no me refiero al módulo en sí mismo. OPTIONS se define justo arriba de "class order" ... –

+0

El primer parámetro de un método vinculado es el objeto mismo. Por convención, esto se llama self, pero 'self' no es una palabra clave mágica como' this' en JavaScript o PHP; tiene que estar explícitamente ligado. Pero podría estar equivocado. –

0

¿Quizás esté utilizando un Modelo de formulario personalizado para este modelo (en admin.py)? Necesitará agregar un valor de gettext-ed para la etiqueta de los campos que sobrescribe.

La localización de los nombres de las aplicaciones no es posible, a partir de Django 1.0 - no estoy seguro de 1.1.

7

TOMA obtuvo la respuesta correcta.

Pero Django ahora toma el primer argumento como el nombre descriptivo de un campo, except de los tipos de campo ForeignKey, ManyToManyField y OneToOneField. Así que si usted es perezoso también se puede escribir:

payment = models.IntegerField(_("Payment"), choices=self.OPTIONS) 

usted todavía tiene que utilizar un argumento de palabra clave para el ejemplo ForeignKey, sin embargo:

user = models.ForeignKey(User, verbose_name=_("User")) 
+0

¡Gracias por la actualización! –

Cuestiones relacionadas