Cómo crear archivos de idioma¶
Fuentes
Es posible hacerlo de dos maneras diferentes.
Desde la raíz del proyecto Django, donde esta manage.py
o desde la raíz de la app
.
Desde la raíz del proyecto
Hay que editar settings.py
para decirle los módulos que tendrán traducciones.
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'apps/home/locale/'),
)
Requiere crear el directorio locale
manualmente?
Después, ejecutar
./manage.py makemessages -l es
Donde es
es el identificador de lenguaje, aqui una lista
Desde la raíz de la app
Aquí no es necesario añadir LOCALE_PATHS
a settings.py
, y en vez de usar manage.py
, se
usa django-admin.py
, además el directorio locale se ha de crear a mano.
cd myapp
mkdir locale
django-admin.py makemessages -l es
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 locale
.
En el ejemplo es
, el archivo será locale/de/LC_MESSAGES/django.po
.
Dentro de los archivos .po
, se va algo así.
#: views.py:6
msgid "name"
msgstr "nombre"
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.
#...
from django.utils.translation import gettext as _
def index(request):
var_name = _('name')
#...
el valor de var_name
sera nombre
Después, hay que compilarlo con compilemessages
, y se aplica lo mismo que antes, cuando se hizo
desde la raiz del proyecto Django o desde la raíz de la aplicación.
# desde la raíz del proyecto
./manage.py compilemessages
# desde la raíz de la aplicacion
django-admin.py compilemessages
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:
./manage.py/django-admin.py makemessages -a
Algunas notas
Para configurar una preferencia de idioma a nivel de la instalación, fija LANGUAGE_CODE
en tu archivo
de configuración. Django usará este idioma como la traducción por omisión – la opción a seleccionarse
en último término si ningún otro traductor encuentra una traducción.
Si deseas permitir que cada usuario individual especifique el idioma que ella o él prefiere, usa
LocaleMiddleware
. LocaleMiddleware
permite la selección del idioma basado en datos incluidos
en la petición. Personaliza el contenido para cada usuario.
Para usar LocaleMiddleware
, agrega django.middleware.locale.LocaleMiddleware
a tu
variable de configuración MIDDLEWARE_CLASSES
. Debido a que el orden de los middlewares es relevante, deberías seguir las siguientes guías:
Asegúrate de que se encuentre entre las primeras clases middleware instaladas.
Debe estar ubicado después de SessionMiddleware, esto es debido a que LocaleMiddleware usa datos de la sesión.
Si usas CacheMiddleware, coloca LocaleMiddleware después de este (de otra forma los usuarios podrían recibir contenido cacheado del locale equivocado).
LocaleMiddleware
intenta determinar la preferencia de idioma del usuario siguiendo el siguiente
algoritmo:
Primero, busca una clave
django_language
en la sesión del usuario actual.Se eso falla, busca una cookie llamada
django_language
.Si eso falla, busca la cabecera HTTP
Accept-Language
. Esta cabecera es enviada por tu nave- gador y le indica al servidor qué idioma(s) prefieres en orden de prioridad. Django intenta con cada idioma que aparezca en dicha cabecera hasta que encuentra uno para el que haya disponible una traducción.Si eso falla, usa la variable de configuración global
LANGUAGE_CODE
.