{
  "common": {
    "save": "保存",
    "cancel": "取消",
    "submit": "提交",
    "next": "下一步",
    "back": "返回",
    "change": "更改",
    "resume": "恢复",
    "on": "开启",
    "off": "关闭",
    "default": "(默认)",
    "selectOne": "选择一个",
    "selectOneOrMore": "选择一个或多个",
    "processing": "正在处理 `/{command}`...",
    "submitted": "已提交"
  },
  "error": {
    "channelNotEnabled": "此频道未启用。请前往控制面板启用它。",
    "unknownCommand": "未知命令：`/{command}`\n\n请使用 `@avibe /start` 访问所有机器人功能。",
    "clearSession": "清除会话时出错：{error}",
    "settingsFailed": "无法打开设置。请重试。",
    "cwdChangeFailed": "无法打开目录更改对话框。请重试。",
    "resumeFailed": "无法打开恢复对话框。请重试。",
    "stopFailed": "发送停止命令时出错：{error}",
    "cwdSetFailed": "设置工作目录时出错：{error}",
    "cwdCreateFailed": "无法创建目录：{error}",
    "cwdNotDirectory": "路径存在但不是目录：`{path}`",
    "cwdGetFailed": "获取工作目录时出错：{error}",
    "showSettings": "显示设置时出错：{error}",
    "toggleSettingFailed": "切换设置失败：{error}",
    "messageTypesInfoFailed": "显示消息类型说明时出错",
    "helpInfoFailed": "显示帮助信息时出错",
    "routingFailed": "显示路由设置时出错：{error}",
    "routingModalFailed": "无法打开 Agent 设置。请重试。",
    "settingsUpdateFailed": "更新设置失败：{error}",
    "languageUpdateFailed": "语言更新失败，请重试。",
    "resumeSubmitFailed": "恢复会话失败：{error}",
    "routingUpdateFailed": "更新路由失败：{error}",
    "updateUnavailable": "当前无法执行更新操作。",
    "unknownAction": "未知操作：{action}",
    "processActionFailed": "处理操作时出错：{error}",
    "agentNotConfigured": "Agent `{agent}` 未配置。若此频道路由到 Codex，请确保已安装 Codex CLI 并设置环境变量。",
    "processMessageFailed": "出错：{error}",
    "streamTurnInProgress": "⚠️ 这个会话已经有一条回复在生成中，请等它完成后再试。",
    "sessionReset": "检测到会话错误。会话已重置，请重试。",
    "sessionConnectionLost": "与 Claude 的连接已断开，请重试。",
    "claudeSessionNotFound": "Claude Code 在当前工作目录下找不到历史会话 `{sessionId}`：\n`{path}`\n\nClaude Code 的会话和工作目录相关。通常是恢复会话后切换了工作目录，或本地 Claude Code 会话数据发生变化。请切回原来的工作目录继续该会话，或在当前目录开始一个新的 Claude Code 会话。",
    "sessionGeneric": "发生错误：{error}",
    "resultAttachmentUploadFailed": "附件上传失败。要我改成拆分成多条消息发送吗？",
    "resultDeliveryFailed": "⚠️ 消息投递失败，内容可能过长或格式不兼容。你可以让我重新发送一次。",
    "opencodeQuestionToolDisabled": "OpenCode 发起了交互式提问，但 Avibe 已禁用 OpenCode 的 question 工具。请直接发送一条新消息，告诉我你的答案或下一步方向。",
    "opencodeQuestionToolDisabledRestored": "恢复中的 OpenCode 会话发起了交互式提问，但 Avibe 已禁用 OpenCode 的 question 工具。请直接发送一条新消息，告诉我你的答案或下一步方向。"
  },
  "success": {
    "settingsUpdated": "设置更新成功！",
    "cwdChanged": "工作目录已更改为：\n`{path}`",
    "sessionResumed": "已恢复 {agent} 会话。\n会话ID：`{sessionId}`",
    "sessionResumedContinueThread": "💬 *请直接在这个线程里继续回复* 以继续该会话。",
    "sessionResumedContinueFeishuThread": "💬 *请直接回复这条消息* 以继续该会话。",
    "sessionResumedContinueDiscordThread": "💬 *请在子区回复这条消息* 以继续该会话。",
    "sessionResumedContinueDirect": "💬 *接下来直接发送消息* 即可继续该会话。",
    "sessionResumedThreadFreshTip": "_(在主会话中发送新消息将开始新的会话。)_",
    "routingUpdated": "Agent设置已更新！"
  },
  "settings": {
    "personalizationTitle": "个性化设置",
    "personalizationDesc": "配置 {agent} 的消息在你的 Slack 工作区中的展示方式。",
    "visibilityTitle": "设置 - 消息可见性",
    "visibilityDesc": "选择要从 {agent} 输出中隐藏的消息类型：",
    "showMessageType": "显示 {name}",
    "visibilityShown": "显示",
    "visibilityHidden": "隐藏",
    "messageTypeStatus": "{name} 消息已设为 {action}"
  },
  "audio": {
    "transcriptEchoSingle": "语音转写：",
    "transcriptEchoMultiple": "语音转写："
  },
  "update": {
    "actionUnavailable": "这条消息当前无法执行更新操作。",
    "alreadyInProgress": "升级已在进行中，请稍等。",
    "alreadyInProgressShort": "升级已在进行中",
    "alreadyInProgressWarning": "⚠️ 升级已在进行中，请稍等。",
    "alreadyUpToDate": "已经是最新版本。",
    "latestVersionSlack": "✅ 当前已经是最新版本。",
    "checkFailed": "检查更新失败，请稍后重试。",
    "infoUnavailable": "更新信息不可用，请稍后重试。",
    "upgradeFailed": "升级失败，请检查日志。",
    "upgradeFailedShort": "升级失败",
    "upgradeFailedSlack": "❌ *升级失败*\n\n请检查日志获取详情。",
    "updating": "正在更新 Avibe...",
    "updatingSlack": "⏳ *正在更新 Avibe...*\n\n请稍等，服务稍后会重启。",
    "restartRequired": "升级完成，请重启 Avibe。",
    "restartRequiredShort": "升级完成 - 需要重启",
    "restartRequiredSlack": "✅ *升级完成*\n\n请重启 Avibe 以应用更新。",
    "updated": "✅ Avibe 已更新到 `{version}`",
    "updatedSlack": "✅ *Avibe 更新成功*\n\n当前运行版本 `{version}`",
    "availablePlain": "Avibe 有可用更新：{current} → {latest} ({releaseUrl})",
    "availableSlack": "🚀 *Avibe 有可用更新*\n\n新版本可用：`{current}` → {latestLink}",
    "availableDiscord": "🚀 **Avibe 有可用更新**\n\n从 `{current}` 更新到 {latestLink}",
    "availableMarkdown": "🚀 Avibe 有可用更新\n\n从 `{current}` 更新到 {latestLink}",
    "availableText": "🚀 Avibe 有可用更新\n\n从 {current} 更新到 {latestLink}",
    "actionUpdateNow": "立即更新"
  },
  "discord": {
    "settingsSubtitle": "调整消息可见性、@提及策略与语言。",
    "routingSubtitle": "为该频道选择后端与模型配置。",
    "labels": {
      "messageTypes": "消息类型",
      "mentionPolicy": "提及策略",
      "language": "语言",
      "backend": "后端",
      "opencodeAgent": "OpenCode Agent",
      "claudeAgent": "Claude Agent",
      "codexAgent": "Codex Agent",
      "model": "模型",
      "reasoningEffort": "推理强度"
    }
  },
  "info": {
    "messageTypesTitle": "消息类型说明：",
    "messageTypesFooter": "隐藏的消息类型不会发送到你的 IM 平台。",
    "howItWorksTitle": "特色功能：",
    "howItWorksRealtimeLabel": "指定 Agent",
    "howItWorksRealtimeDesc": "消息前加 `Agent名:` 前缀可路由到指定 agent，如 `Plan: 设计缓存层`",
    "howItWorksPersistentLabel": "随时打断",
    "howItWorksPersistentDesc": "Agent 运行中直接发新消息即可打断并开始新任务，或输入 `stop` 取消。",
    "howItWorksCommandsLabel": "Thread = 会话",
    "howItWorksCommandsDesc": "每个 Thread 是独立会话，开多个 Thread 可并行执行任务。",
    "howItWorksResumeLabel": "随时恢复会话",
    "howItWorksResumeDesc": "从电脑切到手机也不断档。可直接恢复当前工作目录下最近的 Claude Code、OpenCode 或 Codex 会话，接着继续。",
    "howItWorksWorkDirLabel": "文件附件",
    "howItWorksWorkDirDesc": "直接在消息中附带图片或文件，Agent 可以读取。",
    "howItWorksTasksLabel": "定时任务与 Hook",
    "howItWorksTasksDesc": "可以让 Agent 安排周期性或一次性提示，也可以在长任务结束后异步补发一条消息。",
    "howItWorksSettingsLabel": "灵活设置",
    "howItWorksSettingsDesc": "通过 @bot 随时切换 Agent、模型、推理强度，或隐藏冗余消息类型。",
    "howItWorksFooter": "直接输入消息即可与 {agent} 对话，无需特殊命令！",
    "genericTitle": "信息：{topic}",
    "genericFooter": "该功能即将上线！",
    "resultDeliveredAsAttachment": "⚠️ 这条消息无法以内联形式发送，所以我已将完整内容作为 `result.md` 发在上方。",
    "generatedImagesFallback": "已生成图片："
  },
  "modal": {
    "settings": {
      "title": "设置",
      "channelBehavior": "频道行为",
      "requireMention": "需要 @提及才响应",
      "requireMentionHint": "启用后，机器人仅在被 @提及时才在频道中响应（私信始终有效）。",
      "messageVisibility": "消息可见性",
      "messageVisibilityDesc": "选择要从 Agent 输出中*显示*的消息类型。未选中的类型将不会在您的 Slack 工作区中显示。",
      "showMessageTypes": "显示这些消息类型：",
      "showMessageTypesPlaceholder": "选择要显示的消息类型",
      "tip": "您可以随时显示/隐藏消息类型。更改会立即应用于新消息。",
      "current": "当前",
      "selectMentionBehavior": "选择 @提及行为",
      "optionDefault": "(默认) - {status}",
      "optionRequireMention": "需要 @提及",
      "optionDontRequireMention": "不需要 @提及",
      "mentionStatusOn": "需要 @",
      "mentionStatusOff": "不需要 @",
      "requireMentionLarkNote": "注意：要在群组中接收非 @提及消息，飞书应用需要 `im:message.group_msg` 权限。",
      "language": "语言 / Language",
      "languageHint": "更改 Slack 与 Web UI 中机器人消息的语言。"
    },
    "cwd": {
      "title": "更改工作目录",
      "current": "当前工作目录：",
      "new": "新工作目录：",
      "placeholder": "输入新的目录路径",
      "hint": "使用绝对路径（例如 /home/user/project）或 ~ 表示主目录",
      "tip": "如果目录不存在，将会自动创建。"
    },
    "resume": {
      "title": "恢复会话",
      "description": "选择当前工作目录下最近的 Agent 会话，或粘贴会话 ID 以在此线程中继续工作。",
      "chooseOneOf": "请从下面两种方式中二选一：",
      "discordPickOrPaste": "可以直接选择一个最近会话，或点击带 OR 的按钮手动粘贴 Session ID。",
      "pickExisting": "选择一个最近会话",
      "selectSession": "选择一个会话",
      "pasteId": "或粘贴会话 ID",
      "pasteIdPlaceholder": "例如 ses_12345",
      "sessionIdLabel": "会话 ID",
      "manualInputTitle": "粘贴会话 ID",
      "manualInputButton": "OR：粘贴 Session ID",
      "manualCaptured": "已记录 Session ID，请点击“恢复”继续。",
      "agentBackend": "Agent 后端",
      "selectAgentBackend": "选择 Agent 后端",
      "showingFirst100": "显示当前工作目录下最近的前 100 个会话。如需其他会话，请在下方粘贴会话 ID。",
      "noSessionsFound": "当前工作目录下未找到最近的 Agent 会话。请点击下方带 OR 的按钮，手动粘贴 Session ID 进行恢复。",
      "noRecentSessionsOption": "没有最近会话"
    },
    "routing": {
      "title": "Agent 设置",
      "currentBackend": "当前后端：",
      "backend": "后端",
      "selectBackend": "选择后端",
      "opencodeSettings": "OpenCode 设置",
      "opencodeAgent": "OpenCode Agent",
      "selectOpencodeAgent": "选择 OpenCode Agent",
      "model": "模型",
      "selectModel": "选择模型",
      "reasoningEffort": "推理强度（思考模式）",
      "selectReasoningEffort": "选择推理强度",
      "claudeSettings": "Claude 设置",
      "claudeAgent": "Claude Agent",
      "selectClaudeAgent": "选择 Claude Agent",
      "codexSettings": "Codex 设置",
      "codexAgent": "Codex Agent",
      "selectCodexAgent": "选择 Codex Agent",
      "codexReasoningEffort": "推理强度",
      "tip": "选择“(默认)”以使用后端的配置默认值。"
    },
    "question": {
      "opencode": "OpenCode",
      "claudeCode": "Claude Code"
    }
  },
  "command": {
    "start": {
      "welcome": "欢迎使用 Avibe！",
      "greeting": "你好 {name}！",
      "userFallback": "用户",
      "platform": "平台：{platform}",
      "agent": "Agent：{agent}",
      "channel": "频道：{channel}",
      "commandsTitle": "可用命令：",
      "commandStart": "/start - 显示欢迎消息",
      "commandCwd": "/cwd - 显示当前工作目录",
      "commandSetCwd": "/setcwd <路径> - 设置工作目录",
      "commandResume": "/resume - 恢复当前目录下最近的会话",
      "commandSetup": "/setup [claude|codex|opencode] - 修复后端登录/认证",
      "commandStop": "/stop - 中断 {agent} 当前执行",
      "commandNew": "/new - 开启一个全新的会话",
      "quickActions": "快捷操作：",
      "quickActionsDesc": "使用下方按钮管理您的 {agent} 会话，或直接输入任何消息开始与 {agent} 聊天！",
      "directMessage": "私信"
    },
    "new": {
      "started": "已开启新的会话。你下一条消息会从全新对话开始。"
    },
    "clear": {
      "noSessions": "没有要清除的活动会话。\n会话状态已重置。",
      "cleared": "已清除的活动会话：\n{details}\n所有会话已重置。",
      "sessionItem": "{agent} → {count} 个会话"
    },
    "cwd": {
      "current": "当前工作目录：",
      "exists": "目录存在",
      "notExists": "目录不存在",
      "hint": "这是 Agent 执行命令的位置",
      "usage": "用法：/setcwd <路径>",
      "changeInstructions": "要更改工作目录，请使用：\n`/setcwd <路径>`\n\n示例：\n`/setcwd ~/projects/myapp`",
      "clickButton": "请点击 /start 菜单中的“更改工作目录”按钮来更改工作目录。"
    },
    "resume": {
      "slackOnly": "恢复功能目前仅在 Slack 上可用。在同一线程中继续可自动恢复。",
      "scopeOnly": "⏮️ /resume 只能在频道层级使用，不能在已有线程里。请在主频道里发起——它会开一个可继续的新会话。",
      "clickButton": "请在下面这条菜单消息中点击“恢复会话”按钮打开选择器。",
      "noStoredSessions": "当前工作目录下未找到最近的 Agent 会话。",
      "noStoredSessionsForBackend": "当前工作目录下未找到最近的 {backend} 会话。",
      "listTitle": "当前工作目录下最近的 Agent 会话",
      "listPage": "第 {page} / {total} 页",
      "listItemTitle": "{index}. {prefix} {preview}",
      "listItemTime": "   {time}",
      "usageTitle": "使用方式：",
      "usageList": "/resume - 查看最近会话",
      "usagePick": "/resume 1 - 恢复当前列表中的第 1 条",
      "usageMore": "/resume more - 查看下一页",
      "usageLatest": "/resume latest [oc|cc|cx] - 恢复最近一条会话",
      "usageManual": "/resume <oc|cc|cx> <session_id> - 手动恢复指定会话",
      "snapshotExpired": "上一次显示的会话列表已过期，请先重新执行 /resume。",
      "invalidSelection": "请选择当前列表中的有效编号。",
      "unknownBackend": "后端不合法，请使用 oc、cc、cx 或完整后端名。",
      "unknownCommand": "未识别的恢复命令。",
      "noMorePages": "已经没有更多会话了。"
    },
    "setup": {
      "starting": "正在启动 {backend} 的登录修复流程...",
      "unsupportedBackend": "后端 `{backend}` 暂不支持 setup。",
      "codeUsage": "用法：`/setup code <value>` 或 `/setup code <backend> <value>`",
      "claudeMethodUsage": "用法：`/setup claude <claudeai|console>`",
      "noActiveFlow": "当前频道没有正在进行的 setup 流程。",
      "notFlowOwner": "只有发起这次 setup 的用户才能提交后续验证码。",
      "codeNotSupported": "这个后端不支持提交后续验证码。",
      "notAwaitingCode": "当前 setup 流程此时并不在等待验证码。",
      "codeSubmitted": "已提交 {backend} 的验证码，正在等待登录确认...",
      "claudeCallbackSubmitted": "已提交 Claude 的 OAuth 回调值，正在等待登录确认...",
      "claudeCallbackUsage": "Claude 需要提交浏览器回调页给出的完整 `authorizationCode#state`，请直接把它发回当前聊天。",
      "claudeMethodPrompt": "开始 Claude OAuth 之前，请先选择登录站点。",
      "claudeMethodFallback": "如果当前平台不支持按钮，请执行 `/setup claude claudeai` 或 `/setup claude console`。",
      "resetPrompt": "{backend} 看起来已经掉线了。请点击下面的按钮重新发起 OAuth 登录。",
      "resetPromptPlain": "{backend} 看起来已经掉线了。请发送 `/setup {backend}` 重新发起 OAuth 登录。",
      "manualFallback": "如果当前平台不支持按钮，请执行 `/setup {backend}`。",
      "codexInstructions": "Codex 登录修复已开始。\n\n1. 在浏览器打开这个地址：\n{url}\n\n2. 输入这个一次性验证码：\n`{code}`\n\nBot 会继续等待，并在登录完成后回消息确认。",
      "claudeInstructions": "Claude 登录修复已开始。\n\n请在浏览器打开下面的地址并完成登录：\n{url}\n\n浏览器回调页面会显示最终的 `authorizationCode#state`，请直接把它发回当前聊天。",
      "claudeCodePrompt": "Claude 正在等待后续回调值，请直接在当前聊天里发送。",
      "opencodeDeviceInstructions": "OpenCode 认证修复已开始。\n\n1. 请在浏览器打开这个地址：\n{url}\n\n2. 输入这个一次性验证码：\n`{code}`\n\nBot 会继续等待，并在授权完成后回消息确认。",
      "opencodeInstructions": "OpenCode 的 `{provider}` 认证修复已开始。\n\n请打开下面这个页面创建或获取凭据：\n{url}\n\n拿到 key 之后，直接在当前聊天里回复即可。",
      "opencodeCodePrompt": "OpenCode 正在等待 `{provider}` 的 API key。请直接在当前聊天里回复 key。",
      "opencodeCodeRetryPrompt": "OpenCode 仍在等待 `{provider}` 的 API key，上一条值可能没有被接受。请直接在当前聊天里回复 key。",
      "timedOut": "{backend} 登录修复已超时，请重新发起 setup 再试一次。",
      "success": "{backend} 已重新登录，可继续使用。",
      "failed": "{backend} 登录修复失败：{detail}",
      "unknownFailure": "未知登录失败。"
    },
    "stop": {
      "noActiveSession": "此频道没有要停止的活动会话。"
    }
  },
  "button": {
    "currentDir": "当前目录",
    "changeDir": "更改工作目录",
    "newSession": "新会话",
    "clearSession": "清除所有会话",
    "settings": "设置",
    "resumeSession": "恢复会话",
    "agentSettings": "Agent 设置",
    "howItWorks": "特色功能",
    "aboutMessageTypes": "关于消息类型",
    "resetOAuth": "重置 OAuth",
    "claudeAi": "Claude.ai",
    "console": "Console"
  },
  "messageType": {
    "system": "系统",
    "assistant": "助手",
    "toolcall": "工具调用",
    "result": "结果",
    "systemDesc": "系统初始化和状态消息",
    "assistantDesc": "Agent 的回复和解释",
    "toolcallDesc": "Agent 工具名称 + 参数（单行）",
    "resultDesc": "最终执行结果（始终发送）"
  },
  "routing": {
    "slackOnly": "🤖 Agent 切换目前仅在 Slack 可用。请使用 Slack Agent 设置进行配置。",
    "introTitle": "Agent 与模型设置",
    "introDesc": "配置该频道使用的后端。",
    "label": {
      "backend": "后端",
      "agent": "Agent",
      "model": "模型",
      "reasoningEffort": "推理强度"
    }
  },
  "message": {
    "ack": "{agent} 已收到，正在处理...",
    "quickReplyNote": "回复：{text}"
  },
  "backend": {
    "claude": "ClaudeCode",
    "codex": "Codex",
    "opencode": "OpenCode"
  },
  "reasoning": {
    "none": "无",
    "minimal": "最小",
    "low": "低",
    "medium": "中",
    "high": "高",
    "xhigh": "超高",
    "max": "最大"
  },
  "bind": {
    "success": "✅ 绑定成功！欢迎，{name}。你现在可以通过私信使用 Avibe。",
    "successAdmin": "✅ 绑定成功！欢迎，{name}。你是第一个用户，已被自动授予管理员权限。",
    "menuHintButtons": "要打开操作菜单，直接 @bot 即可，不需要加任何内容。",
    "menuHintStart": "发送 `/start` 即可唤起更多操作菜单。",
    "alreadyBound": "你已经绑定过了，无需再次操作。",
    "invalidCode": "❌ 无效或已过期的绑定码，请检查后重试。",
    "usage": "用法：`bind <绑定码>`\n\n也兼容 `/bind <绑定码>`。请输入管理员提供的绑定码。",
    "dmOnly": "绑定命令只能在私信中使用。请私聊机器人并发送 `bind <绑定码>`。",
    "dmNotBound": "🔒 你还未绑定账号。\n使用 `bind <绑定码>` 开始使用。（也兼容 `/bind <绑定码>`）",
    "error": "❌ 绑定失败：{error}"
  },
  "permission": {
    "adminOnly": "🔒 仅管理员可以修改 Bot 设置。如需权限请联系管理员。"
  },
  "language": {
    "systemDefault": "(系统默认)",
    "en": "English",
    "zh": "中文"
  },
  "telegram": {
    "autoTopicGeneralNotice": "已为这次请求创建新的 Topic：{topic}，请在那里继续。",
    "autoTopicIntro": "已创建新的会话 Topic：{topic}",
    "cwdPromptTitle": "更改工作目录",
    "cwdPromptBody": "下一条消息直接发送新的路径即可。使用 `/cancel` 或下方按钮可取消。",
    "cwdPromptCanceled": "已取消更改工作目录。",
    "resumeTitle": "恢复已保存会话",
    "resumeBody": "从下面选择一个已保存的会话。",
    "resumeNoStoredSessions": "这个会话里暂时还没有可恢复的已保存会话。",
    "resumeCanceled": "已取消恢复会话。",
    "resumeSubmitting": "正在恢复所选会话...",
    "routingTitle": "Agent 与模型设置",
    "routingChoosePrefix": "请选择",
    "routingSaving": "正在保存 Agent 路由设置...",
    "routingCanceled": "已取消更新 Agent 路由设置。"
  }
}
