Files
CamTalk/frontend/src/lib/i18n/ja-JP.ts
cfy666 6967dd7b2e feat: 实现摄像头和麦克风设备选择功能
- 新增 useDeviceList hook,枚举音视频输入设备并监听热插拔
- CameraManager/MicManager 的 startCamera/startMic 支持可选 deviceId 参数
- useVisionSession 集成设备选择:授权后自动枚举、切换设备时热重启
- 连接后显示设备下拉选择器,未连接时隐藏(避免未授权时空列表)
- SessionConfig 新增 cameraDeviceId/micDeviceId 持久化到 localStorage
2026-06-21 16:49:48 +08:00

209 lines
10 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.freeChat.hint": "AIがビジュアルアシスタントとしてあなたの質問に答えます",
"scenario.interviewer": "模擬面接官",
"scenario.interviewer.desc": "AIが面接官として模擬面接を実施",
"scenario.interviewer.hint": "AIが面接官として専門的な質問をし、フィードバックを提供します",
"scenario.englishTeacher": "英語の先生",
"scenario.englishTeacher.desc": "AI英語教師が文法を修正し会話を導く",
"scenario.englishTeacher.hint": "AIが英語で会話し、文法の誤りを修正して深い対話を導きます",
"scenario.debate": "ディベート相手",
"scenario.debate.desc": "AIがあなたの观点に反論し論理的思考を鍛える",
"scenario.debate.hint": "AIが反対の立場から論理と証拠であなたの观点に反論します",
"scenario.interpreter": "同時通訳",
"scenario.interpreter.desc": "リアルタイムで中日相互翻訳",
"scenario.interpreter.hint": "AIがあなたの発言をリアルタイムで翻訳します中日相互翻訳、説明なし",
// Video indicators
"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.interrupt": "⏹ 中断",
"controls.stop": "対話を終了",
"controls.stopVideo": "ビデオ終了",
"controls.endSession": "セッション終了",
"controls.resumeVideo": "📹 ビデオ再開",
// Chat panel
"chat.title": "チャット",
"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.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.default": "デフォルト",
// 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": "現在のユーザー",
// Custom scenarios
"settings.scenario.system": "システムシナリオ",
"settings.scenario.custom": "マイシナリオ",
"settings.scenario.empty": "カスタムシナリオはまだありません。上のボタンをクリックして作成してください。",
"scenario.create.button": "新しいシナリオ",
"scenario.create.title": "カスタムシナリオを作成",
"scenario.edit.title": "シナリオを編集",
"scenario.create.name": "シナリオ名",
"scenario.create.namePlaceholder": "例:クリエイティブライティングコーチ",
"scenario.create.icon": "アイコン",
"scenario.create.description": "簡単な説明",
"scenario.create.descriptionPlaceholder": "このシナリオの概要を一文で",
"scenario.create.prompt": "システムプロンプト",
"scenario.create.promptPlaceholder": "AIの役割と対話ルールを定義...",
"scenario.create.promptGuide": "ガイドを見る",
"scenario.create.promptGuide.tips": "作成のヒント:",
"scenario.create.promptGuide.tip1": "役割を明確に定義:何者で、何者でないか",
"scenario.create.promptGuide.tip2": "対話ルールをリスト化:応答方法、文数",
"scenario.create.promptGuide.tip3": "制約を追加:何をしないか",
"scenario.create.promptGuide.example": "例:",
"scenario.create.greeting": "挨拶(オプション)",
"scenario.create.greetingPlaceholder": "このシナリオに切り替えた時の最初のメッセージ...",
"scenario.create.language": "デフォルト言語",
"scenario.error.nameLength": "シナリオ名は2〜50文字で入力してください",
"scenario.error.promptLength": "プロンプトは10〜2000文字で入力してください",
"scenario.error.greetingLength": "挨拶は500文字以内で入力してください",
// Common actions
"common.cancel": "キャンセル",
"common.create": "作成",
"common.creating": "作成中...",
"common.save": "保存",
"common.saving": "保存中...",
"common.edit": "編集",
"common.delete": "削除",
"common.confirmDelete": "もう一度クリックして確認",
};