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

Librerías

  • Flask-Babel - Traducción de plantillas

  • Babel - Librería de internacionalización

Artículos Relacionados

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.


← Volver al Índice de Documentación