function loadJSONSync(url) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, false); // false 表示同步请求 try { xhr.send(null); if (xhr.status === 200) { return JSON.parse(xhr.responseText); } else { console.error('请求失败,状态码:', xhr.status); return null; } } catch (e) { console.error('请求过程中出错:', e); return null; } } class I18n { constructor() { this.currentLang = localStorage.getItem('language') || 'zh'; this.translations = {}; this.loadLanguage(this.currentLang); this.updateLanguageSelect(); } async loadLanguage(lang) { try { var data = loadJSONSync(`./assets/js/lang/${lang}.json`); // console.log(data); this.translations = data; this.updatePageContent(); this.updateLanguageSelect(); // 如果菜单已初始化,重新渲染菜单 if (window.menu) { window.menu.render(); } } catch (error) { console.error('Error loading language file:', error); } } setLanguage(lang) { this.currentLang = lang; localStorage.setItem('language', lang); this.loadLanguage(lang); } setLanguagehome(lang) { this.currentLang = lang; localStorage.setItem('language', lang); window.location.reload(); } translate(key) { const keys = key.split('.'); let value = this.translations; for (const k of keys) { if (value && value[k] !== undefined) { value = value[k]; } else { return key; } } return value; } updatePageContent() { var data = this.translations; // 常规文本内容 $('[data-i18n]').each(function() { const keys = $(this).data('i18n').split('.'); let value = data; keys.forEach(key => { value = value[key]; }); $(this).text(value || ''); }); // placeholder翻译 $('[data-i18n-placeholder]').each(function() { const keys = $(this).data('i18n-placeholder').split('.'); let value = data; keys.forEach(key => { value = value[key]; }); $(this).attr('placeholder', value || ''); }); // option文本翻译 $('option[data-i18n]').each(function() { const keys = $(this).data('i18n').split('.'); let value = data; keys.forEach(key => { value = value[key]; }); $(this).text(value || ''); }); } updateLanguageSelect() { // 更新语言选择下拉框的选中状态 const select = document.querySelector('.language-switch select'); if (select) { select.value = this.currentLang; } } } // 创建全局实例 window.i18n = new I18n();