Files
CamTalk/frontend/src/lib/i18n/ja-JP.ts
cfy666 ae9a27c300 feat: 结束视频后保留对话,支持继续文字聊天
- useVisionSession 新增 stopVideo 回调(停媒体流,保持连接和消息)
- App.tsx 控制区从二态改为三态(initial/video/textOnly)
- 文字对话态显示「重新开始视频」和「结束会话」按钮
- 新增 CSS 样式(video-ended-hint、btn--outline)
- 新增 i18n key(stopVideo/endSession/resumeVideo/video.ended)
- 新增设计方案文档
2026-06-20 13:48:26 +08:00

177 lines
7.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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": "インタラクション言語の設定",
"settings.scenario": "シナリオ",
"settings.scenario.desc": "AIの役割を選択",
// Scenarios
"scenario.choose": "シナリオを選択",
"scenario.freeChat": "フリーチャット",
"scenario.freeChat.desc": "AIビジュアルアシスタントと自由に会話",
"scenario.interviewer": "模擬面接官",
"scenario.interviewer.desc": "AIが面接官として模擬面接を実施",
"scenario.englishTeacher": "英語の先生",
"scenario.englishTeacher.desc": "AI英語教師が文法を修正し会話を導く",
"scenario.debate": "ディベート相手",
"scenario.debate.desc": "AIがあなたの观点に反論し論理的思考を鍛える",
"scenario.interpreter": "同時通訳",
"scenario.interpreter.desc": "リアルタイムで中日相互翻訳",
// Video indicators
"video.observing": "👁️ 観察中",
"video.listening": "🎤 聞き取り中...",
"video.playing": "🔊 再生中...",
"video.initVad": "音声検出を初期化中...",
"video.clickToStart": "下のボタンをクリックして開始",
"video.placeholder": "右側のチャットに入力して開始",
"video.cameraOff": "カメラがオフです",
"video.cameraOff.hint": "右側のチャットでテキスト対話ができます",
"video.ended": "ビデオ終了",
"video.ended.hint": "下にテキストを入力して会話を続けることができます",
// Controls
"controls.connecting": "接続中...",
"controls.start": "🎙️ 対話を開始",
"controls.startVideo": "🎙️ ビデオ通話を開始",
"controls.cameraOff": "カメラをオフ",
"controls.cameraOn": "カメラをオン",
"controls.micOff": "マイクをオフ",
"controls.micOn": "マイクをオン",
"controls.observing": "👁️ 観察中",
"controls.observation": "👁️ 観察モード",
"controls.interrupt": "⏹ 中断",
"controls.stop": "対話を終了",
"controls.stopVideo": "ビデオ終了",
"controls.endSession": "セッション終了",
"controls.resumeVideo": "📹 ビデオ再開",
// Chat panel
"chat.title": "チャット",
"chat.mode.observation": "観察モード",
"chat.reconnecting": "接続が切断されました。再接続中...",
"chat.connecting": "サーバーに接続中...",
"chat.vadInit": "音声検出を初期化中...",
"chat.empty.prompt": "下にテキストを入力して対話を開始",
"chat.empty.hint": "テキストでAIと対話、または左のボタンでビデオ通話を開始",
"chat.welcome.prompt": "下にテキストを入力して対話を開始",
"chat.welcome.hint": "マイクを有効にして音声対話もできます",
"chat.userLabel": "あなた",
"chat.input.placeholder": "メッセージを入力...",
"chat.send": "送信",
"chat.scenarioSwitched": "{name} モードに切り替えました",
// Session messages
"session.changeDetected": "👁️ シーン変化を検出",
"session.recognizing": "(音声認識中...",
"session.sttFailed": "(音声認識に失敗しました。もう一度お試しください)",
"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": "不明なエラー",
// Sidebar
"sidebar.new": "新しいチャット",
"sidebar.expand": "サイドバーを展開",
"sidebar.collapse": "サイドバーを折りたたむ",
"sidebar.empty": "会話履歴がありません",
"sidebar.messages": "件のメッセージ",
"sidebar.rename": "名前を変更",
"sidebar.delete": "削除",
"sidebar.search": "会話を検索...",
"sidebar.today": "今日",
"sidebar.yesterday": "昨日",
"sidebar.earlier": "それ以前",
"sidebar.pinned": "ピン留め",
"sidebar.video": "ビデオ",
"sidebar.clearHistory": "履歴をクリア",
// Scene cards (empty state)
"scene.describe": "周囲のシーンを説明して",
"scene.describe.desc": "AIが現在のシーンを観察して説明します",
"scene.text": "画面のテキストを認識",
"scene.text.desc": "シーン内のテキストを抽出・翻訳します",
"scene.object": "この物を分析して",
"scene.object.desc": "物体を識別して関連情報を提供します",
"scene.suggest": "アドバイスをください",
"scene.suggest.desc": "現在のシーンに基づいた実用的な提案",
// Video controls (enhanced)
"controls.recognize": "シーンを分析",
"controls.device.camera": "カメラ",
"controls.device.mic": "マイク",
"controls.device.default": "デフォルト",
"controls.mode.realtime": "リアルタイム",
"controls.mode.ondemand": "オンデマンド",
"controls.mode.chat": "チャットのみ",
// Status bar
"statusbar.ready": "準備完了 · デバイスを選択して開始",
"statusbar.calling": "通話中",
"statusbar.duration": "通話時間",
"statusbar.recognitions": "回の認識",
"statusbar.tokens": "トークン",
// Input enhanced
"chat.input.voice": "音声入力",
// Device errors
"error.vadInit": "VAD初期化に失敗しました",
"error.cameraAccess": "カメラにアクセスできません",
"error.micAccess": "マイクにアクセスできません",
// Auth
"auth.subtitle": "AI ビジョンアシスタント",
"auth.login": "ログイン",
"auth.register": "新規登録",
"auth.username": "ユーザー名",
"auth.username.placeholder": "3〜64文字",
"auth.password": "パスワード",
"auth.password.placeholder": "8〜72文字",
"auth.submitting": "お待ちください...",
"auth.noAccount": "アカウントをお持ちでないですか?",
"auth.hasAccount": "すでにアカウントをお持ちですか?",
"auth.error.usernameLength": "ユーザー名は3〜64文字で入力してください",
"auth.error.passwordLength": "パスワードは8〜72文字で入力してください",
"auth.logout": "ログアウト",
// Account (in settings)
"settings.account": "アカウント",
"settings.account.user": "現在のユーザー",
};