El libro de Django 1.0

18.3. Creando archivos de idioma

Una vez que hayas etiquetado tus cadenas para su posterior traducción, necesitas escribir (u obtener) las traducciones propiamente dichas. En esta sección explicaremos como es que eso funciona.

18.3.1. Creando los archivos de mensajes

El primer paso es crear un archivo de mensajes para un nuevo idioma. Un archivo de mensajes es un archivo de texto común que representa un único idioma que contiene todas las cadenas de traducción disponibles y cómo deben ser representadas las mismas en el idioma en cuestión. Los archivos de mensajes tiene una extensión .po.

Django incluye una herramienta, bin/make-messages, que automatiza la creación y el mantenimiento de dichos archivos.

Para crear o actualizar un archivo de mensajes, ejecuta este comando:

$ bin/make-messages.py -l de

donde de es el código de idioma para el archivo de mensajes que deseas crear. El código de idioma en este caso está en formato locale. Por ejemplo, el mismo es pt_BR para portugués de Brasil y de_AT para alemán de Austria. Echa un vistazo a los códigos de idioma en el directorio django/conf/locale/ para ver cuales son los idiomas actualmente incluidos.

El script debe ser ejecutado desde una de tres ubicaciones:

  • El directorio raíz django (no una copia de trabajo de Subversion, sino el que se halla referenciado por $PYTHONPATH o que se encuentra en algún punto debajo de esa ruta.
  • El directorio raíz de tu proyecto Django
  • El directorio raíz de tu aplicación Django

El script recorre completamente el árbol en el cual es ejecutado y extrae todas las cadenas marcadas para traducción. Crea (o actualiza) un archivo de mensajes en el directorio conf/locale. En el ejemplo de, el archivo será conf/locale/de/LC_MESSAGES/django.po.

Si es ejecutado sobre el árbol de tu proyecto o tu aplicación, hará lo mismo pero la ubicación del directorio locale es locale/LANG/LC_MESSAGES (nota que no tiene un prefijo conf). La primera vez que lo ejecutes en tu árbol necesitarás crear el directorio locale.

Nota Si no tienes instaladas las utilidades gettext, make-messages.py creará archivos vacíos. Si te encuentras ante esa situación debes o instalar dichas utilidades o simplemente copiar el archivo de mensajes de inglés (conf/locale/en/LC_MESSAGES/django.po) y usar el mismo como un punto de partida; se trata simplemente de un archivo de traducción vacío.

El formato de los archivos .po es sencillo. Cada archivo .po contiene una pequeña cantidad de metadatos tales como la información de contacto de quiénes mantienen la traducción, pero el grueso del archivo es una lista de mensajes — mapeos simples entre las cadenas de traducción y las traducciones al idioma en cuestión propiamente dichas.

Por ejemplo, si tu aplicación Django contiene una cadena de traducción para el texto Welcome to my site:

_("Welcome to my site.")

entonces make-messages.py habrá creado un archivo .po que contendrá el siguiente fragmento — un mensaje:

#: path/to/python/module.py:23
msgid "Welcome to my site."
msgstr ""

Es necesaria una rápida explicación:

  • msgid es la cadena de traducción, la cual aparece en el código fuente. No la modifiques.
  • msgstr es donde colocas la traducción específica a un idioma. Su valor inicial es vacío de manera que es tu responsabilidad el cambiar esto. Asegúrate de que mantienes las comillas alrededor de tu traducción.
  • Por conveniencia, cada mensaje incluye el nombre del archivo y el número de línea desde el cual la cadena de traducción fue extraída.

Los mensajes largos son un caso especial. La primera cadena inmediatamente a continuación de msgstr (o msgid) es una cadena vacía. El contenido en si mismo se encontrará en las próximas líneas con el formato de una cadena por línea. Dichas cadenas se concatenan en forma directa. ¡No olvides los espacios al final de las cadenas; en caso contrario todas serán agrupadas sin espacios entre las mismas!.

Por ejemplo, a continuación vemos una traducción de múltiples líneas (extraída de la localización al español incluida con Django):

msgid ""
"There's been an error. It's been reported to the site administrators via e-"
"mail and should be fixed shortly. Thanks for your patience."
msgstr ""
"Ha ocurrido un error. Se ha informado a los administradores del sitio "
"mediante correo electrónico y debería arreglarse en breve. Gracias por su "
"paciencia."

Notar los espacios finales.

Nota Cuando crees un archivo .po con tu editor de texto favorito, primero edita la línea del conjunto de caracteres (busca por el texto "CHARSET") y fija su valor al del conjunto de caracteres usarás para editar el contenido. Generalmente, UTF-8 debería funcionar para la mayoría de los idiomas pero gettext debería poder manejar cualquier conjunto de caracteres.

Para reexaminar todo el código fuente y las plantillas en búsqueda de nuevas cadenas de traducción y actualizar todos los archivos de mensajes para todos los idiomas, ejecuta lo siguiente:

$ make-messages.py -a

18.3.2. Compilando archivos de mensajes

Luego de que has creado tu archivo de mensajes, y cada vez que realices cambios sobre el mismo necesitarás compilarlo a una forma más eficiente, según los usa gettext. Usa para ello la utilidad bin/compile-messages.py.

Esta herramienta recorre todos los archivos .po disponibles y crea archivos .mo, los cuales son archivos binarios optimizados para su uso por parte de gettext. En el mismo directorio desde el cual ejecutaste make-messages.py, ejecuta compile-messages.py de la siguiente manera:

$ bin/compile-messages.py

Y eso es todo. Tus traducciones están listas para ser usadas.