Rilevamento della Lingua: Supporto Multilingue Dinamico
Questo articolo spiega come rileviamo automaticamente e serviamo i contenuti nella lingua preferita dell'utente.
Il Problema: Servire Utenti Globali
Gli utenti provengono da paesi diversi e parlano lingue diverse:
-
India: Hindi, Bengali, Tamil, Telugu, Gujarati, Marathi, Kannada, Malayalam, Punjabi, Urdu
-
Europa: Tedesco, Francese, Spagnolo, Italiano, Portoghese, Russo
-
Asia: Giapponese, Coreano, Cinese
Dobbiamo rilevare la loro preferenza linguistica e servire automaticamente i contenuti tradotti.
Priorità di Rilevamento
Controlliamo più fonti in ordine:
1. Parametro URL (?lang=hi)
2. Sessione (memorizzata dopo il primo rilevamento)
3. Cookie (translation_lang o lang)
4. Intestazione Accept-Language del browser (futuro)
5. Default (Inglese)
Perché Questo Ordine?
Prima il parametro URL: Consente il cambio esplicito della lingua
Seconda la sessione: Persiste durante la sessione di navigazione
Terzo il cookie: Persiste tra le sessioni (30 giorni)
Ultimo il default: Ripiego per i nuovi utenti
Implementazione
def get_locale():
# 1. Controlla il parametro URL
lang_param = request.args.get("lang")
if lang_param in valid_langs:
return lang_param
# 2. Controlla la sessione
if "translation_lang" in session:
return session["translation_lang"]
# 3. Controlla il cookie
# ... (dettagli di implementazione omessi)
Cambio Lingua
Gli utenti possono cambiare lingua tramite URL:
/p/Treo-N100-8-256?lang=hi
Questo attiva:
1. Imposta la sessione: session["translation_lang"] = "hi"
2. Imposta il cookie: translation_lang=hi; Max-Age=2592000 (30 giorni)
3. Reindirizza: Rimuove il parametro lang dall'URL
Vantaggio: URL puliti dopo la selezione della lingua
Lingue Supportate
Supportiamo 20 lingue:
Lingue indiane (10):
-
Hindi (hi)
-
Bengali (bn)
-
Tamil (ta)
-
Telugu (te)
-
Gujarati (gu)
-
Marathi (mr)
-
Kannada (kn)
-
Malayalam (ml)
-
Punjabi (pa)
-
Urdu (ur)
Lingue europee (7):
-
Tedesco (de)
-
Francese (fr)
-
Spagnolo (es)
-
Italiano (it)
-
Portoghese (pt)
-
Russo (ru)
Lingue asiatiche (3):
-
Giapponese (ja)
-
Coreano (ko)
-
Cinese (zh)
Traduzione dei Contenuti
Diversi tipi di contenuto utilizzano metodi di traduzione diversi:
Template Statici (Flask-Babel)
Navigazione, pulsanti, etichette tradotti tramite file .po:
{{ _('Add to Cart') }} → "कार्ट में जोड़ें" (Hindi)
Contenuti Dinamici (TranslationManager)
Nomi prodotti, caratteristiche tradotti tramite tabelle di frasi:
"Mini PC" → "मिनी पीसी" (Hindi)
Contenuti Lunghi (DeepSeek AI)
Descrizioni prodotti, articoli tradotti tramite AI:
"Compact office computer..." → "कॉम्पैक्ट ऑफिस कंप्यूटर..." (Hindi)
Vedi: Sistema di Traduzione per i dettagli
Formattazione Regionale
La selezione della lingua influenza anche la formattazione:
Formato Numeri
Inglese: 1,234.56
Europeo: 1.234,56 (separatori invertiti)
Indiano: 1,23,456 (raggruppamento lakhs/crores)
Formato Data
Inglese: Feb 18, 2026
Europeo: 18.02.2026
Indiano: 18/02/2026
Valuta
Inglese: ₹1,234
Europeo: €1.234
Internazionale: $1,234
UI del Selettore Lingua
Gli utenti possono cambiare lingua tramite menu a discesa:
Posizione: Barra di navigazione superiore
Visualizzazione: Icona bandiera + nome lingua
Comportamento: Ricarica la pagina con ?lang=<code>
Considerazioni SEO
Struttura URL
Utilizziamo URL singolo per tutte le lingue (nessun prefisso /hi/, /de/):
Vantaggio: Architettura più semplice, nessun problema di contenuti duplicati
Svantaggio: Minore valore SEO per lingua
Tag Hreflang
Aggiungiamo link per lingue alternative:
<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">
Vantaggio: Google sa quale versione linguistica mostrare
Strategia di Ripiego
Se manca la traduzione per la lingua selezionata:
1. Prova l'Inglese: La maggior parte dei contenuti ha una versione inglese
2. Mostra l'originale: Meglio di niente
3. Accoda per traduzione: Aggiungi alla coda di traduzione per l'elaborazione in batch
Prestazioni
Caching
Le traduzioni sono memorizzate nella cache in memoria:
Tabelle di frasi: Caricate una volta all'avvio
Traduzioni AI: Memorizzate nella cache del database
Vantaggio: Nessun sovraccarico di traduzione per richiesta
Caricamento Lazy
Le traduzioni vengono caricate solo quando necessario:
Descrizioni prodotti: Caricate alla visualizzazione della pagina prodotto
Contenuti pagina query: Caricati alla visualizzazione della pagina query
Vantaggio: Caricamento iniziale della pagina più veloce
Riferimenti
Concetti Tecnici
-
Internazionalizzazione (i18n) - Wikipedia
-
Negoziazione dei contenuti - Wikipedia
Librerie
-
Flask-Babel - Traduzione template
-
Babel - Libreria di internazionalizzazione
Articoli Correlati
-
Sistema di Traduzione - Approccio ibrido a tre tecnologie
-
Generazione Contenuti AI - Traduzioni DeepSeek
Riepilogo
Il rilevamento della lingua utilizza un sistema di priorità:
Ordine di rilevamento:
-
✅ Parametro URL (
?lang=hi) -
✅ Sessione (durante la navigazione)
-
✅ Cookie (30 giorni)
-
✅ Default (Inglese)
Supportato:
-
✅ 20 lingue (10 indiane, 7 europee, 3 asiatiche)
-
✅ Formattazione regionale (numeri, date, valuta)
-
✅ Tag SEO hreflang
Metodi di traduzione:
-
✅ Flask-Babel (template statici)
-
✅ TranslationManager (nomi prodotti, caratteristiche)
-
✅ DeepSeek AI (descrizioni, articoli)
Prestazioni:
-
✅ Caching in memoria
-
✅ Caricamento lazy
-
✅ Caching nel database per traduzioni AI
Ciò consente il rilevamento automatico della lingua e un'esperienza multilingue senza interruzioni.