Localización en Django (Internationalization)
- Mediante el uso de tags podemos definir las traducciones de nuestro proyecto.
- Django se encarga de localizarlas y generar un fichero de traducciones que simplemente tendríamos que completar.
- No tenemos que preocuparnos de ninguna gestión ya que es el propio framework quien se encarga de todo.
En un mercado tan competitivo como el de internet, es prácticamente imprescindible ofrecer nuestros productos en el idioma propio del usuario.
Esta labor de traducción puede resultar bastante tediosa, pero gracias a Django y su soporte para i18n, este trabajo es mucho más llevadero.
Antes de nada, debemos instalar en nuestro sistema las librería gettext, necesaria para compilar los ficheros que contengan las cadenas de texto a traducir.
Simplemente hay que descargarla
curl -O ftp://ftp.gnu.org/gnu/gettext/gettext-0.17.tar.gz
Descomprimimos, y seguimos los pasos habituales:
./configure make sudo make install
Mientras nos encontramos desarrollando nuestra aplicación, debemos importar la librería ugettext (dentro de las utilidades de traducción del propio django).
from django.utils.translation import ugettext as _
Para indicar a django que queremos traducir alguna cadena de texto, simplemente tenemos que invocar la función (en este caso "_"):
value = _(u'Texto a traducir')
send_message(user, _('texto que quiero enviar'))
En caso de que vayamos a tratar con contenido dinámico, resulta mucho más interesante utilizar la versión "perezosa" de ugettext (ugettext_lazy), ya que traduce cuando se accede al valor, en vez de hacerlo cuando la función es invocada. Esto nos permitirá, por ejemplo, cargar traducciones dinámicamente en un ChoiceField de un formulario.
from django.utils.translation import ugettext_lazy as _
Si lo que queremos es traducir texto propio de las templates, tenemos que cargar los tags de las traducciones, incluyendo al principio del archivo:
{% load i18n %}
A partir de aquí, para insertar alguna traducción simplemente tendríamos que usar cualquiera de los tags de los que disponemos para tal efecto.
Si lo que queremos es traducir una cadena de texto simple, como un "Hola Mundo", solamente tendríamos que hacer uso del tag trans.
{% trans "Hola Mundo" %}
Pero si queremos ir más allá, y renderizar variables u otras cadenas más complejas que un "hola mundo" como párrafos enteros (aunque siempre es mejor ir traduciendo poco a poco, lo más recomendable es frase a frase, para evitar cambios masivos en las traducciones si en cualquier momento tenemos que realizar alguna modificación en el fragmento traducido, por pequeña que sea), cadenas con etiquetas html, etc.
Para ello podemos emplear el tag blocktrans:
{% blocktrans %}Tienes {{ followers }} followers {% endblocktrans %}
{% blocktrans %}Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.{% endblocktrans %}
Una vez hemos terminado de indicar nuestras traducciones, simplemente tenemos que compilar el fichero de localización. Para ello, hay que ejecutar desde consola en la raiz del proyecto (siendo "es" el código del lenguaje al que queremos traducir, es decir, si hemos desarrollado nuestra aplicación en inglés, y queremos el fichero de traducciones al castellano, tenemos que indicar el código es):
django-admin.py makemessages -l es
Una vez ejecutado, tendremos un fichero llamado django.po (dentro de la carpeta locale/codigo_de_idioma/), y ya podemos empezar a traducir.
Existen múltiples aplicaciones para llevar a cabo esta tarea, una de ellas, bastante recomendable, es Poedit (que también es capaz de compilar el fichero, previa configuración). Esta aplicación es gratis y de código abierto, además de un uso bastante sencillo y muy funcional.
Dispones de más información en la documentación oficial de Django.




Este post es excelente, el poder de django también, actualmente mantengo una webapp que tiene 4 idiomas, esta hecha en PHP y el administrador de lenguajes me toco hacerlo y realmente esa labor apesta de ingresar palabras en el diccionario, demostrar cuan breve puede ser con django es un gran punto a su favor para migrar apps hacia el.
la pregunta es, como hacer para establecer el settings.LANGUAGE_CODE en momento que el usuario selecciona el lenguaje en la app ?
Dejar un comentario
Por favor, asegúrate de que has rellenado todos los campos obligatorios (*).