libre-charge-map/js/lcm_i18n.js
2025-05-01 12:39:22 +02:00

70 lines
No EOL
1.9 KiB
JavaScript

/**
* 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();