2009-01-21 9 views
7

Tengo un proyecto de tamaño mediano de Django, (ejecutándose en App Engine si hace alguna diferencia), y tengo todas las cadenas viviendo en archivos .po como deberían.Django falta traducción de algunas cadenas. ¿Alguna idea de por qué?

Estoy viendo un comportamiento extraño donde ciertas cadenas simplemente no se traducen. Aparecen en el archivo .po cuando ejecuto make_messages, con las ubicaciones de archivos correctas marcadas donde están mis etiquetas {% trans%}. Las traducciones están en su lugar y parecen correctas en comparación con otras cadenas a cada lado de ellas. Pero cuando visualizo la página en cuestión, aproximadamente 1/4 de las cadenas simplemente no se traducen.

Explorando en el archivo .mo generado relevante, no veo ni el msgid ni el msgstr presente.

¿Alguien ha visto algo similar a esto? ¿Alguna idea de lo que podría estar pasando?

  • etiquetas trans parecen correctas
  • archivos .po parecen correctas
  • no hay errores durante compile_messages

Respuesta

9

uf. Django, me estás matando.

Esto es lo que estaba ocurriendo:

http://blog.e-shell.org/124

Por alguna razón, sólo se sabe Django, decidió decorar algunos de mis traducciones con el comentario '# fuzzy'. Parece haber elegido cuáles marcar al azar.

De todos modos, #fuzzy significa esto: "no se traducen esto, a pesar de que aquí está la traducción:"

voy a dejar esto aquí por si algún otro pobre alma llega a través de ella en el futuro.

+0

+1 de forma predeterminada PyCharm incluye #fuzzy en la parte superior del archivo que lo desactiva. – Valchris

+0

Gracias, tuve el mismo problema, me salvaste el tiempo :-) – Tommy

10

El marcador difuso se agrega al archivo .po mediante makemessages. Cuando tiene una nueva cadena (sin traducciones), busca cadenas similares y las incluye como la traducción con el marcador difuso. Esto significa que se trata de una combinación aproximada, por lo que no se la muestre al usuario, pero podría ser un buen comienzo para el traductor humano.

No es un comportamiento Django, proviene de la instalación de gettext.

Cuestiones relacionadas