diff --git a/web/static/i18n.js b/web/static/i18n.js index bf035ba..c9f49bb 100644 --- a/web/static/i18n.js +++ b/web/static/i18n.js @@ -166,20 +166,35 @@ }); } - var langSelect = document.getElementById(''); + function persistSelectedLang(selectedLang, isAuthenticated) { + localStorage.setItem(STORAGE_KEY, selectedLang); + if (!isAuthenticated) return; + fetch('/preferences/lang', { + method: 'POST', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + body: 'lang=' + encodeURIComponent(selectedLang) + }).catch(function () { + // Keep UI responsive even if persistence fails. + }); + } + + var langSelect = document.getElementById('lang-select'); if (langSelect) { langSelect.addEventListener('change', function () { var selectedLang = normalizeLang(langSelect.value); - localStorage.setItem(STORAGE_KEY, selectedLang); - if (langSelect.dataset.authenticated === '1') { - fetch('/preferences/lang', { - method: 'POST', - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - body: 'lang=' + encodeURIComponent(selectedLang) - }).catch(function () { - // Keep UI responsive even if persistence fails. - }); - } + persistSelectedLang(selectedLang, langSelect.dataset.authenticated === '1'); + applyTranslations(document); + }); + } + + var langSelectorElement = document.querySelector('lang-selector'); + if (langSelectorElement) { + langSelectorElement.addEventListener('lang-changed', function (event) { + var eventLang = event && event.detail ? event.detail.langCode : ''; + var selectedLang = normalizeLang(eventLang); + if (!isSupportedLang(selectedLang)) return; + var authAttr = langSelectorElement.getAttribute('authenticated'); + persistSelectedLang(selectedLang, authAttr === '1' || authAttr === 'true'); applyTranslations(document); }); } diff --git a/web/templates/partials/language_dropdown.html b/web/templates/partials/language_dropdown.html index cb94894..a7c2a8a 100644 --- a/web/templates/partials/language_dropdown.html +++ b/web/templates/partials/language_dropdown.html @@ -1,14 +1,3 @@ {{define "language_dropdown"}} -