Files
DeepSeek-Reasonix/internal/base/i18n/messages_zh.go
T
YHH 23f0a011c4 fix(config): workspace configuration only narrows the user's settings (#11208)
A workspace's reasonix.toml and .reasonix/settings.json are read as
untrusted input.

- [sandbox]: bash may only move to enforce and network only to false;
  forbid_read and denied_domains add to the user's; allow_write entries
  and workspace_root apply only when they resolve inside the workspace.
  ${VAR} in sandbox and proxy paths expands from the process environment
  only.
- [permissions] mode, allow and allow_dynamic_bash, [network] proxy
  settings and [desktop] default_tool_approval_mode are read from the
  user config only; deny and ask add to the user's. An "always allow"
  given in a workspace is stored under the Reasonix home
  (project-grants.json) rather than in the checkout.
- Programs a workspace declares (hooks, language servers, providers,
  tools.search.rg_path, tools.shell.path, [browser], tools.system_one
  endpoints and the local Laya runtime) run only once approved for that
  folder. An approval records the declaration and a digest of the files
  it names, is kept under the Reasonix home, and is checked again before
  each start; a change refuses the start with ErrProjectProgramChanged.
  `reasonix trust` lists and approves them, and saving hooks from the
  hooks page approves the block written. Model settings that named only
  a held-back provider fall back to the user's choice.
- Single program paths may not point into the workspace, a temporary
  directory, an allow_write root or a toolchain cache.
- Sandbox write roots and host write directories keep the identity they
  had when first granted; a root whose identity changed is dropped with
  sandbox.write_root_redirected or sandbox.write_root_changed. The
  host-writable directory list lives in internal/base/hostwrite.
- Every ignored value is reported as a load warning with a typed reason
  (Config.IgnoredProjectSettings); held-back programs raise the
  project_programs_awaiting_approval notice.
2026-09-28 18:21:34 -07:00

