"""VoxCast UI strings: Japanese. Key/placeholder parity with en.py enforced."""

STRINGS: dict[str, str] = {
    # ── Panel (main.qml) ────────────────────────────────────────────────
    "panel_ready": "準備完了",
    "panel_transcribing": "文字起こし中...",
    "panel_correcting": "修正中...",
    "panel_enhancing": "AI仕上げ中…",
    "panel_converting": "変換中...",
    "panel_error": "エラー",
    "panel_drop_file": "ファイルをドロップ → Markdown",
    "panel_acc_ai_mode": "AIモード",
    "panel_acc_settings": "設定",
    "panel_acc_undock": "切り離す",
    "panel_acc_hide": "非表示",

    # ── Settings window ─────────────────────────────────────────────────
    "settings_title": "設定",
    "sec_interface": "インターフェース",
    "row_ui_language": "言語",
    "sec_audio": "オーディオ",
    "row_microphone": "マイク",
    "opt_system_default": "システム既定",
    "row_voice_test": "音声テスト",
    "btn_test": "テスト",
    "btn_stop": "停止",
    "btn_play": "再生",
    "sec_recognition": "音声認識",
    "row_model": "モデル",
    "model_swift": "Swift",
    "model_precise": "Precise",
    "model_ultra": "Ultra",
    "hint_model_swift": "高速・軽量。グラフィックカードのないノートPCやPCに最適です。",
    "hint_model_precise": "バランスの取れた精度で、日常使いにおすすめ。ほとんどのPCで快適に動作します。",
    "hint_model_ultra": "最高精度。グラフィックカード（4 GB）との組み合わせが理想的で、ない場合は明らかに遅くなります。",
    "compat_gpu_ok": "お使いのグラフィックカード（{vram} GB）で動作します。",
    "compat_gpu_low": "お使いのグラフィックカード（{vram} GB）はこのモデルにはメモリが不足しているため、プロセッサで動作します（低速）。",
    "compat_cpu": "互換性のあるグラフィックカードが見つからないため、このモデルはプロセッサで動作します。",
    "compat_cpu_forced": "プロセッサで動作します（設定で指定済み）。",
    "row_language": "言語",
    "row_lang_auto": "言語を自動検出",
    "hint_lang_auto": "口述のたびに言語を検出します。言語を固定すると、より速く正確になります。",
    "row_live_mode": "ライブ文字起こし",
    "hint_live_mode": "停止した後ではなく、話している間にテキストがカーソル位置に表示されます。このモードではAI仕上げは行われず、テキストはカーソル位置に入力されます。",
    "hint_output_live": "ライブ文字起こしが有効です。話している間にテキストがカーソル位置に入力されるため、これらの出力オプションは適用されません。",
    "hint_live_cpu": "グラフィックカードでの利用が最適です。プロセッサでは発話に遅れる場合があります。",
    "live_cpu_warning": "ライブモードはプロセッサで動作しており、遅延する場合があります。グラフィックカードの使用をおすすめします。",
    "sec_output": "出力",
    "row_text_output": "テキスト出力",
    "opt_clipboard": "クリップボード",
    "opt_type_at_cursor": "カーソル位置に入力",
    "opt_both": "両方",
    "row_insert_method": "挿入方法",
    "opt_paste": "貼り付け（Ctrl+V）",
    "opt_typing": "キー入力",
    "hint_typing": "キーボード入力をシミュレートします。ターミナルでも動作します。",
    "sec_controls": "操作",
    "row_hotkey": "ホットキー",
    "row_mode": "モード",
    "opt_hold": "押している間",
    "opt_toggle": "切り替え",
    "sec_performance": "パフォーマンス",
    "row_compute": "処理装置",
    "opt_auto": "自動",
    "opt_gpu": "GPU",
    "opt_cpu": "CPU",
    "hint_cpu_slow": "CPUモードは低速です。",
    "sec_system": "システム",
    "row_autostart": "自動起動",
    "row_startup_sound": "起動サウンド",
    "row_recording_sound": "録音サウンド",
    "row_shutdown_sound": "終了サウンド",
    "row_always_on_top": "常に最前面",
    "row_small_panel": "小型パネル",
    "sec_file_conversion": "ファイル変換",
    "row_save_mode": "保存方法",
    "opt_ask": "毎回確認",
    "opt_beside_file": "元ファイルの隣",
    "opt_folder": "フォルダー",
    "row_folder": "フォルダー",
    "btn_browse": "参照",
    "row_timestamps": "タイムスタンプ",
    "row_open_after": "変換後に開く",
    "row_context_menu": "右クリックメニュー",
    "hint_context_menu": "エクスプローラーの右クリックメニューに「Markdownに変換」を追加します。",
    "sec_ai": "AI仕上げ",
    "row_enable": "有効化",
    "hint_ai": "AIで口述をきれいに仕上げます（整形、メール、返信…）。使用するモードはパネルの右クリック、またはパネルのAIボタンから選べます。",
    "row_provider": "プロバイダー",
    "row_api_key": "APIキー",
    "ph_api_key": "APIキーを貼り付け",
    "ph_api_key_saved": "•••••••• 保存済み、入力すると置き換え",
    "btn_save": "保存",
    "hint_key_stored": "キーはWindows資格情報マネージャーに安全に保存されます。",
    "btn_clear": "削除",
    "btn_load": "読み込み",
    "btn_loading": "読み込み中",
    "row_active_mode": "使用中のモード",
    "mode_normal": "ノーマル（AIなし）",
    # Display names of the built-in AI modes (shown while the user hasn't
    # renamed them; the stored name stays the English default).
    "mode_cleanup": "整形",
    "mode_email": "メール",
    "mode_reply": "返信",
    "mode_todo": "To-doリスト",
    "mode_notes": "メモ",
    "mode_formal": "フォーマル",
    "lbl_custom_modes": "カスタムモード",
    "sec_license": "ライセンス",
    "row_status": "状態",
    "lic_activated": "● 認証済み",
    "lic_not_activated": "○ 未認証",
    "btn_activate": "認証する",
    "sec_updates": "アップデート",
    "row_version": "バージョン",
    "btn_check_updates": "アップデートを確認",
    "btn_checking": "確認中",
    "btn_downloading_pct": "{pct}%  ダウンロード中…",
    "btn_download_install": "v{version} をダウンロードしてインストール",
    "btn_reset": "リセット",
    "reset_title": "設定のリセット",
    "reset_question": "すべての設定を既定値に戻しますか？",
    "dlg_model_dl_title": "ダウンロードが必要です",
    "dlg_model_dl_text": "選択したモデルはまだインストールされていません。VoxCast は約 {size} の音声データをダウンロードした後に切り替えます。今すぐダウンロードを開始しますか？",

    # ── Mode editor ─────────────────────────────────────────────────────
    "ph_mode_name": "モード名",
    "tip_remove_mode": "モードを削除",
    "ph_system_prompt": "システムプロンプト。文字起こしをどのように変換するかをAIに指示します。",
    "btn_add_mode": "モードを追加",
    "mode_new": "新しいモード",

    # ── Mode menu (panel) ───────────────────────────────────────────────
    "menu_ai_mode": "AIモード",
    "menu_ai_mode_off": "AIモード  ·  オフ",
    "menu_ai_settings": "設定…",
    "menu_copy_raw": "元の文字起こしをコピー",
    "tray_raw_copied": "元の文字起こしをクリップボードにコピーしました。",

    # ── Activation overlay ──────────────────────────────────────────────
    "act_title": "VoxCastを認証",
    "act_intro": "ライセンスキーを入力してこのデバイスを認証してください。認証は一度だけのオンライン手続きで、その後VoxCastは完全にオフラインで動作します。",
    "act_enter_key": "ライセンスキーを入力してください。",
    "act_button": "認証する",
    "act_button_busy": "認証中…",
    "act_update_available": "バージョン {version} が利用可能です。",
    "act_update_now": "今すぐ更新",
    "act_device": "デバイス: ",
    "act_quit": "終了",

    # ── First-run overlay ───────────────────────────────────────────────
    "fr_title": "VoxCastのセットアップ",
    "fr_pick_language": "音声認識に使う言語を選択してください。\nこれにより、毎回の時間がかかる自動判定を避けられます。",
    "fr_continue": "続行",
    "fr_preparing": "モデルを準備しています...",
    "fr_hint_label": "ヒント:",
    "status_hw_check": "ハードウェアを確認しています...",
    "fr_hw_gpu": "グラフィックカードを検出しました（{vram} GB）。モデル「{model}」をセットアップします。",
    "fr_hw_cpu": "専用グラフィックカードが見つかりませんでした。モデル「{model}」をセットアップします。",
    "fr_hint_download": "モデルは一度だけダウンロードされ、お使いのデバイスに保存されます。クラウドは不要です。",
    "fr_hint_hotkey": "Ctrl+Shift+Space で口述を開始し、もう一度押すと停止します。",
    "fr_hint_ai": "パネルを右クリックすると、AIモード（例: メール、返信）を選べます。",
    "fr_hint_dragfile": "ファイルをパネルにドラッグすると、Markdownに変換できます。",
    "fr_hint_audio": "音声ファイル（mp3、ogg、m4a…）をドロップすると文字起こしできます。",
    "fr_hint_explorer": "エクスプローラーでファイルを右クリック →「Markdownに変換」。",
    "fr_hint_dock": "パネルを画面の端にドッキングすると、必要になるまで隠れています。",
    "fr_hint_settings": "モデル、言語、ホットキーはいつでも設定から変更できます。",

    # ── Status messages (Python → panel) ────────────────────────────────
    "status_init_services": "サービスを初期化しています...",
    "status_loading_vad": "音声区間検出を読み込んでいます...",
    "status_loading_model": "音声認識モデルを読み込んでいます...",
    "status_init_models": "モデルを初期化しています...",
    "status_loading": "モデルを読み込んでいます...",
    "status_switching_model": "モデルを切り替えています...",
    "status_downloading_engine": "音声認識エンジンをダウンロードしています...",
    "status_engine_ready": "音声認識エンジンの準備完了",
    "status_downloading_correction": "修正モデルをダウンロードしています...",
    "status_correction_ready": "修正モデルのダウンロード完了",

    # ── Meeting recording ────────────────────────────────────────────────
    "menu_meeting_start": "会議を録音",
    "menu_meeting_stop": "会議の録音を停止",
    "meeting_consent_title": "会議の録音",
    "meeting_consent_body": "VoxCastは通話や会議を文字起こしできるよう、システム音声とマイクを録音します。\n\n参加者全員が録音に同意していることを必ず確認してください。多くの国（ドイツを含む）では、同意なしに通話を録音することは犯罪となります。",
    "meeting_consent_accept": "了解しました、録音を開始",
    "meeting_consent_cancel": "キャンセル",
    "status_meeting_recording": "会議を録音中",
    "status_meeting_transcribing": "会議を文字起こし中… {pct}%",
    "meeting_done_title": "会議の文字起こしが完了",
    "meeting_done_body": "文字起こしを保存しました。ここをクリックすると開きます。",
    "meeting_resume_note": "未完了の会議録音が見つかりました。今から文字起こしします。",
    "menu_meeting_folder": "会議フォルダーを開く",
    "meeting_source_title": "何を録音しますか？",
    "meeting_source_system": "システム全体",
    "meeting_source_empty": "現在、音声を再生しているアプリはありません",
    "meeting_app_fallback": "アプリ単体の録音を開始できなかったため、代わりにシステム全体を録音します。",
    "md_meeting_source": "ソース",
    "meeting_partial_note": "録音は途中で終了しましたが、記録できた部分は処理しました。",
    "meeting_system_silent": "システム音声が録音されませんでした。再生デバイスを確認してください。一部のヘッドセットは、Windowsが録音できない方式で音声を再生します。既定の出力デバイスを切り替えると解決する場合があります。",
    "meeting_summary_failed": "AI要約に失敗したため、文字起こしは要約なしで保存されました。",
    "err_meeting_folder": "会議フォルダーを作成できませんでした。設定でフォルダーを確認してください。",
    "err_meeting_disk": "空きディスク容量が不足しているため、会議の録音を停止しました。",
    "err_meeting_maxlen": "会議の最大録音時間（4時間）に達したため、録音を停止しました。",
    "err_meeting_capture": "会議の録音に失敗しました。音声をキャプチャできませんでした。",
    "err_meeting_transcribe": "会議の文字起こしに失敗しました。音声ファイルは保持されているので、再試行できます。",
    "md_meeting_title": "会議",
    "md_meeting_date": "日付",
    "md_meeting_duration": "所要時間",
    "md_meeting_summary": "要約",
    "md_meeting_transcript": "文字起こし",
    "sec_remote": "リモートサーバー",
    "row_remote_enable": "リモートサーバーを使用",
    "hint_remote": "より高性能なGPUまたはCPUを搭載した別のコンピューターで文字起こしを実行します。ディクテーション、ファイル変換、会議はサーバーで処理されます。",
    "hint_recognition_remote": "認識はリモートサーバーが処理するため、下のローカルモデルは無効になっています。モデルはサーバーで選択します。",
    "row_remote_url": "サーバーアドレス",
    "ph_remote_url": "http://192.168.1.10:8590",
    "row_remote_key": "APIキー",
    "ph_remote_key": "サーバーのAPIキーを貼り付け",
    "btn_remote_test": "接続をテスト",
    "remote_testing": "テスト中...",
    "btn_remote_discover": "サーバーを検索",
    "remote_discovering": "検索中...",
    "remote_discover_none": "サーバーが見つかりません。サーバーが起動していること、両方のデバイスが同じネットワークにあること、サーバーのファイアウォールがローカルネットワークでVoxCast Serverを許可していることを確認してください。",
    "remote_enhance_available": "AI仕上げを利用できます",
    "remote_update_available": "サーバーの更新があります: {version}",
    "row_tls_mode": "証明書",
    "tls_verify": "有効な証明書を必須にする",
    "tls_pinned": "このサーバーを信頼する",
    "tls_insecure": "任意の証明書を許可する",
    "btn_trust_cert": "証明書を確認",
    "tls_trust_title": "このサーバーを信頼しますか？",
    "tls_trust_body": "サーバーはこの証明書のフィンガープリントを提示しました。信頼する前に、ご自分のサーバーと一致することを確認してください。",
    "tls_trust_confirm": "信頼する",
    "tls_trust_failed": "サーバーの証明書を読み取れませんでした。アドレスとHTTPSが有効になっているか確認してください。",
    "tls_insecure_warning": "この接続は検証されません。信頼できるネットワークでのみ使用してください。",
    "row_enhance_source": "AI仕上げ",
    "enhance_own": "自分のAPIキー",
    "enhance_server": "サーバーを使う",
    "hint_enhance_server": "サーバーは独自のAIキーで仕上げるため、ここに入力する必要はありません。",
    "lbl_server_modes": "会社のモード（サーバーから）",
    "managed_locked": "組織によって管理されています",
    "remote_http_warn": "この接続は暗号化されていません。信頼できるローカルネットワークでのみ使用してください。",
    "remote_live_hint": "ライブ字幕はこのデバイスで実行されます。ローカルにインストールされたモデルが必要です。",
    "remote_connected": "接続済み: {where} 上の {model}",
    "remote_on_gpu": "GPU ({vram} GB)",
    "remote_on_cpu": "CPU",
    "err_remote_unreachable": "リモートサーバーに接続できませんでした。アドレスとネットワークを確認してください。",
    "err_remote_auth": "リモートサーバーがAPIキーを拒否しました。",
    "err_remote_busy": "リモートサーバーが混雑しています。しばらくしてからもう一度お試しください。",
    "err_remote_failed": "リモートサーバーはこの音声を処理できませんでした。",
    "sec_meeting": "会議",
    "row_meeting_mic": "マイクも録音",
    "hint_meeting_mic": "他の参加者だけでなく、自分の声も録音します。",
    "row_meeting_language": "言語",
    "lang_meeting_auto": "自動検出",
    "row_convert_language": "音声の言語",
    "lang_convert_auto": "自動検出",
    "err_convert_engine_loading": "音声エンジンを読み込み中です。しばらくしてから、もう一度変換してください。",
    "err_convert_no_speech": "このファイルから音声を認識できませんでした。Markdown ファイルは作成されていません。",
    "err_convert_engine_error": "文字起こし中に音声エンジンでエラーが発生しました。",
    "tray_convert_failed": "{name} を変換できませんでした: {error}",
    "hint_meeting_language": "自動検出はどの言語の会議にも対応し、会話の途中で言語が変わっても認識します。検出がうまくいかない場合のみ言語を指定してください。",
    "row_meeting_keep": "音声ファイルを保持",
    "hint_meeting_keep": "録音を.wavファイルとして文字起こしの隣に保存します。",
    "row_meeting_summary": "AI要約",
    "hint_meeting_summary": "文字起こしの冒頭にAIによる要約を追加します（AI仕上げの設定が必要です）。",
    "hint_meeting_summary_nokey": "AI仕上げが設定されていないため、要約はスキップされます。",
    "row_meeting_folder": "保存先",
    "meeting_folder_default": "ドキュメント\\VoxCast\\Meetings",
    "btn_open": "開く",

    # ── Errors / tray (Python) ──────────────────────────────────────────
    "err_audio_lib": "オーディオライブラリが利用できません",
    "err_gpu_oom": "GPUのメモリが不足しています。CPUモードで再起動してください。",
    "err_gpu_fallback": "グラフィックカードが利用できないため、プロセッサで動作します（低速）。",
    "err_hotkey_init": "ホットキーシステムが初期化されていません",
    "err_mic": "マイクエラーです。オーディオデバイスを確認してください。",
    "err_mic_test_busy": "すでに録音中です。マイクをテストする前に停止してください。",
    "err_model_switch": "モデルの切り替えに失敗しました。もう一度お試しください。",
    "err_model_download": "音声モデルのダウンロードに失敗しました。インターネット接続を確認してください。",
    "err_speech_start": "音声認識を開始できませんでした。",
    "err_transcription": "文字起こしに失敗しました。もう一度お試しください。",
    "err_model_missing": "音声モデルが見つかりません。設定でモデルを選択してください。",
    "tray_cpu_fallback": "互換性のあるGPUが見つかりません。CPUで動作します。\n文字起こしはGPUアクセラレーション使用時より遅くなります。",
    "tray_cpu_configured": "設定のとおり、CPUで動作しています。",
    "tray_cpu_detected": "互換性のあるGPUが検出されませんでした。CPUで動作します。\nより高速な文字起こしには、対応するGPUの使用をおすすめします。",
    "tray_file_not_found": "ファイルが見つかりません。",
    "tray_no_supported_files": "変換できる対応ファイルがありません。",
    "tray_still_starting": "VoxCastはまだ起動中です。もう一度お試しください。",
    "tray_no_output_folder": "出力フォルダーが未設定です。保存先を選択してください。",
    "tray_context_menu_failed": "右クリックメニューを更新できませんでした。",
    "tray_need_api_key": "先にAPIキーを入力して保存してください。",
    "tray_models_load_failed": "モデルを読み込めませんでした。",
    "tray_show_hide": "表示/非表示",

    # ── License (Python user messages) ──────────────────────────────────
    "lic_enter_key": "ライセンスキーを入力してください。",
    "lic_saved_failed": "認証されましたが、ライセンスをこのPCに保存できませんでした。",
    "lic_success": "VoxCastを認証しました。ありがとうございます！",
    "lic_check_failed": "認証に失敗しました。キーを確認してください。",
    "lic_no_server": "認証サーバーに接続できませんでした。インターネット接続を確認してください。",
    "lic_unexpected": "認証が予期せず失敗しました。もう一度お試しください。",

    # ── Updates (Python user messages) ──────────────────────────────────
    "upd_checking": "アップデートを確認しています…",
    "upd_latest": "最新バージョンをご利用中です。",
    "upd_available": "バージョン {version} が利用可能です。",
    "upd_dialog_title": "アップデートがあります",
    "upd_whats_new": "新機能",
    "upd_required": "必須",
    "upd_no_notes": "全般的な改善と不具合修正。",
    "upd_later": "後で",
    "upd_install_now": "ダウンロードしてインストール",
    "upd_install_note": "アップデートは現在のバージョンを自動的に置き換えます。他の操作は不要です。",
    "upd_downloading": "バージョン {version} をダウンロードしています…",
    "upd_failed": "アップデートに失敗しました。もう一度お試しください。",
    "upd_starting_installer": "インストーラーを起動しています…",
    "upd_installer_failed": "インストーラーを起動できませんでした。",
    "upd_err_filename": "アップデートマニフェスト内のインストーラーファイル名が想定外です。",
    "upd_err_https": "アップデートのダウンロードにはHTTPSが必要です。",
    "upd_err_response": "アップデートサーバーから無効な応答が返されました。",
    "upd_err_no_url": "ダウンロードURLがありません。",
    "upd_err_no_checksum": "アップデートマニフェストにチェックサムがありません。中止しました。",
    "upd_err_redirect": "アップデートサーバーが予期しないリダイレクトを返しました。",
    "upd_err_integrity": "ダウンロードしたファイルが整合性チェックに失敗しました。中止しました。",
    "upd_err_check": "アップデートを確認できませんでした: {error}",
    "upd_err_download": "ダウンロードに失敗しました: {error}",
    "upd_err_save": "アップデートを保存できませんでした: {error}",
    "upd_err_host": "信頼できないホスト '{host}' からのアップデートダウンロードを拒否しました。",

    # ── LLM (user messages) ─────────────────────────────────────────────
    # ── Late additions (review sweep) ───────────────────────────────────
    "act_first": "先にVoxCastを認証してください。",
    "llm_enhance_failed": "AI仕上げに失敗しました: {error}",
    "llm_truncated": "AIの応答が途中で切れたため、代わりに元の文字起こしを使用しました。",
    "llm_mode_needs_key": "AIモードが選択されています。仕上げを有効にするには、設定でAPIキーを追加してください。",
    "tt_recording": "録音中...",
    "tray_saved": "保存しました: {name}",
    "tray_converted": "{n} 個のファイルをMarkdownに変換しました。",
    "hk_press_key": "キーを押してください...",
    "hk_acc_record": "ホットキーにするキーを押してください",
    "no_folder": "フォルダーが選択されていません",
    "llm_load_models_ph": "モデルを読み込む →",

    "llm_no_key": "APIキーが指定されていません。",
    "llm_no_key_configured": "APIキーが設定されていません。",
    "llm_bad_key": "APIキーが無効か、認可されていません。",
    "llm_rate_limit": "レート制限に達しました。しばらくしてからもう一度お試しください。",
    "llm_provider_down": "AIプロバイダーが一時的に利用できません。",
    "llm_request_failed": "リクエストに失敗しました（{code}）。",
    "llm_network": "ネットワークエラー: {error}",
    "llm_no_model": "このAPIキーで利用できるAIモデルが見つかりません。",
}
