Detección de Idioma: Soporte Multilingüe Dinámico
Este artículo explica cómo detectamos automáticamente y servimos contenido en el idioma preferido del usuario.
El Problema: Servir a Usuarios Globales
Los usuarios provienen de diferentes países hablando diferentes idiomas:
-
India: Hindi, Bengalí, Tamil, Telugu, Gujarati, Marathi, Kannada, Malayalam, Punjabi, Urdu
-
Europa: Alemán, Francés, Español, Italiano, Portugués, Ruso
-
Asia: Japonés, Coreano, Chino
Necesitamos detectar su preferencia de idioma y servir contenido traducido automáticamente.
Prioridad de Detección
Verificamos múltiples fuentes en orden:
1. Parámetro de URL (?lang=hi)
2. Sesión (almacenado después de la primera detección)
3. Cookie (translation_lang o lang)
4. Cabecera Accept-Language del navegador (futuro)
5. Predeterminado (Inglés)
¿Por Qué Este Orden?
Parámetro de URL primero: Permite cambiar de idioma explícitamente
Sesión segundo: Persiste durante la sesión de navegación
Cookie tercero: Persiste entre sesiones (30 días)
Predeterminado último: Respaldo para nuevos usuarios
Implementación
def get_locale():
# 1. Check URL parameter
lang_param = request.args.get("lang")
if lang_param in valid_langs:
return lang_param
# 2. Check session
if "translation_lang" in session:
return session["translation_lang"]
# 3. Check cookie
# ... (implementation details omitted)
Cambio de Idioma
Los usuarios pueden cambiar el idioma a través de la URL:
/p/Treo-N100-8-256?lang=hi
Esto activa:
1. Establecer sesión: session["translation_lang"] = "hi"
2. Establecer cookie: translation_lang=hi; Max-Age=2592000 (30 días)
3. Redireccionar: Eliminar el parámetro lang de la URL
Beneficio: URLs limpias después de seleccionar el idioma
Idiomas Soportados
Soportamos 20 idiomas:
Idiomas de la India (10):
-
Hindi (hi)
-
Bengalí (bn)
-
Tamil (ta)
-
Telugu (te)
-
Gujarati (gu)
-
Marathi (mr)
-
Kannada (kn)
-
Malayalam (ml)
-
Punjabi (pa)
-
Urdu (ur)
Idiomas Europeos (7):
-
Alemán (de)
-
Francés (fr)
-
Español (es)
-
Italiano (it)
-
Portugués (pt)
-
Ruso (ru)
Idiomas Asiáticos (3):
-
Japonés (ja)
-
Coreano (ko)
-
Chino (zh)
Traducción de Contenido
Diferentes tipos de contenido usan diferentes métodos de traducción:
Plantillas Estáticas (Flask-Babel)
Navegación, botones, etiquetas traducidas a través de archivos .po:
{{ _('Add to Cart') }} → "कार्ट में जोड़ें" (Hindi)
Contenido Dinámico (TranslationManager)
Nombres de productos, características traducidas a través de tablas de frases:
"Mini PC" → "मिनी पीसी" (Hindi)
Contenido Largo (DeepSeek AI)
Descripciones de productos, artículos traducidos a través de IA:
"Compact office computer..." → "कॉम्पैक्ट ऑफिस कंप्यूटर..." (Hindi)
Ver: Sistema de Traducción para detalles
Formateo Regional
La selección de idioma también afecta el formato:
Formato de Números
Inglés: 1,234.56
Europeo: 1.234,56 (separadores invertidos)
Indio: 1,23,456 (agrupación en lakhs/crores)
Formato de Fecha
Inglés: Feb 18, 2026
Europeo: 18.02.2026
Indio: 18/02/2026
Moneda
Inglés: ₹1,234
Europeo: €1.234
Internacional: $1,234
Interfaz de Usuario del Selector de Idioma
Los usuarios pueden cambiar el idioma a través de un menú desplegable:
Ubicación: Barra de navegación superior
Visualización: Icono de bandera + nombre del idioma
Comportamiento: Recargar página con ?lang=<código>
Consideraciones SEO
Estructura de URL
Usamos una sola URL para todos los idiomas (sin prefijos /hi/, /de/):
Beneficio: Arquitectura más simple, sin problemas de contenido duplicado
Desventaja: Menor valor SEO por idioma
Etiquetas Hreflang
Añadimos enlaces de idiomas alternativos:
<link rel="alternate" hreflang="en" href="https://www.thinvent.in/p/Treo-N100">
<link rel="alternate" hreflang="hi" href="https://www.thinvent.in/p/Treo-N100?lang=hi">
<link rel="alternate" hreflang="de" href="https://www.thinvent.in/p/Treo-N100?lang=de">
Beneficio: Google sabe qué versión de idioma mostrar
Estrategia de Respaldo
Si falta traducción para el idioma seleccionado:
1. Intentar Inglés: La mayoría del contenido tiene versión en inglés
2. Mostrar original: Mejor que nada
3. Poner en cola para traducción: Añadir a la cola de traducción para procesamiento por lotes
Rendimiento
Almacenamiento en Caché
Las traducciones se almacenan en caché en memoria:
Tablas de frases: Cargadas una vez al inicio
Traducciones de IA: Almacenadas en caché en la base de datos
Beneficio: Sin sobrecarga de traducción por solicitud
Carga Diferida
Las traducciones se cargan solo cuando se necesitan:
Descripciones de productos: Cargadas al ver la página del producto
Contenido de la página de consulta: Cargado al ver la página de consulta
Beneficio: Carga inicial de página más rápida
Referencias
Conceptos Técnicos
-
Internacionalización (i18n) - Wikipedia
-
Negociación de contenido - Wikipedia
Librerías
-
Flask-Babel - Traducción de plantillas
-
Babel - Librería de internacionalización
Artículos Relacionados
-
Sistema de Traducción - Enfoque híbrido de tres tecnologías
-
Generación de Contenido con IA - Traducciones DeepSeek
Resumen
La detección de idioma utiliza un sistema de prioridad:
Orden de detección:
-
✅ Parámetro de URL (
?lang=hi) -
✅ Sesión (durante la navegación)
-
✅ Cookie (30 días)
-
✅ Predeterminado (Inglés)
Soportado:
-
✅ 20 idiomas (10 de la India, 7 Europeos, 3 Asiáticos)
-
✅ Formateo regional (números, fechas, moneda)
-
✅ Etiquetas SEO hreflang
Métodos de traducción:
-
✅ Flask-Babel (plantillas estáticas)
-
✅ TranslationManager (nombres de productos, características)
-
✅ DeepSeek AI (descripciones, artículos)
Rendimiento:
-
✅ Almacenamiento en caché en memoria
-
✅ Carga diferida
-
✅ Almacenamiento en caché en base de datos para traducciones de IA
Esto permite la detección automática de idioma y una experiencia multilingüe sin interrupciones.