import type { zhCN } from './zh-CN';
import { en } from './en';

// 日本語 (Beta) — AI 機械翻訳ベース。ネイティブ話者によるレビューを推奨。
// 構造は zh-CN.ts に追従。新しい key を追加する場合は ja.ts / ko.ts も同時に
// 更新してください（更新されない key は ...en で英語にフォールバックします）。
export const ja: typeof zhCN = {
  ...en,
  app: {
    name: 'OpenLess',
    tagline: '自然に話し、きれいに書く',
  },
  common: {
    loading: '読み込み中…',
    retry: '再試行',
    settingsLoadFailed: '設定の読み込みに失敗しました',
    refresh: '更新',
    clear: 'クリア',
    copy: 'コピー',
    delete: '削除',
    later: '後で',
    cancel: 'キャンセル',
    close: '閉じる',
    show: '表示',
    hide: '非表示',
    saved: '保存しました',
    saving: '保存中',
    copied: 'コピーしました',
    operationFailed: '操作に失敗しました',
    add: '追加',
    durationSeconds: '{{value}} 秒',
    durationMinutes: '{{value}} 分',
  },
  capsule: {
    thinking: 'thinking',
    cancelled: 'キャンセルしました',
    error: 'エラーが発生しました',
    inserted: '{{count}} 文字を入力しました',
    translating: '翻訳中',
  },
  qa: {
    thinking: '思考中…',
    error: 'エラーが発生しました。後でもう一度お試しください。',
    errorRetry: '再試行',
    errorRetryHint: '再度 {{recordHotkey}} を押して質問し直してください。',
    pinTooltip: 'ピン留め（自動で閉じない）',
    unpinTooltip: 'ピン留めを解除',
    closeTooltip: '閉じる',
    selectionPreview: '選択テキスト：',
    emptyTitle: '{{recordHotkey}} を押して質問を開始',
    emptyDesc: '任意のアプリでテキストを選択した後、{{recordHotkey}} を 1 回押して録音を開始し、もう 1 回押して送信します。回答はここに表示され、続けて追加質問が可能です。',
    recordingHint: '録音中… {{recordHotkey}} をもう一度押して終了し、質問します',
    statusIdle: '{{recordHotkey}} で質問',
    statusRecording: '録音中',
    statusThinking: '思考中',
    statusError: 'エラー',
  },
  nav: {
    overview: '概要',
    history: '履歴',
    vocab: '語彙',
    style: 'スタイル',
    marketplace: 'マーケット',
    translation: '翻訳',
    selectionAsk: '選択追問',
    localAsr: 'モデル設定',
  },
  marketplace: {
    kicker: 'MARKETPLACE',
    title: 'スタイルパック マーケット',
    desc: 'コミュニティのスタイルパックを閲覧・インストール・共有。',
    searchPlaceholder: '名前 / 説明 / タグを検索…',
    sortPopular: '人気順',
    sortNew: '新着',
    uploadBtn: 'アップロード',
    uploadDisabledHint: '先に 設定 → マーケット で GitHub ユーザー名を設定してください',
    refreshBtn: '更新',
    empty: 'まだスタイルパックがありません',
    emptyHint: '別のキーワードを試すか、自分のパックを共有してみましょう',
    loadFailed: '読み込み失敗：{{err}}',
    noDescription: '（説明なし）',
    installBtn: 'インストール',
    likeBtn: 'いいね',
    installed: '「{{name}}」をローカルにインストールしました',
    uploaded: 'アップロード完了、審査中',
    uploadTitle: 'アップロードするパックを選択',
    uploadHint: '{{login}} としてアップロードします。内容はクラウド審査キューに送信されます。',
    uploadNoLocal: 'アップロード可能なローカルパックがありません',
    errors: {
      detail: '詳細の読み込み失敗：{{err}}',
      install: 'インストール失敗：{{err}}',
      like: 'いいね失敗：{{err}}',
      upload: 'アップロード失敗：{{err}}',
      loadLocal: 'ローカルパック読み込み失敗：{{err}}',
    },
    sortLiked: 'いいね済み',
    likedEmpty: 'まだいいねしたパックがありません',
    likedEmptyHint: 'パックを開いて星をタップするとここに表示されます',
    derivativeBadge: '@{{login}} から派生',
    detail: {
      withdrawBtn: '公開を取り下げる',
      withdrawConfirm: '「{{name}}」をマーケットから取り下げますか？ローカルコピーは保持されます。',
      withdrawSuccess: 'マーケットから取り下げました',
      withdrawFailed: '取り下げ失敗：{{err}}',
    },
    myPacks: {
      buttonLabel: '自分の公開',
      buttonTitle: '{{login}} の公開を見る',
      buttonTitleEmpty: '先に 設定 → マーケット で公開者名を設定してください',
      searchPlaceholder: '名前・タグを検索',
      notLoggedIn: '先に 設定 → マーケット で公開者名を設定してください',
      emptyTitle: 'まだ公開したパックはありません',
      emptyHint: '「スタイル」ページで編集して「マーケットに公開」をクリックするか、右上からローカルパックをアップロードしてください。',
      noMatch: '一致するパックがありません',
      summary: '公開済み {{count}} 個',
      summaryPending: '公開済み {{count}} 個 · 審査中 {{pending}} 個',
      versionDate: 'v{{version}} · {{date}}',
      stats: '★ {{likes}} · ↓ {{downloads}}',
      actions: {
        update: '更新',
        withdraw: '取り下げ',
      },
      loadFailed: '自分の公開の読み込みに失敗：{{err}}',
      loadingTitle: '読み込み中…',
      loadingHint: 'マーケットからあなたの最新公開を取得しています。',
      loadErrorTitle: '読み込み失敗',
      loadErrorRetry: '再試行',
    },
    upload: {
      confirmBtn: 'アップロード確定',
      updateTitle: '「{{name}}」を更新',
      updateHint: 'アップロードするローカルの新版を選んで「アップロード確定」を押してください。同名パックは自動選択されます。',
      recommendedBadge: '推奨',
    },
    state: {
      pending: '審査中',
      approved: '公開済み',
      rejected: '却下',
      withdrawn: '取り下げ',
      superseded: '新版に置換済み',
      unknown: '不明',
    },
    oauth: {
      title: 'GitHub でサインイン',
      generating: 'デバイスコードを生成中…',
      browserHint: 'ブラウザで {{uri}} を開き、このコードを入力してください：',
      copyBtn: 'コピー',
      copied: 'デバイスコードをコピー',
      copyFailed: 'コピー失敗：{{err}}',
      openBrowserBtn: 'ブラウザを開く',
      cancelBtn: 'キャンセル',
      waiting: 'ブラウザでの認可を待っています…',
      successAs: '@{{login}} としてサインイン',
      retryBtn: '再試行',
      closeBtn: '閉じる',
      loginBtn: 'サインイン',
      loginTooltip: 'GitHub でサインイン',
      reloginTooltip: '再サインイン / アカウント切替（現在 @{{login}}）',
    },
    modal: {
      loggedIn: '現在のサインイン ID —— 設定 → 録音 → マーケット で変更',
      notLoggedIn: '未サインイン —— 設定 → 録音 → マーケット で公開者名を設定',
      notLoggedInLabel: '未サインイン',
    },
  },
  shell: {
    shortcutLabel: '録音ショートカット',
    shortcutHint: '開始 / 停止',
    betaTag: 'BETA',
    betaNote: 'すべてのデータはローカルにのみ保存されます。',
    footer: {
      account: 'アカウント',
      feedback: 'フィードバック',
      settings: '設定',
      help: 'ヘルプ',
      version: 'バージョン {{version}}',
      helpPopover: {
        tagline: 'ローカル駆動の音声入力レイヤー',
        releaseNotes: 'リリースノートを見る ↗',
        docs: 'ヘルプセンター ↗',
      },
    },
    providerPrompt: {
      title: '音声プロバイダーを設定',
      body: 'ASR または LLM プロバイダーが未設定のため、音声入力と整文が一時的に利用できません。',
      later: '後で',
      openSettings: '設定を開く',
    },
    hotkeyModePrompt: {
      title: '録音方式を確認',
      body: 'デフォルトがトグルに変更されました。以前トリガーモードを変更した場合は、録音設定で確認してください。',
      later: '後で通知',
      openSettings: '録音設定を開く',
    },
  },
  onboarding: {
    welcome: 'OpenLess へようこそ',
    intro: 'ローカルで話し、ローカルで文字に。開始前にシステム権限が 2 つ必要です。',
    accessibilityTitle: 'アクセシビリティ',
    hotkeyTitle: 'グローバルショートカット',
    accessibilityDesc: 'グローバルショートカット（既定 {{trigger}}）の検知と、認識結果のカーソル位置への入力に使用します。',
    hotkeyDesc: 'グローバルショートカット監視が利用可能か確認するために使用します。',
    micTitle: 'マイク',
    micDesc: '音声入力の取得に使用します。',
    actionNotApplicable: '権限不要',
    actionGranted: '許可済み',
    actionOpenSystem: 'システム設定を開く',
    actionGrant: '許可する',
    actionRequestMic: '許可ダイアログを表示',
    accessibilityHint: '許可後は **OpenLess を完全に終了** してから再起動してください（macOS TCC の仕様）。',
    footerHint: 'すべての権限が揃うとこのガイドは自動で閉じます。閉じない場合はメニューバーの OpenLess → 終了 から再起動してください。',
  },
  overview: {
    kicker: 'DASHBOARD',
    title: '本日の概要',
    desc: '本日のディクテーション統計とシステム状態。',
    pressPrefix: '押す',
    pressSuffix: 'で録音開始',
    asrKind: 'ASR 音声',
    llmKind: 'LLM モデル',
    asrName: 'Volcengine',
    asrSubname: 'bigmodel',
    llmName: 'OpenAI 互換',
    llmConfigured: 'アクティブ LLM を設定済み',
    llmNotConfigured: '未設定',
    statusConfigured: '設定済み',
    statusNotConfigured: '未設定',
    statusUnknown: '読み取れません',
    credentialsLoadError: '認証情報の状態を読み取れません',
    metricChars: '本日の文字数',
    metricSegments: '{{count}} セグメント',
    metricDuration: '本日の合計時間',
    metricAvg: '平均セグメント',
    metricAvgTrend: '本日の平均',
    metricNoData: 'データなし',
    historyLoadError: '履歴の読み込みに失敗',
    metricTotal: '累計記録',
    metricTotalTrend: 'ローカル保存（上限 200）',
    weekTitle: '直近 7 日',
    weekUnit: '件 / 日',
    recentTitle: '最近の認識',
    recentAll: 'すべて表示 →',
    recentEmpty: '記録がありません。{{trigger}} を押して最初の録音を始めましょう。',
    recentLoadFailed: '最近の認識を読み込めません。再試行してください。',
    historyRetry: '再試行',
    weekDays: ['日', '月', '火', '水', '木', '金', '土'],
  },
  history: {
    kicker: 'HISTORY',
    title: '履歴',
    desc: 'ローカルに保存された認識記録。',
    filterAll: 'すべて',
    summary: '合計 {{total}} 件 · 表示 {{shown}}',
    empty: '履歴がありません。{{trigger}} を押して録音してみましょう。',
    loadFailed: '履歴の読み込みに失敗：{{err}}',
    retry: '再試行',
    clearFailed: '履歴の消去に失敗：{{err}}',
    deleteFailed: '記録の削除に失敗：{{err}}',
    copyFailed: 'コピーに失敗：{{err}}',
    playRecording: '録音を再生',
    audioLoading: '読み込み中…',
    exportRecording: '録音をエクスポート',
    exportFailed: 'エクスポート失敗：{{err}}',
    rawLabel: '原文',
    rawEmpty: '（空）',
    selectHint: '左側から 1 件選択して詳細を表示。',
    insertedTo: '入力先',
    chars: '{{count}} 文字',
    vocabHits: '{{count}} ホットワード',
    inserted: '入力済み',
    pasteSent: '貼り付けを試行',
    copiedFallback: 'コピー済み（要 {{shortcut}}）',
    insertFailed: '入力失敗',
    confirmClear: '全 {{count}} 件の記録を削除しますか？この操作は取り消せません。',
  },
  vocab: {
    kicker: 'VOCABULARY',
    title: '語彙',
    desc: '新語や専門用語を追加して認識精度を向上。',
    sectionTitle: '項目',
    placeholder: '単語を入力し、Enter または追加をクリック…',
    tip: '日本語と英数の混在対応 · 数字始まりは字面通り認識 · ヒット回数を自動カウント',
    loadFailed: '読み込み失敗：{{err}}',
    empty: '語彙がありません。新語や専門用語を上に入力すると、ディクテーション時に優先的にマッチします。',
    tipDisabled: 'クリックで無効化',
    tipEnabled: 'クリックで有効化',
    removeAria: '削除',
    corrections: {
      title: '補正ルール',
      tip: 'ASR の誤認識を修正。{num} 数字ワイルドカード対応。',
      patternPlaceholder: '誤認識された表記（例：{num}粒）',
      replacementPlaceholder: '修正後の表記（例：{num}例）',
      empty: '補正ルールはまだありません。',
      invalid: '文字列の置換、または {num} 数字ワイルドカードを 1 つだけ含むルールに対応しています。例：{num}粒 → {num}例。',
      tipDisabled: 'クリックしてこのルールを無効化',
      tipEnabled: 'クリックしてこのルールを有効化',
      removeAria: '補正ルールを削除',
    },
    presets: {
      title: 'シーンプリセット',
      tip: '複数選択で一括適用。編集・新規作成対応。',
      create: 'プリセット新規作成',
      apply: '選択中を有効化',
      save: 'プリセットを保存',
      edit: '{{name}} を編集',
      newPreset: '新しいプリセット',
      namePlaceholder: 'プリセット名',
      wordsPlaceholder: '語彙（カンマまたは改行区切り）',
    },
  },
  style: {
    kicker: 'STYLE',
    title: '出力スタイル',
    desc: '録音のデフォルト出力スタイルを選択。',
    masterToggle: '全体有効化',
    currentDefault: '現在のデフォルト',
    ariaSetDefault: 'デフォルトに設定',
    saveFailed: '保存に失敗しました: {{error}}',
    customPromptTitle: 'カスタムプロンプト',
    customPromptPlaceholder: '任意。このスタイルの組み込み system prompt の末尾に追加されます。',
    customPromptHint: '空のままなら現在の挙動を維持します。保存後、このスタイルの整文と repolish の両方に適用されます。Ctrl/Cmd+Enter でも保存できます。',
    customPromptSave: 'プロンプトを保存',
    customPromptDirty: '未保存',
    systemPromptMovedHint: 'フルの system prompt 編集は Settings -> Providers に移動しました。このページではスタイルの有効化とデフォルト設定だけを扱います。',
    modes: {
      raw: { name: '原文', desc: '句読点と必要な区切りのみ補い、書き換えや拡張はしません。', sample: '元の話し言葉を保持。「えー」「あの」などの口癖は除去しますが、文の組み替えはしません。' },
      light: { name: '軽い整文', desc: '口癖の除去、句読点の補完、自然な送信可能テキストへの整理。', sample: '原稿読み上げのようにならないよう、語気と表現の癖を残しつつ、文章をなめらかにします。' },
      structured: { name: '明確な構造', desc: '複数のトピックや手順がある場合は、自動的に箇条書きに整理します。', sample: '1. トピック 1\na. ポイント\nb. ポイント\n2. トピック 2\na. ポイント\nb. ポイント' },
      formal: { name: '正式な表現', desc: '業務コミュニケーションやメール用途向け。よりプロフェッショナルで完成度の高い文体。', sample: 'メール用途では挨拶 / 結びを自動認識します。空疎な定型句は持ち込みません。' },
    },
    pack: {
      kicker: 'STYLE PACKS',
      title: 'スタイルパック',
      desc: 'ローカルスタイルパックを管理。',
      marketplaceBtn: 'マーケット',
      loadFailed: 'スタイルパックの読み込みに失敗：{{err}}',
      importZip: 'ZIP をインポート',
      exportZip: 'ZIP をエクスポート',
      exportShort: 'エクスポート',
      publishMarketplace: 'マーケットに公開',
      updateMarketplace: 'マーケットの新版に更新',
      publishDisabledHint: '先に 設定 → マーケット で GitHub ユーザー名を設定してください',
      publishSuccess: '公開完了、マーケット審査待ち',
      publishFailed: '公開失敗：{{err}}',
      publishBuiltinRejected: 'ビルトインパックは直接公開できません。先に編集してインポート版を作成してください。',
      builtin: 'ビルトイン',
      imported: 'インポート',
      active: '使用中',
      activate: '有効化',
      edit: '編集',
      closeEditor: '閉じる',
      unsaved: '未保存',
      listTitle: 'ローカルパック',
      listDesc: 'パックを閲覧・切替。',
      listCount: '{{count}} 個',
      addPackTileTitle: '新規パック',
      addPackTileHint: '空のテンプレートから開始。',
      createSuccess: '新規パックを作成しました',
      createFailed: 'パック作成失敗：{{err}}',
      save: '保存',
      revert: '元に戻す',
      saveSuccess: 'スタイルパックを保存しました',
      saveFailed: 'スタイルパック保存失敗：{{err}}',
      activateSuccess: '"{{name}}" を使用中に設定しました',
      activateFailed: '使用中の設定に失敗：{{err}}',
      importSuccess: '"{{name}}" をインポートしました',
      importFailed: 'ZIP インポート失敗：{{err}}',
      exportSuccess: '{{path}} にエクスポートしました',
      exportFailed: 'ZIP エクスポート失敗：{{err}}',
      exportDirtyFirst: 'ZIP をエクスポートする前に現在のパックを保存してください。',
      resetBuiltin: 'リセット',
      resetSuccess: '"{{name}}" をリセットしました',
      resetFailed: 'パックのリセット失敗：{{err}}',
      deleteImported: '削除',
      deleteConfirm: '"{{name}}" を削除しますか？この操作は取り消せません。',
      deleteSuccess: '"{{name}}" を削除しました',
      deleteFailed: 'パック削除失敗：{{err}}',
      summaryCurrentEmpty: 'まだパックが選択されていません',
      editorTitle: 'パック編集',
      editorDesc: 'このパックを編集します。',
      metaTitle: 'インストール情報',
      metaSource: 'ソース',
      metaBaseMode: 'ベースモード',
      metaUpdatedAt: '更新日時',
      fieldName: '名前',
      fieldAuthor: '作者',
      fieldAuthorPlaceholder: '任意。ソース表示用',
      fieldVersion: 'バージョン',
      fieldTags: 'タグ',
      fieldTagsPlaceholder: 'カンマ区切り、例: community, voiceover, formal',
      fieldDescription: '説明',
      fieldModel: '推奨モデル（メタデータのみ）',
      fieldModelPlaceholder: '任意。例: gpt-4.1 / deepseek-v3',
      fieldModelHint: 'メタデータのみ。実際のモデルは切り替わりません。',
      fieldCompatibility: '互換アプリバージョン',
      fieldCompatibilityPlaceholder: '任意。例: >=1.3.0',
      fullPromptTitle: 'System Prompt',
      fullPromptHint: 'このパック固有の Prompt です。',
      promptChars: '{{count}} 文字',
      runtimeTitle: 'OpenLess 実行時付加指令',
      runtimeDesc: '読み取り専用の実行時ヘルパー。',
      runtimeContextTitle: 'コンテキスト前提',
      runtimeContextDesc: '言語とアプリのコンテキストから',
      runtimeContextEmpty: '現在のプレビューでは付加されません。',
      runtimeHotwordTitle: 'ホットワードブロック',
      runtimeHotwordDesc: '有効なホットワードから',
      runtimeHotwordEmpty: '現在のプレビューでは付加されません。',
      runtimeHistoryTitle: 'マルチターン履歴ガード',
      runtimeHistoryDesc: 'ライブのマルチターン polish のみで使用',
      runtimeHistoryEmpty: '前のターンが存在する場合のみ付加。',
      runtimeActive: '有効',
      runtimeInactive: '無効',
      runtimePreviewFailed: '実行時プレビュー生成失敗：{{err}}',
      runtimePreviewOmittedFrontApp: 'プレビューはフロントアプリのラベルを省略しています。',
      examplesTitle: '効果例',
      examplesDesc: 'パックと一緒にエクスポートされます。',
      addExample: '例を追加',
      examplesEmpty: 'まだ例がありません。',
      exampleTitlePlaceholder: '例 {{index}} のタイトル',
      exampleInput: '入力',
      exampleOutput: '出力',
      examplesCount: '{{count}} 個の例',
      discardCloseConfirm: '未保存の変更を破棄してエディタを閉じますか？',
      discardSwitchConfirm: '未保存の変更を破棄して "{{name}}" に切り替えますか？',
      derivativeBadge: '@{{login}} から派生',
    },
  },
  translation: {
    kicker: 'TRANSLATION',
    title: '翻訳',
    desc: '録音後に自動翻訳してから入力。',
    statusEnabled: '有効',
    statusDisabled: '無効',
    working: {
      title: '作業言語',
      desc: '日常使用する言語を選択し、整文と翻訳に反映。',
    },
    target: {
      title: '翻訳ターゲット言語',
      desc: '録音中に Shift で翻訳を起動。「無効」で Shift 無効化。',
      disabled: '無効（Shift で翻訳を発動しない）',
    },
    save: {
      workingFailed: '作業言語の保存に失敗しました。もう一度お試しください。',
      targetFailed: '翻訳ターゲット言語の保存に失敗しました。もう一度お試しください。',
      hotkeyRegisterFailed: '翻訳ショートカットの登録に失敗しました。設定は保存されていません。',
      hotkeySaveFailed: '翻訳ショートカットの保存に失敗しました。もう一度お試しください。',
    },
    howto: {
      title: '使い方',
      step1: '任意の入力欄にカーソルを置く。',
      step2: '{{trigger}} を押して録音開始。',
      step3: '録音中に Shift を一度押して翻訳を起動。',
      step4: '再度 {{trigger}} を押して停止。',
      step5: '翻訳結果がカーソル位置に挿入されます。',
      indicatorTitle: '翻訳モードの確認方法',
      indicatorDesc: 'Shift を押すと画面下部に青い「翻訳中」表示が出ます。',
      fallbackTitle: 'セーフティフォールバック',
      fallbackDesc: '翻訳失敗時は原文がそのまま挿入されます。',
    },
  },
  selectionAsk: {
    kicker: 'SELECTION ASK',
    title: '選択追問',
    desc: 'テキストを選択して音声で質問。複数ターンの追問対応。',
    statusEnabled: '有効',
    statusDisabled: '無効',
    hotkey: {
      title: 'フロートウィンドウのショートカット',
      desc: 'パネルの開閉を制御。パネル内の録音は {{recordHotkey}}。',
      optionDisabled: '無効',
      chordWarning: '',
    },
    save: {
      hotkeyRegisterFailed: '選択追問ショートカットの登録に失敗しました。設定は保存されていません。',
      hotkeySaveFailed: '選択追問ショートカットの保存に失敗しました。もう一度お試しください。',
      historySaveFailed: 'Q&A 履歴設定の保存に失敗しました。もう一度お試しください。',
    },
    history: {
      title: '履歴を保存',
      desc: '有効時、Q&A 記録をローカルに保存。デフォルト OFF。',
    },
    howto: {
      title: '使い方',
      step1: '{{hotkey}} でパネルを開く。',
      step2: '任意のアプリでテキストを選択。',
      step3: '{{recordHotkey}} で録音、再度押して送信。',
      step4: '{{recordHotkey}} で続けて追問可能。',
      step5: 'Esc でパネルを閉じ、履歴をクリア。',
      windowTitle: 'ウィンドウの位置 + ドラッグ + ピン留め',
      windowDesc: 'パネルはドラッグ可能で位置を記憶。ピン留めで開いたままに。',
      privacyTitle: 'プライバシー契約',
      privacyDesc: '選択テキストはメモリ上のみ。パネルを閉じると破棄。4000 字超は自動切り詰め。',
    },
  },
  settings: {
    kicker: 'SETTINGS',
    title: '設定',
    desc: '録音、プロバイダー、ショートカット、権限の設定。',
    sections: {
      recording: '録音',
      providers: 'プロバイダー',
      shortcuts: 'ショートカット',
      permissions: '権限',
      language: '言語',
      advanced: '詳細設定',
      about: '情報',
    },
    recording: {
      title: '録音',
      desc: 'グローバル録音のショートカットとトリガー方式を定義します。',
      hotkeyLabel: '録音ショートカット',
      hotkeyDescAcc: '押すと音声キャプチャを開始（グローバル）。アクセシビリティ権限が必要です。',
      hotkeyDescNoAcc: '押すと音声キャプチャを開始（グローバル）。追加の権限は不要。',
      modeLabel: '録音方式',
      modeDesc: 'トグル式 = 1 回押して開始、もう 1 回押して終了；押し続けて話す = 押している間だけ録音。',
      modeToggle: 'トグル式',
      modeHold: '押し続けて話す',
      migrationNoticeTitle: 'デフォルトがトグル式に変更されました',
      migrationNoticeDesc: '以前にトリガー方式を変更していた場合は、ここで再度確認してください。今回のアップデートではショートカット方式のデフォルト値と読み込みロジックが変更されています。「押し続けて話す」が好みであれば再度切り替えてください。',
      microphoneLabel: '優先マイク',
      microphoneDesc: '優先して使用する入力デバイスを選択します。一時的に利用できない場合はシステムのデフォルトマイクを使い、再接続後に自動で優先デバイスへ戻します。',
      microphoneDefault: 'システムのデフォルトマイク',
      microphoneDefaultDesc: 'システムのデフォルト入力デバイスを使用',
      microphoneSystemDefault: 'システムデフォルト',
      microphoneUnavailable: '利用不可',
      microphoneLoadError: 'マイクの読み込みに失敗：{{message}}',
      microphoneDialogTitle: 'マイク',
      microphoneDialogDesc: '声を拾えるマイクを選択してください。メーターが動かない場合は別のマイクを試してください。',
      microphoneMonitorError: '入力レベルの監視に失敗：{{message}}',
      capsuleLabel: '録音カプセル',
      capsuleDesc: '録音 / 転写中、画面下部に半透明のカプセルを表示。',
      muteDuringRecordingLabel: '録音中はミュート',
      muteDuringRecordingDesc: '録音中にシステム出力を一時的にミュートし、スピーカーのエコーを防ぎます。',
      insertGroupTitle: '挿入とクリップボード',
      restoreClipboardLabel: '入力後にクリップボードを復元',
      restoreClipboardDesc: 'ペースト成功後に元のクリップボード内容を復元（Windows / Linux のみ）。',
      pasteShortcutLabel: '貼り付けショートカット',
      pasteShortcutDesc: '挿入時に模擬するペーストショートカット。一部のターミナルでは Ctrl+Shift+V が必要（Windows / Linux のみ）。',
      pasteShortcutCtrlV: 'Ctrl+V（既定 / ほとんどのアプリ）',
      pasteShortcutCtrlShiftV: 'Ctrl+Shift+V（kitty / alacritty / wezterm / ほとんどのターミナル）',
      pasteShortcutShiftInsert: 'Shift+Insert（xterm / urxvt）',
      comboRecordLabel: 'ショートカットを記録',
      comboRecordDesc: 'クリック後、希望するキーの組み合わせ（例：⌘⇧D）を押してください。トグル / 押し続けの両方に対応。',
      comboRecordBtn: 'ショートカットを記録',
      comboRecordHint: 'ショートカットの組み合わせを押してください…',
      comboRecorded: '記録済み',
      comboClear: 'クリア',
      comboConflict: 'このショートカットの組み合わせは使用できません',
      allowNonTsfFallbackLabel: '非 TSF フォールバックを許可',
      allowNonTsfFallbackDesc: 'Windows：TSF 入力が失敗した時は分割した Unicode SendInput を使い、それも失敗した場合はクリップボードへコピーします。',
      historyGroupTitle: '履歴とコンテキスト',
      historyRetentionLabel: '履歴保持期間（日）',
      historyRetentionDesc: '保持日数を超えた履歴は新規書き込み時に削除されます。0 = 時間で削除しない。',
      historyMaxEntriesLabel: '履歴件数の上限',
      historyMaxEntriesDesc: 'ローカル保持セッション上限。空欄 = 200。範囲 5–200。',
      polishContextWindowLabel: '会話コンテキスト窓（分）',
      polishContextWindowDesc: '直近 N 分間の整文済み転写をマルチターン文脈として渡します。0 = 無効。',
      recordAudioForDebugLabel: '元の録音を保持（デバッグ）',
      recordAudioForDebugDesc: '生のマイク音声を wav で保存し、認識問題の診断に利用。',
      audioRecordingMaxEntriesLabel: '元音声の保持件数',
      audioRecordingMaxEntriesDesc: 'ローカル保持 wav ファイル上限。空欄 = 200。',
      startupGroupTitle: '起動',
      startMinimizedLabel: '起動時にメインウィンドウを表示しない',
      startMinimizedDesc: 'どの起動経路でもメインウィンドウを開かず、メニューバー / トレイのみで動作。',
      autoUpdateCheckLabel: 'アップデートを自動チェック',
      autoUpdateCheckDesc: '起動時および 60 分ごとに自動チェック。',
      marketplaceGroupTitle: 'スタイルパックマーケット',
      marketplaceBaseUrlLabel: 'バックエンド URL',
      marketplaceBaseUrlDesc: 'マーケットプレイスの URL。空欄でデフォルト値。',
      marketplaceDevLoginLabel: 'GitHub ログイン名（アップロード ID）',
      marketplaceDevLoginDesc: 'アップロード者を識別。空欄でアップロード・いいね無効。',
      startupAtBoot: '起動時に自動起動',
      startupAtBootDesc: 'ログイン時に OpenLess を自動起動。',
      startupAtBootError: '自動起動の切り替えに失敗：{{message}}',
    },
    providers: {
      llmTitle: 'LLM モデル（整文）',
      llmDesc: 'OpenAI 互換プロトコル、複数のサプライヤー切り替えに対応。',
      providerLabel: 'サプライヤー',
      llmProviderDesc: '選択するとデフォルトの Base URL が自動入力されます。',
      credentialStorageNotice: '資格情報は OS の資格情報ストアに保存されます。',
      codexOAuthNotice: 'Codex OAuth はローカルの Codex ログイン状態（~/.codex/auth.json）を使用します。OpenLess は API Key や Base URL を保存しません。',
      asrProviderDesc: '切り替えると対応する認証情報が自動選択されます。',
      asrTitle: 'ASR 音声（転写）',
      asrDesc: '口述をリアルタイムでテキストに転写。',
      presets: {
        ark: 'ARK（Volcengine Ark）',
        deepseek: 'DeepSeek',
        siliconflow: 'SiliconFlow',
        openai: 'OpenAI',
        gemini: 'Google Gemini',
        codexOAuth: 'Codex OAuth',
        mimo: 'Xiaomi MiMo',
        cometapi: 'CometAPI',
        openrouterFree: 'OpenRouter（無料モデル）',
        alibabaCoding: 'Alibaba Cloud Coding Plan',
        codingPlanX: 'CodingPlanX',
        custom: 'カスタム',
        asrVolcengine: 'Volcengine bigasr',
        asrBailian: 'Alibaba Bailian リアルタイム ASR',
        asrSiliconflow: 'SiliconFlow SenseVoice',
        asrZhipu: 'Zhipu GLM-ASR',
        asrGroq: 'Groq Whisper-large-v3',
        asrWhisper: 'OpenAI Whisper（互換）',
        asrFoundryLocalWhisper: 'ローカル Whisper（Foundry Local）',
        asrLocalQwen3: 'ローカル Qwen3-ASR',
      },
      volcengineAppKeyLabel: 'APP ID',
      volcengineAccessKeyLabel: 'Access Token',
      volcengineResourceIdLabel: 'Resource ID',
      volcengineMappingNote: 'Secret Key は現在不要。Resource ID のデフォルトは volc.bigasr.sauc.duration。',
      localAsrActiveNotice: '現在「{{name}}」を使用中。「詳細設定」タブから切り替えまたは無効化できます。',
      localAsrTakeoverHint: '「{{name}}」を有効化すると ASR プロバイダーが引き継がれます。',
      asrProviderTakenOver: 'ASR プロバイダーは引き継ぎ済み',
      localAsrHint: 'デバイス上で動作、API キー不要。HuggingFace からモデルをダウンロード。',
      foundryLocalAsrHint: 'デバイス上で動作、ASR API キー不要。初回はランタイムとモデルをダウンロード。',
      localAsrPerformanceWarning: 'ローカル推論はクラウドより遅く、中国語の精度が低くなる場合があります。オフラインまたはプライバシー重視の場合に。',
      localAsrReady: '{{model}} ダウンロード済み',
      localAsrNotReady: '{{model}} 未ダウンロード',
      localAsrGoDownload: 'モデル設定でダウンロード',
      localAsrManage: 'モデル設定を開く',
      localAsrDownloadedTitle: 'ダウンロード済みモデル',
      localAsrDelete: '削除',
      fillDefault: 'デフォルト値を入力',
      readFailed: '読み込み失敗',
      apiKeyLabel: 'API キー',
      baseUrlLabel: 'エンドポイント',
      modelLabel: 'モデル',
      thinkingModeLabel: '思考',
      thinkingModeOn: 'オン',
      thinkingModeOff: 'オフ',
      thinkingModeHint: 'オフではチャネル単位の公式パラメーターで思考を無効化または最小化します。オンではチャネル既定で思考を有効化します。prompt 注入やモデル別適配は行いません。',
      bailianVocabularyIdLabel: 'ホットワード Vocabulary ID（任意）',
      bailianVocabularyIdNote: 'DashScope でホットワード辞書を作成済みの場合は vocab-... ID を入力します。空欄なら送信しません。',
      appIdLabel: 'App ID（アプリケーション ID）',
      accessKeyLabel: 'Access Key',
      resourceIdLabel: 'Resource ID',
      toolsLabel: '接続チェック',
      toolsDesc: '上記の設定を保存してから、現在のモデル接続性を検証またはモデル一覧を取得します。失敗してもモデル ID を手動入力できます。',
      validate: '検証',
      validating: '検証中…',
      fetchModels: 'モデル一覧',
      loadingModels: 'モデル取得中…',
      modelMissing: 'モデルが未設定です。先にモデル ID を入力してください。',
      modelsEmpty: '認証成功ですが、利用可能なモデルが返されませんでした。',
      modelsLoaded: '{{count}} 個のモデルを取得しました。',
      selectModel: 'モデルを選んで上記欄に入力',
      modelSaved: 'モデル {{model}} を保存しました。',
      validateSuccess: '接続チェックに合格しました。',
      providerHttpStatus: 'サプライヤーが {{status}} を返しました。API Key 権限またはエンドポイントを確認してください。',
      endpointMustUseHttps: 'Endpoint は HTTPS を使用する必要があります（localhost/127.0.0.1 を除く）。',
      endpointInvalid: 'Endpoint の形式が無効です。',
      responseTooLarge: 'サプライヤーの応答が大きすぎるため、安全のため検証を停止しました。',
      asrInvalidJson: 'ASR の応答が有効な JSON ではありません。',
      asrMissingTextField: 'ASR の応答に text フィールドがありません。',
      apiKeyMissing: 'API Key が空です。',
      endpointMissing: 'Endpoint が空です。',
      requestTimeout: 'リクエストがタイムアウトしました。後で再試行してください。',
    },
    shortcuts: {
      title: 'ショートカット一覧',
      descAcc: 'すべてのショートカットはグローバルで有効。権限設定でアクセシビリティを許可する必要があります。',
      descNoAcc: 'すべてのショートカットはグローバルで有効。応答がない場合は権限ページでグローバルショートカット監視の状態を確認してください。',
      startStop: '録音開始 / 停止',
      cancel: '本回の録音をキャンセル',
      confirm: 'カプセル入力を確定',
      switchStyle: '前のスタイルに切り替え',
      openApp: 'OpenLess を開く',
      confirmHint: '右側の ✓ をクリック',
      notSupported: '未対応',
    },
    permissions: {
      title: '権限',
      descAcc: 'OpenLess は正常動作のため以下のシステム権限が必要です。許可後は通常、App を完全に終了して再起動する必要があります。',
      descNoAcc: 'OpenLess はマイクへのアクセスと、グローバルショートカット監視状態を通じてネイティブフックの正常動作を判定する必要があります。',
      micLabel: 'マイク',
      micDesc: '音声入力の取得に使用します。',
      accLabel: 'アクセシビリティ',
      accDesc: 'グローバルショートカットの監視と認識結果のカーソル位置への入力に使用。',
      hotkeyLabel: 'グローバルショートカット',
      hotkeyDescWithAdapter: '現在のアダプタ：{{adapter}}。ショートカット監視がインストール済みかを判定します。',
      hotkeyDescPlain: 'ショートカット監視がインストール済みかを判定します。',
      networkLabel: 'ネットワーク',
      networkDesc: 'クラウド ASR / LLM 呼び出しに必要。ローカルモードでは無効化可能。',
      networkOk: '利用可能',
      networkOffline: '利用不可',
      checking: '確認中…',
      granted: '許可済み',
      notApplicable: '権限不要',
      denied: '未許可',
      indeterminate: '未確定',
      openSystem: 'システム設定を開く',
      grant: '許可する',
      hotkeyInstalled: 'インストール済み',
      hotkeyStarting: 'インストール中…',
      hotkeyFailed: '監視失敗',
      windowsImeLabel: 'Windows 入力メソッドバックエンド',
      windowsImeDesc: '音声セッション中に OpenLess TSF IME へ一時的に切り替え、クリップボード入力の制限を回避します。',
      windowsImeInstalled: 'インストール済み',
      windowsImeUnavailable: '利用不可',
      windowsIme: {
        installed: 'インストール済み。音声入力時に OpenLess IME へ一時的に切り替えます。',
        notInstalled: '未インストール。OpenLess は現在クリップボード / WM_PASTE フォールバックを使用しています。',
        registrationBroken: '登録が破損しています。OpenLess IME を再インストールしてください。',
        notWindows: 'Windows のみ利用可能。',
      },
    },
    advanced: {
      streamingInsertTitle: 'ストリーミング入力',
      streamingInsertTitleLinux: 'ストリーミング入力（実験的）',
      streamingInsertDesc:
        '逐字リアルタイム挿入で体感遅延を低減。条件不一致時はワンショット貼り付けにフォールバック。',
      streamingInsertLabel: 'ストリーミング入力',
      streamingInsertHintMac:
        'ストリーミング中は一時的に ABC 入力ソースへ切替（CJK IME による傍受を回避）。セッション終了時に自動で元へ戻ります。',
      streamingInsertHintWindows:
        'SendInput Unicode で TSF / IME を迂回。入力ソースの切替は不要です。',
      streamingInsertHintLinux:
        'fcitx5 プラグインで文字を送信。ストリーミング入力は enigo + XTest でキー合成。',
      streamingInsertSaveClipboardLabel: 'クリップボードに保存',
      streamingInsertSaveClipboardHint: '挿入成功後に最終テキストをクリップボードへ書き込み、Cmd+V で再貼付け可能にします。OFF ではクリップボードに触れません。',
      localAsrTitle: 'ローカル ASR モデル（実験的）',
      localAsrDesc: '転写をクラウドから本機推論に切り替えます。オフライン／プライバシー重視向け。',
      localAsrWarningShort: 'ローカル推論は遅く、スペック不足では欠字の可能性があります。',
      qwen3Desc: '有効化すると ASR プロバイダーが引き継がれます。',
      foundryDesc: '有効化すると ASR プロバイダーが引き継がれます。',
      notSupportedHere: 'このプラットフォームでは未対応（推論モジュール未組込）。',
      enable: '有効化',
      alreadyActive: '有効',
      disableLocalLabel: 'ローカル ASR を無効化',
      disableLocalDesc: 'クラウド ASR（既定は Volcengine bigasr）に戻します。',
      disable: '無効化',
      platformNotSupported: 'このプラットフォームではローカル ASR モデル統合に対応していません。',
      confirmEnableLocalTitle: 'ローカル ASR を有効化しますか？',
      confirmEnableLocalBody: '有効にすると転写はクラウドより遅くなり、精度が低くなる場合があります。',
      confirm: '有効化する',
    },
    language: {
      title: '表示言語',
      desc: 'UI の表示言語を切り替えます。現在のセッションに即時反映され、次回起動時も維持されます。',
      label: '言語',
      labelDesc: '「システムに従う」を選ぶと OS の言語に合わせます。',
      followSystem: 'システムに従う',
      zh: '简体中文',
      zhTW: '繁體中文',
      en: 'English',
      ja: '日本語 (Beta)',
      ko: '한국어 (Beta)',
      restartHint: '一部のネイティブメニュー（トレイ等）は再起動後に反映されます。',
    },
    about: {
      tagline: '自然に話し、きれいに書く',
      checkUpdate: 'アップデート確認',
      checkUpdateBtn: '確認',
      checkingUpdate: '確認中…',
      upToDate: '現在最新バージョンです。',
      updateError: '確認またはアップデートに失敗しました。後で再試行してください。',
      retryBtn: '再試行',
      openReleases: 'Releases を開く',
      source: 'ソース',
      docs: 'ドキュメント',
      feedback: 'フィードバック',
      qq: 'コミュニティ QQ グループ',
      qqDesc: 'QQ でグループ番号を検索して参加するか、QR コードをスキャンしてください。',
      copyQq: 'グループ番号をコピー',
      privacy: 'プライバシー',
      privacyDesc: 'すべてのデータはローカルに保存。クラウド API は録音を保持しません。',
      localFirst: 'ローカル優先',
      betaChannelLabel: 'Beta チャンネルに参加',
      betaChannelDesc: '有効にすると Beta 更新を受信。不安定な場合があります。',
      betaChannelFetching: '最新 Beta 版を取得中…',
      betaChannelFetchBtn: '最新 Beta を確認',
      betaChannelLatestPrefix: '最新 Beta：',
      betaChannelDownloadBtn: 'ダウンロード ページを開く',
      betaChannelRefresh: '再取得',
      betaChannelNoBeta: 'まだ Beta リリースは公開されていません。',
      betaChannelFetchError: 'Beta バージョン情報の取得に失敗しました。後で再試行してください。',
      betaChannelUpToDate: '最新です',
      betaChannelUpdateNow: '今すぐ更新',
      betaChannelUpdateNowTitle: '最新 Beta を確認・ダウンロードし、更新ダイアログを表示します',
      betaChannelChecking: '確認中…',
      updateDialog: {
        available: {
          title: '新しいバージョンがあります',
          desc: 'OpenLess {{version}} が見つかりました。今すぐ更新しますか？',
        },
        downloading: {
          title: 'アップデートをダウンロード中',
          desc: 'OpenLess {{version}} をダウンロード中です。アプリを開いたままにしてください。',
        },
        downloaded: {
          title: 'アップデートの準備完了',
          desc: 'OpenLess {{version}} のインストールが完了しました。今すぐ自動再起動して適用しますか？',
        },
        installing: {
          title: 'アップデートをインストール中',
          desc: 'OpenLess {{version}} をインストール中です。アプリを開いたままにしてください。',
        },
        install: '今すぐ更新',
        downloadingLabel: 'ダウンロード中…',
        installingLabel: 'インストール中…',
        later: '後で手動再起動',
        restartNow: '今すぐ再起動',
        progress: '{{progress}}% · {{downloaded}} / {{total}}',
        progressUnknown: 'ダウンロード済み {{downloaded}}',
      },
    },
  },
  modal: {
    sections: {
      account: 'アカウント',
      settings: '設定',
      personalize: 'パーソナライズ',
      about: '情報',
      helpCenter: 'ヘルプセンター',
      releaseNotes: 'リリースノート',
    },
    account: {
      localUser: 'ローカルユーザー',
      localUserDesc: '未ログイン · すべてのデータはローカルに保存',
      loginSync: 'ログイン / 同期',
      footer: 'デフォルトで完全ローカル動作。ログインすると語彙とスタイルプリセットをデバイス間で同期。',
    },
    personalize: {
      appearance: '外観',
      appearanceDesc: 'システムに従う / ライト / ダーク',
      appearanceSystem: 'システムに従う',
      appearanceLight: 'ライト',
      appearanceDark: 'ダーク',
      font: 'フォントサイズ',
      fontDesc: 'UI のフォントサイズを全体的にスケール。即時反映。',
      fontSmall: '小',
      fontMedium: '中',
      fontLarge: '大',
      blur: 'すりガラス強度',
      blurDesc: 'ウィンドウ内側の backdrop-filter 強度に影響（macOS のシステムフロスト層が動かない場合に調整）。',
      startupOpen: '起動時に開く',
      startupOverview: '概要',
      startupLast: '前回の位置',
      startupAtBoot: '起動時に自動起動',
    },
    about: {
      tagline: '自然に話し、きれいに書く',
      checkUpdate: 'アップデート確認',
      checkUpdateBtn: '確認',
      docs: 'ドキュメント',
      docsBtn: 'openless.app/docs ↗',
      feedback: 'フィードバックチャネル',
      feedbackBtn: 'GitHub Issues ↗',
      source: 'ソース',
      qq: 'コミュニティ QQ グループ',
      qqDesc: 'QQ でグループ番号を検索して参加するか、QR コードをスキャンしてください。',
      copyQq: 'グループ番号をコピー',
      exportErrorLog: 'エラーログをエクスポート',
      exportErrorLogDesc: '現在のセッションの実行ログをローカルに保存。問題の調査やフィードバック送付にお使いください。',
      exportErrorLogBtn: 'エクスポート',
      exporting: 'エクスポート中…',
      exportSuccess: '保存しました',
      exportFailed: 'エクスポート失敗',
      privacy: 'プライバシー',
      privacyDesc: 'すべての認識結果はローカルにのみ保存されます。クラウド API はリアルタイム呼び出しにのみ使用。',
      localFirst: 'ローカル優先',
    },
  },
  windowChrome: {
    minimize: '最小化',
    maximize: '最大化',
    close: '閉じる',
  },
  hotkey: {
    triggers: {
      rightOption: '右 Option',
      leftOption: '左 Option',
      rightControl: '右 Control',
      leftControl: '左 Control',
      rightCommand: '右 Command',
      fn: 'Fn (地球キー)',
      rightAlt: '右 Alt',
      custom: 'カスタム組み合わせ…',
    },
    fallback: 'グローバルショートカット',
    modeHoldSuffix: '（押し続けて話す）',
    modeToggleSuffix: '（開始 / 停止）',
    usageHold: '{{trigger}} を押し続けて話し、離して終了。',
    usageToggle: '{{trigger}} で録音開始、もう 1 回押して終了。',
    adapter: {
      macEventTap: 'macOS Event Tap',
      windowsLowLevel: 'Windows 低レベルキーボードフック',
      fcitx5: 'fcitx5 インプットメソッドプラグイン',
    },
  },
  localAsr: {
    kicker: 'ローカル ASR',
    title: 'モデル設定',
    desc: 'デバイス上の音声認識モデルを管理。',
    qwenTitle: 'Qwen3-ASR モデル管理',
    qwenExperimentalBadge: '実験的',
    engineUnavailable: '現在のプラットフォームには Qwen3-ASR 推論エンジンが同梱されていません。モデルのダウンロードは可能ですが、ここではまだ Qwen3-ASR を有効化できません。',
    qwenUnavailableOnWindows: 'Windows では Qwen3-ASR にまだ対応していません。上記の Foundry Local Whisper をご利用ください。',
    foundryTitle: 'Windows Foundry Local Whisper',
    foundryDesc: 'デバイス上で音声認識。ASR API キー不要。初回はランタイムとモデルのダウンロードが必要。',
    foundryAvailable: 'Windows で利用可能',
    foundryUnavailable: 'Windows のみ対応',
    foundryRuntimeReady: 'ランタイムコンポーネントはダウンロード済み',
    foundryRuntimeMissing: 'ランタイムコンポーネント未ダウンロード',
    foundryRuntimeSourceLabel: 'ランタイムコンポーネントの取得元',
    foundryRuntimeSourceAuto: '自動（NuGet 優先）',
    foundryRuntimeSourceNuget: 'NuGet 公式フィード',
    foundryRuntimeSourceOrtNightly: 'Microsoft ORT-Nightly フィード',
    foundryRuntimeSourceDesc: '初回使用前にランタイムコンポーネントをダウンロード。',
    foundrySelectedModel: '選択中のモデル',
    foundryActiveModel: '現在の既定 alias',
    foundryLoadedModel: '読み込み済みモデル',
    foundryNotLoaded: '未読み込み',
    foundryError: 'Foundry 状態',
    foundrySetDefault: '既定に設定 / Windows ローカル ASR を有効化',
    foundryEnabling: '有効化中…',
    foundryPrepare: '準備 / ダウンロード / 読み込み',
    foundryPreparing: '準備中…',
    foundryReleasing: '解放中…',
    foundryRetryPrepare: '準備を続行 / 再試行',
    foundryCancelPrepare: '準備をキャンセル',
    foundryCancelRequested: 'キャンセル要求済み',
    foundryCancelling: 'キャンセル中…',
    foundryCancelBestEffort: 'キャンセルをリクエスト済み。現在のステップ完了後に停止します。後で再試行できます。',
    foundryPrepareRuntime: 'ランタイムコンポーネントを準備',
    foundryPrepareModel: 'モデルをダウンロード',
    foundryPrepareLoad: 'モデルを読み込み',
    foundryPrepareModelSkipped: 'モデルはダウンロード済みのため、ダウンロードをスキップ',
    foundryPrepareDone: '完了',
    foundryPrepareWaiting: '待機中',
    foundryApproxSizeMb: '約 {{mb}} MB',
    foundryLanguageLabel: '認識言語',
    foundryLanguageAuto: '自動',
    foundryLanguageZh: '中国語 zh',
    foundryLanguageEn: '英語 en',
    foundryLanguageDesc: '中国語聞き取りは「中文」を、混用は「自動」を選択。',
    foundryModelSmall: 'Whisper Small（既定 / バランス）',
    foundryModelSmallDesc: '品質とリソース使用量のバランスを取った既定オプション。',
    foundryModelMedium: 'Whisper Medium（高品質）',
    foundryModelMediumDesc: 'より高い精度。大きなダウンロードと遅めの推論を許容できる高性能デバイス向け。',
    foundryModelLarge: 'Whisper Large V3 Turbo（最高品質）',
    foundryModelLargeDesc: '高性能デバイスと品質優先の用途に向く大きなモデル。',
    foundryModelBase: 'Whisper Base（高速 / 低リソース）',
    foundryModelBaseDesc: 'より高速でリソース消費が少なく、日常の軽量ディクテーションに適しています。',
    foundryModelTiny: 'Whisper Tiny（最速 / スモークテスト）',
    foundryModelTinyDesc: 'Foundry 経路が動作するか確認するための最速オプション。',
    mirrorLabel: 'ダウンロードミラー',
    mirrorDesc: '公式ソースは海外ネットワークで安定。hf-mirror.com は中国コミュニティ運営のミラー。',
    mirrorHuggingface: 'HuggingFace 公式 (huggingface.co)',
    mirrorHfMirror: '中国ミラー (hf-mirror.com)',
    activeBadge: '使用中',
    downloadedBadge: 'ダウンロード済み',
    notDownloadedBadge: '未ダウンロード',
    download: 'ダウンロード',
    resume: '続行',
    cancel: 'キャンセル',
    delete: '削除',
    setActive: 'デフォルトに設定',
    failed: '失敗',
    cancelled: 'キャンセル済み',
    files: 'ファイル',
    sizeLoading: 'サイズ問い合わせ中…',
    sizeUnknown: 'サイズ不明',
    performanceWarning: 'ローカル ASR はオフラインやプライバシー重視のシーンに最適。初回使用時にモデルのダウンロードが必要。',
    test: 'ロードしてテスト',
    testRunning: 'テスト中…',
    testHeading: '内蔵オーディオテスト',
    testExpected: '原文',
    testActual: '認識',
    testStats: '音声長 {{audio}}s · ロード {{load}}s · 推論 {{transcribe}}s · バックエンド {{backend}}',
    testFailed: 'テスト失敗',
    engineStatusLabel: 'メモリ上のエンジン',
    engineLoaded: 'ロード済み：{{model}}（約 1.2-3.4 GB のメモリを使用）',
    engineUnloaded: '未ロード（初回ディクテーション時に約 3-5 秒のロードが必要）',
    loadNow: '今すぐロード',
    releaseNow: '今すぐ解放',
    keepLoadedLabel: 'ロード保持時間',
    keepLoadedDesc: 'ローカル ASR を使用後、何分でメモリから解放するかを決定。1+ GB の RAM 占有を回避。',
    keepImmediate: '使用直後に解放',
    keep1min: '最終使用から 1 分',
    keep5min: '最終使用から 5 分（既定）',
    keep30min: '最終使用から 30 分',
    keepForever: '解放しない（常にロード）',
  },
};
