AIClient-2-API/static/app/language-switcher.js
hex2077 fa8150701f feat(i18n): 添加多语言支持并实现国际化功能
实现中英文双语支持,包括:
1. 添加i18n.js核心模块处理语言切换和翻译
2. 创建语言切换器组件
3. 更新所有UI文本使用翻译键
4. 添加I18N_GUIDE.md文档说明使用方法
5. 修改样式适配语言切换器
6. 添加adm-zip依赖支持配置文件打包下载
7. 更新登录页面支持多语言
8. 重构toast消息显示支持多语言标题
2025-12-20 17:27:30 +08:00

105 lines
No EOL
3.6 KiB
JavaScript

// 语言切换器组件
import { setLanguage, getCurrentLanguage, t } from './i18n.js';
// 创建语言切换器 HTML
export function createLanguageSwitcher() {
const currentLang = getCurrentLanguage();
const switcher = document.createElement('div');
switcher.className = 'language-switcher';
switcher.innerHTML = `
<button class="language-btn" id="languageBtn" aria-label="切换语言">
<i class="fas fa-globe"></i>
<span class="current-lang">${currentLang === 'zh-CN' ? '中文' : 'EN'}</span>
</button>
<div class="language-dropdown" id="languageDropdown">
<button class="language-option ${currentLang === 'zh-CN' ? 'active' : ''}" data-lang="zh-CN">
<i class="fas fa-check"></i>
<span>简体中文</span>
</button>
<button class="language-option ${currentLang === 'en-US' ? 'active' : ''}" data-lang="en-US">
<i class="fas fa-check"></i>
<span>English</span>
</button>
</div>
`;
return switcher;
}
// 初始化语言切换器
export function initLanguageSwitcher() {
// 创建并添加语言切换器到 header
const headerControls = document.querySelector('.header-controls');
if (headerControls) {
const switcher = createLanguageSwitcher();
// 插入到第一个位置
headerControls.insertBefore(switcher, headerControls.firstChild);
// 绑定事件
bindLanguageSwitcherEvents();
}
}
// 绑定语言切换器事件
function bindLanguageSwitcherEvents() {
const languageBtn = document.getElementById('languageBtn');
const languageDropdown = document.getElementById('languageDropdown');
const languageOptions = document.querySelectorAll('.language-option');
if (!languageBtn || !languageDropdown) return;
// 切换下拉菜单显示/隐藏
languageBtn.addEventListener('click', (e) => {
e.stopPropagation();
languageDropdown.classList.toggle('show');
});
// 点击语言选项
languageOptions.forEach(option => {
option.addEventListener('click', (e) => {
e.stopPropagation();
const lang = option.getAttribute('data-lang');
// 切换语言
setLanguage(lang);
// 更新按钮文本
const currentLangSpan = languageBtn.querySelector('.current-lang');
if (currentLangSpan) {
currentLangSpan.textContent = lang === 'zh-CN' ? '中文' : 'EN';
}
// 更新选中状态
languageOptions.forEach(opt => opt.classList.remove('active'));
option.classList.add('active');
// 隐藏下拉菜单
languageDropdown.classList.remove('show');
// 显示提示
showToast(t('common.success'), lang === 'zh-CN' ? '已切换到简体中文' : 'Switched to English', 'success');
});
});
// 点击页面其他地方关闭下拉菜单
document.addEventListener('click', () => {
languageDropdown.classList.remove('show');
});
}
// 显示提示消息(使用现有的 toast 系统)
function showToast(title, message, type = 'info') {
// 检查是否有 showToast 函数
if (typeof window.showToast === 'function') {
window.showToast(title, message, type);
} else {
// 如果没有,使用简单的 alert
console.log(`${title}: ${message}`);
}
}
export default {
createLanguageSwitcher,
initLanguageSwitcher
};