Détection de Langue : Support Multilingue Dynamique
Cet article explique comment nous détectons automatiquement et servons le contenu dans la langue préférée de l'utilisateur.
Le Problème : Servir des Utilisateurs Mondiaux
Les utilisateurs viennent de différents pays et parlent différentes langues :
-
Inde : Hindi, Bengali, Tamoul, Télougou, Gujarati, Marathi, Kannada, Malayalam, Pendjabi, Urdu
-
Europe : Allemand, Français, Espagnol, Italien, Portugais, Russe
-
Asie : Japonais, Coréen, Chinois
Nous devons détecter leur préférence linguistique et servir automatiquement le contenu traduit.
Priorité de Détection
Nous vérifions plusieurs sources dans l'ordre :
1. Paramètre d'URL (?lang=hi)
2. Session (stockée après la première détection)
3. Cookie (translation_lang ou lang)
4. En-tête Accept-Language du navigateur (futur)
5. Par défaut (Anglais)
Pourquoi cet ordre ?
Paramètre d'URL en premier : Permet un changement de langue explicite
Session en second : Persiste pendant la session de navigation
Cookie en troisième : Persiste entre les sessions (30 jours)
Par défaut en dernier : Solution de repli pour les nouveaux utilisateurs
Implémentation
def get_locale():
# 1. Vérifier le paramètre d'URL
lang_param = request.args.get("lang")
if lang_param in valid_langs:
return lang_param
# 2. Vérifier la session
if "translation_lang" in session:
return session["translation_lang"]
# 3. Vérifier le cookie
# ... (détails d'implémentation omis)
Changement de Langue
Les utilisateurs peuvent changer de langue via l'URL :
/p/Treo-N100-8-256?lang=hi
Cela déclenche :
1. Définir la session : session["translation_lang"] = "hi"
2. Définir le cookie : translation_lang=hi; Max-Age=2592000 (30 jours)
3. Rediriger : Retirer le paramètre lang de l'URL
Avantage : URLs propres après la sélection de la langue
Langues Supportées
Nous supportons 20 langues :
Langues indiennes (10) :
-
Hindi (hi)
-
Bengali (bn)
-
Tamoul (ta)
-
Télougou (te)
-
Gujarati (gu)
-
Marathi (mr)
-
Kannada (kn)
-
Malayalam (ml)
-
Pendjabi (pa)
-
Urdu (ur)
Langues européennes (7) :
-
Allemand (de)
-
Français (fr)
-
Espagnol (es)
-
Italien (it)
-
Portugais (pt)
-
Russe (ru)
Langues asiatiques (3) :
-
Japonais (ja)
-
Coréen (ko)
-
Chinois (zh)
Traduction du Contenu
Différents types de contenu utilisent différentes méthodes de traduction :
Modèles Statiques (Flask-Babel)
Navigation, boutons, étiquettes traduits via des fichiers .po :
{{ _('Add to Cart') }} → "कार्ट में जोड़ें" (Hindi)
Contenu Dynamique (TranslationManager)
Noms de produits, fonctionnalités traduits via des tables de phrases :
"Mini PC" → "मिनी पीसी" (Hindi)
Contenu Long (DeepSeek AI)
Descriptions de produits, articles traduits via l'IA :
"Compact office computer..." → "कॉम्पैक्ट ऑफिस कंप्यूटर..." (Hindi)
Voir : Système de Traduction pour les détails
Formatage Régional
La sélection de la langue affecte également le formatage :
Format des Nombres
Anglais : 1,234.56
Européen : 1.234,56 (séparateurs inversés)
Indien : 1,23,456 (groupage en lakhs/crores)
Format des Dates
Anglais : Feb 18, 2026
Européen : 18.02.2026
Indien : 18/02/2026
Devise
Anglais : ₹1,234
Européen : €1.234
International : $1,234
Interface Utilisateur du Sélecteur de Langue
Les utilisateurs peuvent changer de langue via un menu déroulant :
Emplacement : Barre de navigation supérieure
Affichage : Icône de drapeau + nom de la langue
Comportement : Recharger la page avec ?lang=<code>
Considérations SEO
Structure d'URL
Nous utilisons une seule URL pour toutes les langues (pas de préfixes /hi/, /de/) :
Avantage : Architecture plus simple, pas de problèmes de contenu dupliqué
Compromis : Moins de valeur SEO par langue
Balises Hreflang
Nous ajoutons des liens de langue alternatifs :
<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">
Avantage : Google sait quelle version linguistique afficher
Stratégie de Repli
Si la traduction manque pour la langue sélectionnée :
1. Essayer l'anglais : La plupart du contenu a une version anglaise
2. Afficher l'original : Mieux que rien
3. Mettre en file d'attente pour traduction : Ajouter à la file d'attente de traduction pour un traitement par lots
Performance
Mise en Cache
Les traductions sont mises en cache en mémoire :
Tables de phrases : Chargées une fois au démarrage
Traductions IA : Mises en cache dans la base de données
Avantage : Aucune surcharge de traduction par requête
Chargement Paresseux
Les traductions ne sont chargées que lorsque nécessaire :
Descriptions de produits : Chargées lors de la visualisation de la page produit
Contenu de la page de requête : Chargé lors de la visualisation de la page de requête
Avantage : Chargement initial de la page plus rapide
Références
Concepts Techniques
-
Internationalisation (i18n) - Wikipedia
-
Négociation de contenu - Wikipedia
Bibliothèques
-
Flask-Babel - Traduction de modèles
-
Babel - Bibliothèque d'internationalisation
Articles Connexes
-
Système de Traduction - Approche hybride à trois technologies
-
Génération de Contenu IA - Traductions DeepSeek
Résumé
La détection de langue utilise un système de priorité :
Ordre de détection :
-
✅ Paramètre d'URL (
?lang=hi) -
✅ Session (pendant la navigation)
-
✅ Cookie (30 jours)
-
✅ Par défaut (Anglais)
Supporté :
-
✅ 20 langues (10 indiennes, 7 européennes, 3 asiatiques)
-
✅ Formatage régional (nombres, dates, devises)
-
✅ Balises SEO hreflang
Méthodes de traduction :
-
✅ Flask-Babel (modèles statiques)
-
✅ TranslationManager (noms de produits, fonctionnalités)
-
✅ DeepSeek AI (descriptions, articles)
Performance :
-
✅ Mise en cache en mémoire
-
✅ Chargement paresseux
-
✅ Mise en cache en base de données pour les traductions IA
Cela permet une détection automatique de la langue et une expérience multilingue transparente.