El objetivo de la internacionalización y la localización es permitir que una sola aplicación web ofrezca su contenido en idiomas y formatos adaptados al público.
Django tiene un completo soporte para traducción de texto, formateo de fechas, horas y números y zonas horarias.
En esencia, Django hace dos cosas:
Permite a los desarrolladores y autores de plantillas especificar qué partes de sus aplicaciones deben ser traducidas o formateadas para idiomas y culturas locales.
Utiliza estas conexiones para localizar aplicaciones web para usuarios particulares según sus preferencias.
La traducción depende del idioma objetivo, y el formato suele depender del país objetivo. Esta información se proporciona por los navegadores en la cabecera Accept-Language. Sin embargo, la zona horaria no está disponible de manera inmediata.
Las palabras «internacionalización» y «localización» a menudo causan confusión; aquí tienes una definición simplificada:
Preparando el software para la localización. Normalmente realizado por desarrolladores.
Escribiendo las traducciones y formatos locales. Normalmente realizado por traductores.
Más detalles se pueden encontrar en el FAQ de internacionalización web del W3C, el artículo de **Wikipedia**_ o la documentación de **gettext GNU**_.
Advertencia
La traducción está controlada por la configuración USE_I18N. Sin embargo, implica internacionalización y localización. El nombre de la configuración es un resultado desafortunado de la historia de Django.
Aquí tienes algunos otros términos que nos ayudarán a manejar un lenguaje común:
Un nombre de zona horaria, ya sea una especificación de idioma en la forma ll o una combinación de idioma y país en la forma ll_CC. Ejemplos: it, de_AT, es, pt_BR, sr_Latn. La parte del idioma siempre está en minúsculas. La parte del país está en mayúscula si tiene más de 2 caracteres, de lo contrario está en mayúscula. El separador es un guión bajo.
Representa el nombre de un idioma. Los navegadores envían los nombres de los idiomas que aceptan en la cabecera HTTP Accept-Language utilizando este formato. Ejemplos: it, de-at, es, pt-br. Los códigos de idioma se representan generalmente en minúsculas, pero la cabecera HTTP Accept-Language es insensible al caso. El separador es un guión.
Un archivo de mensajes es un archivo de texto plano que representa un solo idioma y contiene todos los strings de traducción disponibles y cómo deben ser representados en el idioma dado. Los archivos de mensajes tienen una extensión de archivo .po.
Una literal que puede ser traducida.
Un archivo de formato es un módulo Python que define los formatos de datos para una zona horaria determinada.
may 31, 2026