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

// 繁體中文資源 — 與產品當前文案保持一致。
// 新增 key 時，必須同步更新 en.ts，避免切換到 English 後出現中文殘留。

export const zhTW: typeof zhCN = {
  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: '在任意 app 選中一段文字後，按一次 {{recordHotkey}} 開始錄音，再按一次結束並提交。回答會顯示在這裏，可以連續多輪追問。',
    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: '先在 Settings → 風格市場 填寫發布身份',
      searchPlaceholder: '搜尋名稱、標籤',
      notLoggedIn: '請先在 Settings → 風格市場 填寫發布身份',
      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: '目前登入身份 —— 在 Settings → 錄音 → 風格市場 修改',
      notLoggedIn: '未登入 —— 去 Settings → 錄音 → 風格市場 填一個發布者名',
      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: '本地說出，本地落字。開始前需要兩個系統權限。',
    accessibilityTitle: '輔助功能',
    hotkeyTitle: '全局快捷鍵',
    accessibilityDesc: '用於監聽全局快捷鍵（默認 {{trigger}}）並把識別結果寫入光標位置。',
    hotkeyDesc: '用於確認全局快捷鍵監聽可用。',
    micTitle: '麥克風',
    micDesc: '用於捕獲你的語音輸入。',
    actionNotApplicable: '無需授權',
    actionGranted: '已授權',
    actionOpenSystem: '打開系統設置',
    actionGrant: '授權',
    actionRequestMic: '彈出授權',
    accessibilityHint: '授權後必須**完全退出 OpenLess** 再重新打開（macOS TCC 規則）。',
    footerHint: '授權全部完成後此引導自動關閉。如果一直不消失，從菜單欄 OpenLess → 退出，重新打開 App。',
  },
  overview: {
    kicker: 'DASHBOARD',
    title: '今日概覽',
    desc: '今日口述統計與系統狀態。',
    pressPrefix: '按',
    pressSuffix: '開始錄音',
    asrKind: 'ASR 語音',
    llmKind: 'LLM 模型',
    asrName: '火山引擎',
    asrSubname: 'bigmodel',
    llmName: 'OpenAI 兼容',
    llmConfigured: '已配置 active 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: '左側選一條查看詳情。',
    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} 通配數字的規則，例如 {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 已移到 設定 -> Providers 頁面統一編輯。這裡現在只負責風格啟停和預設風格。',
    modes: {
      raw: { name: '原文', desc: '只補標點和必要分句，不改寫不擴寫。', sample: '保留原始口語；嗯、那個等口癖會被去除，但不會重組語句。' },
      light: { name: '輕度潤色', desc: '去口癖、補標點，整理爲可發送的自然文字。', sample: '讓轉寫聽起來不像念稿——保留語氣和表達習慣，但行文流暢。' },
      structured: { name: '清晰結構', desc: '多個主題或步驟時，自動組織爲分點列表。', sample: '1. 主題一\na. 要點\nb. 要點\n2. 主題二\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: '發布成功，等待 marketplace 審核',
      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: '只有存在 prior turns 時才會附加',
      runtimeActive: '目前生效',
      runtimeInactive: '目前未生效',
      runtimePreviewFailed: '產生執行時預覽失敗：{{err}}',
      runtimePreviewOmittedFrontApp: '預覽已省略前台 app 標籤。',
      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: '開啟後在本地保存問答記錄，預設關閉。',
    },
    howto: {
      title: '使用方法',
      step1: '按 {{hotkey}} 開啟浮窗。',
      step2: '在任意 app 選中文字。',
      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: '切換式 = 按一次開始、再按一次結束；按住說話 = 按住開始、鬆開結束。',
      modeToggle: '切換式',
      modeHold: '按住說話',
      migrationNoticeTitle: '默認已改爲切換式說話',
      migrationNoticeDesc: '如果你之前改過快捷鍵觸發方式，請在這裏手動確認一次。本次更新調整了快捷鍵方式的默認值與讀取邏輯；如果你更習慣按住說話，可以重新切回“按住說話”。',
      comboRecordLabel: '錄製快捷鍵',
      comboRecordDesc: '點擊後按下你想要的快捷鍵組合（如 ⌘⇧D），支援 Toggle 與 Hold 模式。',
      comboRecordBtn: '錄製快捷鍵',
      comboRecordHint: '請按下快捷鍵組合…',
      comboRecorded: '已錄製',
      comboClear: '清除',
      comboConflict: '此快捷鍵組合不可用',
      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）',
      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: '雲端服務位址',
      marketplaceBaseUrlDesc: '風格市場後端 URL，留空使用預設值。',
      marketplaceDevLoginLabel: 'GitHub 使用者名稱（上傳身份）',
      marketplaceDevLoginDesc: '標識上傳者身分，為空時無法上傳或按讚。',
      startupAtBoot: '開機自啓',
      startupAtBootDesc: '登錄系統時自動啓動 OpenLess。',
      startupAtBootError: '開機自啓切換失敗：{{message}}',
    },
    providers: {
      llmTitle: 'LLM 模型（潤色）',
      llmDesc: 'OpenAI 兼容協議，支持多家供應商切換。',
      providerLabel: '供應商',
      llmProviderDesc: '選擇後將自動填入 Base URL 默認值。',
      credentialStorageNotice: '憑據保存在系統憑據庫中。',
      codexOAuthNotice: 'Codex OAuth 使用本機 Codex 登入狀態（~/.codex/auth.json），無需在 OpenLess 中保存 API Key 或 Base URL。',
      asrProviderDesc: '切換後將自動選用對應憑據。',
      asrTitle: 'ASR 語音（轉寫）',
      asrDesc: '用於將口述實時轉寫爲文本。',
      presets: {
        ark: 'ARK（火山方舟）',
        deepseek: 'DeepSeek',
        siliconflow: '硅基流動',
        openai: 'OpenAI',
        gemini: 'Google Gemini',
        codexOAuth: 'Codex OAuth',
        mimo: '小米 MiMo',
        cometapi: 'CometAPI',
        openrouterFree: 'OpenRouter（免費模型）',
        alibabaCoding: '阿里雲 Coding Plan',
        codingPlanX: 'CodingPlanX',
        custom: '自定義',
        asrVolcengine: '火山引擎 bigasr',
        asrBailian: '阿里雲百煉即時 ASR',
        asrSiliconflow: '硅基流動 SenseVoice',
        asrZhipu: '智譜 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 Key。從 HuggingFace 下載模型即可使用。',
      foundryLocalAsrHint: '在本機運行，無需 ASR API Key。首次使用需下載運行元件和模型。',
      localAsrPerformanceWarning: '本地推理比雲端慢，中文準確率可能更低。適合離線或隱私敏感場景。',
      localAsrReady: '{{model}} 已下載',
      localAsrNotReady: '{{model}} 未下載',
      localAsrGoDownload: '前往模型設置下載',
      localAsrManage: '前往模型設置',
      localAsrDownloadedTitle: '已下載模型',
      localAsrDelete: '刪除',
      fillDefault: '填入默認值',
      readFailed: '讀取失敗',
      apiKeyLabel: 'API 密鑰',
      baseUrlLabel: '接口地址',
      modelLabel: '模型',
      thinkingModeLabel: '思考',
      thinkingModeOn: '開啟',
      thinkingModeOff: '關閉',
      thinkingModeHint: '關閉時按渠道級官方參數關閉或降低思考；開啟時按渠道預設啟用思考。不注入 prompt，也不做單模型適配。',
      bailianVocabularyIdLabel: '熱詞 Vocabulary ID（可選）',
      bailianVocabularyIdNote: '如已在百煉建立熱詞表，可填寫 vocab-...；留空則不下發熱詞。',
      appIdLabel: 'App ID（應用 ID）',
      accessKeyLabel: 'Access Key',
      resourceIdLabel: '資源 ID',
      toolsLabel: '連接檢查',
      toolsDesc: '先保存上方配置，再驗證當前模型連通性或拉取模型；失敗時仍可手動填寫模型 ID。',
      validate: '驗證',
      validating: '驗證中…',
      fetchModels: '拉取模型',
      loadingModels: '拉取模型中…',
      modelMissing: '未配置模型，請先填寫模型 ID。',
      modelsEmpty: '鑑權成功，但沒有返回可用模型。',
      modelsLoaded: '已拉取 {{count}} 個模型。',
      selectModel: '選擇一個模型寫入上方字段',
      modelSaved: '已保存模型 {{model}}。',
      validateSuccess: '連接檢查通過。',
      providerHttpStatus: '供應商接口返回 {{status}}，請檢查 API Key 權限或 Endpoint。',
      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 需要麥克風可用，並依賴全局快捷鍵監聽狀態判斷 native hook 是否正常工作。',
      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 輸入法，避免剪貼板插入限制。',
      windowsImeInstalled: '已安裝',
      windowsImeUnavailable: '不可用',
      windowsIme: {
        installed: '已安裝。語音輸入時會臨時切換到 OpenLess 輸入法。',
        notInstalled: '未安裝。OpenLess 正在使用剪貼板 / WM_PASTE 兜底。',
        registrationBroken: '註冊已損壞。請重新安裝 OpenLess 輸入法。',
        notWindows: '僅 Windows 可用。',
      },
    },
    advanced: {
      streamingInsertTitle: '流式輸入',
      streamingInsertTitleLinux: '流式輸入（實驗）',
      streamingInsertDesc:
        '逐字即時插入，降低感知延遲。不滿足條件時回落到一次性貼上。',
      streamingInsertLabel: '流式輸入',
      streamingInsertHintMac:
        '臨時切到 ABC 輸入源，避免 CJK IME 攔截，會話結束後自動切回。',
      streamingInsertHintWindows:
        'SendInput Unicode 直接送字元，繞過 TSF / IME，不切輸入法。',
      streamingInsertHintLinux:
        '通過 fcitx5 插件提交文字；串流輸入使用 enigo + XTest 合成按鍵。',
      streamingInsertSaveClipboardLabel: '同步到剪貼簿',
      streamingInsertSaveClipboardHint: '插入成功後把最終文字寫入剪貼簿，方便 Cmd+V 再次貼上；關閉後流式過程不動剪貼簿。',
      localAsrTitle: '本地 ASR 模型（實驗性）',
      localAsrDesc: '把轉寫從雲端切到本機推理。僅推薦離線 / 隱私敏感場景。',
      localAsrWarningShort: '本地推理較慢，配置不足時可能吞字。',
      qwen3Desc: '啓動之後，ASR 提供商將被接管。',
      foundryDesc: '啓動之後，ASR 提供商將被接管。',
      notSupportedHere: '本平臺暫不支持，未集成推理模塊。',
      enable: '啓用',
      alreadyActive: '已啓用',
      disableLocalLabel: '停用本地 ASR',
      disableLocalDesc: '切回雲端 ASR（默認火山引擎 bigasr）。',
      disable: '停用',
      platformNotSupported: '該平臺暫未支持本地 ASR 模型集成。',
      confirmEnableLocalTitle: '啓用本地 ASR？',
      confirmEnableLocalBody: '啟用後轉寫會比雲端慢，準確率可能更低。',
      confirm: '確認啓用',
    },
    language: {
      title: '界面語言',
      desc: '切換 UI 顯示語言。當前會話即時生效，下次啓動自動沿用。',
      label: '語言',
      labelDesc: '選擇「跟隨系統」時按操作系統當前語言顯示。',
      followSystem: '跟隨系統',
      zh: '簡體中文',
      zhTW: '繁體中文',
      en: 'English',
      ja: '日本語 (Beta)',
      ko: '한국어 (Beta)',
      restartHint: '部分原生菜單（系統托盤等）可能需要重啓 App 纔會切換。',
    },
    about: {
      tagline: '自然說話，完美書寫',
      checkUpdate: '檢查更新',
      checkUpdateBtn: '檢查',
      checkingUpdate: '檢查中…',
      upToDate: '當前已是最新版本。',
      updateError: '檢查或更新失敗，請稍後重試。',
      retryBtn: '重試',
      openReleases: '打開 Releases',
      source: '源碼',
      docs: '文檔',
      feedback: '反饋',
      qq: '社區 QQ 羣',
      qqDesc: '使用 QQ 搜索羣號加入，或掃碼進羣。',
      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: '整體縮放界面字號，立即生效。',
      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 搜尋群號加入，或掃碼進群。',
      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}} 開始錄音，再按一次結束。',
    adapter: {
      macEventTap: 'macOS Event Tap',
      windowsLowLevel: 'Windows 低層鍵盤 hook',
      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 Key。首次使用需下載運行元件和模型。',
    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}}',
    engineUnloaded: '未加載（首次聽寫需先加載模型）',
    loadNow: '立即加載',
    releaseNow: '立即釋放',
    keepLoadedLabel: '保持加載多久',
    keepLoadedDesc: '決定 Qwen3-ASR 用完後多久從內存釋放，避免長期佔用內存。',
    keepImmediate: '說完話立即釋放',
    keep1min: '上次使用後 1 分鐘',
    keep5min: '上次使用後 5 分鐘（默認）',
    keep30min: '上次使用後 30 分鐘',
    keepForever: '不釋放（始終保留）',
  },
};
