// 语言切换功能 document.addEventListener('DOMContentLoaded', function() { const languageSwitcher = document.getElementById('language-switcher'); // 中文词汇表 const zhTranslations = { 'Login': '登录', 'Register': '注册', 'Email': '邮箱', 'Password': '密码', 'Confirm Password': '确认密码', 'Name': '姓名', 'Gender': '性别', 'Male': '男', 'Female': '女', 'Other': '其他', 'Birth Date': '出生日期', 'Verification Code': '验证码', 'Don\'t have an account?': '还没有账号?', 'Sign up now': '立即注册', 'Already have an account?': '已有账号?', 'Sign in now': '立即登录', 'Text Classification System': '中文文本分类系统', 'Password must be at least 8 characters long': '密码长度至少为8个字符', 'Passwords do not match': '两次输入的密码不一致', 'A verification code has been sent to your email. Please enter the 6-digit code below to complete registration.': '验证码已发送到您的邮箱,请在下方输入6位数验证码完成注册。', 'Verify': '验证', 'Logging in...': '登录中...', 'Sending verification code...': '发送验证码...', 'Verifying...': '验证中...', 'Ziyao Text Classification System': '子尧中文文本分类系统' }; // 英文词汇表 const enTranslations = { '登录': 'Login', '注册': 'Register', '邮箱': 'Email', '邮箱(用作登录名)': 'Email (used as login name)', '密码': 'Password', '确认密码': 'Confirm Password', '姓名': 'Name', '性别': 'Gender', '男': 'Male', '女': 'Female', '其他': 'Other', '出生日期': 'Birth Date', '验证码': 'Verification Code', '还没有账号?': 'Don\'t have an account?', '立即注册': 'Sign up now', '已有账号?': 'Already have an account?', '立即登录': 'Sign in now', '中文文本分类系统': 'Chinese Text Classification System', '文本分类系统登录': 'Text Classification System - Login', '注册新账号': 'Register New Account', '密码长度至少为8个字符': 'Password must be at least 8 characters long', '两次输入的密码不一致': 'Passwords do not match', '验证码已发送到您的邮箱,请在下方输入6位数验证码完成注册。': 'A verification code has been sent to your email. Please enter the 6-digit code below to complete registration.', '验证': 'Verify', '登录中...': 'Logging in...', '发送验证码...': 'Sending verification code...', '验证中...': 'Verifying...', '子尧中文文本分类系统': 'Ziyao Text Classification System' }; // 检查本地存储中的语言偏好 let currentLang = localStorage.getItem('language') || 'zh'; updateLanguageButton(currentLang); // 如果当前是英文,则翻译页面 if (currentLang === 'en') { translatePage(true); } // 语言切换事件 languageSwitcher.addEventListener('click', function() { currentLang = currentLang === 'zh' ? 'en' : 'zh'; localStorage.setItem('language', currentLang); updateLanguageButton(currentLang); translatePage(currentLang === 'en'); }); function updateLanguageButton(lang) { languageSwitcher.textContent = lang === 'zh' ? 'EN' : 'CN'; } function translatePage(toEnglish) { // 获取所有文本节点 const translationMap = toEnglish ? zhTranslations : enTranslations; // 翻译标题 document.title = translateText(document.title, translationMap); // 翻译所有文本内容 translateNode(document.body, translationMap); // 翻译属性 translateAttributes(translationMap); } function translateNode(node, translationMap) { if (node.nodeType === 3) { // 文本节点 const text = node.nodeValue.trim(); if (text && text.length > 0) { const translated = translateText(text, translationMap); if (translated !== text) { node.nodeValue = node.nodeValue.replace(text, translated); } } } else if (node.nodeType === 1) { // 元素节点 if (!node.classList.contains('no-translate')) { // 遍历子节点 for (let i = 0; i < node.childNodes.length; i++) { translateNode(node.childNodes[i], translationMap); } // 翻译 placeholder if (node.hasAttribute('placeholder')) { const placeholder = node.getAttribute('placeholder'); const translatedPlaceholder = translateText(placeholder, translationMap); if (translatedPlaceholder !== placeholder) { node.setAttribute('placeholder', translatedPlaceholder); } } } } } function translateText(text, translationMap) { return translationMap[text] || text; } function translateAttributes(translationMap) { // 翻译按钮文本、标题等 document.querySelectorAll('[data-translate]').forEach(el => { const key = el.getAttribute('data-translate'); if (key && translationMap[key]) { el.textContent = translationMap[key]; } }); } });