export default class LanguageManager { constructor() { this.availableLanguages = ['en', 'fr']; this.currentLang = 'en' this.chosenLang = localStorage.getItem('preferedLanguage') || this.currentLang; if (this.chosenLang !== this.currentLang && this.availableLanguages.includes(this.chosenLang)) { this.translatePage(); } } async translatePage() { if (this.currentLang === this.chosenLang) return; let dictUrl = `${location.origin}/static/js/lang/${this.chosenLang}.json`; let translation = await fetch(dictUrl).then(response => { if (response.status !== 200) return null; return response.json(); }); if (!translation) { console.log(`No translation found for language ${this.chosenLang}`); return 1; } document.querySelectorAll('[data-i18n]').forEach(el => { let key = el.getAttribute('data-i18n'); el.innerHTML = translation[key]; }) this.currentLang = this.chosenLang; return 0; } async changeLanguage(lang) { if (lang === this.currentLang || !this.availableLanguages.includes(lang)) return; this.chosenLang = lang; if (await this.translatePage() !== 0) return; localStorage.setItem('preferedLanguage', lang); } }