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:
86
frontend/src/lib/i18n/ja-JP.ts
Normal file
86
frontend/src/lib/i18n/ja-JP.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
import type { TranslationMap } from "./index";
|
||||
|
||||
export const jaJP: 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": "マイクにアクセスできません",
|
||||
};
|
||||
Reference in New Issue
Block a user