export const zhCN = {
  app: {
    sectionWorkspace: "工作区",
    sectionObserve: "监控",
    sectionConfigure: "配置",
    tabChat: "对话",
    tabPlans: "计划",
    tabSessions: "会话",
    tabOverview: "概览",
    tabUsage: "用量",
    tabSystem: "系统",
    tabSemantic: "语义",
    tabTools: "工具",
    tabPermissions: "权限",
    tabMcp: "MCP",
    tabSkills: "技能",
    tabMemory: "记忆",
    tabHooks: "钩子",
    tabSettings: "设置",
    sectionChanges: "变更",
    tabChanges: "变更",
    footer: "仅 127.0.0.1 · Token 保护",
    themeToggle: "切换主题",
    themeLight: "浅色",
    themeDark: "深色",
  },
  changes: {
    chatPlaceholder: "询问代码问题…",
    chatCommentSummaryPlaceholder: "总结评论…",
    chatWelcome: "变更 — 询问项目文件相关问题。",
    chatSend: "发送",
    viewerPlaceholder: "选择一个文件查看",
    treeEmpty: "（空）",
    tabClose: "关闭标签",
    newConversation: "新建",
    clearConversation: "清除",
    newTitle: "/new — 清除对话上下文",
    clearTitle: "/clear — 仅清除可见的滚动回放",
    newConfirmBusy: "有轮次正在执行。中止并开始新对话？",
    newConfirm: "清除当前对话并重新开始？",
    newToast: "新对话",
    clearToast: "滚动回放已清除",
    newFailed: "/new 失败：{error}",
    clearFailed: "/clear 失败：{error}",
    chatSendBtn: "发送",
    fileTreeTitle: "文件",
    fileSearchPlaceholder: "搜索文件…",
    codeViewerTitle: "代码查看器",
    chatPanelTitle: "对话",
    loadingFiles: "正在加载项目文件…",
    review: "审查",
    allFiles: "所有文件",
    changes: "更改",
    commentLabel: "正在评论 第",
    commentPlaceholder: "添加评论…",
    commentCancel: "取消",
    commentSubmit: "评论",
    commentLine: "第",
    commentEdit: "编辑",
    commentDelete: "删除",
    diffSourceCheckpoint: "检查点",
    checkpointEmpty: "暂无检查点",
    restoreBtn: "恢复",
    restoreConfirm: '确定要恢复检查点"{name}"吗？当前更改将被覆盖。',
    deleteBtn: "删除",
    deleteConfirm: '确定要删除检查点"{name}"吗？',
    createBtn: "创建",
    createPlaceholder: "检查点名称…",
    backToList: "返回列表",
    reviewEmpty: "暂无可审查的更改",
    diffSourceGit: "Git 变更",
    diffSourceSession: "上一轮变更",
    diffStyleUnified: "统一视图",
    diffStyleSplit: "分栏视图",
    expandAll: "全部展开",
    collapseAll: "全部折叠",
    createFailed: "创建失败",
    restoreFailed: "恢复失败",
    deleteFailed: "删除失败",
  },
  common: {
    loading: "加载中…",
    loadingFailed: "{name}失败：{error}",
    back: "← 返回",
    save: "保存",
    remove: "移除",
    cancel: "取消",
    delete: "删除",
    add: "添加",
    confirm: "确认",
    noData: "暂无{name}。",
    all: "全部",
    yes: "是",
    no: "否",
    on: "开启",
    off: "关闭",
    enabled: "已启用",
    disabled: "已禁用",
  },
  settings: {
    title: "设置",
    loading: "加载设置…",
    saved: "已保存：{fields}",
    sectionApi: "DeepSeek API",
    apiKey: "API 密钥",
    notSet: "（未设置）",
    replace: "替换",
    pasteKey: "粘贴新的 sk-… 令牌",
    saveKey: "保存密钥",
    baseUrl: "基础 URL",
    baseUrlPlaceholder: "https://api.deepseek.com（默认）",
    sectionDefaults: "默认设置",
    preset: "预设",
    presetAuto: "auto — flash 基线，困难时自动升级为 pro",
    presetFlash: "flash — 始终使用 flash，不自动升级",
    presetPro: "pro — 始终使用 pro",
    appliesNextTurn: "下一轮生效",
    effort: "推理强度",
    effortMax: "max（默认 — 最佳质量）",
    effortHigh: "high（更便宜 / 更快）",
    webSearch: "网页搜索",
    webSearchNote: "web_fetch + web_search 工具",
    sectionCompute: "计算",
    proNext: "/pro 单轮",
    proArm: "为下一轮装备",
    proArmed: "已装备 — 下一轮后自动解除",
    proNextNote: "下一轮使用 deepseek-v4-pro，之后自动解除",
    sectionBudget: "预算",
    budgetOf: "/",
    budgetSetCap: "设置上限",
    budgetCustom: "自定义",
    budgetBumpHint: "提高上限以继续",
    budgetClear: "清除上限",
    budgetIdleLine: "80% 时提醒 · 100% 后拒绝执行",
    budgetWarnLine: "接近上限 — 超过 100% 将拒绝执行",
    budgetRefusing: "已超出上限 — 提高或清除后才会继续",
    sectionLoop: "循环",
    loopIdleHint: "按固定间隔自动重新提交一段提示词。",
    loopCostHint: "每次迭代约 {cost}（上一轮成本）。",
    loopInterval: "间隔",
    loopCustom: "自定义",
    loopRangeError: "间隔需在 5s..6h 之间",
    loopPrompt: "提示词",
    loopPromptPlaceholder: "例如：检查部署状态并汇报任何错误",
    loopStart: "启动循环",
    loopStop: "停止",
    loopRunning: "运行中",
    loopIter: "第 {iter} 次",
    loopFiresIn: "{remaining} 后触发",
    sectionSkills: "技能",
    skillPaths: "技能路径",
    skillPathsPlaceholder: "/path/to/skills-a, /path/to/skills-b",
    skillPathsNote: "英文逗号分隔 · 下次 /new 或新会话生效",
    sectionRuntime: "运行时",
    activeModel: "当前模型",
    modelPricingLine: "${hit} 命中 · ${miss} 未命中 · ${out} 输出  / 100 万 tok",
    editMode: "编辑模式",
    editModeNote: "在对话标签页头部切换",
    sectionLanguage: "语言",
    language: "语言",
    langEn: "English",
    langZhCn: "简体中文",
  },
  chat: {
    modeMirror: "TUI 镜像",
    modeView: "会话视图",
    placeholder: "输入提示词 — Enter 发送，Shift+Enter 换行 · / @ 打开选择器",
    placeholderBusy: "请等待当前轮次完成…",
    send: "发送",
    new: "新建",
    clear: "清除",
    newTitle: "/new — 清除对话上下文（循环日志 + 滚动回放）",
    clearTitle: "/clear — 仅清除可见的滚动回放（上下文保留）",
    noConversation: "暂无对话。在下方发送提示词开始。",
    newConfirmBusy: "有轮次正在执行。中止并开始新对话？",
    newConfirm: "清除当前对话并重新开始？",
    newToast: "新对话",
    clearToast: "滚动回放已清除",
    newFailed: "/new 失败：{error}",
    clearFailed: "/clear 失败：{error}",
    eventStreamError: "事件流中断 — 正在重连…",
    semanticBanner: "此项目未启用语义搜索。",
    semanticBannerDesc:
      "构建一次索引，模型即可按含义查找代码（“哪里处理认证失败？”），而不仅依赖精确字符串的 grep。",
    semanticBannerBtn: "构建 →",
    semanticBannerDismiss: "关闭（不再显示）",
    slashCommands: "斜杠命令",
    projectFiles: "项目文件",
    effortTitle: "reasoning_effort — 下一轮生效",
    effortMaxTitle: "max（默认 — 最佳质量）",
    effortHighTitle: "high（更便宜 / 更快）",
    presetTitle: "预设 — 模型承诺",
    presetAutoTitle: "auto — flash 基线；困难轮次自动升级为 pro（NEEDS_PRO / 失败阈值）",
    presetFlashTitle: "flash — 始终 flash；不自动升级。/pro 仍可用于一次性手动提升",
    presetProTitle: "pro — 始终 pro；约 3 倍 flash 成本（5/31 折扣）。锁定困难的架构工作。",
    editGateTitle: "编辑门控 — Shift+Tab 在 TUI 中循环",
    editReviewTitle: "review — 编辑和非允许列表的 shell 命令都会先询问",
    editAutoTitle: "auto — 编辑自动应用，shell 仍会询问",
    editYoloTitle: "yolo — 编辑和 shell 都自动运行，绕过允许列表",
    railSession: "会话",
    railTurns: "轮次",
    railPromptTok: "提示 tokens",
    railCost: "费用",
    railCacheHit: "缓存命中",
    railToolBudget: "工具预算",
    railSpend: "已用",
    railActivePlan: "活跃计划",
    railProgress: "进度",
    statusModel: "模型",
    statusCtx: "上下文",
    statusCache: "缓存",
    statusTurn: "轮次",
    statusSession: "会话",
    statusBalance: "余额",
    statusTurns: "{count} 轮",
    waitingStats: "· · ·  等待实时统计",
    inflightPhase: "{phase}",
    inflightRunning: "运行中",
    inflightThinking: "思考中",
    inflightStreaming: "输出中",
    inflightWaiting: "等待中",
    inflightReasoning: "推理 {count} 字符",
    inflightOut: "输出 {count} 字符",
    abortBtn: "中止 (Esc)",
    confirmBtn: "应用 (y)",
    rejectBtn: "拒绝 (n)",
    applyRestBtn: "应用剩余 (a)",
    flipAutoBtn: "切换为 AUTO (A)",
  },
  overview: {
    loading: "加载概览…",
    failed: "概览失败：{error}",
    standaloneTitle: "独立模式",
    standaloneDesc:
      "只读磁盘视图。在 carboncode code 内启动 /dashboard 以获取实时会话状态、MCP 和工具。",
    cockpit: "驾驶舱",
    balance: "余额",
    tokens7d: "tokens · 7 天",
    cacheHit: "缓存命中",
    toolCalls24h: "工具调用 · 24 小时",
    budget: "预算",
    currentSession: "当前会话",
    noSession: "无活跃会话 — 在 carboncode code 内执行 /dashboard 进行连接。",
    promptTok: "提示 tokens",
    completionTok: "补全 tokens",
    cost: "费用",
    costTrend: "费用 · 14 天",
    noUsageYet: "暂无用量",
    dayAvg: "/天 均值",
    recentPlans: "近期计划",
    noPlans: "暂无计划 — 使用 submit_plan 提交一个。",
    toolActivity: "工具活动",
    noToolCalls: "暂无工具调用。",
    toolsLoaded: "已加载工具",
    mcpServers: "MCP 服务器",
    editMode: "编辑模式",
    version: "Carbon Code",
    workingDir: "工作目录",
    projectRoot: "项目根目录",
    noPriorData: "无历史数据",
    stable: "— 稳定",
    vsPrior: "{arrow} {pct}% 较上期",
    active: "活跃",
    allUp: "全部在线",
    yoloWarning: "所有提示被绕过",
    checking: "检查中",
    latest: "最新",
  },
  usage: {
    loading: "加载用量…",
    failed: "用量失败：{error}",
    records: "{count} 条记录",
    dailyUsage: "每日用量",
    dailyMeta: "费用 · 缓存节省 · 轮次",
    noData: "暂无用量数据 — 在 carboncode chat / code / run 中执行一轮，然后刷新。",
    windows: "滚动窗口",
    colWindow: "时间范围",
    colTurns: "轮次",
    colCacheHit: "缓存命中",
    colCost: "费用 (USD)",
    colCacheSaved: "缓存节省",
    colVsClaude: "对比 Claude",
    colSaved: "节省",
    axisTime: "时间",
    axisUsd: "美元",
    axisTurns: "轮次",
    seriesCost: "费用",
    seriesCacheSaved: "缓存节省",
    seriesTurns: "轮次",
    mostUsed: "最常用模型",
    colModel: "模型",
  },
  sessions: {
    loading: "加载会话…",
    failed: "会话失败：{error}",
    noSessions: "暂无已保存的会话。",
    filterPlaceholder: "筛选会话",
    msgs: "条消息",
    pickHint: "选择左侧的会话以查看其转录稿。",
    resumeTitle: "在 TUI 中恢复",
    resumeDesc: "会话中途切换需要重启，以便消息日志可以干净地回退。请退出当前会话，然后运行：",
    loadingTranscript: "加载转录稿…",
    emptyTranscript: "空的转录稿。",
    messages: "{count} 条消息",
    newBtn: "新建会话",
    newHint: "归档当前会话并开启新会话",
    switchBtn: "切换到此会话",
    deleteBtn: "删除",
    deleteConfirm: "确定删除会话「{name}」？转录文件将被移除，无法撤销。",
    cantDeleteActive: "请先切换到其他会话，再删除当前会话。",
    attachRequired:
      "实时会话操作需要已连接的 CLI 会话。请通过 carboncode chat 启动，或在 TUI 会话中打开仪表盘。",
    activeChip: "当前",
    activePill: "当前",
  },
  tools: {
    loading: "加载工具…",
    failed: "工具失败：{error}",
    noTools: "未注册任何工具。",
    planMode: "计划模式 — 写入受限",
    colTool: "工具",
    colFlags: "标志",
    colDesc: "描述",
    readOnly: "只读",
    write: "写入",
    flat: "扁平",
    desc: {
      web_search:
        "搜索公共网络。返回带标题、URL 和摘要的排序结果。当答案的正确性依赖于当前状态时调用——事件、价格、发布、现实世界的状态。",
      web_fetch:
        "下载 URL 并返回其可见文本内容（已剥离脚本/样式/导航）。在 web_search 摘要不够时使用。",
      run_command:
        "在项目根目录执行 shell 命令，返回合并的标准输出和标准错误。白名单中的只读命令立即执行；可能修改状态的操作需用户确认。",
      run_background:
        "启动一个长时间运行的进程并分离。返回任务 ID 用于查看日志、等待完成或终止。用于开发服务器、文件监听器和一次性长时间任务。",
      job_output: "读取后台任务的最新输出。返回缓冲区末尾内容并告知任务是否仍在运行。",
      wait_for_job: "在服务端阻塞直到后台任务完成（有超时限制）。用于替代轮询 job_output。",
      stop_job: "停止后台任务。先发送 SIGTERM，宽限期后发送 SIGKILL。可安全调用已退出的任务。",
      list_jobs: "列出本次会话启动的所有后台任务——运行中和已退出的——包含 ID、命令、PID 和状态。",
      remember:
        "保存一条记忆供未来会话使用。当用户陈述偏好、纠正你的方法、分享非显而易见的事实或要求你记住某事时使用。",
      forget:
        "删除记忆文件并从 MEMORY.md 中移除。当用户要求忘记某事或之前记住的事实已不再正确时使用。",
      recall_memory: "当记忆文件的一行摘要不够详细时，读取其完整内容。",
      read_file:
        "读取沙箱根目录下的文件。支持 head/tail/range 范围读取以节省上下文。超过 200 行的文件自动返回预览。",
      list_directory: "列出目录中的条目。每行一个条目，目录以斜杠标记。",
      directory_tree: "递归列出目录中的条目，以缩进树形结构显示。对大子目录自动折叠以节省预算。",
      search_files: "根据名称匹配子串或正则表达式查找文件。不区分大小写。默认跳过依赖/构建目录。",
      search_content:
        "递归搜索文件内容中的子串或正则表达式。以 path:line:text 格式返回匹配结果。查找引用的正确工具。",
      glob: "按 glob 模式列出文件，按修改时间排序。默认限制 200，最大 1000。默认跳过 node_modules/.git/dist。",
      get_file_info: "获取沙箱根目录下路径的状态信息。返回类型、字节大小和修改时间。",
      write_file: "创建或覆盖文件，内容由参数指定。按需创建父目录。",
      edit_file: "对现有文件应用 SEARCH/REPLACE 编辑。搜索必须完全匹配且在文件中唯一。",
      multi_edit:
        "跨一个或多个文件原子性地应用 N 个 SEARCH/REPLACE 编辑。如果任何编辑失败，不写入任何文件。",
      create_directory: "在沙箱根目录下创建目录（以及任何缺失的父目录）。",
      move_file: "重命名或移动沙箱根目录下的文件或目录。",
      delete_file: "删除沙箱根目录下的一个文件。拒绝目录——请使用 delete_directory 删除目录。",
      delete_directory: "递归删除沙箱根目录下的目录。传入 recursive:false 可拒绝非空目录。",
      copy_file: "复制沙箱根目录下的文件或目录。拒绝覆盖已存在的目标。",
      submit_plan:
        "提交一个具体的计划以供审查审批。用于多文件重构、架构变更或任何撤销代价高昂的操作。",
      mark_step_complete: "将已批准计划的一个步骤标记为完成。完成每个步骤后恰好调用一次。",
      revise_plan: "外科手术式替换进行中计划的剩余步骤。已完成的步骤永远不会被触及。",
      run_skill:
        "从技能索引中调用一个 playbook。传入裸技能名称。标记为子代理的技能将启动独立的子代理。",
      spawn_subagent: "为一个独立子任务启动隔离的子代理。用于并行分发或需要大量文件读取的工作。",
      todo_write: "多步工作的会话内任务跟踪器。每次调用替换整个列表。无审批关卡，不写入文件。",
      ask_choice: "向用户展示 2-6 个选项。当用户要求选择或需要偏好决策时使用。",
      create_skill: "创建一个新技能，用户可通过 /skill 命令调用。支持内联和子代理两种运行模式。",
      add_mcp_server:
        "在用户配置中注册新的 MCP 服务器。下次会话生效。支持 stdio、SSE 和 streamable-http。",
    },
  },
  permissions: {
    loading: "加载权限…",
    failed: "权限失败：{error}",
    yoloTitle: "YOLO 模式",
    yoloDesc: "所有 shell 命令自动运行，允许列表被绕过。在 TUI 中使用 /mode review 切换回来。",
    project: "项目",
    builtin: "内置",
    addPrefix: "添加前缀",
    addPlaceholder: '例如 "npm run build" 或 "deploy.sh"',
    clearAll: "清除全部",
    alreadyIn: "{prefix} 已在列表中",
    added: "已添加：{prefix}",
    removed: "已移除：{prefix}",
    cleared: "已清除 {count} 条",
    removeConfirm: '从此项目的允许列表中移除 "{prefix}"？',
    clearConfirm: "清除所有项目允许列表条目？内置条目不受影响。",
    projectAllowlist: "项目允许列表 · {count}",
    nothingStored: "此项目暂无存储的条目。",
    colNum: "#",
    colPrefix: "前缀",
    builtinTitle: "内置 · {count} · 只读",
    standaloneWarning:
      "修改操作需要在活跃的 carboncode code 会话内执行 /dashboard — 独立模式的 carboncode dashboard 无法确定要编辑哪个项目的允许列表。",
  },
  mcp: {
    loading: "加载 MCP…",
    servers: "MCP 服务器 · {count} 个已桥接",
    all: "全部",
    live: "在线",
    unbridged: "未桥接",
    specPlaceholder: "规格 — 例如 fs=npx -y @modelcontextprotocol/...",
    saved: "已保存",
    savedRestart: "已保存 — 重启 carboncode code 以桥接此服务器",
    removed: "已移除 — 重启以断开实时桥接",
    removeConfirm: "从配置中移除 MCP 规格？\n\n{spec}",
    noServers: "此会话中无 MCP 服务器。",
    tools: "个工具",
    inConfig: "在配置中 · 未加载",
    unbridgedTitle: "未桥接 · 在配置中",
    removeBtn: "移除",
    spec: "规格",
    whyUnbridged: "为什么未桥接？",
    whyUnbridgedDesc:
      "此规格存在于您的 config.json 中，但未桥接到实时会话。MCP 服务器在 carboncode code 启动时连接；仪表盘本身无法生成子进程。",
    whyUnbridgedHint: "激活方法：重启 carboncode code，然后刷新此仪表盘。",
    bridgeFailed: "桥接失败",
    bridgeFailedTitle: "桥接失败 · 在配置中",
    bridgeFailedHint:
      "已尝试桥接但失败。常见原因：URL 错误、需要鉴权、上游 404 / 5xx、本地命令缺失。修复后重启 carboncode code 重试。",
    pickHint: "选择左侧的 MCP 服务器以检查工具 / 资源 / 提示。",
    toolsTitle: "工具 · {count}",
    resourcesTitle: "资源 · {count}",
    promptsTitle: "提示 · {count}",
    colName: "名称",
    colDesc: "描述",
    colUri: "URI",
    marketplace: "市场",
    marketplaceSearch: "搜索注册表…",
    marketplaceLoading: "加载注册表…",
    marketplaceMore: "再加载 5 页",
    marketplaceMoreLabel: "再加载 50 条  ·  当前 {shown} / {total}",
    marketplaceMoreHint: "需要从远端注册表再拉几页",
    marketplaceMoreCachedHint: "本地缓存已有更多条目",
    marketplaceExhausted: "已加载全部页",
    marketplaceExhaustedFull: "已展示全部 {total} 条 — 注册表耗尽",
    marketplaceCount: "已载入 {loaded} · 匹配 {matched} · 来源：{source}{cached}",
    marketplaceCachedSuffix: " · 缓存中",
    marketplaceNoMatches: "无匹配结果。换关键词或加载更多页。",
    marketplaceInstall: "安装",
    marketplacePickHint: "在左侧选择服务器，然后点安装。",
    marketplaceInstalled: "已安装 → {spec}",
    marketplaceInstalledBridged: "已安装并桥接 → {spec}",
    marketplaceAlready: "已安装过",
    marketplaceNeedsEnv: "需设置环境变量：{names}",
    marketplaceSourceTag: "[{source}]",
    marketplaceNoInstall:
      "Smithery 列表项 — 不暴露安装元数据；请直接 `npx -y @smithery/cli install {name}`",
    marketplaceFetchOnInstall:
      "Smithery 列表 — 安装时再拉详情。HTTP 服务映射为 streamable-http 远端；stdio 服务通过 @smithery/cli 运行。",
    marketplaceInstalledBadge: "已安装",
    marketplaceUninstall: "卸载",
    marketplaceEnvTitle: "必需的环境变量",
    marketplaceEnvHint:
      "下次启动 `carboncode code` 之前在 shell 里设好，桥接的服务器才能正常鉴权。",
    marketplaceRestartHint:
      "已写入 ~/.carboncode/config.json。重启 `carboncode code` 后服务器才会真正桥接（热重载在路线图上）。",
  },
  memory: {
    loading: "加载记忆…",
    files: "记忆 · {count} 个文件",
    exists: "已存在",
    create: "创建",
    noFiles: "暂无记忆文件。",
    pickHint: "选择左侧的记忆文件。",
    pickDesc: "项目 CARBON.md 可提交；全局笔记存储在 ~/.carboncode/CARBON.md。",
    chars: "{count} 个字符",
    saved: "已保存 {scope}",
    reloadHint: "在下次 /new 或会话重启时重新加载",
  },
  hooks: {
    loading: "加载钩子…",
    resolved: "已解析",
    eventMatrix: "事件矩阵",
    matrixSub: "{scripts} 个脚本 × {events} 个事件",
    noHooks: "未配置钩子。编辑下方的 JSON 以添加。",
    colScript: "脚本",
    noProject: "无活跃项目 — 在 carboncode code 中打开 /dashboard 以编辑项目钩子。",
    saveReload: "保存并重载",
    discard: "放弃更改",
    savedReloaded: "已保存并重载 {scope}",
    recentRuns: "近期运行",
    noRuns: "近期会话日志中无钩子运行记录。",
    colWhen: "时间",
    colPhase: "阶段",
    colHook: "钩子",
    colOutcome: "结果",
  },
  skills: {
    loading: "加载技能…",
    filterPlaceholder: "筛选技能",
    project: "项目",
    custom: "自定义",
    global: "全局",
    builtin: "内置",
    newSkill: "新技能",
    noDescription: "（无描述）",
    runs7d: "次运行 · 7 天",
    pickHint: "选择左侧的技能，或在上方创建新技能。",
    readOnlyBuiltin: "只读 · 内置",
    readOnlyCustom: "只读 · 自定义路径",
    builtinDesc:
      "内置技能随 Carbon Code 一起发布；模型会自动识别。如需自定义，请创建同名的项目或全局技能。",
    saved: "已保存 {scope}/{name}",
    deleteConfirm: "删除技能 {scope}/{name}？",
    reloadHint: "在下次 /new 或会话重启时重新加载",
  },
  system: {
    loading: "加载健康状态…",
    failed: "健康检查失败：{error}",
    healthChecks: "健康检查",
    version: "版本",
    checking: "检查中",
    latest: "● 最新",
    outOfDate: "● 需要更新",
    versionPending: "版本检查中",
    upToDate: "已是最新",
    latestVer: "最新：{version}",
    sessions: "会话",
    ok: "● 正常",
    memory: "记忆",
    semanticIndex: "语义索引",
    built: "● 已构建",
    none: "— 无",
    runIndex: "运行 carboncode index 以构建",
    usageLog: "用量日志",
    backgroundJobs: "后台任务",
    noSession: "— 无会话",
    running: "{count} 个运行中",
    attachHint: "连接会话以查看任务",
    shellSpawn: "Shell + 生成",
    paths: "路径",
    home: "主目录",
    sessionsPath: "会话",
    memoryPath: "记忆",
    semanticPath: "语义",
    usagePath: "用量",
  },
  plans: {
    loading: "加载计划…",
    failed: "计划失败：{error}",
    noPlans: "暂无归档计划 — 运行调用 submit_plan 和 mark_step_complete 的轮次。",
    filterPlaceholder: "筛选计划",
    active: "进行中",
    done: "已完成",
    idle: "未开始",
    steps: "步骤",
    pickHint: "选择左侧的计划。",
    noTitle: "（无标题）",
    stepTimeline: "步骤时间线 · {done} / {total}",
    step: "步骤 {n}",
  },
  semantic: {
    codeRequired: "语义 — 需要代码模式",
    indexBuilt: "索引已构建",
    noIndex: "尚无索引",
    ready: "就绪",
    setupNeeded: "需要设置",
    installOllama: "安装 Ollama",
    installOllamaDesc: "Carbon Code 不会为您运行包管理器。请先安装 Ollama，然后返回：",
    macWindows: "macOS / Windows：",
    download: "从 ollama.com/download 下载",
    linux: "Linux：",
    refreshHint: "安装后刷新 — 此面板将提供启动守护进程和拉取 {model} 的选项。",
    daemon: "守护进程",
    daemonDesc: "ollama 在您的 PATH 中，但 HTTP 守护进程不可达。",
    startDaemon: "启动守护进程",
    runsOllama: "以分离模式运行 ollama serve",
    model: "模型",
    modelMissing: "{model} 尚未安装。",
    modelSize: "首次拉取约 270 MB。",
    pulling: "拉取中…",
    pullModel: "拉取 {model}",
    indexStatus: "索引状态",
    builtStatus: "● 已构建",
    incompatibleStatus: "● 不兼容",
    chunks: "分块",
    files: "文件",
    dim: "维度",
    size: "大小",
    lastBuild: "上次构建",
    builtWith: "构建来源",
    currentTarget: "当前目标",
    incompatibleHint:
      "磁盘上的这个索引是为不同的 provider 或 model 构建的。运行“完全重建”即可替换。",
    runIndexHint: "运行索引以启用 semantic_search。",
    reIndex: "重建索引",
    build: "构建",
    rebuild: "完全重建",
    stop: "停止",
    provider: "提供方",
    providerType: "服务类型",
    openaiCompat: "OpenAI-Compatible",
    apiUrl: "API URL",
    apiKey: "API Key",
    apiKeyStoredNote: "API Key 仅保存在本地，不会发送到第三方。",
    customRequestBody: "自定义请求体",
    invalidCustomRequestBody: "自定义请求体必须是合法 JSON：{error}",
    customRequestBodyMustBeObject: "自定义请求体必须是 JSON 对象。",
    saveBeforeIndex: "请先保存语义设置，再启动索引。",
    extraBody: "扩展请求体",
    batchSize: "批次大小",
    keepExistingKey: "留空则保留现有 Key",
    remoteProvider: "远程向量服务",
    remoteProviderDesc:
      "在这里配置 OpenAI-Compatible embeddings 的完整 URL。Carbon Code 会严格使用你提供的 URL 发起请求。",
    ollama: "Ollama",
    binary: "二进制",
    found: "已找到",
    missing: "缺失",
    daemonStatus: "守护进程",
    up: "运行中",
    down: "已停止",
    pulled: "已拉取",
    indexConfig: "索引配置",
    reset: "重置",
    excludeDirs: "排除目录",
    excludeFiles: "排除文件",
    excludeExts: "排除扩展名",
    excludePatterns: "排除模式",
    glob: "glob",
    respectGitignore: "遵循 .gitignore",
    maxFileBytes: "最大文件字节数",
    skipLarger: "跳过大于 ~{size} MiB 的文件",
    preview: "预览",
    searchPlaceholder: "描述要查找的内容 — '哪里处理中止信号'",
    searching: "搜索中…",
    results: "{count} 个结果 · {ms}ms · {model}",
    noMatches: "没有超过分数阈值的匹配。",
    previewSummary: "预览 — 将索引 {included} 个文件，跳过 {skipped} 个",
    nothingSkipped: "无跳过 — 所有遍历的文件都将被索引。",
    firstIncluded: "前 {count} 个包含的文件",
    job: "任务",
    phaseSetup: "初始化中",
    phaseScan: "扫描文件",
    phaseEmbed: "嵌入分块",
    phaseWrite: "写入索引",
    phaseDone: "完成",
    phaseError: "错误",
    phaseCancelled: "已停止",
    setupFailed: "初始化失败",
    stopping: "停止中",
    scanned: "已扫描 {count}",
    changed: "已变更 {count}",
    skipped: "已跳过 {count}",
    chunksProgress: "{done} / {total}（{pct}%）",
    result: "结果",
    added: "已添加 {count}",
    removed: "已移除 {count}",
    failed: "失败 {count}",
    skippedFiles: "{total} 个文件（{details}）",
    rebuildStarted: "已启动完全重建",
    incrementalStarted: "已启动增量索引",
    stopRequested: "已请求停止 — 当前分块批次将首先完成",
    startingDaemon: "正在启动 ollama 守护进程（15 秒超时）…",
    daemonUp: "守护进程已启动",
    daemonTimeout: "守护进程未在规定时间内启动 — 请手动检查 ollama serve",
    pullingModel: "正在拉取 {model} — 首次安装可能需要几分钟",
    savedConfig: "已保存 · {count} 个字段已更新 · 重新运行索引以应用",
    runningPreview: "正在对项目根目录执行干运行…",
    exclude: "排除",
  },
  modal: {
    shellTitle: "Shell 命令",
    shellBgTitle: "后台进程",
    shellSubtitle: "模型想要运行一条 Shell 命令",
    shellBgSubtitle: "长时间运行 — 批准后继续运行",
    runOnce: "运行一次",
    alwaysAllow: '始终允许 "{prefix}"',
    deny: "拒绝",
    choiceTitle: "模型需要您选择",
    typeOwn: "输入自定义回答",
    typeOwnSummary: "以上选项都不合适 — 写一个自由格式的回复。",
    typePlaceholder: "输入自由格式的回答…",
    send: "发送",
    cancel: "取消",
    cancelSummary: "放弃此问题。模型将询问您实际想要什么。",
    planTitle: "计划已提交",
    planSubtitle: "模型提出了一项计划；请审阅后选择",
    approveInstructions: "可选的最后指示 / 对开放问题的回答（Enter 发送空白）",
    refinePlaceholder: "需要更改什么？请具体说明。",
    approve: "批准",
    refine: "优化",
    sendRefinement: "发送优化",
    editTitle: "编辑待审阅",
    editSubtitle: "{path} · {remaining} / {total} 个块剩余",
    before: "修改前",
    after: "修改后",
    workspaceTitle: "模型想要切换工作区",
    workspaceSubtitle: "后续所有文件 / Shell / 记忆工具将针对新根目录解析",
    switchBtn: "切换 (Enter)",
    denyBtn: "拒绝 (Esc)",
    stepComplete: "步骤完成{counter}",
    continueBtn: "继续",
    reviseBtn: "修订…",
    stopBtn: "停止",
    revisionTitle: "模型提出了计划修订",
    sendRevision: "发送修订",
    accept: "接受",
    reject: "拒绝",
    arguments: "参数",
    revisePlaceholder: "下一步之前需要更改什么？留空则直接继续。",
    pickerFilter: "过滤…",
    pickerEmpty: "暂无内容。",
    pickerLoadMore: "加载更多",
    pickerPick: "打开",
    pickerInstall: "安装",
    pickerUninstall: "卸载",
    pickerRename: "重命名…",
    pickerNew: "新建…",
    pickerNewPlaceholder: "名称（留空使用默认）",
    viewerClose: "关闭",
  },
  error: {
    title: "仪表盘出错了",
    body: "TUI 不受影响——只有这个浏览器标签出了问题。通常可以直接关闭并继续使用，不会打断智能体。",
    copyDetails: "复制详情",
    copied: "已复制 ✓",
    reportOnGithub: "在 GitHub 上报告",
    dismiss: "关闭 (Esc)",
    crashing: "此面板持续崩溃 — {name}",
    retry: "重试",
    recovering: "恢复中…",
  },
  fmt: {
    justNow: "刚刚",
    minutesAgo: "{n} 分钟前",
    hoursAgo: "{n} 小时前",
    daysAgo: "{n} 天前",
  },
};
