// NicheDock Multi-language System var ndCurrentLang = localStorage.getItem("nichedock-lang") || "en"; var ndTranslations = {}; function ndLoadLang(lang) { fetch("assets/i18n/" + lang + ".json") .then(function(r){return r.json()}) .then(function(data){ndTranslations[lang]=data;ndApplyLang(lang)}) .catch(function(){if(lang!=="en")ndLoadLang("en")}) } function ndApplyLang(lang) { document.documentElement.lang=lang; document.documentElement.dir=["ar","he","fa"].indexOf(lang)>=0?"rtl":"ltr"; var t=ndTranslations[lang]; if(t){ document.querySelectorAll("[data-i18n]").forEach(function(el){var k=el.getAttribute("data-i18n");if(t[k])el.textContent=t[k]}) document.querySelectorAll("[data-i18n-placeholder]").forEach(function(el){var k=el.getAttribute("data-i18n-placeholder");if(t[k])el.placeholder=t[k]}) } var ll={"en":"EN","zh":"中文","zh-TW":"繁體","ja":"日本語","ko":"한국어","fr":"FR","de":"DE","es":"ES","pt":"PT","ar":"AR","ru":"RU","hi":"HI","vi":"VI","th":"TH","id":"ID","ms":"MS","tr":"TR","it":"IT","nl":"NL","pl":"PL","uk":"UK","sv":"SV","el":"EL","he":"HE","fa":"FA","cs":"CS","ro":"RO","hu":"HU","da":"DA","fi":"FI","no":"NO","bg":"BG","hr":"HR","sk":"SK","bn":"BN"}; var cl=document.querySelector(".lang-current"); if(cl)cl.textContent=ll[lang]||lang.toUpperCase(); document.querySelectorAll(".lang-option").forEach(function(b){b.classList.toggle("active",b.dataset.lang===lang)}); localStorage.setItem("nichedock-lang",lang) } function toggleLangDropdown(e){e.stopPropagation();var dd=document.getElementById("langDropdown");if(dd)dd.classList.toggle("show")} document.addEventListener("click",function(e){var dd=document.getElementById("langDropdown");if(dd&&!e.target.closest(".lang-selector"))dd.classList.remove("show")}); document.addEventListener("DOMContentLoaded",function(){ndLoadLang(ndCurrentLang);document.querySelectorAll(".lang-option").forEach(function(btn){btn.addEventListener("click",function(){ndCurrentLang=this.dataset.lang;ndLoadLang(ndCurrentLang);var dd=document.getElementById("langDropdown");if(dd)dd.classList.remove("show")})})}) // NicheDock Multi-language System var ndCurrentLang = localStorage.getItem('nichedock-lang') || 'en'; var ndTranslations = {}; function ndLoadLang(lang) { fetch('assets/i18n/' + lang + '.json') .then(r => r.json()) .then(data => { ndTranslations[lang] = data; ndApplyLang(lang); }) .catch(() => { if (lang !== 'en') ndLoadLang('en'); }); } function ndApplyLang(lang) { document.documentElement.lang = lang; document.documentElement.dir = ['ar','he','fa'].includes(lang) ? 'rtl' : 'ltr'; document.querySelectorAll('[data-i18n]').forEach(el => { const key = el.getAttribute('data-i18n'); const trans = ndTranslations[lang]; if (trans && trans[key]) el.textContent = trans[key]; }); document.querySelectorAll('[data-i18n-placeholder]').forEach(el => { const key = el.getAttribute('data-i18n-placeholder'); const trans = ndTranslations[lang]; if (trans && trans[key]) el.placeholder = trans[key]; }); var langLabels = {'en':'EN','zh':'中文','zh-TW':'繁體','ja':'日本語','ko':'한국어','fr':'FR','de':'DE','es':'ES','pt':'PT','ar':'AR','ru':'RU','hi':'HI','vi':'VI','th':'TH','id':'ID','ms':'MS','tr':'TR','it':'IT','nl':'NL','pl':'PL','uk':'UK','sv':'SV','el':'EL','he':'HE','fa':'FA','cs':'CS','ro':'RO','hu':'HU','da':'DA','fi':'FI','no':'NO','bg':'BG','hr':'HR','sk':'SK','bn':'BN'}; var curLabel = document.querySelector('.lang-current'); if (curLabel) curLabel.textContent = langLabels[lang] || lang.toUpperCase(); document.querySelectorAll('.lang-option').forEach(btn => { btn.classList.toggle('active', btn.dataset.lang === lang); }); localStorage.setItem('nichedock-lang', lang); } function toggleLangDropdown(e) { e.stopPropagation(); var dropdown = document.getElementById('langDropdown'); if (dropdown) dropdown.classList.toggle('show'); } document.addEventListener('click', function(e) { var dropdown = document.getElementById('langDropdown'); if (dropdown && !e.target.closest('.lang-selector')) dropdown.classList.remove('show'); }); document.addEventListener('DOMContentLoaded', function() { ndLoadLang(ndCurrentLang); document.querySelectorAll('.lang-option').forEach(btn => { btn.addEventListener('click', function() { ndCurrentLang = this.dataset.lang; ndLoadLang(ndCurrentLang); var dd = document.getElementById('langDropdown'); if (dd) dd.classList.remove('show'); }); }); });