2010-04-14 22 views
13

Tengo un problema con las traducciones de django.problema de internacionalización y traducción de django

Problema 1 - Actualicé la cadena en el archivo django.po, pero el cambio no aparece en la página web.

Problema 2: he creado mi propio archivo de configuración regional con django-admin.py makemessages -l et, agregué la cadena de traducción al archivo, pero tampoco aparecen en la página.

No creo que esto sea un problema de configuración, porque las traducciones del archivo django.po aparecen en el sitio web, son solo los cambios y las traducciones de mi propio archivo generado que no aparecen.

Editar: Mi settings.py contiene esto:

gettext = lambda s: s 
LANGUAGE_CODE = 'et' 

LANGUAGES = (
      ('et', gettext('Estonian')), 
      ) 

mis propios archivos de localización no están en

/path/to/project/locale/et/LC_MESSAGES/ 

y los archivos son

django.mo y django.po

el archivo al que me refiero en el problema 1 es django own et transaltion, que cambiado

+0

¿Está listo el documento sobre [i18n] (http://docs.djangoproject.com/en/1.1/topics/i18n/internationalization/#topics-i18n-internationalization)? Estoy adivinando, ¿pero habilitas la etiqueta i18n en las plantillas? ¿Estás seguro de que tu archivo .po está en el camino correcto? ¿Puedes escribir más información? – diegueus9

+0

Bueno, sí. i18n está habilitado en plantillas con {% load i18n%}. Como el archivo django.po está en la ruta correcta (problema 1), no creo que sea el problema de habilitar o cargar i18n. Como dije, las traducciones existentes se cargan en la plantilla. Pero, ¿cómo sé si los archivos de configuración regional del problema 2 están en el lugar correcto? Están en el lugar donde estaban generados por django-admin.py makemessages -l et –

+0

lean esto: http://docs.djangoproject.com/en/1.1/topics/i18n/localization/#message-files the la ruta será: your_project/locale/et/LC_MESSAGES/django.po. – diegueus9

Respuesta

25

Bueno, tengo este mismo error hace unos momentos. Lo resolví eliminando la etiqueta "#, fuzzy" sobre las cadenas de traducción en mis archivos django.po. Parece que el texto traducido no se sirve si obtuvo esta etiqueta, así que asegúrese de traducir el texto y luego elimine esta línea.

Aquí es un ejemplo de un texto traducido no servidor en un archivo po:

 #: course/models.py:13 
    #, fuzzy 
    msgid "code" 
    msgstr "código" 

Por lo tanto, basta con borrar la bandera y dejarlo así:

 #: course/models.py:13 
    msgid "code" 
    msgstr "código" 

espero que este trabajo para tú. ¡Buena suerte!

Referencia: http://share-experiences.com/blog/what-fuzzy-means-python-django-gettext/

PD: Sé que tienes este tema hace unos pocos meses, pero les dejo esta respuesta debido que nunca oímos si tienes este problema resuelto.

+4

también me sacó unos pocos de mi pelo debido a esos 'fuzzies' :) –

+1

Bueno, eso no funcionó para mí. Django está trabajando de una manera misteriosa en este momento :( – shailenTJ

+0

¡Uf! Acabo de pasar media hora tratando de descubrirlo y fue este maldito difuso – 3cheesewheel

-2

Compruebe la configuración USE_I18N. More info. De todos modos, creo que por defecto es True ...

7

Los archivos de traducción (PO) se cargan en la memoria solo una vez, los cambios en los archivos PO no son recogidos por Django. Para cargar los nuevos archivos de traducción, debe reiniciar Django (por ejemplo, detener/iniciar el servidor de ejecución, Apache o NGINX).

+0

El hecho de que tengas que reiniciar el servidor django también es mi experiencia, pero es extraño que no se mencione en ninguna parte de la documentación. – qff

12

Tuve un problema similar con traducciones no aparecidas. Ajuste de los LOCALE_PATHS ha solucionado el problema:

# settings.py 
USE_I18N = True 
USE_L10N = True 

LOCALE_PATHS = (
    '/path/to/djangoapp/locale', 
) 
+0

Hmm, sí django recibió como 4 mejoras importantes desde que publiqué la pregunta. Las rutas locales son de hecho una de las soluciones al problema de las traducciones y se agregaron en django 1.4, creo. –

+2

Mejor aún, recomendaría 'os.path.join (BASE_DIR, 'locale'),'. ** Do not ** utilice rutas relativas, ya que aunque funcionan en dev, es posible que no funcionen en vivo dependiendo del servidor, etc. Lo aprendí de la manera difícil. – Wtower

0

Asegúrese de utilizar ugettext_lazy y no ugettext

0

Si está utilizando gettext.translation para obtener las traducciones, i.e:

text_de = gettext.translation('django', locale_dir, ['de'], fallback=True).ugettext('Welcome to my site') 

... y su traducción funciona en el servidor de desarrollo, pero no en la producción, cabe destacar que locale_dir debe apuntar a su directorio local. Puede estar ubicado en otro lugar en uno de los sistemas. Pasé como 2 horas encontrándolo.

1

Una razón adicional para que las traducciones de Django no funcionen es compilar el archivo .po con una versión de Python diferente a la que se usa para ejecutar la aplicación. Asegúrate de usar la misma versión.

Cuestiones relacionadas