// Shared navigation preferences across the project portal and leaderboard. export function initSite({ onLanguageChange = () => {} } = {}) { let language = 'en', theme = 'light'; try { language = localStorage.getItem('inferencenet-language') === 'zh' ? 'zh' : 'en'; theme = localStorage.getItem('inferencenet-theme') === 'dark' ? 'dark' : 'light'; } catch (_) { /* Storage is optional in embedded browsers. */ } const languageButton = document.getElementById('language'); const themeButton = document.getElementById('theme'); function render() { document.documentElement.lang = language === 'zh' ? 'zh-CN' : 'en'; document.documentElement.dataset.theme = theme; document.querySelectorAll('[data-en][data-zh]').forEach(el => { el.textContent = el.dataset[language]; }); languageButton.textContent = language === 'en' ? '中文' : 'EN'; languageButton.setAttribute('aria-label', language === 'en' ? 'Switch to Chinese' : 'Switch to English'); themeButton.setAttribute('aria-pressed', String(theme === 'dark')); document.getElementById('theme-label').textContent = language === 'zh' ? (theme === 'light' ? '浅色' : '深色') : (theme === 'light' ? 'Light' : 'Dark'); themeButton.setAttribute('aria-label', language === 'zh' ? `切换到${theme === 'light' ? '深色' : '浅色'}主题` : `Switch to ${theme === 'light' ? 'dark' : 'light'} theme`); } languageButton.addEventListener('click', () => { language = language === 'en' ? 'zh' : 'en'; try { localStorage.setItem('inferencenet-language', language); } catch (_) {} render(); onLanguageChange(language); }); themeButton.addEventListener('click', () => { theme = theme === 'light' ? 'dark' : 'light'; try { localStorage.setItem('inferencenet-theme', theme); } catch (_) {} render(); }); render(); return { get language() { return language; } }; }