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.