/** * Gestion des traductions dans libre charge map */ class LcmI18n { constructor() { this.i18n = {}; this.language = this.detectLanguage(); } /** * Détecte la langue préférée du navigateur * @returns {string} Code de langue sur 2 caractères (ex: 'fr', 'en') */ detectLanguage() { // Récupérer la langue du navigateur const browserLang = navigator.language || navigator.userLanguage; // Extraire les 2 premiers caractères (code langue) const lang = browserLang.substring(0, 2).toLowerCase(); // Par défaut retourner 'en' si la langue n'est pas reconnue return lang || 'en'; } /** * Récupère la langue courante * @returns {string} Code de langue sur 2 caractères (ex: 'fr', 'en') */ getCurrentLanguage() { return this.language; } /** * Traduit une chaîne de caractères dans la langue courante * @param {string} key - Clé de traduction * @param {Object} params - Paramètres optionnels pour la substitution * @returns {string} Chaîne traduite */ translate(key, params = {}) { // Vérifier si la clé existe dans les traductions if (!this.i18n[this.language] || !this.i18n[this.language][key]) { console.error(`[LcmI18n] Clé de traduction introuvable: "${key}" pour la langue "${this.language}"`); return 'I18N_RROR[' + key + ']'; } // Obtenir les traductions pour la langue courante const translations = this.i18n[this.language] || {}; // Récupérer la traduction ou utiliser la clé par défaut let translation = translations[key] || key; // Remplacer les paramètres dans la traduction Object.keys(params).forEach(param => { translation = translation.replace(`{${param}}`, params[param]); }); return translation; } /** * Alias raccourci pour la méthode translate() */ t(key, params = {}) { return this.translate(key, params); } } export const lcm_i18n = new LcmI18n();