Ver índice de contenidos del libro

Capítulo 18. Internacionalización

Django fue originalmente desarrollado exactamente en el medio de los Estados Unidos (literalmente hablando, ya que Lawrence, Kansas, se halla a menos de 40 millas del centro geográfico de la porción continental de los Estados Unidos). Sin embargo, como sucede en la mayoría de los proyectos de software libre, la comunidad de Django creció hasta incluir gente de todo el globo. A medida que la comunidad se hizo más diversa, la internacionalización y la localización fueron tomando una importancia creciente. Debido a que muchos desarrolladores tienen, en el mejor de los casos, una comprensión difusa de dichos términos vamos a definirlos brevemente.

Internacionalización se refiere al proceso de diseño de programas para el uso potencial de cualquier locale Esto incluye el marcado del texto (tales como elementos de la interfaz con el usuario o mensajes de error) para su futura traducción, la abstracción de la visualización de fechas y horarios de manera que sea posible respetar diferentes estándares locales, la provisión de lo necesario para admitir diferentes zonas horarias, y en general el asegurarse de que el código no contenga ninguna suposición acerca de la ubicación de sus usuarios. Encontrarás a menudo "internacionalización" abreviada como I18N (el número 18 se refiere al número de letras omitidos entre la "I" inicial y la "N" final).

Localización se refiere al proceso específico de traducir un programa internacionalizado para su uso en un locale particular. Encontrarás a menudo "localización" abreviada como L10N.

Django en si está totalmente internacionalizado; todas las cadenas están marcadas para su traducción, y existen variables de configuración que controlan la visualización de valores dependientes del locale como fechas y horarios. Django también incluye más de 40 archivos de localización. Si no hablas inglés en forma nativa, existe una buena probabilidad de que Django ya se encuentre traducido a tu idioma nativo.

El mismo framework de internacionalización usado para esas localizaciones está disponible para que lo uses en tu propio código y plantillas.

En resumen, necesitarás agregar una cantidad mínima de hooks a tu código Python y a tus plantillas. Esos hooks reciben el nombre de cadenas de traducción. Los mismos le indican a Django "Este texto debe ser traducido al idioma del usuario final si existe una traducción a dicho idioma de ese texto."

Django se encarga de usar esos hooks para traducir las aplicaciones Web "al vuelo" de acuerdo a las preferencias de idioma del usuario.

Esencialmente, Django hace dos cosas:

  • Le permite a los desarrolladores y autores de plantillas especificar qué partes de sus aplicaciones deben ser traducibles.
  • Usa esta información para traducir las aplicaciones Web para usuarios particulares de acuerdo a sus preferencias de idioma.

La maquinaria de traducción de Django usa gettext de GNU mediante el módulo estándar gettext incluido en Python.

Truco Los hooks de internacionalización de Django se encuentran activados por defecto, lo cual penaliza ligeramente el rendimiento. Si no utilizas internacionalización, deberías establecer USE_I18N = False en tu archivo de configuración. Si USE_I18N tiene el valor False Django implementará algunas optimizaciones de manera de no cargar la maquinaria de localización.

Probablemente querrás también eliminar 'django.core.context_processors.i18n' de tu variable de configuración TEMPLATE_CONTEXT_PROCESSORS.