Múltiples idiomas en Django

imagen / Romina Santos
  
2 de Octubre de 2014   1  

Muchos de los proyectos que realizamos tienen como requerimiento que esté disponible en múltiples idiomas. En este tutorial te presentamos como realizar las configuraciones necesarias en tu(s) proyecto(s) actual(es) o futuros para activar las traducciones.

 

Desde la versión de Django 1.4 la internacionalización está activa por defecto, y solo se requieren unas pocas líneas de configuración para tenerlas listas.

El objetivo es guiarte inicialmente a configurar tu proyecto con múltiples idiomas.

Configuración en el archivo settings.py

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

USE_I18N = True
USE_L10N = True

# Agregamos los idiomas
LANGUAGE_CODE = 'es'

from django.utils.translation import ugettext_lazy as _
LANGUAGES = (
    ('en', _('English')),
    ('es', _('Spanish')),
)

# Definimos la ruta de los archivos de idiomas
LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

MIDDLEWARE_CLASSES = (
    # ...
    'django.middleware.locale.LocaleMiddleware',
    # ...
)

# Definimos el procesador de contexto para i18n
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP
TEMPLATE_CONTEXT_PROCESSORS = TCP + (
    "django.core.context_processors.i18n",
    "django.core.context_processors.request",
)

Luego creamos en la raíz de nuestro proyecto el directorio para los archivos de idiomas con el nombre:

/locale

Cuando tengamos lista la configuración anterior, podemos generar nuestros archivos de idiomas django.po, en mi caso los generaré para el idioma español:

python django-admin makemessages --locale es

El comando anterior generará los archivos en la ruta: /locale/es/LC_MESSAGES/django.po

Seguidamente podemos añadir las traducciones, por ejemplo:

#: .\templates\home\home.html:3
msgid "Welcome to Pythonizame"
msgstr "Bienvenido a Pythonizame"

Una vez que tengamos nuestras traducciones, debemos compilarlos para generar el archivo django.mo, usamos el siguiente comando:

python django-admin compilemessages

El comando anterior generará los archivos en la ruta: /locale/es/LC_MESSAGES/django.mo

Nota: Este comando lo debemos ejecutar cada vez que modifiquemos el archivo django.po

Para que se muestren las traducciones podemos hacerlo de la siguiente manera:

En nuestros templates (*.html):

{% load i18n %}

{% trans "Welcome to Pythonizame" %}

En nuestros views (*.py):

from django.utils.translation import ugettext_lazy as _

...
context['text'] = _("Welcome to Pythonizame");
...

Podemos agregar en nuestro template un selector de idiomas, para esto agregaré en mi archivo base.html o layout.html el siguiente código:

https://docs.djangoproject.com/en/1.7/topics/i18n/translation/#django.views.i18n.set_language

Django Translations

Podemos mostrar el idioma actual en nuestros archivos html:

{{ LANGUAGE_CODE }}

Si los pasos anteriores se han completado correctamente ya deberías tener funcionando el sistema de traducciones que nos brinda Django.

Esperamos que te sea de mucha utilidad. No olvides enviarnos tus comentarios y compartir con tus amigos.



Alex Dzul

FullStack Python / Django Developer. #jslove

Temas relacionados