/// Code de langue passé au moteur de synthèse vocale. /// /// ⛔ **L'assistant vocal est limité à FR/NL/EN/DE — décidé le 2026-08-13**, cf. /// `DOCS/voice-latency-plan.md` §1.6. Les six autres langues déclarées dans /// `constants.dart` retombent sur `fr-FR` : un visiteur italien se fait répondre en /// français, sans erreur ni trace. En ajouter une coûte peu — les traductions `voice.*` /// existent déjà pour les 10 langues, Whisper est multilingue et le wake word est /// phonétique — mais il faut aussi compléter les quatre listes de commandes de /// `VoiceOrchestrator`, sinon la langue n'est supportée qu'à moitié. /// /// ⚠️ **Ce fichier existe parce que la fonction était copiée trois fois** : dans /// `VoiceOrchestrator`, dans `AssistantChatSheet` et dans `GeoBeaconTriggerService` — et /// la décision ci-dessus n'était écrite que dans la première. Les deux autres ressemblaient /// à un oubli qu'on aurait envie de « corriger » en ajoutant des langues, ce qui aurait /// produit un support partiel silencieux. Une seule copie, une seule décision. String toVoiceLangCode(String? language) { switch ((language ?? 'FR').toUpperCase()) { case 'FR': return 'fr-FR'; case 'NL': return 'nl-NL'; case 'EN': return 'en-US'; case 'DE': return 'de-DE'; default: return 'fr-FR'; } }