329 lines
8.1 KiB
JavaScript
329 lines
8.1 KiB
JavaScript
|
|
/**
|
|||
|
|
* 国际化工具类
|
|||
|
|
* 支持中文和英文切换
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
// 语言包
|
|||
|
|
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 }
|