El libro de Django 1.0

18.6. Usando traducciones en tus propios proyectos

Django busca traducciones siguiendo el siguiendo algoritmo:

  • Primero, busca un directorio locale en el directorio de la aplicación correspondiente a la vista que se está llamando. Si encuentra una traducción para el idioma seleccionado, la misma será instalada.
  • A continuación, busca un directorio locale en el directorio del proyecto. Si encuentra una traducción, la misma será instalada.
  • Finalmente, verifica la traducción base en django/conf/locale.

De esta forma, puedes escribir aplicaciones que incluyan su propias traducciones, y puedes reemplazar traducciones base colocando las tuyas propias en la ruta de tu proyecto. O puedes simplemente construir un proyecto grande a partir de varias aplicaciones y poner todas las traducciones en un gran archivo de mensajes. Es tu elección.

Nota Si estás fijando manualmente la variables de configuración, el directorio locale en el directorio del proyecto no será examinado dado que Django pierde la capacidad de deducir la ubicación del directorio del proyecto. (Django normalmente usa la ubicación del archivo de configuración para determinar esto, y en el caso que estés fijando manualmente tus variables de configuración dicho archivo no existe).

Todos los repositorios de archivos de mensajes están estructurados de la misma forma:

  • $APPPATH/locale/<language>/LC_MESSAGES/django.(po|mo)
  • $PROJECTPATH/locale/<language>/LC_MESSAGES/django.(po|mo)
  • Todas las rutas listandas en LOCALE_PATHS en tu archivo de configuración son examinadas en ese orden en búsquda de <language>/LC_MESSAGES/django.(po|mo)
  • $PYTHONPATH/django/conf/locale/<language>/LC_MESSAGES/django.(po|mo)

Para crear archivos de mensajes, usas la misma herramienta make-messages.py que usabas con los archivos de mensajes de Django. Solo necesitas estar en la ubicación adecuada — en el directorio en el cual exista ya sea el directorio conf/locale (en el caso del árbol de código fuente) o el directorio locale/ (en el caso de mensajes de aplicación o de proyecto). Usas también la misma herramienta compile-messages.py para producir los archivos binarios django.mo usados por gettext.

Los archivos de mensajes de aplicaciones son un poquito complicados a la hora de buscar por los mismos — necesitas el LocaleMiddleware. Si no usas el middleware, solo serán procesados los archivos de mensajes de Django y del proyecto.

Finalmente, debes dedicarle tiempo al diseño de la estructura de tus archivos de traducción. Si tus aplicaciones necesitan ser enviadas a otros usuarios y serán usadas en otros proyectos, posiblemente quieras usar traducciones específicas a dichas aplicaciones. Pero el usar traducciones específicas a aplicaciones y aplicaciones en proyectos podrían producir problemas extraños con make-messages.py. make-messages recorrerá todos los directorios situados por debajo de la ruta actual y de esa forma podría colocar en el archivo de mensajes del proyecto identificadores de mensajes que ya se encuentran en los archivos de mensajes de la aplicación.

la salida más fácil de este problema es almacenar las aplicaciones que no son partes del proyecto (y por ende poseen sus propias traducciones) fuera del árbol del proyecto. De esa forma make-messages.py ejecutado a nivel proyecto sólo traducirá cadenas que están conectadas a tu proyecto y no cadenas que son distribuidas en forma independiente.