656 lines
42 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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{
WelcomeTitleFmt: "欢迎使用 %s",
NoConfigYet: "还没有配置 — 现在来设置一下吧。",
PickWorkspaceTitle: "选择工作目录 · 也可以在这里新建一个",
TrayOpen: "打开 Reasonix Studio",
TrayCloseToTray: "关掉窗口也继续跑",
TrayQuit: "退出 Reasonix",
TrayIdle: "没有在跑的",
TrayWorking: "%d 个在跑",
TrayAttention: "%d 个在等你",
TrayJobs: "%d 个后台任务在跑",
InitHint: "项目记忆(AGENTS.md)在会话内由模型生成:运行 `reasonix`,然后 `/init` —— 模型会分析代码库并写入。配置请用 `reasonix setup`。",
ChatTip: "对话上下文将跨轮保留。输入 'exit' 或按 Ctrl-D 退出。",
TurnCancelled: "已取消 — 回到提示符",
InterruptedRecovery: "本轮已中断。部分输出会永久保留供查看;只有完整工具调用及结果和有界恢复摘要会进入模型下一轮。继续或回滚前请先检查当前工作区。",
RecoveryPaused: "已暂停自动重试。Reasonix 已停止重复尝试,并保留已完成的工作。发送“继续”即可开始新一轮,也可以补充要求来调整方向。",
ReceiptVerified: "没有未经验证的部分",
ReceiptGapsHeader: "未验证:",
ReceiptRisksHeader: "已申报的风险:",
ReceiptUnverifiedHeader: "这一轮自己说明的:",
ReceiptMore: "另有 %d 项",
ReceiptChangedFmt: "改动 %d 个文件",
ReceiptGapKinds: map[string]string{
"unbacked_claim": "声称过但账本不支持",
"unproven_criterion": "验收项没有证据",
"missing_check": "预期的检查从未通过",
"failed_verification": "验证失败",
"stale_verification": "验证早于最后一次改动",
"inconclusive_verification": "跑过,但退出码是命令里另一段的",
"unverified_change": "有改动;没有主机能读作证据的检查",
"unreviewed_change": "改动后再没看过",
"declared_unverified": "自己申报未验证",
},
NoSessionToResume: "没有可恢复的会话 — 用 `reasonix` 开一个新的",
NoSessionToResumeStartingNew: "没有可恢复的会话 — 开一个新的会话",
ResumeRequiresTTY: "--resume 需要交互式终端;用 --continue 直接恢复最近一次",
PickSessionLabel: "恢复哪个会话?",
AmbiguousResumeHint: "用上面的某个 id 重新运行 `--resume <id>`",
ResumeBusy: "请先完成或取消当前这一轮再恢复会话",
ResumeBadIndexFmt: "请选择 1–%d 的会话(用 /resume 查看列表)",
ResumeAlreadyActive: "已在该会话中",
ResumedTitle: "已恢复会话",
InterruptedAdjudicationPrefix: "上一轮在等待你的回答时被中断,问题是:",
RenameUsage: "用法:/rename <新名称> 或 /rename <序号> <新名称>",
RenameNoSession: "当前没有活跃会话可重命名",
RenameDoneFmt: "会话已重命名为 %q",
ResumePickTitle: "选择要恢复的会话",
ResumePickHint: "↑/↓ 移动 · Enter 恢复 · Esc 取消",
ResumeRecoveryBadgeFmt: "[冲突副本 · 父会话 %s]",
ChatThinking: "思考中…",
ChatThoughtForFmt: "思考了 %d 秒",
ChatStatusThinkingFmt: "%s 思考中… (%d 秒 · %s 取消)",
TurnPhaseWorking: "工作中",
TurnPhaseChecking: "检查中",
TurnPhaseVerifying: "验证中",
TurnPhaseReviewing: "复审中",
CompletionSummaryBlocked: "本轮任务受阻,请查看改动详情。",
CompletionSummaryNeedsAttention: "本轮仍有验证或复审缺口。",
ChatToolWorkingFmt: "%s 运行中 · %d 秒",
ChatSubagentPhaseQueued: "排队中",
ChatSubagentPhaseRunning: "运行中",
ChatSubagentPhaseReasoning: "思考中",
ChatSubagentPhaseResponding: "生成中",
ChatSubagentPhaseTool: "使用工具",
ChatSubagentPhaseRetrying: "重试中",
ChatSubagentPhaseCompleted: "已完成",
ChatSubagentPhaseFailed: "失败",
ChatSubagentPhaseCancelled: "已取消",
ChatSubagentProgressFmt: "%s · %d 秒 · %d 秒前",
ChatSubagentProgressDoneFmt: "%s · %d 秒",
ChatSubagentPreviewLabel: "▎",
ChatStatusRetryingFmt: "%s 正在重试 (%d/%d)… (Esc 取消)",
ChatStatusCancellingFmt: "%s 正在停止… (%d 秒 · Ctrl+C 退出)",
ChatStatusCancellingViFmt: "%s 正在停止… (%d 秒)",
ChatStatusIdle: "就绪",
ChatStatusYoloIdle: "已跳过工具批准",
ChatStatusCycleHint: "Shift+Tab 循环询问/自动/计划 · Ctrl+Y YOLO",
ChatStatusCycleHintCompact: "Shift+Tab 询问/自动/计划 · Ctrl+Y YOLO",
ChatTurnReceiptLabel: "本轮",
ChatStatusModelLabel: "模型",
ChatStatusEffortLabel: "强度",
ChatStatusWorkLabel: "模式",
ChatStatusCacheLabel: "缓存",
ChatStatusContextLabel: "上下文",
ChatStatusCompactLabel: "距压缩",
ChatStatusJobsLabel: "任务",
ChatStatusBalanceLabel: "余额",
ChatStatusCostLabel: "费用",
ChatStatusCacheNowFmt: "本次命中 %s",
ChatStatusCacheAvgFmt: "平均 %s",
ChatStatusPlanApproval: "1 开始执行 · 2 修改计划 · 3 暂不执行并退出 · n/Esc 继续规划 · PgUp/PgDn/Ctrl+Home/End 滚动",
ChatStatusPlanApprovalVi: "1 开始执行 · 2 修改计划 · 3 暂不执行并退出 · n 继续规划 · PgUp/PgDn/Ctrl+Home/End 滚动",
PlanApprovalPrompt: "计划已生成(见上方)— 请选择下一步操作",
ApprovalChoiceHint: "↑/↓ 选择 · Enter 确认 · y/a/p/n 快捷键",
PlanApprovalChoices: "1. 开始执行\n2. 修改计划(继续规划)\n3. 暂不执行,退出计划模式\n选择 [1/2/3](y 开始执行;n/Esc 继续规划)",
PlanApprovalChoicesVi: "1. 开始执行\n2. 修改计划(继续规划)\n3. 暂不执行,退出计划模式\n选择 [1/2/3](y 开始执行;n 继续规划)",
ChatStatusToolApproval: "1 本次允许 · 2 本会话允许此范围 · 提供时 3/4 为前缀或保存 · n/Esc 拒绝 · Ctrl-C 取消本轮",
ChatStatusToolApprovalVi: "1 本次允许 · 2 本会话允许此范围 · 提供时 3/4 为前缀或保存 · n 拒绝 · Ctrl-C 取消本轮",
AskTypeSomething: "自己输入",
AskTypingHint: "输入后按 Enter 确认",
AskNoteHint: "在下方为此项补充说明,Enter 确认",
AskChatInstead: "先不选择,直接回复",
ChatStatusQuestion: "↑/↓ 选 · 数字快选 · 空格多选 · Tab 选中并补充说明 · Enter 确认 · ←/→ 切换问题 · Esc 取消",
ChatStatusQuestionVi: "↑/↓ 选 · 数字快选 · 空格多选 · Tab 选中并补充说明 · Enter 确认 · ←/→ 切换问题 · Ctrl+C 取消",
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)",
FreshHumanApprovalChoices: "1. 本次允许\n2. 拒绝\n选择 [1/2](兼容 y/n)",
RecoveryApprovalChoices: "1. 继续一次\n2. 换个方案",
RecoveryPlanChangeChoices: "1. 采用新计划并继续\n2. 不采用,让 Auto 调整",
RecoveryPlanDecisionPrompt: "执行计划需要你的决定",
RecoveryPlanBeforeFmt: "原计划:%s",
RecoveryPlanAfterFmt: "新计划:%s",
RecoveryTaskGrantChoices: "1. 继续一次\n2. 继续,并在本任务内允许同类操作\n3. 换个方案",
SandboxEscapeApprovalChoices: "1. 允许一次\n2. 本会话使用真实环境\n3. 拒绝\n选择 [1/2/3](兼容 y/a/n)",
NotifyTitle: "Reasonix",
NotifyTurnDone: "这一轮结束了",
NotifyTurnFailed: "这一轮失败了",
NotifyApproval: "有操作在等你批准",
NotifyAsk: "模型问了你一个问题",
ApprovalNeededFmt: "需要审批:%s",
ApprovalNeededWithSubjectFmt: "需要审批:%s %s",
AnswerNeededFmt: "需要回答:%s",
AnswerNeededFromFmt: "需要回答(MCP %s):%s",
ToolApprovalSourceFmt: "来源: %s",
ToolApprovalBuiltIn: "内置工具",
ToolApprovalImageUse: "将读取提供的图片用于图像理解。",
ApprovalToolLabelBash: "bash",
ApprovalToolLabelEditFile: "编辑文件",
ApprovalToolLabelWriteFile: "写入文件",
ApprovalToolLabelMultiEdit: "批量编辑",
ApprovalToolLabelMoveFile: "移动文件",
ApprovalToolLabelWebFetch: "读取网页",
ApprovalToolLabelRunSkill: "运行技能",
ApprovalToolLabelRemember: "保存记忆",
ApprovalToolLabelForget: "删除记忆",
ApprovalToolLabelSandboxEscape: "bash 沙箱降级审批",
MemoryApprovalSaveUpdate: "保存/更新记忆",
MemoryApprovalBodyLabel: "正文",
MemoryApprovalArchiveFmt: "归档记忆 %q",
SandboxEscapeSubjectFallback: "仅本次不进沙箱运行 shell 命令",
SandboxEscapeSubjectPrefix: "仅本次不进沙箱运行:",
SandboxEscapeWrapReason: "Windows 不提供这条命令所需的 OS 级 Bash 沙箱。是否仅本次不受限运行?这只会对此命令绕过 OS 隔离。",
SandboxEscapeRuntimeReason: "OS 沙箱无法启动这条命令。是否仅本次不受限运行?这只会对此命令绕过 OS 隔离。",
SandboxEscapeDeclined: "用户拒绝在没有 OS 沙箱的情况下运行这条命令;不要不进沙箱重试,请询问用户希望如何继续。",
EgressApprovalReasonFmt: "一条 bash 命令要访问 %s,它不在 [sandbox] allowed_domains 中。是否允许?",
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",
DiffFoldedFmt: "… 还有 %d 行",
DiffFoldEnabledFmt: "diff 已折叠至 %d 行(/diff-fold 展开)",
DiffFoldDisabled: "diff 已展开 — 显示全部行(/diff-fold 折叠)",
OutputStyleNone: "没有可用的输出风格",
ThemeHeader: "主题:",
ThemeHint: "使用 /theme <auto|light|dark|style> 切换",
ThemeChangedFmt: "已切换主题为 %s / %s",
ThemeUnknownFmt: "未知主题 %q",
LanguageHeader: "语言:",
LanguageHint: "使用 /language <auto|en|zh> 切换",
LanguageChangedFmt: "语言已设为 %s(当前解析为:%s)",
CurrencyHeader: "费用展示币种:",
CurrencyHint: "使用 /currency <auto|CNY|USD> 切换",
CurrencyChangedFmt: "费用展示币种已设为 %s(当前解析为:%s)",
RuntimeRefreshBusy: "请先完成或取消当前工作,并停止后台任务后再修改此设置",
RuntimeRefreshUnavailable: "本会话不支持刷新运行时",
CompactionWorking: "正在压缩对话…",
CompactionTitle: "上下文已压缩",
CompactionUnit: "条消息",
CompactionAuto: "自动",
CompactionManual: "手动",
CompactionChangesKept: "处改动已保留",
CompactionBackstopped: "由主机保留",
ReadinessContinuing: "这一轮还欠东西,继续把它做完",
ExtFormFieldsHint: "字段将通过逐项提问收集",
ExtRunActionFmt: "运行 %s",
SlashRevokeNone: "本次会话除规则文件外没有额外授权。",
SlashRevokeHint: "用 /sandbox revoke <规则> 收回一项,或 /sandbox revoke all 全部收回。",
SlashRevokeUnknown: "本次会话没有 %q 这一项授权。",
SlashRevokeDone: "已收回 %d 项,还剩 %d 项。",
SlashCompactFailed: "压缩失败",
SlashCompactDeclined: "暂时不用整理",
SlashNewDone: "已开启新会话 — 之前的对话已存档",
SlashNewFailed: "新建会话失败",
SlashClearPrompt: "清空当前上下文且不保存?",
SlashClearDone: "已清空当前上下文",
SlashClearFailed: "清空当前上下文失败",
SlashClsDone: "已清屏(LLM 上下文保留)",
SlashUnknown: "未知命令",
SlashUnknownSentAsMessage: "已作为普通消息发送",
SlashTodoCleared: "已清除任务清单",
SkillPickerAvailableFmt: "%d 个可用",
SkillPickerMatchingFmt: "%d 个匹配 · 共 %d 个",
SkillPickerHint: "↑↓ 移动 · Space 开关 · Enter 保存 · / 搜索 · s 来源 · r 重新扫描 · Esc 取消",
SkillPickerDetailHint: "↑↓ 移动 · Enter 选择 · Space 开关 · Esc 返回",
SkillPickerSearchEmpty: "没有匹配的 skill",
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: "已复制到剪贴板",
ClipboardCopyOSC52Hint: "已通过 OSC 52 请求复制 — 可能需要终端授权",
ClipboardCopyFallbackHint: "系统剪贴板不可用 — 已回退到 OSC 52",
ClipboardTextPasteRemoteHint: "SSH 下鼠标粘贴无法读取本地剪贴板或 PRIMARY 选区 — 请使用终端粘贴快捷键或 /mouse",
ClipboardTextPasteFailedFmt: "粘贴文本失败:%v",
ClipboardImagePastingHint: "正在粘贴图片…",
ClipboardImagePasteFailedFmt: "粘贴图片失败:%v",
MouseCaptureOnHint: "鼠标接管已开启 — 应用内拖拽选中/滚动条/滚轮生效",
MouseCaptureOffHint: "鼠标接管已关闭 — 由终端原生处理选中和右键菜单",
MouseCaptureTag: "终端原生鼠标",
ShellWaitsForTurn: "Shell 命令在两轮之间执行;请等这一轮结束",
StreamReloaded: "事件流有跳跃,已从记录重新加载对话",
AskDeclined: "未作答",
ShellExecEmpty: "用法:!<命令> (例如 !ls -la)",
ShellExecFailedFmt: "Shell 命令执行失败:%v",
ShellExecTimeoutFmt: "Shell 命令超时(>%s)",
ShellModeHint: "Enter 执行 Shell · Esc 取消 · 点击输出展开",
CmdNew: "开启新会话并保存历史",
CmdClear: "丢弃当前上下文",
CmdCls: "清屏(保留 LLM 上下文)",
CmdCompact: "压缩上下文",
CmdContext: "查看上下文窗口、阈值与上次维护结果",
CmdGraph: "查看本会话委派了什么,以及每一项的状态",
CmdRewind: "回滚到更早的一轮",
CmdTree: "查看对话分支树",
CmdBranch: "创建对话分支",
CmdBrowser: "在会话浏览器里打开网页",
CmdSwitchBranch: "切换对话分支",
CmdResume: "恢复已保存的会话",
CmdRename: "重命名会话",
CmdModel: "切换模型",
CmdStatus: "显示会话状态",
CmdVersion: "显示已安装版本",
CmdWorkMode: "切换执行设定",
CmdDocs: "搜索与当前版本匹配的内置文档",
CmdMemory: "查看指令、记忆与恢复状态",
CmdMigrate: "重试旧数据迁移",
CmdGoal: "设置或清除当前目标",
CmdRemember: "保存一条记忆",
CmdForget: "归档一条已存记忆",
CmdMcp: "MCP 服务器",
CmdRemote: "远程 SSH 主机",
CmdHooks: "管理 hooks",
CmdPlugins: "管理插件包",
CmdPasteImage: "粘贴剪贴板图片",
CmdOutputStyle: "列出输出风格",
CmdTheme: "切换 CLI 主题",
CmdLanguage: "切换 CLI 语言",
CmdCurrency: "切换费用展示币种",
CmdSkill: "管理 skills",
CmdVerbose: "切换 thinking 原文显示",
CmdReloadCmd: "重载自定义命令",
CmdReload: "重载 agent 运行时(工具、技能、命令、钩子、模型供应商),保留当前会话",
CmdDiffFold: "切换 diff 折叠/展开",
CmdSandbox: "查看沙箱状态",
CmdEffort: "设置推理强度",
CmdMouse: "切换鼠标接管(关闭后由终端原生处理选中/右键)",
CmdReasonLang: "设置可见思考语言",
CmdHelp: "查看命令列表",
CmdWeb: "在 Web UI 中继续当前会话",
CmdTodo: "清除任务清单",
CmdQuit: "退出会话",
CmdCopy: "选择回复复制到剪贴板",
CmdExport: "将会话导出为 Markdown",
SlashCopyDone: "已复制到剪贴板",
SlashCopyEmpty: "没有可复制的助手回复",
SlashCopyListHeader: "选择要复制的回复:",
SlashExportDoneFmt: "会话已导出到 %s",
SlashExportEmpty: "没有可导出的消息",
ArgSkillShow: "查看 skill 内容",
ArgSkillNew: "新建一个 skill",
ArgSkillPaths: "显示发现路径",
ArgMcpAdd: "连接一个服务器",
ArgMcpRemove: "断开一个服务器",
ArgMcpConnected: "已连接",
ArgHooksList: "列出生效的 hooks",
ArgModelCurrent: "当前",
ArgEffortAuto: "使用模型默认值",
ArgEffortLow: "较轻推理",
ArgEffortMedium: "均衡推理",
ArgEffortHigh: "较深推理",
ArgEffortXHigh: "超高推理",
ArgEffortMax: "最高推理",
ArgThemeCurrent: "当前",
ArgLanguageAuto: "从 REASONIX_LANG / 系统 locale 自动检测",
ArgLanguageEn: "English",
ArgLanguageZh: "中文",
ListModelsHeaderFmt: "模型(当前:%s)",
ListModelsHint: "用底部的模型切换器,或输入 /model <provider/model>",
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 中添加",
MemoryEditHint: "可直接编辑记忆文档,或输入 “/remember 内容” 快速记录;文档改动会在下次会话生效",
ForgetUsage: "用法:/forget <name> — name 是 /memory 中显示的条目标识",
ForgetDoneFmt: "已归档记忆:%s",
QuickRememberEmpty: "没有要记录的内容",
QuickRememberDoneFmt: "已记住 → %s",
GoalEmpty: "目标:无 — 用 /goal <目标> 设置",
GoalCurrentFmt: "目标:%s",
GoalSetFmt: "目标已设置 → %s",
GoalCleared: "目标已清除",
GoalNotRunning: "没有运行中的目标可暂停",
GoalNotPaused: "没有已暂停或被阻塞的目标可恢复",
GoalPaused: "目标已暂停 — /goal resume 可继续",
AwaitingUserFmt: "等待你的输入:%s",
ImagesNotReadable: "当前模型不读图 — 已附 %d 张,改由委派的子代理去看",
ImagesNeedVisionRole: "当前模型不读图 — 已附 %d 张,现在没人读得了。%s 能读图:到 设置 › 模型 › 分工 里把「看图」指给它。",
ImagesDropped: "当前模型不读图 — 已附 %d 张,会在发出去之前被丢掉。配置里没有任何模型能读图。",
ImagesUnfit: "有 %d 张附件没有发出去,因为任何模型都不会接收它:%s",
GoalPausedReason: "用户手动暂停",
GoalPausedFmt: "目标已暂停(%s)— 使用 /goal resume 继续",
GoalRuntimeFmt: "运行状态:轮次 %d · 请求 %d · token %d · 工作时间 %s",
GoalRuntimeLastReason: "最近原因",
ModelSwitchUnavailable: "本会话不支持切换模型",
ModelSwitchBusy: "请先完成或取消当前工作,并停止后台任务后再切换模型",
ModelAlreadyOnFmt: "已经在使用 %s",
ModelSwitchingFmt: "正在切换到 %s…",
ModelSwitchedFmt: "已切换到 %s(会保留当前对话,但提示词缓存会重新计算)",
ModelListHeader: "模型(/model <provider/model> 切换)",
RuntimeSwitchPending: "请等待当前运行时切换完成",
RuntimeReloadQueued: "已加入重载队列——当前工作完成后执行",
RuntimeReloaded: "运行时已重载",
RuntimeReloadedGenerationFmt: "运行时已重载(构建代号 %d)",
WorkModeStatusFmt: "执行设定 %s",
WorkModeListHeaderFmt: "执行设定(当前:%s)",
WorkModeListHint: "使用 /preset balanced|delivery 切换(/work-mode、/profile 为兼容别名)",
WorkModeBalancedLabel: "均衡",
WorkModeDeliveryLabel: "交付",
WorkModeBalancedDesc: "均衡 · 智能适配:自动规划执行 · 风险分级验证",
WorkModeDeliveryDesc: "交付 · 证据闭环:完整验收 · 验证与独立复查",
WorkModeUsage: "用法:/preset balanced|delivery",
WorkModeSwitchUnavailable: "本会话不支持切换执行设定",
WorkModeSwitchBusy: "请先完成或取消当前工作,再切换执行设定",
WorkModeAlreadyOnFmt: "当前执行设定已经是 %s",
WorkModeSwitchingFmt: "正在将执行设定切换为 %s…",
WorkModeSwitchedFmt: "执行设定已切换为 %s(后续回合生效,不重建会话)",
WorkModeDeprecatedNotice: "提示:/work-mode 与 /profile 已弃用,请使用 /preset balanced|delivery",
RewindNone: "暂无可回滚的内容",
RewindCodeConversation: "代码 + 对话",
RewindConversationOnly: "仅对话",
RewindCodeOnly: "仅代码",
RewindSummarizeFrom: "压缩此处之后(保留历史)",
RewindSummarizeUpto: "压缩此处之前(保留历史)",
RewindPickTitle: "⟲ 回滚 — 选择一轮",
RewindPickHint: "↑/↓ 移动 · Enter 选择 · Esc 关闭",
RewindRestoreTitleFmt: "⟲ 恢复到第 %d 轮 ",
RewindApplyHint: "↑/↓ · Enter 应用 · Esc 返回",
RewindCoverageTitle: "⚠ 文件覆盖不完整",
RewindCoverageWarningFmt: "检测到 %d 个覆盖缺口,部分文件修改可能无法恢复。",
RewindConfirmHint: "Enter/y 确认 · Esc 返回",
RewindUnavailableFmt: "无法回滚:%s",
RewindEmpty: "(空)",
EnterAPIKeysHeader: "输入 API key(回车跳过、稍后再设):",
WroteFileFmt: "已写入 %s",
SetupComplete: "设置完成。",
SetupCancelled: "设置已取消。",
TryHintFmt: "试试: %s",
NextHint: "下一步:设置 API key(运行 `reasonix setup` 或 export DEEPSEEK_API_KEY=...),然后运行 `reasonix run \"你的任务\"`。",
ConfirmReconfigureFmt: "%s 已存在。重新配置并覆盖?",
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 的模型,使用预设列表",
SelectModelsLabel: "选择要启用的 %s 模型",
CustomFetchEmpty: "/models 返回为空,回退到手动输入",
AnthropicFetchEmpty: "/models 返回为空 — Anthropic 兼容服务通常不提供此端点,回退到手动输入",
APIKeyAlreadySetFmt: "复用已设置的 %s",
APIKeyResetPromptFmt: "重新输入 %s?",
InvalidAPIKeyEnvFmt: "%q 不是有效的 API Key 变量名。只能使用字母、数字和下划线(例如 MY_PROVIDER_API_KEY);这里不要填写模型名。",
RepairedAPIKeyEnvFmt: "provider %s:已将无效的 API Key 变量名 %q 修复为 %q",
// custom provider
CustomProviderDesc: "添加第三方 OpenAI 兼容模型",
CustomAddMethodLabel: "添加第三方 OpenAI 兼容模型 - 选择添加方式",
CustomMethodManual: "手动输入模型名称",
CustomMethodURL: "从 URL 获取模型列表",
CustomPromptModel: "请输入模型名称",
CustomPromptBaseURL: "请输入 Base URL",
CustomPromptKeyEnv: "API Key 变量名(直接回车使用默认值,不是模型名)",
CustomPromptAPIKey: "请输入 API Key",
CustomPromptWindow: "上下文窗口(tokens,填得比模型真实窗口小会导致过早压缩)",
CustomAddedFmt: "已添加自定义模型: %s",
ProtocolChooseLabel: "这个地址按哪种协议驱动?",
ProtocolOpenAIName: "OpenAI Chat Completions",
ProtocolOpenAIDesc: "最常见的那条线;这条线上供应商不跑联网搜索",
ProtocolResponsesName: "OpenAI Responses",
ProtocolResponsesDesc: "无状态;联网搜索由供应商自己跑",
ProtocolAnthropicName: "Anthropic Messages",
ProtocolAnthropicDesc: "联网搜索由供应商自己跑",
// Anthropic 兼容 provider
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 模型",
RemoteConnectingFmt: "正在连接 %s…",
RemoteConnectedFmt: "已连接到 %s",
RemoteReconnectingFmt: "正在重连 %s(第 %d 次)…",
RemoteDegradedFmt: "已连接到 %s,但部分端口转发未建立",
RemoteDisconnected: "已断开(远端 serve 仍在运行)",
RemoteServeReadyFmt: "远端 serve 就绪:%s",
RemoteHostKeyPromptFmt: "未知的主机密钥 %s\n 类型:%s\n 指纹:%s",
RemotePassphrasePromptFmt: "%s 的密钥口令:",
RemotePasswordPromptFmt: "%s 的登录密码:",
RemoteBootstrapStepFmt: "远端 serve:%s %s",
RemoteNoHostsHint: "尚未配置远程主机;用 `reasonix remote add <名称> [user@]host` 添加",
UnknownCommandFmt: "未知命令 %q",
UsageRunHint: "用法:reasonix -p [--model NAME] <task>",
ErrorPrefix: "错误:",
ReconfigureOnUnknownModel: "配置的模型已不可用 —— 重新运行引导配置。",
WriteConfigErr: "写入配置失败:",
WriteEnvErr: "写入 .env 失败:",
ProviderErrBadRequest: "请求格式错误 (HTTP 400):请求体被拒绝,通常是程序缺陷。若持续出现请反馈。",
ProviderErrDroppedReasoning: "端点拒绝了请求体:它要求把助手的思考内容随工具调用一并回传,而这个连接没有声明思考协议,于是这部分没有发出去。把连接的思考参数设成它后面那个模型所用的协议,再重试。",
ProviderErrAuth: "认证失败 (HTTP 401):未读到 API key(缺失或未设置)。请在 .env 中配置密钥,或运行 `reasonix setup`。",
ProviderErrAuthRejected: "认证失败 (HTTP 401):服务端拒绝了你的 API key。可能是 key 错误或已过期,也可能是服务端出现瞬时鉴权/额度问题——已退避重试仍失败。请稍后再试,或检查 .env 中的密钥 / 运行 `reasonix setup`。",
ProviderErrInsufficientBalance: "余额不足 (HTTP 402):账户余额不足,请前往充值后重试。",
ProviderErrUnprocessable: "参数错误 (HTTP 422):某个请求参数被拒绝,通常是程序缺陷。若持续出现请反馈。",
ProviderErrInputSensitive: "输入被 MiniMax 内容审查拒绝(错误码 1026)。审查对象可能包含会话历史和工具结果;请调整相关内容,或新建会话仅保留必要上下文。原样重试通常无效。",
ProviderErrOutputSensitive: "MiniMax 生成的内容被内容审查拒绝(错误码 1027)。请调整请求内容后重试;若持续出现,可改用其他服务商。",
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: "正在检查更新…",
UpgradeChannelDeprecated: "发布渠道已停用;将使用最新正式版。",
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",
ReportNoPending: "没有待处理的 CLI 崩溃报告。",
ReportHeaderFmt: "CLI 崩溃报告 %s",
ReportCapturedFmt: "捕获时间:%s",
ReportPreviewOnlyFmt: "当前仅预览。运行 `reasonix report send %s` 可发送这份报告。",
ReportSendPrompt: "将这份已脱敏报告发送到 crash.reasonix.io?",
ReportKept: "报告已保留在本地。",
ReportDeletedFmt: "已删除 CLI 崩溃报告 %s。",
ReportSentFmt: "已发送 CLI 崩溃报告 %s。",
ReportConfigFailedFmt: "无法加载网络配置:%v",
ReportUploadFailedFmt: "报告上传失败;本地报告已保留:%v",
ReportSentDeleteFailedFmt: "报告已发送,但无法删除本地副本:%v",
ReportUsageBody: `用法:
reasonix report 预览最新本地报告并确认是否发送
reasonix report list 列出本地 CLI 崩溃报告
reasonix report show [ID] 预览报告(省略 ID 时使用最新一份)
reasonix report send [ID] 发送已审阅报告,成功后删除本地副本
reasonix report delete [ID] 不发送,直接删除本地报告`,
CLITelemetryConsentNotice: "Reasonix 可以向 crash.reasonix.io 发送匿名、完全不含内容的 CLI 使用统计:随机安装 ID、版本、操作系统和固定质量分桶。绝不会发送 prompt、回答、代码、路径、模型或工具内容、环境变量。之后可运行 `reasonix config telemetry off` 关闭。",
CLITelemetryConsentPrompt: "允许发送匿名 CLI 使用统计吗?",
CLITelemetryConsentInvalid: "请输入 y 或 n。",
CLITelemetryConsentSaveFailedFmt: "由于无法保存偏好设置,CLI 使用统计仍保持关闭:%v",
CLITelemetryConsentCleanupFailedFmt: "CLI 使用统计已关闭,但无法删除待发送统计:%v",
StandaloneConsoleHint: "这是 Reasonix 命令行工具,需要在 PowerShell 等终端里运行。\n要用桌面应用,请安装 Reasonix Studio(ReasonixStudio-windows-amd64-installer.exe):\n https://github.com/esengine/DeepSeek-Reasonix/releases?q=studio-v&expanded=true\n\n按回车关闭此窗口。\n",
UsageBody: `reasonix — 由配置和插件驱动的 coding agent(多模型)
用法:
reasonix [--model NAME] [-c|--continue] [-r|--resume [QUERY]] [--permission-mode MODE] [--effort LEVEL] [--add-dir PATH] 交互式会话(终端界面,同 reasonix tui)
reasonix -p|--print [--model NAME] [--output-format text|json|stream-json] [--allowed-tools RULES] [--add-dir PATH] <task>
reasonix run [--model NAME] [--max-steps N] [-c|--continue] [--resume PATH] [--copy] [--output-format FORMAT] <task>
reasonix run --events-jsonl [--model NAME] <task> 输出脱敏结构化事件 JSONL
reasonix review [--base BRANCH] [--commit SHA] [--model NAME] AI 代码审查(基于本地 diff)
reasonix web [--model NAME] [--addr HOST:PORT] [--no-open] 启动本地 Web UI 并用默认浏览器打开
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 reasoning-language [auto|zh|en] 配置可见思考语言
reasonix config compact-ratio [--local] [65..85] 配置自动压缩阈值
reasonix config telemetry [auto|on|off] 配置不含内容的 CLI 使用统计
reasonix report [list|show|send|delete] [ID] 审阅并明确发送本地 CLI 崩溃报告
reasonix mcp <add|remove|list|import> 管理 reasonix.toml 里的 MCP 服务器
reasonix login | whoami | logout 登录 reasonix.io(仅用于社区和崩溃跟进)
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 session list --json [--dir PATH] 为机器客户端列出脱敏会话
reasonix session show|status <machine-session-id> --json [--dir PATH] 查询单个脱敏会话
reasonix session recovery [<machine-session-id>] --json [--dir PATH] 查询脱敏恢复状态
reasonix hook list|status --json [--dir PATH] 查看脱敏 Hook 状态
reasonix trust [--dir PATH] [--yes|--revoke] 审阅并批准本项目要运行的程序
reasonix task list|show|status|events|stop|cancel|monitor|tmux --json [--dir PATH]
查看或控制脱敏 Task
reasonix upgrade [--check] [--force] 更新到最新正式版(别名:reasonix update)
reasonix completion bash|zsh|fish 打印 shell 补全脚本到 stdout
reasonix version [--verbose|--json] 打印版本(单行)或构建元信息
reasonix --version | -v 单行版本(脚本安全)
reasonix help
示例:
reasonix web
reasonix run "把 main.go 里的 TODO 实现掉"
reasonix run --model mimo-pro "给这个函数补单元测试"
reasonix -p "总结这个仓库" --output-format json
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。
`,
}