(function () { var supported = ["en", "it", "fr", "de", "es"]; var fallback = "en"; var aliases = { "en-us": "en", "de-ch": "de", "fr-ch": "fr" }; function normalizeLanguage(lang) { if (!lang) return fallback; var normalized = String(lang).toLowerCase().replace("_", "-"); if (aliases[normalized]) return aliases[normalized]; var base = normalized.split("-")[0]; if (supported.indexOf(base) !== -1) return base; return fallback; } function getInitialLanguage() { var params = new URLSearchParams(window.location.search); var queryLang = params.get("lang"); if (queryLang) return normalizeLanguage(queryLang); var saved = window.localStorage.getItem("preferredLang"); if (saved) return normalizeLanguage(saved); var browserLang = navigator.language || (navigator.languages && navigator.languages[0]) || fallback; return normalizeLanguage(browserLang); } window.initPageI18n = function (translations) { var currentLanguage = getInitialLanguage(); function t(key) { var active = translations[currentLanguage] || translations[fallback] || {}; if (Object.prototype.hasOwnProperty.call(active, key)) return active[key]; return key; } function applyLanguage(lang) { currentLanguage = normalizeLanguage(lang); var active = translations[currentLanguage] || translations[fallback] || {}; document.documentElement.lang = currentLanguage; if (active.pageTitle) document.title = active.pageTitle; var nodes = document.querySelectorAll("[data-i18n]"); for (var i = 0; i < nodes.length; i++) { var key = nodes[i].getAttribute("data-i18n"); if (Object.prototype.hasOwnProperty.call(active, key)) nodes[i].textContent = active[key]; } var placeholders = document.querySelectorAll("[data-i18n-placeholder]"); for (var j = 0; j < placeholders.length; j++) { var pKey = placeholders[j].getAttribute("data-i18n-placeholder"); if (Object.prototype.hasOwnProperty.call(active, pKey)) { placeholders[j].setAttribute("placeholder", active[pKey]); } } var selector = document.getElementById("language-select"); if (selector) selector.value = currentLanguage; var links = document.querySelectorAll("a[data-lang-link]"); for (var k = 0; k < links.length; k++) { var href = links[k].getAttribute("href"); if (!href || href.indexOf("javascript:") === 0 || href.indexOf("#") === 0) continue; try { var linkUrl = new URL(href, window.location.origin); linkUrl.searchParams.set("lang", currentLanguage); links[k].setAttribute("href", linkUrl.pathname + linkUrl.search + linkUrl.hash); } catch (e) {} } var url = new URL(window.location.href); url.searchParams.set("lang", currentLanguage); window.history.replaceState({}, "", url.toString()); } var selector = document.getElementById("language-select"); if (selector) { selector.addEventListener("change", function (event) { var chosen = normalizeLanguage(event.target.value); window.localStorage.setItem("preferredLang", chosen); applyLanguage(chosen); }); } applyLanguage(currentLanguage); window.pageT = t; return { t: t, getLanguage: function () { return currentLanguage; }, setLanguage: applyLanguage }; }; })();