/** * 国际化工具类 * 支持中文和英文切换 */ // 语言包 const messages = { zh: { // 通用 common: { confirm: '确认', cancel: '取消', save: '保存', delete: '删除', edit: '编辑', add: '添加', back: '返回', refresh: '刷新', loading: '加载中...', success: '成功', error: '错误', warning: '警告', info: '信息', settings: '设置', status: '状态', online: '在线', offline: '离线', connected: '已连接', disconnected: '未连接' }, // 主页 home: { title: '智能家居', welcome: '欢迎使用萤火虫智能家居系统', deviceCount: '设备数量', roomCount: '房间数量', sceneCount: '场景数量' }, // 设备管理 device: { title: '设备管理', list: '设备列表', add: '添加设备', detail: '设备详情', name: '设备名称', type: '设备类型', room: '所在房间', status: '设备状态', temperature: '温度', humidity: '湿度', battery: '电池电量' }, // 厨房监控 kitchen: { title: '厨房监控', monitor: '实时监控', history: '报警历史', settings: '高级选项', temperature: '温度', fire: '火灾检测', person: '人员检测', alarm: '报警', normal: '正常', warning: '警告', danger: '危险' }, // 设置页面 settings: { title: '设置', deviceConfig: '设备配置', network: '网络设置', language: '语言设置', about: '关于', version: '版本信息', // 设备配置 alarmThreshold: '报警阈值', timing: '时间设置', frequency: '频率设置', sound: '声音设置', light: '灯光设置', // 时间设置 timingTitle: '时间设置', timingDesc: 'StillSense等待多长时间后进行检查?', timingShorter: '较短', timingDefault: '默认', timingLonger: '较长', timingNote: '这影响StillSense的耐心程度——而不是它如何判断情况。', // 频率设置 frequencyTitle: '频率设置', frequencyDesc: 'StillSense应该多久重复一次检查?', frequencyOnce: '一次', frequencyFewMinutes: '每隔几分钟', frequencyUntilAck: '直到确认', frequencyNote: 'StillSense不会过于频繁地重复检查。', // 声音设置 soundTitle: '声音设置', soundSoft: '轻柔', soundNormal: '正常', soundClear: '清晰', soundNote: '声音表示紧急程度,而不是危险程度。', // 灯光设置 lightTitle: '灯光设置', lightDirectional: '方向LED', lightIntensity: '灯光强度', lightOn: '开启', lightOff: '关闭', lightLow: '低', lightMedium: '中', lightHigh: '高', lightNote: '灯光帮助您快速看到需要注意的地方。' } }, en: { // Common common: { confirm: 'Confirm', cancel: 'Cancel', save: 'Save', delete: 'Delete', edit: 'Edit', add: 'Add', back: 'Back', refresh: 'Refresh', loading: 'Loading...', success: 'Success', error: 'Error', warning: 'Warning', info: 'Info', settings: 'Settings', status: 'Status', online: 'Online', offline: 'Offline', connected: 'Connected', disconnected: 'Disconnected' }, // Home home: { title: 'Smart Home', welcome: 'Welcome to Firefly Smart Home System', deviceCount: 'Device Count', roomCount: 'Room Count', sceneCount: 'Scene Count' }, // Device Management device: { title: 'Device Management', list: 'Device List', add: 'Add Device', detail: 'Device Details', name: 'Device Name', type: 'Device Type', room: 'Room', status: 'Device Status', temperature: 'Temperature', humidity: 'Humidity', battery: 'Battery Level' }, // Kitchen Monitor kitchen: { title: 'Kitchen Monitor', monitor: 'Real-time Monitor', history: 'Alarm History', settings: 'Advanced Options', temperature: 'Temperature', fire: 'Fire Detection', person: 'Person Detection', alarm: 'Alarm', normal: 'Normal', warning: 'Warning', danger: 'Danger' }, // Settings settings: { title: 'Settings', deviceConfig: 'Device Configuration', network: 'Network Settings', language: 'Language Settings', about: 'About', version: 'Version Info', // Device Configuration alarmThreshold: 'Alarm Threshold', timing: 'Timing Settings', frequency: 'Frequency Settings', sound: 'Sound Settings', light: 'Light Settings', // Timing Settings timingTitle: 'Timing', timingDesc: 'How long should StillSense wait before checking in?', timingShorter: 'Shorter', timingDefault: 'Default', timingLonger: 'Longer', timingNote: 'This affects how patient StillSense is — not how it judges a situation.', // Frequency Settings frequencyTitle: 'Frequency', frequencyDesc: 'How often should StillSense repeat a check-in?', frequencyOnce: 'Once', frequencyFewMinutes: 'Every few minutes', frequencyUntilAck: 'Until acknowledged', frequencyNote: 'StillSense won\'t repeat check-ins too often.', // Sound Settings soundTitle: 'Sound', soundSoft: 'Soft', soundNormal: 'Normal', soundClear: 'Clear', soundNote: 'Sound indicates urgency, not danger.', // Light Settings lightTitle: 'Light', lightDirectional: 'Directional LED', lightIntensity: 'Light intensity', lightOn: 'On', lightOff: 'Off', lightLow: 'Low', lightMedium: 'Medium', lightHigh: 'High', lightNote: 'Lights help you quickly see where attention is needed.' } } } // 当前语言 let currentLanguage = 'zh' // 国际化工具类 class I18n { constructor() { // 从本地存储读取语言设置 this.loadLanguage() } // 加载语言设置 loadLanguage() { try { const savedLang = uni.getStorageSync('app_language') if (savedLang && (savedLang === 'zh' || savedLang === 'en')) { currentLanguage = savedLang } } catch (e) { console.warn('Failed to load language setting:', e) } } // 保存语言设置 saveLanguage(lang) { try { uni.setStorageSync('app_language', lang) currentLanguage = lang } catch (e) { console.error('Failed to save language setting:', e) } } // 获取当前语言 getCurrentLanguage() { return currentLanguage } // 设置语言 setLanguage(lang) { if (lang === 'zh' || lang === 'en') { this.saveLanguage(lang) return true } return false } // 获取翻译文本 t(key) { const keys = key.split('.') let value = messages[currentLanguage] for (const k of keys) { if (value && typeof value === 'object' && k in value) { value = value[k] } else { // 如果当前语言没有找到,尝试中文 if (currentLanguage !== 'zh') { let fallback = messages.zh for (const fk of keys) { if (fallback && typeof fallback === 'object' && fk in fallback) { fallback = fallback[fk] } else { fallback = key break } } return fallback } return key } } return value || key } // 获取所有支持的语言 getSupportedLanguages() { return [ { code: 'zh', name: '中文', nativeName: '中文' }, { code: 'en', name: 'English', nativeName: 'English' } ] } } // 创建全局实例 const i18n = new I18n() // 导出 export default i18n export { I18n }