feat: 前端 UI 国际化,支持中/英/日三语切换

之前语言设置只影响后端 AI 行为,前端 UI 文字始终为中文。
新增轻量 i18n 模块(React Context + 翻译字典),切换语言后所有 UI 文字即时刷新。

- 新增 i18n 核心模块和 zh-CN/en-US/ja-JP 翻译文件(约 72 个 key)
- App.tsx 拆分为 App(Provider)+ AppContent(业务),确保 Hook 可访问 Context
- 所有组件通过 useI18n().t() 获取翻译文本
- errors.ts 改为接受翻译函数参数
- storage.ts saveConfig 时派发事件通知 locale 变化
This commit is contained in:
2026-06-14 14:34:30 +08:00
parent d8bbdb1744
commit e95b1603c1
14 changed files with 418 additions and 71 deletions

View File

@@ -0,0 +1,86 @@
import type { TranslationMap } from "./index";
export const zhCN: TranslationMap = {
// App header
"app.title": "AI 视觉对话助手",
"app.stats.requests": "次请求",
// Connection status
"status.connected": "已连接",
"status.connecting": "连接中...",
"status.disconnected": "未连接",
// Settings
"settings.title": "设置",
"settings.appearance": "外观",
"settings.theme": "主题",
"settings.theme.desc": "切换明暗主题",
"settings.theme.dark": "深色",
"settings.theme.light": "浅色",
"settings.session": "会话",
"settings.tts": "语音回答",
"settings.tts.desc": "AI 回答时同步播放语音",
"settings.detail": "图像精度",
"settings.detail.desc": "高精度适合识别文字,低精度省流量",
"settings.detail.low": "低",
"settings.detail.high": "高",
"settings.language": "语言",
"settings.language.desc": "交互语言偏好",
// Video indicators
"video.observing": "👁️ 观察中",
"video.listening": "🎤 正在聆听...",
"video.playing": "🔊 正在播放...",
"video.initVad": "正在初始化语音检测...",
"video.clickToStart": "点击下方按钮开始对话",
"video.cameraOff": "摄像头未开启",
"video.cameraOff.hint": "可在右侧聊天框打字对话",
// Controls
"controls.connecting": "连接中...",
"controls.start": "🎙️ 开始对话",
"controls.cameraOff": "关闭摄像头",
"controls.cameraOn": "开启摄像头",
"controls.micOff": "关闭麦克风",
"controls.micOn": "开启麦克风",
"controls.observing": "👁️ 观察中",
"controls.observation": "👁️ 观察模式",
"controls.interrupt": "⏹ 打断",
"controls.stop": "结束对话",
// Chat panel
"chat.title": "对话",
"chat.mode.observation": "观察模式",
"chat.reconnecting": "连接已断开,正在重连...",
"chat.empty.prompt": "点击下方按钮开始对话",
"chat.empty.hint": "连接后可打字或语音与 AI 交互",
"chat.welcome.prompt": "在下方输入文字开始对话",
"chat.welcome.hint": "也可以开启麦克风用语音对话",
"chat.userLabel": "你",
"chat.input.placeholder": "输入文字对话...",
"chat.send": "发送",
// Session messages
"session.changeDetected": "👁️ 画面变化检测",
"session.recognizing": "(语音识别中...",
"session.noSpeech": "(未识别到语音)",
"session.interrupted": "(已打断)",
// Errors
"error.INVALID_MESSAGE": "消息格式异常,请重试",
"error.SESSION_NOT_FOUND": "会话已过期,请重新连接",
"error.RATE_LIMITED": "请求太频繁,请稍后再试",
"error.IMAGE_TOO_LARGE": "图像过大,请降低分辨率",
"error.AUDIO_TOO_SHORT": "语音太短,请再说一句",
"error.LLM_TIMEOUT": "AI 响应超时,请重试",
"error.LLM_ERROR": "AI 服务异常,请稍后重试",
"error.STT_ERROR": "语音识别失败,请重试",
"error.TTS_ERROR": "语音合成失败",
"error.INTERNAL_ERROR": "服务内部错误,请重试",
"error.unknown": "未知错误",
// Device errors
"error.vadInit": "VAD 初始化失败",
"error.cameraAccess": "无法访问摄像头",
"error.micAccess": "无法访问麦克风",
};