项目文件夹

文件
2026-07-13 13:00:08 +08:00

511 行
32 KiB
Go

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
package i18n
// Chinese is the zh-Hans catalogue. Keep the %s placeholders in the same order
// as English unless a phrase genuinely demands re-ordering — call sites pass
// arguments positionally and won't reshuffle.
var Chinese = Messages{
Subtitle: "配置与插件驱动的 coding agent",
WelcomeTitleFmt: "欢迎使用 %s",
NoConfigYet: "还没有配置 — 现在来设置一下吧。",
StartingChatFmt: "正在启动 %s…",
SetKeyHint: "设置好 API key 后运行 `reasonix`。",
ConfigLabel: "配置",
ModelsLabel: "模型",
ConfigNotFound: "未找到 — 使用内置默认值",
ConfigErrorFmt: "%s — 错误:%v",
NoKey: "未设置 key",
Ready: "已就绪",
GetStarted: "开始使用",
StepScaffold: "生成 reasonix.toml",
StepSetKey: "设置 API key",
InitHint: "项目记忆(AGENTS.md)在会话内由模型生成:运行 `reasonix`,然后 `/init` —— 模型会分析代码库并写入。配置请用 `reasonix setup`。",
StepSetKeyHint: "运行 `reasonix setup`,或 export DEEPSEEK_API_KEY=…",
StepChatDesc: "交互式会话",
StepRunDesc: "执行单次任务",
HelpFooter: "reasonix help · 查看全部命令",
ChatTip: "对话上下文将跨轮保留。输入 'exit' 或按 Ctrl-D 退出。",
TurnCancelled: "已取消 — 回到提示符",
NoSessionToResume: "没有可恢复的会话 — 用 `reasonix` 开一个新的",
ResumeRequiresTTY: "--resume 需要交互式终端;用 --continue 直接恢复最近一次",
PickSessionLabel: "恢复哪个会话?",
ResumeListHeader: "会话(/resume <n> 切换)",
ResumeBusy: "请先完成或取消当前这一轮再恢复会话",
ResumeBadIndexFmt: "请选择 1–%d 的会话(用 /resume 查看列表)",
ResumeAlreadyActive: "已在该会话中",
ResumedTitle: "已恢复会话",
RenameUsage: "用法:/rename <新名称> 或 /rename <序号> <新名称>",
RenameNoSession: "当前没有活跃会话可重命名",
RenameDoneFmt: "会话已重命名为 %q",
ResumePickTitle: "选择要恢复的会话",
ResumePickHint: "↑/↓ 移动 · Enter 恢复 · Esc 取消",
ChatThinking: "思考中…",
ChatThoughtForFmt: "思考了 %d 秒",
ChatStatusThinkingFmt: "%s 思考中… (%d 秒 · Esc 取消)",
ChatToolWorkingFmt: "%s 运行中 · %d 秒",
ChatStatusRetryingFmt: "%s 正在重试 (%d/%d)… (Esc 取消)",
ChatStatusCancellingFmt: "%s 正在停止… (%d 秒 · Ctrl+C 退出)",
ChatStatusIdle: "就绪",
ChatStatusYoloIdle: "已跳过工具批准",
ChatStatusCycleHint: "shift+tab 切换计划 · ctrl+y yolo",
ChatStatusCacheNowFmt: "本次命中 %s",
ChatStatusCacheAvgFmt: "平均 %s",
ChatStatusPlanApproval: "Enter/y 批准并执行 · n/Esc 继续规划 · PgUp/PgDn/Ctrl+Home/End 滚动",
PlanApprovalPrompt: "计划已生成(见上方)— Enter/y 批准执行,n/Esc 继续规划",
ChatStatusToolApproval: "1 本次允许 · 2 本会话允许此范围 · 提供时 3/4 为前缀或保存 · n/Esc 拒绝 · Ctrl-C 取消本轮",
AskTypeSomething: "自己输入",
AskTypingHint: "输入后按 Enter 确认",
AskChatInstead: "先不选择,直接回复",
ChatStatusQuestion: "↑/↓ 选 · 数字快选 · 空格多选 · Enter 确认 · ←/→ 切换问题 · Esc 取消",
StatusResumePicker: "↑/↓ 移动 · Enter 恢复 · Esc 取消",
AskSubmitTitle: "提交答案",
AskUnanswered: "(未答)",
AskSubmitHint: "Enter 提交 · ← 返回修改",
ToolApprovalPromptFmt: "需要你的许可\n\n将调用工具 %s%s。\n%s\n%s",
ToolApprovalChoices: "1. 本次允许\n2. 本会话允许 %s\n3. 总是允许 %s(保存到配置)\n4. 拒绝\n选择 [1/2/3/4](兼容 y/a/p/n",
BashPrefixChoices: "1. 本次允许\n2. 本会话允许 %s\n3. 总是允许 %s(保存到配置)\n4. 拒绝\n选择 [1/2/3/4](兼容 y/a/p/n",
PlanModeReadOnlyCommandChoices: "1. 本次信任\n2. 本会话信任此前缀\n3. 总是在计划模式信任此前缀(保存到配置)\n4. 拒绝\n选择 [1/2/3/4](兼容 y/a/p/n",
FreshHumanApprovalChoices: "1. 本次允许\n2. 拒绝\n选择 [1/2](兼容 y/n",
SandboxEscapeApprovalChoices: "1. 允许一次\n2. 本会话使用真实环境\n3. 拒绝\n选择 [1/2/3](兼容 y/a/n",
ApprovalNeededFmt: "需要审批:%s",
ApprovalNeededWithSubjectFmt: "需要审批:%s %s",
ToolApprovalSourceFmt: "来源: %s",
ToolApprovalBuiltIn: "内置工具",
ToolApprovalImageUse: "将读取提供的图片用于图像理解。",
ApprovalToolLabelBash: "bash",
ApprovalToolLabelEditFile: "编辑文件",
ApprovalToolLabelWriteFile: "写入文件",
ApprovalToolLabelMultiEdit: "批量编辑",
ApprovalToolLabelMoveFile: "移动文件",
ApprovalToolLabelWebFetch: "读取网页",
ApprovalToolLabelRunSkill: "运行技能",
ApprovalToolLabelRemember: "保存记忆",
ApprovalToolLabelForget: "删除记忆",
ApprovalToolLabelSandboxEscape: "bash 沙箱降级审批",
ApprovalToolLabelPlanModeReadOnly: "计划模式只读命令",
MemoryApprovalSaveUpdate: "保存/更新记忆",
MemoryApprovalBodyLabel: "正文",
MemoryApprovalArchiveFmt: "归档记忆 %q",
PlanModeMCPTrustMetadataMissing: "这个 MCP 工具没有暴露足够的元数据,无法记住只读信任决策。",
PlanModeMCPTrustSubjectFmt: "将 MCP %s/%s 作为计划/研究只读工具信任",
PlanModeMCPTrustReason: "这个 MCP 工具声明自己是只读的,但外部只读提示需要你确认后,计划模式才能使用。选择总是允许可为后续计划和只读研究记住这份信任。",
PlanModeMCPTrustDeclined: "用户拒绝信任这个 MCP 只读提示;不要重试它,请继续使用其它已信任的只读工具,或询问用户希望如何继续。",
PlanModeBashTrustSubjectFmt: "在计划模式中信任 %q 为只读命令前缀\n命令:%s",
PlanModeBashTrustReason: "这条 bash 命令不在 Reasonix 内置只读集合中。只有在确认这个精确前缀用于计划和研究时是只读的,才应批准。自动/YOLO 审批不能回答这个信任提示。",
PlanModeBashTrustDeclined: "用户拒绝将这条 bash 命令信任为计划模式只读命令;不要重试它,请继续使用其它已信任的只读工具,或询问用户希望如何继续。",
SandboxEscapeSubjectFallback: "仅本次不进沙箱运行 shell 命令",
SandboxEscapeSubjectPrefix: "仅本次不进沙箱运行:",
SandboxEscapeWrapReason: "Windows 沙箱无法包装这条命令。是否仅本次不进 OS 沙箱运行?这会只对此命令绕过 OS 沙箱。",
SandboxEscapeRuntimeReason: "Windows 沙箱启动这条命令时失败。是否仅本次不进 OS 沙箱运行?这会只对此命令绕过 OS 沙箱。",
SandboxEscapeDeclined: "用户拒绝在没有 OS 沙箱的情况下运行这条命令;不要不进沙箱重试,请询问用户希望如何继续。",
ApprovalToolLabelConfigWrite: "Reasonix 配置写入审批",
ConfigWriteSubjectPrefix: "写入 Reasonix 配置:",
ConfigWriteReason: "这次写入的目标是工作区之外的 Reasonix 托管配置文件。它可以改变后续会话的模型服务商、沙箱规则、权限和 MCP 服务器,因此需要你的明确批准。",
ConfigWriteDeclined: "用户拒绝了这次 Reasonix 配置写入;不要重试,请询问用户希望如何继续。",
ConfigWriteApprovalChoices: "1. 允许一次\n2. 本会话允许\n3. 拒绝\n选择 [1/2/3](兼容 y/a/n",
PermissionSavedFmt: "授权已保存到 %s%s",
PermissionAlreadyAllowedFmt: "授权已由 %s 中的规则覆盖:%s",
PermissionSaveFailedFmt: "保存授权 %s 失败:%v",
MCPReadOnlyTrustSavedFmt: "MCP 只读信任已保存到 %s%s/%s",
MCPReadOnlyTrustAlreadyFmt: "MCP 只读信任已保存在 %s%s/%s",
MCPReadOnlyTrustFailedFmt: "保存 MCP 只读信任 %s/%s 失败:%v",
PlanModeReadOnlyCommandTrustSavedFmt: "计划模式只读命令信任已保存到 %s:%s",
PlanModeReadOnlyCommandTrustAlreadyFmt: "计划模式只读命令信任已保存在 %s:%s",
PlanModeReadOnlyCommandTrustFailedFmt: "保存计划模式只读命令信任 %s 失败:%v",
DiffFoldedFmt: "… 还有 %d 行",
DiffFoldEnabledFmt: "diff 已折叠至 %d 行(/diff-fold 展开)",
DiffFoldDisabled: "diff 已展开 — 显示全部行(/diff-fold 折叠)",
OutputStyleNone: "没有可用的输出风格",
OutputStyleHeader: "输出风格:",
OutputStyleHint: "在 reasonix.toml 设置 agent.output_style 即可启用(下次会话生效)",
ThemeHeader: "主题:",
ThemeHint: "使用 /theme <auto|light|dark|style> 切换",
ThemeChangedFmt: "已切换主题为 %s / %s",
ThemeUnknownFmt: "未知主题 %q",
LanguageHeader: "语言:",
LanguageHint: "使用 /language <auto|en|zh> 切换",
LanguageChangedFmt: "语言已设为 %s(当前解析为:%s)",
CompactionWorking: "正在压缩对话…",
CompactionTitle: "上下文已压缩",
CompactionUnit: "条消息",
CompactionAuto: "自动",
CompactionManual: "手动",
SlashCompactDone: "已压缩 — 旧的中段换成一段摘要,最近几轮保留原样",
SlashCompactFailed: "压缩失败",
SlashNewDone: "已开启新会话 — 之前的对话已存档",
SlashNewFailed: "新建会话失败",
SlashClearPrompt: "清空当前上下文且不保存?",
SlashClearDone: "已清空当前上下文",
SlashClearFailed: "清空当前上下文失败",
SlashClsDone: "已清屏(LLM 上下文保留)",
SlashUnavailable: "当前构建不支持该命令",
SlashUnknown: "未知命令",
SlashTodoCleared: "已清除任务清单",
SlashHelp: "命令:/compact · /new · /clear · /resume · /rewind · /tree · /branch · /switch · /todo · /verbose · /model(切换模型)· /effort · /theme · /language · /mcp · /skills · /plugins · /hooks · /paste-image · /memory · /memory-v5 · /migrate · /goal · /remember · /quit · /help · 以及 skills/init、/explore …)",
SkillPickerTitle: "Skills",
SkillPickerAvailableFmt: "%d 个可用",
SkillPickerMatchingFmt: "%d 个匹配 · 共 %d 个",
SkillPickerHint: "↑↓ 移动 · Space 开关 · Enter 保存 · / 搜索 · s 来源 · r 重新扫描 · Esc 取消",
SkillPickerDetailHint: "↑↓ 移动 · Enter 选择 · Space 开关 · Esc 返回",
SkillPickerSearchEmpty: "没有匹配的 skill",
SkillPickerSearchPrompt: "搜索: ",
SkillPickerSearchPlaceholder: "搜索 skills...",
SkillPickerSourceTitle: "来源",
SkillPickerSourceActiveFmt: "%d 个有效",
SkillPickerSourceHint: "↑↓ 移动 · Enter 查看技能 · d 诊断 · s skills · r 重新扫描 · Esc 关闭",
SkillPickerDiagHidden: "d 展开诊断",
SkillPickerDiagShown: "d 收起诊断",
SkillPickerBuiltinSource: "内置",
SkillPickerRescanned: "已重新扫描 skills",
SkillPickerNoDescription: "(无描述)",
SkillPickerScopeProject: "项目",
SkillPickerScopeCustom: "自定义",
SkillPickerScopeGlobal: "全局",
SkillPickerScopeBuiltin: "内置",
SkillPickerSubagent: "子代理",
SkillPickerAvailableLabel: "可用",
SkillPickerDisabledLabel: "关闭",
SkillPickerNoChanges: "Skills 对话框已关闭:没有更改",
SkillPickerSourceSkillsHint: "↑↓ 移动 · Space 开关 · Enter 详情 · Esc 返回来源",
SkillPickerSourceSkillsEmpty: "这个来源下没有 skill",
SkillPickerActionToggle: "切换启用状态",
SkillPickerActionDelete: "删除 skill",
SkillPickerDeleteTitleFmt: "删除 skill /%s?",
SkillPickerDeleteConfirm: "删除",
SkillPickerDeleteCancel: "取消",
SkillPickerDeleteHint: "Enter 确认 · y 删除 · n/Esc 取消",
SkillPickerDeletedFmt: "已删除 skill %s",
SkillPickerMoreAboveFmt: "↑ 上方还有 %d 个",
SkillPickerMoreBelowFmt: "↓ 下方还有 %d 个",
SkillPickerTokenFmt: "~%d tok",
SkillPickerDetailMetaFmt: "范围: %s 运行方式: %s",
SkillPickerSkillsUnit: "个 skill",
SkillPickerLinesUnit: "行",
SkillPickerStatusLabel: "技能选择器",
SkillPickerStatusOK: "有效",
SkillPickerStatusMissing: "缺失",
SkillPickerStatusNotDir: "非目录",
SkillPickerStatusUnreadable: "无权限",
SlashPromptEmpty: "该 MCP prompt 没有返回可发送的内容",
SlashMCPNone: "没有配置 MCP 服务器 — 在 reasonix.toml 加一个 [[plugins]] 条目",
CtrlCQuitHint: "再按一次 Ctrl+C 退出",
CompHintSlash: "↑/↓ 移动 · Tab/Enter 选中 · Esc 关闭",
CompHintFile: "↑/↓ 移动 · Tab/Enter 进入文件夹或选中文件 · Esc 关闭",
MouseCopiedHint: "已复制到剪贴板",
MouseCaptureOnHint: "鼠标接管已开启 — 应用内拖拽选中/滚动条/滚轮生效",
MouseCaptureOffHint: "鼠标接管已关闭 — 由终端原生处理选中和右键菜单",
MouseCaptureTag: "终端原生鼠标",
ShellExecEmpty: "用法:!<命令> (例如 !ls -la",
ShellExecFailedFmt: "Shell 命令执行失败:%v",
ShellExecTimeoutFmt: "Shell 命令超时(>%s",
ShellModeHint: "Enter 执行 Shell · Esc 取消 · 点击输出展开",
CmdNew: "开启新会话并保存历史",
CmdClear: "丢弃当前上下文",
CmdCls: "清屏(保留 LLM 上下文)",
CmdCompact: "压缩上下文",
CmdRewind: "回滚到更早的一轮",
CmdTree: "查看对话分支树",
CmdBranch: "创建对话分支",
CmdSwitchBranch: "切换对话分支",
CmdResume: "恢复已保存的会话",
CmdRename: "重命名会话",
CmdModel: "切换模型",
CmdWorkMode: "切换工作模式",
CmdMemory: "查看记忆文件",
CmdMigrate: "重试旧数据迁移",
CmdGoal: "设置或清除当前目标",
CmdRemember: "保存一条记忆",
CmdForget: "归档一条已存记忆",
CmdMcp: "MCP 服务器",
CmdHooks: "管理 hooks",
CmdPlugins: "管理插件包",
CmdPasteImage: "粘贴剪贴板图片",
CmdOutputStyle: "列出输出风格",
CmdTheme: "切换 CLI 主题",
CmdLanguage: "切换 CLI 语言",
CmdSkill: "管理 skills",
CmdVerbose: "切换 thinking 原文显示",
CmdReloadCmd: "重载自定义命令",
CmdDiffFold: "切换 diff 折叠/展开",
CmdSandbox: "查看沙箱状态",
CmdEffort: "设置推理强度",
CmdMouse: "切换鼠标接管(关闭后由终端原生处理选中/右键)",
CmdAutoPlan: "配置自动计划模式",
CmdReasonLang: "设置可见思考语言",
CmdMemoryV5: "切换 Memory v5",
CmdHelp: "查看命令列表",
CmdTodo: "清除任务清单",
CmdQuit: "退出会话",
CmdCopy: "选择回复复制到剪贴板",
CmdExport: "将会话导出为 Markdown",
SlashCopyDone: "已复制到剪贴板",
SlashCopyEmpty: "没有可复制的助手回复",
SlashCopyListHeader: "选择要复制的回复:",
SlashExportDoneFmt: "会话已导出到 %s",
SlashExportEmpty: "没有可导出的消息",
ArgSkillList: "列出 skills",
ArgSkillShow: "查看 skill 内容",
ArgSkillNew: "新建一个 skill",
ArgSkillPaths: "显示发现路径",
ArgMcpAdd: "连接一个服务器",
ArgMcpRemove: "断开一个服务器",
ArgMcpList: "显示已配置的服务器",
ArgMcpConnected: "已连接",
ArgHooksList: "列出生效的 hooks",
ArgHooksTrust: "信任本项目的 hooks",
ArgModelCurrent: "当前",
ArgEffortAuto: "使用模型默认值",
ArgEffortLow: "较轻推理",
ArgEffortMedium: "均衡推理",
ArgEffortHigh: "较深推理",
ArgEffortXHigh: "超高推理",
ArgEffortMax: "最高推理",
ArgThemeCurrent: "当前",
ArgLanguageAuto: "从 REASONIX_LANG / 系统 locale 自动检测",
ArgLanguageEn: "English",
ArgLanguageZh: "中文",
ListModelsHeaderFmt: "模型(当前:%s",
ListModelsHint: "用底部的模型切换器,或输入 /model <provider/model>",
ListMemoryHeader: "记忆文件",
ListMemorySaved: "保存的记忆",
ListMemoryArchived: "归档的记忆",
ListMemoryNone: "暂无记忆 — 用 “/remember <内容>” 添加,或运行 /init 生成 AGENTS.md",
ListSkillsHeaderFmt: "skills%d 个)",
ListSkillsNone: "暂无 skill — 调用内置的(如 /init),或用 install_skill 创建一个",
ListHooksHeaderFmt: "hooks(生效 %d 个)",
ListHooksNone: "无生效 hooks — 在 .reasonix/settings.json(项目,需信任后)或 <Reasonix home>/settings.json(全局)配置",
ListMcpHeader: "MCP 服务器",
ListMcpNone: "未连接 MCP 服务器 — 在 reasonix.toml[[plugins]])或项目 .mcp.json 中添加",
MemoryNone: "还没有加载任何记忆 — 输入 “/remember 内容” 可快速记录,也可以在项目根目录创建 REASONIX.md",
MemoryLoaded: "当前已加载的记忆:",
MemorySavedHeader: " 已记录的条目(用 “/forget <name>” 归档):",
MemoryStoredUnderFmt: " 存放于 %s",
MemoryEditHint: "可直接编辑记忆文档,或输入 “/remember 内容” 快速记录;文档改动会在下次会话生效",
ForgetUsage: "用法:/forget <name> — name 是 /memory 中显示的条目标识",
ForgetDoneFmt: "已归档记忆:%s",
QuickRememberEmpty: "没有要记录的内容",
QuickRememberDoneFmt: "已记住 → %s",
GoalEmpty: "目标:无 — 用 /goal <目标> 设置",
GoalCurrentFmt: "目标:%s",
GoalSetFmt: "目标已设置 → %s",
GoalCleared: "目标已清除",
ModelSwitchUnavailable: "本会话不支持切换模型",
ModelSwitchBusy: "请先完成或取消当前这一轮再切换模型",
ModelAlreadyOnFmt: "已经在使用 %s",
ModelSwitchingFmt: "正在切换到 %s…",
ModelSwitchedFmt: "已切换到 %s(会保留当前对话,但提示词缓存会重新计算)",
ModelListHeader: "模型(/model <provider/model> 切换)",
RuntimeSwitchPending: "请等待当前运行时切换完成",
WorkModeStatusFmt: "工作 %s",
WorkModeListHeaderFmt: "工作模式(当前:%s",
WorkModeListHint: "使用 /work-mode economy|balanced|delivery 切换(/profile 为兼容别名)",
WorkModeEconomyDesc: "降低 Token 消耗,按需连接可选工具源",
WorkModeBalancedDesc: "完整工具面,由模型判断所需工作量",
WorkModeDeliveryDesc: "强调完整验证和交付,增强 skill 与插件调用",
WorkModeUsage: "用法:/work-mode economy|balanced|delivery",
WorkModeSwitchUnavailable: "本会话不支持切换工作模式",
WorkModeSwitchBusy: "请先完成或取消当前工作,再切换工作模式",
WorkModeAlreadyOnFmt: "当前已经是 %s 工作模式",
WorkModeSwitchingFmt: "正在切换到 %s 工作模式…",
WorkModeSwitchedFmt: "已切换到 %s 工作模式(保留当前对话,但提示词缓存会重新计算)",
RewindNone: "暂无可回滚的内容",
RewindCodeConversation: "代码 + 对话",
RewindConversationOnly: "仅对话",
RewindCodeOnly: "仅代码",
RewindFork: "从这里分叉(保留当前代码)",
RewindSummarizeFrom: "总结这一轮之后的内容",
RewindSummarizeUpto: "总结到这一轮为止",
RewindPickTitle: "⟲ 回滚 — 选择一轮",
RewindPickHint: "↑/↓ 移动 · Enter 选择 · Esc 关闭",
RewindRestoreTitleFmt: "⟲ 恢复到第 %d 轮 ",
RewindApplyHint: "↑/↓ · Enter 应用 · Esc 返回",
RewindEmpty: "(空)",
SelectProvidersLabel: "选择要启用的 provider",
EnterAPIKeysHeader: "输入 API key(回车跳过、稍后再设):",
MissingKeyIntro: "reasonix.toml 已配置好 — 只差一个 API key 就可以开始。",
WroteFileFmt: "已写入 %s",
SetupComplete: "设置完成。",
SetupCancelled: "设置已取消。",
TryHintFmt: "试试: %s",
NextHint: "下一步:设置 API key(运行 `reasonix setup` 或 export DEEPSEEK_API_KEY=...),然后运行 `reasonix run \"你的任务\"`。",
ConfirmReconfigureFmt: "%s 已存在。重新配置并覆盖?",
KeepingExisting: "保留原配置不变。",
NotOverwritingFmt: "%s 已存在,不覆盖",
SetupManagerTitle: "供应商配置",
SetupAddOpenAI: "添加 OpenAI 兼容供应商",
SetupAddAnthropic: "添加 Anthropic 兼容供应商",
SetupProviderExistsFmt: "供应商 %q 已存在。请进入现有供应商管理来编辑模型或设置。",
SetupSaveExit: "保存并退出",
SetupSaveExitDesc: "写入当前暂存的修改",
SetupCancel: "取消",
SetupCancelDesc: "放弃全部暂存修改",
SetupModelsUnit: "个模型",
SetupKeySet: "已设置 Key",
SetupKeyMissing: "缺少 Key",
SetupDefaultBadge: "默认",
SetupProviderActionsFmt: "管理 %s",
SetupEditProvider: "编辑供应商",
SetupUpdateKey: "更新 API Key",
SetupTestRefresh: "测试连接 / 刷新模型列表",
SetupSetDefault: "设置默认模型",
SetupRemoveProvider: "删除供应商",
SetupBack: "返回",
SetupPromptModels: "模型列表(用逗号分隔)",
SetupSharedKeyWarningFmt: "%s 已被 %s(%s)使用。确认共享这项凭据?",
SetupPromptAPIKeyFmt: "输入 %s 的新值",
SetupSelectDefaultModel: "选择默认模型",
SetupConfirmRemoveFmt: "确认删除供应商 %s?",
SetupSummaryTitle: "待保存修改:",
SetupSummaryAddedFmt: "新增:%s",
SetupSummaryEditedFmt: "编辑:%s",
SetupSummaryRemovedFmt: "删除:%s",
SetupSummaryDefaultFmt: "默认模型:%s",
SetupSummaryKeysFmt: "更新 API Key%d 项",
SetupSummaryNoChanges: "没有修改",
SetupConfirmSave: "保存这些修改?",
SetupConcurrentChangeFmt: "setup 打开期间配置已被修改(%s)。本次暂存修改未写入,请重新运行 setup 检查最新配置。",
// model fetching
FetchingModelsFmt: "正在获取 %s 的模型列表...",
FetchModelsSuccessFmt: "发现 %d 个 %s 模型",
FetchModelsFailedFmt: "获取 %s 模型失败: %v",
FetchModelsUsingPresetsFmt: "无法在线获取 %s 的模型,使用预设列表",
FamilyKeyPromptFmt: "输入 %s 的 API key 以获取可用模型(回车跳过):",
SelectModelsLabel: "选择要启用的 %s 模型",
NoModelsAvailableFmt: "%s: 没有可用模型,跳过",
CustomFetchEmpty: "/models 返回为空,回退到手动输入",
AnthropicFetchEmpty: "/models 返回为空 — Anthropic 兼容服务通常不提供此端点,回退到手动输入",
SkipStaleCustomEntryFmt: "跳过 reasonix.toml 里的旧 %q 条目(指向 %s)— 请手动从 [[providers]] 里删除",
APIKeyAlreadySetFmt: "复用已设置的 %s",
APIKeyResetPromptFmt: "重新输入 %s?",
InvalidAPIKeyEnvFmt: "%q 不是有效的 API Key 变量名。只能使用字母、数字和下划线(例如 MY_PROVIDER_API_KEY);这里不要填写模型名。",
RepairedAPIKeyEnvFmt: "provider %s:已将无效的 API Key 变量名 %q 修复为 %q",
// custom provider
CustomProviderLabel: "自定义模型",
CustomProviderDesc: "添加第三方 OpenAI 兼容模型",
CustomAddMethodLabel: "添加第三方 OpenAI 兼容模型 - 选择添加方式",
CustomMethodManual: "手动输入模型名称",
CustomMethodURL: "从 URL 获取模型列表",
CustomPromptModel: "请输入模型名称",
CustomPromptBaseURL: "请输入 Base URL",
CustomPromptKeyEnv: "API Key 变量名(直接回车使用默认值,不是模型名)",
CustomPromptAPIKey: "请输入 API Key",
CustomAddedFmt: "已添加自定义模型: %s",
// Anthropic 兼容 provider
AnthropicProviderLabel: "自定义模型2",
AnthropicProviderDesc: "添加第三方 Anthropic 兼容模型",
AnthropicAddMethodLabel: "添加第三方 Anthropic 兼容模型 - 选择添加方式",
AnthropicMethodManual: "手动输入模型名称",
AnthropicMethodURL: "从 URL 获取模型列表",
AnthropicPromptModel: "请输入模型名称",
AnthropicPromptBaseURL: "请输入 Base URL",
AnthropicPromptKeyEnv: "API Key 变量名(直接回车使用默认值,不是模型名)",
AnthropicPromptAPIKey: "请输入 API Key",
AnthropicAddedFmt: "已添加 Anthropic 兼容模型: %s",
AnthropicFetchingModelsFmt: "正在获取 %s 的模型列表...",
AnthropicFetchModelsSuccessFmt: "发现 %d 个 %s 模型",
AnthropicFetchModelsFailedFmt: "获取 %s 模型失败: %v",
AnthropicSelectModelsLabel: "选择要启用的 %s 模型",
UnknownCommandFmt: "未知命令 %q",
UsageRunHint: "用法:reasonix run [--model NAME] <task>",
ErrorPrefix: "错误:",
ReconfigureOnUnknownModel: "配置的模型已不可用 —— 重新运行引导配置。",
WriteConfigErr: "写入配置失败:",
WriteEnvErr: "写入 .env 失败:",
ProviderErrBadRequest: "请求格式错误 (HTTP 400):请求体被拒绝,通常是程序缺陷。若持续出现请反馈。",
ProviderErrAuth: "认证失败 (HTTP 401):未读到 API key(缺失或未设置)。请在 .env 中配置密钥,或运行 `reasonix setup`。",
ProviderErrAuthRejected: "认证失败 (HTTP 401):服务端拒绝了你的 API key。可能是 key 错误或已过期,也可能是服务端出现瞬时鉴权/额度问题——已退避重试仍失败。请稍后再试,或检查 .env 中的密钥 / 运行 `reasonix setup`。",
ProviderErrInsufficientBalance: "余额不足 (HTTP 402):账户余额不足,请前往充值后重试。",
ProviderErrUnprocessable: "参数错误 (HTTP 422):某个请求参数被拒绝,通常是程序缺陷。若持续出现请反馈。",
ProviderErrRateLimited: "请求速率达到上限 (HTTP 429):请求过于频繁 (TPM/RPM)。已退避重试,请放慢速率或稍后再试。",
ProviderErrServer: "服务器故障 (HTTP 500):服务端内部错误。已退避重试;若持续失败请稍后再试。",
ProviderErrServerBusy: "服务器繁忙 (HTTP 503):服务端负载过高。已退避重试,请稍后再试。",
SelectOneHint: "(↑/↓ · Enter · q 取消;/ 搜索)",
SelectManyHint: "(↑/↓ · Space · Enter · q;/ 搜索)",
SelectMoreAboveFmt: " ↑ 上方还有 %d 个",
SelectMoreBelowFmt: " ↓ 下方还有 %d 个",
SelectSearchHint: "/ 搜索 · 输入关键词过滤 · Esc 取消搜索",
CmdProvider: "切换供应商",
ProviderListHeader: "供应商(/provider <名称> 切换)",
ProviderAlreadyOnFmt: "已经在使用供应商 %s",
ProviderUnknownFmt: "未知供应商 %q",
ProviderPickLabel: "选择 %s 的一个模型",
ProviderNoModelsFmt: "供应商 %s 没有已配置的模型",
// 自更新
UpgradeChecking: "正在检查更新…",
UpgradeDevBuild: "开发版本无法自更新",
UpgradeFetchFailed: "检查更新失败:%v",
UpgradeInvalidVersion: "远程版本不是有效的 semver",
UpgradeAlreadyLatest: "已是最新版本。",
UpgradeForcing: "强制重新安装当前版本…",
UpgradeAvailableFmt: "当前:%s → 最新:%s",
UpgradeNoAssetFmt: "未找到 %s 的安装包",
UpgradeDownloadingFmt: "正在下载 %s%s)…",
UpgradeDownloadFailed: "下载失败:%v",
UpgradeVerifying: "正在校验 SHA256…",
UpgradeChecksumFailed: "无法获取校验文件:%v",
UpgradeChecksumMismatchFmt: "SHA256 不匹配:得到 %s,期望 %s",
UpgradeChecksumNotFoundFmt: "SHA256SUMS 中未找到 %s",
UpgradeExtractFailed: "解压二进制文件失败:%v",
UpgradeApplying: "正在替换二进制文件…",
UpgradeApplyFailed: "应用更新失败:%v",
UpgradeSuccessFmt: "已更新 %s → %s",
UsageBody: `reasonix — 由配置和插件驱动的 coding agent(多模型)
用法:
reasonix [--model NAME] [-c|--continue] [--resume] [--copy] [--yolo] [--dir PATH] 交互式会话(多轮;-c 恢复最近一次,--resume 选择一个,--copy 在副本中继续)
reasonix run [--model NAME] [--max-steps N] [-c|--continue] [--resume PATH] [--copy] <task> 执行单次任务后退出
reasonix review [--base BRANCH] [--commit SHA] [--model NAME] AI 代码审查(基于本地 diff)
reasonix serve [--model NAME] [--addr HOST:PORT] [--auth none|token|password] [--token STR] [--password STR] [--hash-password] 通过 HTTP+SSE 提供服务(支持可选认证)
reasonix acp [--model NAME] 通过 stdio 提供 Agent Client Protocol(也可用:reasonix --acp
reasonix setup [path] 交互式配置向导;生成 reasonix.toml(及 .env
reasonix config auto-plan [off|on] 配置自动计划模式
reasonix config memory-v5 [off|observe|compact|on|status] 配置 Memory v5
reasonix config reasoning-language [auto|zh|en] 配置可见思考语言
reasonix mcp <add|remove|list|import> 管理 reasonix.toml 里的 MCP 服务器
reasonix subagent <list|create|edit|delete|try|run> 管理和运行隔离子智能体 profile
reasonix init 查看如何生成项目记忆(AGENTS.md)
reasonix doctor [--json] 输出脱敏的本地诊断信息
reasonix doctor session <branch-id> [--zip] [--out PATH] 导出会话冲突诊断 zip
reasonix bot start|doctor|weixin-login 多渠道 IM bot 网关
reasonix upgrade [--check] [--force] 自更新到最新版本(也可用:reasonix update
reasonix version
reasonix help
示例:
reasonix
reasonix --continue
reasonix run "把 main.go 里的 TODO 实现掉"
reasonix run --model mimo-pro "给这个函数补单元测试"
reasonix subagent run review "审查当前改动"
echo "解释这段代码" | reasonix run
配置:
优先级:flag > ./reasonix.toml > <Reasonix home>/config.toml > 内置默认值
密钥通过 api_key_env 从环境变量注入(如 DEEPSEEK_API_KEY)。
运行 'reasonix setup' 生成配置;详见 docs/SPEC.md。
`,
}