// 简体中文资源 — 与产品当前文案保持一致。
// 添加新 key 时，必须同步更新 en.ts，否则首次切换到 English 会回落到中文残留。

export const 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: '本次更新调整了默认值，如果习惯按住说话，请在此处切回。',
      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: '云端服务地址',
      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: '麦克风必需；全局快捷键状态用来检测 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: '未安装，走剪贴板 / 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: '不释放（始终保留）',
  },
};
