Detecção de Idioma: Suporte Multilíngue Dinâmico

Este artigo explica como detectamos automaticamente e servimos conteúdo no idioma preferido do usuário.

O Problema: Atendendo Usuários Globais

Usuários vêm de diferentes países falando diferentes idiomas:

  • Índia: Hindi, Bengali, Tâmil, Telugu, Gujarati, Marathi, Kannada, Malaiala, Punjabi, Urdu

  • Europa: Alemão, Francês, Espanhol, Italiano, Português, Russo

  • Ásia: Japonês, Coreano, Chinês

Precisamos detectar sua preferência de idioma e servir conteúdo traduzido automaticamente.

Prioridade de Detecção

Verificamos múltiplas fontes em ordem:

1. Parâmetro de URL (?lang=hi)

2. Sessão (armazenada após a primeira detecção)

3. Cookie (translation_lang ou lang)

4. Cabeçalho Accept-Language do navegador (futuro)

5. Padrão (Inglês)

Por Que Esta Ordem?

Parâmetro de URL primeiro: Permite troca explícita de idioma

Sessão segundo: Persiste durante a sessão de navegação

Cookie terceiro: Persiste entre sessões (30 dias)

Padrão por último: Fallback para novos usuários

Implementação

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)

Troca de Idioma

Usuários podem trocar o idioma via URL:

/p/Treo-N100-8-256?lang=hi

Isso dispara:

1. Definir sessão: session["translation_lang"] = "hi"

2. Definir cookie: translation_lang=hi; Max-Age=2592000 (30 dias)

3. Redirecionar: Remover parâmetro lang da URL

Benefício: URLs limpas após seleção de idioma

Idiomas Suportados

Suportamos 20 idiomas:

Idiomas indianos (10):

  • Hindi (hi)

  • Bengali (bn)

  • Tâmil (ta)

  • Telugu (te)

  • Gujarati (gu)

  • Marathi (mr)

  • Kannada (kn)

  • Malaiala (ml)

  • Punjabi (pa)

  • Urdu (ur)

Idiomas europeus (7):

  • Alemão (de)

  • Francês (fr)

  • Espanhol (es)

  • Italiano (it)

  • Português (pt)

  • Russo (ru)

Idiomas asiáticos (3):

  • Japonês (ja)

  • Coreano (ko)

  • Chinês (zh)

Tradução de Conteúdo

Diferentes tipos de conteúdo usam diferentes métodos de tradução:

Modelos Estáticos (Flask-Babel)

Navegação, botões, rótulos traduzidos via arquivos .po:

{{ _('Add to Cart') }}  → "कार्ट में जोड़ें" (Hindi)

Conteúdo Dinâmico (TranslationManager)

Nomes de produtos, características traduzidos via tabelas de frases:

"Mini PC" → "मिनी पीसी" (Hindi)

Conteúdo Longo (DeepSeek AI)

Descrições de produtos, artigos traduzidos via IA:

"Compact office computer..." → "कॉम्पैक्ट ऑफिस कंप्यूटर..." (Hindi)

Veja: Sistema de Tradução para detalhes

Formatação Regional

A seleção de idioma também afeta a formatação:

Formato de Número

Inglês: 1,234.56

Europeu: 1.234,56 (separadores invertidos)

Indiano: 1,23,456 (agrupamento lakhs/crores)

Formato de Data

Inglês: 18 de fevereiro de 2026

Europeu: 18.02.2026

Indiano: 18/02/2026

Moeda

Inglês: ₹1,234

Europeu: €1.234

Internacional: $1,234

Interface de Seleção de Idioma

Usuários podem trocar o idioma via menu suspenso:

Localização: Barra de navegação superior

Exibição: Ícone de bandeira + nome do idioma

Comportamento: Recarregar página com ?lang=<código>

Considerações de SEO

Estrutura de URL

Usamos URL única para todos os idiomas (sem prefixos /hi/, /de/):

Benefício: Arquitetura mais simples, sem problemas de conteúdo duplicado

Desvantagem: Menor valor de SEO por idioma

Tags Hreflang

Adicionamos links 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">

Benefício: Google sabe qual versão de idioma mostrar

Estratégia de Fallback

Se a tradução estiver faltando para o idioma selecionado:

1. Tentar Inglês: A maior parte do conteúdo tem versão em inglês

2. Mostrar original: Melhor que nada

3. Enfileirar para tradução: Adicionar à fila de tradução para processamento em lote

Desempenho

Cache

Traduções são armazenadas em cache na memória:

Tabelas de frases: Carregadas uma vez na inicialização

Traduções de IA: Armazenadas em cache no banco de dados

Benefício: Sem sobrecarga de tradução por requisição

Carregamento Preguiçoso (Lazy Loading)

Traduções carregadas apenas quando necessário:

Descrições de produtos: Carregadas na visualização da página do produto

Conteúdo da página de consulta: Carregado na visualização da página de consulta

Benefício: Carregamento inicial de página mais rápido

Referências

Conceitos Técnicos

Bibliotecas

  • Flask-Babel - Tradução de modelos

  • Babel - Biblioteca de internacionalização

Artigos Relacionados

Resumo

A detecção de idioma usa um sistema de prioridade:

Ordem de detecção:

  • ✅ Parâmetro de URL (?lang=hi)

  • ✅ Sessão (durante a navegação)

  • ✅ Cookie (30 dias)

  • ✅ Padrão (Inglês)

Suportado:

  • ✅ 20 idiomas (10 indianos, 7 europeus, 3 asiáticos)

  • ✅ Formatação regional (números, datas, moeda)

  • ✅ Tags SEO hreflang

Métodos de tradução:

  • ✅ Flask-Babel (modelos estáticos)

  • ✅ TranslationManager (nomes de produtos, características)

  • ✅ DeepSeek IA (descrições, artigos)

Desempenho:

  • ✅ Cache em memória

  • ✅ Carregamento preguiçoso

  • ✅ Cache de banco de dados para traduções de IA

Isso permite detecção automática de idioma e uma experiência multilíngue perfeita.


← Voltar ao Índice de Documentação