function getTranslation(obj, path) { return path.reduce((xs, x) => (xs && xs[x] !== undefined) ? xs[x] : undefined, obj); } function changeLanguage(lang) { document.cookie = `lang=${lang};path=/;max-age=31536000;SameSite=None${window.location.protocol === 'https:' ? '; Secure' : ''}`; fetch(`/assets/i18n/${lang}.json`) .then(response => response.json()) .then(translations => { document.querySelectorAll('[data-i18n]').forEach(elem => { const keys = elem.getAttribute('data-i18n').split('.'); const translation = getTranslation(translations, keys); if (translation !== undefined) { // If the element is an input, update its value; otherwise, update its innerHTML if (elem.tagName.toLowerCase() === 'input') { elem.value = translation; } else { elem.innerHTML = translation; } } }); document.querySelectorAll('[data-i18n-placeholder]').forEach(elem => { const keys = elem.getAttribute('data-i18n-placeholder').split('.'); const translation = getTranslation(translations, keys); if (translation !== undefined) { elem.placeholder = translation; } }); }); document.getElementById('languageSelect').value = lang; } function getCookie(name) { let cookieArray = document.cookie.split(';'); for(let i = 0; i < cookieArray.length; i++) { let cookiePair = cookieArray[i].split('='); if(name == cookiePair[0].trim()) { return decodeURIComponent(cookiePair[1]); } } return null; } function initializeLanguage() { const availableLanguages = ['en', 'de']; // Extend as necessary let userLang = getCookie('lang'); if (!userLang) { let systemLang = navigator.language.split('-')[0]; userLang = availableLanguages.includes(systemLang) ? systemLang : 'en'; } changeLanguage(userLang); } // Run the initialization function when the page loads initializeLanguage();