Internacionalización en Django

Por user Jean Carlos Mariños Urquiaga
Internacionalización en Django

En este artículo aprenderás a colocar internacionalización en tus páginas estáticas.

Hola amigos en este artículo, aprenderás a utilizar internacionalización en tu sistema web con la finalidad que una persona elija el idioma a traducir y de esta manera llegar a más público, para ello veamos algunos conceptos:

¿Qué es internacionalización?

Internacionalización se refiere al proceso de diseño de programas para el uso potencial de cualquier *locale* , con la finalidad de ser traducidas según el usuario se sienta más cómodo de interactuar con ella. Asimismo se puede encontrar como "IN18".

Nota:

Definase "locale" como un conjunto de parámetros que define el idioma, país y cualquier otra preferencia especial que el usuario desee ver en su interfaz de usuario.

Localización se refiere al proceso específico de traducir un programa internacionalizado para su uso en un *locale* particular. Asimismo se puede encontrar como L10N.

Nota:

Para mayor información visita a la documentación de django: http://www.djangobook.com/en/2.0/chapter19.html

Bueno antes de empezar con un pequeño ejemplo, activamos nuestro entorno virtual:

(mi_entorno) ~/Escritorio $

Y dentro de ella creamos nuestro proyecto en django en el directorio Escritorio:

(mi_entorno) ~/Escritorio $ django-admin.py startproject Internacionalizacion

Asimismo creamos nuestra app:

(mi_entorno) ~/Escritorio/Internacionalizacion $ django-admin.py startapp principal

SETTINGS

Luego de ello, configuramos nuestro archivo settings.py, con los siguientes variables :

Instalamos 'django.middleware.locale.LocaleMiddleware' en nuestro entorno MIDDLEWARE_CLASSES. Para ello tenemos que seguir las siguientes pautas:

- Debe ser estar entre las primeras middleware instaladas.

- Debe ir despues de SessionMiddleware, porque LocaleMiddleware hace uso de los datos de sesión.

- Si se utiliza CacheMiddleware, poner LocaleMiddleware después de ella.

MIDDLEWARE_CLASSES = (
 'django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

Especificamos las siguientes variables y el conjunto de traducciones.

LANGUAGE_CODE = 'es'
_ = lambda s: s

LANGUAGES = (
 ('es', _('Espanish')),
 ('zh', _('Chinese')),
 ('en', _('English')),
)

También verificamos que estas variables esten con el valor True para hacer uso de la internacionalización :

USE_I18N = True

USE_L10N = True

USE_TZ = True

Asimismo colocamos la variable LOCALE_PATHS y defenimos la ruta de la carpeta "locale", el cual contendrá las carpetas de cada idioma a traducir.

LOCALE_PATHS = (
 os.path.join(BASE_DIR, "locale"),
)

Y finalmente en nuestro settings definimos el procesador de contexto del i18n:

from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ('django.core.context_processors.i18n',)

Nota:

Cabe recalcar que la  "carpeta locale" se debe crear y debe estar al mismo nivel del manage.py

URLS

Definimos nuestra url de inicio el cual vamos a aplicar internacionalización, asi mismo definimos una url del i18n que viene por defecto en django:

from django.conf.urls import patterns, include, url
from django.contrib import admin
from principal.views import Inicio
admin.autodiscover()

urlpatterns = patterns('',
 url(r'^i18n/', include('django.conf.urls.i18n')),
 url(r'^admin/', include(admin.site.urls)),
 url(r'^$',Inicio.as_view()),
)

VIEWS

Definimos nuestra VBC llamado "Inicio".

from django.views.generic import TemplateView

class Inicio(TemplateView):
template_name = 'inicio.html'

TEMPLATES

Creamos nuestro archivo inicio.html y en el inicio de cada template donde se realizara traducciones cargamos "i18n"; luego, definiremos un select el cual nos permitirá seleccionar un idioma. Asimismo, definimos mediante la siguiente linea los mensajes que queramos traducir {% trans mensaje %}, aqui el template inicio.html realizará la traducción del contenido de las etiquetas h1 y p.

{% load i18n %}



 
 Pagina de Inicio


 {% csrf_token %}
 
 
 
 

{% trans "Bienvenido a nuestro sitio" %}

{% trans "Hola amigos, este es un interesante sitio" %}

SHELL

Una vez creado nuestro pequeño ejemplo, pasaremos a crear nuestra carpeta de cada idioma. para ello en nuestra shell colocamos:

(mi_entorno) ~/Escritorio/Internacionalizacion $ django-admin.py makemessages -l zh

Este comando nos creara una carpeta llamado zh el cual contendra una carpeta LC_MESSAGES y en ella tendremos el archivo llamado django.po. Aqui encontraremos las palabras que vamos a traducir abrimos este archivo y nos mostrará algo parecido como este:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-05-07 13:05-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: ejemplo1/settings.py:81
msgid "Espanish"
msgstr ""

#: ejemplo1/settings.py:82
msgid "Chinese"
msgstr ""

#: ejemplo1/settings.py:83
msgid "English"
msgstr ""

#: templates/inicio.html:20
msgid "Bienvenido a nuestro sitio"
msgstr ""

#: templates/inicio.html:23
msgid "Hola amigos, este es un interesante sitio"
msgstr ""

Aquí encontramos dos variables de las cuales cada una cumple una función:

msgid : Contiene la cadena de traducción, la cual aparece en el código fuente.

msgstr : Contiene la traducción específica a un idioma.

Ademas cada mensaje de traducción nos muestra el nombre del archivo y el número de línea desde el cual la cadena de traducción fue extraída.

Luego de realizar la traducción en chino, también debemos de seguir los pasos para la traducción en inglés.Y una vez completado los archivos django.po de cada carpeta de idiomas, compilamos los mensajes para que estén disponibles. Cada compilación tiene que llevar aparejada un reinicio del servidor web.

(mi_entorno) ~/Escritorio/Internacionalizacion $ django-admin.py compilemessages

Y bueno eso es todo lo necesario para correr nuestro proyecto.

Nota:

Hay que recordar que el uso de internacionalización en sus sitios web son para aquellas páginas estáticas y no para las dinámicas.

user

Jean Carlos Mariños Urquiaga

Backend Developer | Python / Django - Javascript / Node.js