{
  "installHint": {
    "cta": "装到主屏幕",
    "title": "把 Avibe 当 App 用",
    "body": "添加到主屏幕后,键盘不再挡住输入框,也没有浏览器工具栏,体验更接近原生 App。",
    "step1": "点底部的「分享」按钮",
    "step2": "选「添加到主屏幕」",
    "dismiss": "收起"
  },
  "common": {
    "back": "返回",
    "continue": "继续",
    "save": "保存",
    "skip": "跳过",
    "edit": "编辑",
    "cancel": "取消",
    "loading": "加载中...",
    "saving": "保存中...",
    "saved": "已保存",
    "saveFailed": "保存失败",
    "enabled": "已启用",
    "enable": "启用",
    "disable": "禁用",
    "disabled": "已禁用",
    "default": "默认",
    "inherit": "继承",
    "running": "运行中",
    "stopped": "已停止",
    "unknown": "未知",
    "online": "在线",
    "offline": "离线",
    "public": "公开",
    "private": "私有",
    "notSet": "未设置",
    "notLinked": "未关联",
    "found": "已找到",
    "notFound": "未找到",
    "notChecked": "未检测",
    "missing": "缺失",
    "detect": "检测",
    "detectAll": "检测全部",
    "refresh": "刷新",
    "start": "启动",
    "stop": "停止",
    "restart": "重启",
    "viewDetails": "查看详情",
    "editSetup": "打开设置向导",
    "manageChannels": "管理群组",
    "viewLogs": "查看日志",
    "saveAndRestart": "保存并重启",
    "close": "关闭",
    "submit": "提交",
    "submitting": "提交中…",
    "copy": "复制",
    "copyFailed": "复制失败，请手动复制",
    "remove": "移除",
    "removing": "移除中…",
    "delete": "删除",
    "previous": "上一页",
    "next": "下一页",
    "relative": {
      "justNow": "刚刚",
      "minutesAgo": "{{count}} 分钟前",
      "hoursAgo": "{{count}} 小时前",
      "daysAgo": "{{count}} 天前"
    },
    "test": "测试",
    "testing": "测试中…",
    "themeSystem": "跟随系统主题",
    "themeLight": "浅色主题",
    "themeDark": "深色主题",
    "themeToggleHint": "点击切换主题",
    "step": "步骤",
    "proxyUrl": "代理地址（可选）",
    "proxyUrlHint": "SOCKS5、SOCKS4、HTTP 或 HTTPS 代理。留空则回退到系统 SOCKS 代理探测，未配置时直连。",
    "proxyUrlCollapsedHint": "（留空则尝试系统代理，否则直连）"
  },
  "nav": {
    "dashboard": "仪表盘",
    "channels": "群组",
    "users": "私聊",
    "showPages": "展示页面",
    "settings": "设置",
    "remoteAccess": "远程访问",
    "doctor": "诊断",
    "inbox": "收件箱",
    "projects": "项目",
    "capabilities": "能力",
    "more": "更多",
    "workbench": "工作台"
  },
  "more": {
    "title": "更多",
    "controlPanel": "控制面板",
    "controlPanelDesc": "频道 · 用户 · 展示页面 · 设置 · 日志",
    "appearance": "外观",
    "connection": "连接",
    "host": "本机地址"
  },
  "projects": {
    "title": "项目",
    "empty": "还没有项目",
    "newProject": "新建项目",
    "noSessions": "暂无会话",
    "sessions": "{{count}} 个会话",
    "loadMore": "加载更多",
    "loadFailed": "加载失败，点击重试"
  },
  "newSession": {
    "title": "新建会话",
    "project": "选择项目",
    "newProject": "新项目",
    "placeholder": "描述你想让 agent 做什么…",
    "loadError": "项目加载失败，关掉重开可重试。",
    "createFailed": "会话创建失败，请重试。",
    "agent": "选择 Agent",
    "defaultAgent": "默认 Agent",
    "defaultAgentNamed": "默认 · {{name}}"
  },
  "showPages": {
    "title": "展示页面",
    "subtitle": "每个 Agent 会话都有一个展示页面。可以将其公开、保持私有，或下线。",
    "searchPlaceholder": "按标题或会话搜索…",
    "allPages": "全部页面",
    "sortedRecent": "按最近活动排序",
    "filterAria": "按可见性筛选",
    "filter": { "online": "在线", "private": "私有", "public": "公开", "offline": "已下线" },
    "status": { "private": "私有", "public": "公开", "offline": "已下线" },
    "col": { "session": "会话", "visibility": "可见性", "link": "访问链接", "updated": "更新时间" },
    "empty": "暂无展示页面。当 Agent 会话创建展示页面后会显示在这里。",
    "emptyFiltered": "没有符合该筛选条件的展示页面。",
    "visibilityLabel": "可见性",
    "visibilityOffline": "下线",
    "liveLink": "访问链接",
    "offlineNoLink": "该页面已下线——用上方的开关重新上线即可获得访问链接。",
    "copy": "复制",
    "copied": "已复制",
    "open": "打开",
    "shareLink": "分享链接",
    "rotate": "更换链接",
    "rotateHint": "生成新链接并使当前链接立即失效。",
    "cloudOff": "Avibe Cloud 未开启——此链接仅能在本机打开。",
    "connectCloud": "连接 Avibe Cloud",
    "details": "详情",
    "detail": { "session": "会话 ID", "workspace": "工作区", "created": "创建时间", "updated": "最近更新" },
    "toast": { "updated": "展示页面已更新", "rotated": "分享链接已更换" }
  },
  "settings": {
    "tabs": {
      "service": "服务",
      "platforms": "平台",
      "backends": "后端",
      "dependencies": "依赖",
      "messaging": "消息",
      "diagnostics": "诊断",
      "serviceRoot": "设置"
    },
    "serviceTitle": "服务",
    "serviceSubtitle": "把运行状态、控制台服务配置和远程访问统一收拢到一个页面。",
    "logFileLabel": "日志文件",
    "serviceRuntimeTitle": "运行控制",
    "serviceRuntimeSubtitle": "查看本地 Avibe 进程状态，并执行启动、停止和重启。",
    "statusNow": "当前状态",
    "consoleServerTitle": "控制台服务",
    "consoleServerHint": "保存这些值只会重启 Web UI 服务，不会重启主服务。",
    "consoleServerRedirecting": "UI 服务地址已变更，正在跳转到 {{origin}}...",
    "consoleServerRelocated": "UI 服务现在监听 {{origin}}，请打开该地址继续。",
    "serviceNotesTitle": "运维说明",
    "serviceNotesSubtitle": "先把本地服务运行状态稳定下来，再继续配置平台和路由。",
    "serviceNote1": "远程访问已经并入 Service，因为它本质上决定的是这台机器如何暴露本地管理 UI。",
    "serviceNote2": "Host 和 Port 只影响 UI 服务；运行控制按钮则直接影响本地 Python 主进程。",
    "serviceNote3": "如果需要排障，请到 Diagnostics 运行 doctor，再到 Live logs 查看更细的实时日志。",
    "platformsTitle": "平台",
    "platformsSubtitle": "配置启用哪些消息平台，以及每个平台的接入状态。",
    "backendsTitle": "后端",
    "backendsSubtitle": "管理 agent 后端、默认路由和本地 CLI 可用性。",
    "dependenciesTitle": "依赖",
    "dependenciesSubtitle": "Avibe 自动安装并保持最新的本地运行时。",
    "dependencies": {
      "autoBanner": "这些依赖由 Avibe 自动安装与更新。下面可手动重新检查、修复或更新。",
      "recheckAll": "全部重新检查",
      "required": "必装",
      "statusReady": "就绪",
      "statusDetected": "已检测",
      "statusMissing": "未安装",
      "install": "安装",
      "reinstall": "重新安装",
      "repair": "修复",
      "installing": "安装中…",
      "installed": "{{name}} 已就绪。",
      "installFailed": "安装失败。",
      "backendsTitle": "Agent 后端",
      "backendsDetail": "Claude · OpenCode · Codex —— 在 Backends 标签页管理。",
      "manageBackends": "前往 Backends",
      "items": {
        "askill": { "label": "askill", "detail": "Agent Skills 运行时 —— 驱动 Skills 页面。" },
        "show-runtime": { "label": "Show Page 运行时", "detail": "在你本机渲染可视化 Show 页面。" },
        "node": { "label": "Node.js", "detail": "上述运行时的共同前置依赖。" }
      }
    },
    "backends": {
      "routingTitle": "默认路由",
      "routingHint": "选择默认承载新会话的后端。每个群组的覆盖项在「群组」页配置。",
      "defaultLabel": "默认",
      "defaultBadge": "默认",
      "configure": "配置",
      "cliPathHint": "Avibe 会用该命令执行每次请求。如果二进制不在 $PATH 中,请填写绝对路径。",
      "opencodeTitle": "OpenCode Provider",
      "opencodeSubtitle": "检测或安装 OpenCode CLI,并应用允许跳过审批的权限配置。",
      "opencodeDescription": "多 Provider 开放 Agent · CLI 检测 + 权限配置",
      "claudeTitle": "Claude Code Provider",
      "claudeSubtitle": "检测或安装 Claude Code CLI。登录与 API Key 请直接通过 CLI 完成。",
      "claudeDescription": "Anthropic Agent · 通过 Claude 登录或填入 API Key",
      "codexDescription": "OpenAI Agent · 通过 ChatGPT 登录或 OPENAI_API_KEY",
      "openProviderPage": "配置 Provider",
      "providerOauth": "OAuth(默认)",
      "providerApiKey": "API Key",
      "codexTitle": "Codex Provider",
      "codexSubtitle": "在 ChatGPT 登录与 OpenAI API Key 之间切换,需要时把 Codex 指向自定义网关。",
      "codexBackToBackends": "返回后端列表",
      "codexAuthModeLabel": "认证方式",
      "codexAuthModeOauth": "使用 ChatGPT 登录",
      "codexAuthModeOauthHint": "使用 ChatGPT 账号授权 Codex。选中此项后，Avibe 不再管理 API Key。",
      "codexAuthModeApiKey": "OpenAI API Key",
      "codexAuthModeApiKeyHint": "Codex 会用下方的 Key 调用 OpenAI 兼容接口。如果不希望托管 Key,可切回 ChatGPT 登录。",
      "codexApiKeyLabel": "API Key",
      "codexApiKeyPlaceholder": "sk-...",
      "codexApiKeyConfigured": "当前已保存长度为 {{length}} 的 Key。",
      "codexApiKeyMissing": "尚未保存 API Key。",
      "codexBaseUrlLabel": "Base URL(可选)",
      "codexBaseUrlPlaceholder": "https://api.openai.com/v1",
      "codexBaseUrlHint": "留空则使用 OpenAI 默认接口。兼容网关(如 Azure OpenAI、OpenRouter)可填入各自的 URL。",
      "codexBaseUrlReset": "重置为默认",
      "codexHasChatgptTokens": "检测到上一次登录缓存的 ChatGPT 凭据。",
      "codexOauthSignedIn": "Codex 已通过 ChatGPT 登录。",
      "codexOauthPanelTitle": "使用 ChatGPT 账号登录",
      "codexOauthPanelSubtitle": "在下方打开设备授权链接、输入设备码，并在浏览器里完成登录。Codex 会自动检测完成状态。",
      "codexSignInButton": "使用 ChatGPT 登录",
      "codexDeviceCodeLabel": "设备码",
      "codexDeviceInstructions": "打开上面的链接、粘贴设备码，然后在浏览器里完成登录。Codex 收到回调后此页会自动刷新。",
      "codexCredentialsStoreKeyringWarn": "Codex 当前设置为把凭据存储在系统钥匙串中({{store}})。保存后将切换为文件存储,Avibe 才能直接读写 API key。",
      "codexAuthModeUncertain": "Codex 当前设置为把凭据存储在系统钥匙串中({{store}}),此处读不到登录状态。请在下方选择一种模式并保存——Avibe 会将 Codex 切换为文件存储,后续读取就能保持准确。",
      "codexInfoHint": "保存会写入 `~/.codex/auth.json` 与 `~/.codex/config.toml`,并重启常驻 app-server 以加载新配置。",
      "codexSave": "保存并重启 Codex",
      "codexSaving": "保存中…",
      "codexSaveSuccess": "Codex 认证已保存",
      "codexSaveFailed": "保存 Codex 认证失败",
      "claudeAuthModeLabel": "认证方式",
      "claudeAuthModeOauth": "Claude 账号登录",
      "claudeAuthModeOauthHint": "使用 Anthropic 账号授权 Claude Code。选中此项后，Avibe 不再管理 API Key。",
      "claudeAuthModeApiKey": "Anthropic API Key",
      "claudeAuthModeApiKeyHint": "保存后会直接更新 Claude Code 自己的 `settings.json` env 配置，CLI 会使用这里的 Key。",
      "claudeOauthSignedIn": "Claude 已登录。",
      "claudeOauthPanelTitle": "使用 Anthropic 账号登录",
      "claudeOauthPanelSubtitle": "打开下方授权链接、批准访问，然后粘贴 Anthropic 返回给你的回调码。",
      "claudeSignInButton": "使用 Claude 登录",
      "claudeCallbackCodeLabel": "授权码",
      "claudeCallbackCodePlaceholder": "code#state",
      "claudeCallbackCodeHint": "Anthropic 会展示类似 `abc123#xyz` 的值，请原样粘贴到这里。Avibe 会把它转交给 Claude Code 完成登录。",
      "claudeApiKeyLabel": "API Key",
      "claudeApiKeyPlaceholder": "sk-ant-...",
      "claudeApiKeyConfigured": "当前已保存一份长度为 {{length}} 的 Key。",
      "claudeApiKeyMissing": "尚未保存 API Key。",
      "claudeBaseUrlLabel": "Base URL（可选）",
      "claudeBaseUrlPlaceholder": "https://api.anthropic.com",
      "claudeBaseUrlHint": "留空则使用 Anthropic 默认地址；兼容中转（如 Bedrock 代理、AWS Endpoint）可在此填写自定义地址。",
      "claudeBaseUrlReset": "恢复默认",
      "claudeSettingsConflictTitle": "旧的 Avibe Key 将被迁移",
      "claudeSettingsConflictBody": "保存会更新 {{path}} 里的 `{{var}}`，并清除旧的 Avibe 副本。",
      "claudeInfoHint": "保存后会写入 Claude Code 的 `settings.json` env 配置。Claude 每次请求独立启动，无需重启 Avibe。",
      "claudeSave": "保存 Claude 认证",
      "claudeSaving": "保存中…",
      "claudeSaveSuccess": "Claude 认证已保存",
      "claudeSaveFailed": "保存 Claude 认证失败",
      "oauthAuthUrlLabel": "授权链接",
      "oauthInProgress": "登录进行中…",
      "oauthStarting": "正在启动 OAuth 流程…",
      "oauthVerifying": "正在验证凭据…",
      "oauthSuccess": "登录成功。",
      "oauthFailed": "OAuth 失败：{{detail}}",
      "oauthPollTimedOut": "登录在允许时间内未完成，请重试。",
      "oauthUrlCopied": "链接已复制到剪贴板。",
      "oauthDeviceCodeCopied": "设备码已复制到剪贴板。",
      "oauthReauthenticate": "重新登录",
      "oauthRemove": "退出登录",
      "oauthRemoved": "已移除凭据。",
      "oauthRemoveFailed": "移除凭据失败：{{detail}}",
      "oauthRemovePartial": "已清除 Avibe 内的凭据，但 CLI logout 返回错误：{{detail}}。CLI 自己的凭据文件可能仍在磁盘上。",
      "oauthFlowLockedToast": "OAuth 登录进行中——请先完成或取消，再切换验证方式。",
      "testConnectionTitle": "测试连通性",
      "testConnectionSubtitle": "发送一条 \"Hi\" 测试 prompt，用来验证账号、模型和自定义 Base URL 是否可用。",
      "testConnectionRun": "运行测试",
      "testConnectionLastOk": "上次：成功 · {{ms}} ms",
      "testConnectionLastFail": "上次失败：{{detail}}",
      "testConnectionModelLabel": "测试模型",
      "testConnectionModelDefault": "使用默认",
      "testConnectionResponseLabel": "模型响应",
      "testConnectionSuccessToast": "后端可达 · {{ms}} ms",
      "testConnectionFailedToast": "后端测试失败：{{detail}}",
      "testFailureInvalidCredentials": "保存的凭据被拒绝（401）。请更换 API key 或重新登录。",
      "testFailureForbidden": "端点接受了凭据但拒绝访问（403）。检查 relay 的可用模型/权限。",
      "testFailureModelNotFound": "请求使用的模型在端点上不存在。检查模型 id 或 relay 路由。",
      "testFailureRateLimited": "端点返回限流/超配额（429）。请稍后或更换额度更高的 key。",
      "testFailureEndpointUnreachable": "无法访问配置的 Base URL。请检查 DNS / 代理 / relay 是否在线。",
      "testFailureServerError": "端点返回 5xx 错误。relay 可达但当前不健康。",
      "testFailureTrustCheck": "Codex 拒绝在当前目录运行。重启回归容器让 cwd 进入受信任列表。",
      "testFailureCliNotFound": "未找到后端 CLI 二进制。检查 Runtime 卡片上的路径。",
      "testFailureSpawnFailed": "无法启动后端 CLI：{{detail}}",
      "testFailureTimedOut": "CLI 在测试超时时间内没有响应。",
      "testFailureCliFailed": "CLI 退出失败。展开下方原始输出查看详情。",
      "testConnectionRawOutputLabel": "原始输出",
      "activeAuthOauth": "当前：OAuth",
      "activeAuthApiKey": "当前：API Key",
      "activeAuthNone": "未登录",
      "replaceApiKey": "替换",
      "claudeApiKeyRemove": "移除 Key",
      "claudeApiKeyRemoveConfirm": "确定要移除已保存的 Anthropic API Key 吗？OAuth 凭据不会受影响。",
      "claudeApiKeyRemoved": "已移除 Anthropic API Key。",
      "claudeApiKeyRemoveFailed": "移除 API Key 失败：{{detail}}",
      "codexApiKeyRemove": "移除 Key",
      "codexApiKeyRemoveConfirm": "确定要从 auth.json 移除已保存的 OpenAI API Key 吗？如果有 OAuth 凭据，Codex 会回落到 OAuth；否则会变成未配置状态。",
      "codexApiKeyRemoved": "已移除 OpenAI API Key。",
      "codexApiKeyRemoveFailed": "移除 API Key 失败：{{detail}}",
      "codexNoticeClearedRelayPointer": "已清除自定义中继指向（{{provider}} → {{url}}）：OAuth 凭据无法被自定义 base_url 验证，Codex 将改为使用 OpenAI 官方端点。如需切回，请重新添加 API Key 或手动编辑 ~/.codex/config.toml。",
      "codexNoticeGeneric": "配置提示：{{code}}",
      "opencodeProviderSignIn": "登录",
      "opencodeProviderOauthSignedIn": "OAuth 凭据已保存。",
      "opencodeProviderOauthPanelTitle": "登录 {{name}}",
      "opencodeProviderOauthPanelSubtitle": "打开链接并在浏览器里完成登录，OpenCode 守护进程会自动检测完成状态。",
      "opencodeCallbackUrlLabel": "回调链接",
      "opencodeCallbackUrlHint": "授权后浏览器会跳到 `http://127.0.0.1:<port>/callback?code=...`。从地址栏复制完整 URL 并粘贴到这里，Avibe 会在容器内替你重放，让 OpenCode 的本地监听器收到凭据。",
      "opencodeProvidersTitle": "服务商",
      "opencodeProvidersSubtitle": "从 OpenCode Server 实时拉取 · 通过 API Key 或 OAuth 登录完成授权",
      "opencodeProvidersCount": "已配置 {{configured}}/{{total}}",
      "opencodeServerRunning": "服务器可用",
      "opencodeServerStopped": "服务器不可用",
      "opencodeServerStarting": "服务器启动中…",
      "opencodeServerUnreachable": "无法连接到 OpenCode 服务器",
      "opencodeServerRetryCount": "第 {{attempt}}/{{max}} 次重试",
      "opencodeBackendDisabled": "后端已禁用",
      "opencodeDisabledBanner": "请在卡片顶部启用 OpenCode 后再管理服务商。后端关闭时只有认证模式开关可操作。",
      "opencodeRefresh": "刷新",
      "opencodeCustomProviderAdd": "添加兼容服务商",
      "opencodeCustomProviderTitle": "自定义兼容服务商",
      "opencodeCustomProviderSubtitle": "创建由 OpenCode 配置驱动的 OpenAI-compatible 或 Anthropic-compatible 服务商。",
      "opencodeCustomProviderName": "显示名称",
      "opencodeCustomProviderNamePlaceholder": "My Relay",
      "opencodeCustomProviderId": "Provider ID",
      "opencodeCustomProviderIdPlaceholder": "my-relay",
      "opencodeCustomProviderAdapter": "兼容类型",
      "opencodeCustomProviderAdapterOpenAI": "OpenAI compatible",
      "opencodeCustomProviderAdapterAnthropic": "Anthropic compatible",
      "opencodeCustomProviderRequired": "请填写名称、Provider ID 和 Base URL。",
      "opencodeCustomProviderIdInvalid": "Provider ID 必须以小写字母或数字开头，只能包含小写字母、数字、点号、连字符或下划线。",
      "opencodeCustomProviderBaseUrlInvalid": "Base URL 必须以 http:// 或 https:// 开头。",
      "opencodeCustomProviderSave": "创建服务商",
      "opencodeCustomProviderSaved": "自定义服务商已保存。",
      "opencodeCustomProviderSaveFailed": "保存自定义服务商失败。",
      "opencodeCustomProviderBadge": "自定义",
      "opencodeCustomProviderRemove": "删除服务商",
      "opencodeCustomProviderRemoveConfirm": "确定要删除自定义服务商 {{name}} 吗？这会移除它的配置、模型和已保存凭据。",
      "opencodeCustomProviderRemoved": "自定义服务商已删除。",
      "opencodeCustomProviderRemoveFailed": "删除自定义服务商失败。",
      "opencodeSearchPlaceholder": "搜索服务商、模型或 ID…",
      "opencodeFilterAll": "全部",
      "opencodeFilterConfigured": "已配置",
      "opencodeFilterOauth": "支持 OAuth",
      "opencodeFilterLocal": "本地",
      "opencodeBadgeConfigured": "已配置",
      "opencodeBadgeConfiguredApiKey": "API Key",
      "opencodeBadgeConfiguredOauth": "OAuth",
      "opencodeBadgeOauth": "支持 OAuth",
      "opencodeBadgeLocal": "本地",
      "opencodeBadgeUnset": "未配置",
      "opencodeDefaultBadge": "默认",
      "opencodeDefaultLabel": "默认服务商",
      "opencodeDefaultUnset": "未设置",
      "opencodeDefaultPopoverTitle": "选择默认服务商",
      "opencodeDefaultPopoverEmpty": "没有匹配的服务商。",
      "opencodeDefaultNeedsKey": "{{name}} 还没有 API Key，请先设置后再设为默认。",
      "opencodeDefaultSaved": "已将 {{name}} 设为默认服务商。",
      "opencodeDefaultSaveFailed": "切换默认服务商失败。",
      "opencodeProvidersLoading": "正在从 OpenCode 加载服务商…",
      "opencodeProvidersEmpty": "OpenCode 未返回任何服务商，建议在终端执行 `opencode auth list` 检查。",
      "opencodeProvidersFilterEmpty": "没有符合当前搜索或筛选的服务商。",
      "opencodeProvidersError": "无法读取 OpenCode 服务商列表。",
      "opencodeProvidersInfo": "服务商数据从 OpenCode 服务器实时拉取。",
      "opencodeProviderModelsCount": "{{count}} 个模型",
      "opencodeProviderModelsEmpty": "暂无模型。可以在上方手动添加 Model ID。",
      "opencodeProviderModels": "模型列表",
      "opencodeProviderDefaultModel": "默认",
      "opencodeProviderAddModel": "添加模型",
      "opencodeProviderModelPlaceholder": "model-id，不要带 provider/",
      "opencodeProviderModelAdd": "添加模型",
      "opencodeProviderModelReasoning": "推理强度",
      "opencodeProviderModelHint": "手动添加的模型会写入 OpenCode 配置，并出现在该服务商的测试下拉列表中。",
      "opencodeProviderModelRequired": "请先填写 Model ID。",
      "opencodeProviderModelNoProviderPrefix": "这里只填写 Model ID，不要带 provider/ 前缀。",
      "opencodeProviderModelDuplicate": "该服务商下已经有相同的 Model ID。",
      "opencodeProviderModelSaveFailed": "保存模型失败。",
      "opencodeProviderModelSaved": "模型已保存。",
      "opencodeProviderModelRemoveFailed": "删除模型失败。",
      "opencodeProviderModelRemoved": "模型已删除。",
      "opencodeProviderUserModel": "手动",
      "opencodeProviderUserModelsCount": "{{count}} 个手动",
      "opencodeProviderApiKey": "API Key",
      "opencodeProviderApiKeyPlaceholder": "粘贴服务商的 API Key",
      "opencodeProviderApiKeyPlaceholderStored": "输入新 Key 以替换已保存的内容",
      "opencodeProviderApiKeyStored": "已在磁盘上保存了一份 Key。",
      "opencodeProviderApiKeyMissing": "尚未保存该服务商的 API Key。",
      "opencodeProviderApiKeyRequired": "请先填写 API Key 再保存。",
      "opencodeProviderBaseUrl": "Base URL（可选）",
      "opencodeProviderBaseUrlPlaceholder": "https://provider.example.com/v1",
      "opencodeProviderBaseUrlHint": "服务商级别的覆盖配置位于 `~/.config/opencode/opencode.json`。留空则使用默认地址。",
      "opencodeProviderBaseUrlRequired": "自定义服务商必须填写 Base URL。",
      "opencodeProviderOauthAvailable": "支持 OAuth 登录",
      "opencodeProviderOauthHint": "也可以在终端执行 `opencode auth login {{id}}`，无需在此保存 API Key。",
      "opencodeProviderLocalHint": "本地服务商不需要凭据，启动运行时并加载模型即可。",
      "opencodeProviderSave": "保存 Key",
      "opencodeProviderSaved": "服务商凭据已保存。",
      "opencodeProviderCatalogRefreshPending": "服务商已保存，正在刷新模型列表…",
      "opencodeProviderSaveFailed": "保存服务商凭据失败。",
      "opencodeProviderRemove": "移除 Key",
      "opencodeProviderRemoveOauth": "退出登录",
      "opencodeProviderRemoveConfirm": "确定要删除 {{name}} 的已保存 Key 吗？",
      "opencodeProviderRemoveOauthConfirm": "确定要退出 {{name}} 的登录吗？这会移除已保存的 OAuth 凭据。",
      "opencodeProviderRemoved": "服务商凭据已删除。",
      "opencodeProviderRemoveFailed": "移除服务商凭据失败。",
      "opencodeProviderCollapse": "收起",
      "opencodeTestTitle": "测试 {{name}}",
      "opencodeTestSubtitle": "通过 OpenCode 向当前服务商发送一句 \"Hi\"，验证凭据与 Base URL 是否可达。",
      "opencodeTestModelDefault": "服务商默认",
      "testFailureOpencodeServerUnavailable": "本地 OpenCode 服务未启动。请到 Runtime 页面启动后再试。",
      "testFailureNoModels": "该服务商当前没有可用模型。请先保存 API Key，或重新刷新服务商列表。",
      "testFailureSessionCreate": "OpenCode 拒绝创建测试会话——请查看 OpenCode 服务日志获取详细错误。",
      "testFailureMissingProvider": "服务商 ID 缺失，请刷新页面后重试。"
    },
    "messagingTitle": "消息",
    "messagingSubtitle": "统一配置全局回复行为、ACK 策略以及消息显示默认值。",
    "messagingCardDescription": "细调 Avibe 如何确认收到消息、如何在失败时重试，以及最终向用户展示哪些回复内容。",
    "messagingAutosaved": "已自动保存",
    "messagingStatusIdle": "最近没有变更",
    "messagingStatusJustNow": "刚刚保存",
    "messagingStatusAgo": "{{seconds}} 秒前已保存",
    "messagingInputEnrichmentTitle": "输入增强",
    "messagingInputEnrichmentDescription": "在消息交给 Agent 前，对用户输入内容做预处理。",
    "messagingAgentContextTitle": "Agent 上下文",
    "messagingAgentContextDescription": "随每次用户消息一起发送给 Agent 的上下文信息。",
    "messagingWorkFeedbackTitle": "工作反馈",
    "messagingWorkFeedbackDescription": "配置 Avibe 如何确认、重试和展示运行中的工作。",
    "messagingReplyExperienceTitle": "回复体验",
    "messagingReplyExperienceDescription": "控制 Avibe 发回聊天里的消息体验。",
    "messagingDisplayTitle": "聊天显示",
    "messagingDisplayDescription": "调整 Web UI 中对话内容的显示方式。",
    "messagingGroupsTitle": "群组与路由",
    "messagingGroupsDescription": "进入群组允许列表和按群组 backend 路由配置。",
    "messagingGroupsHint": "前往群组页，管理允许工作的群组以及每个群组分别路由到哪个 agent backend。",
    "messagingSupportTitle": "平台能力说明",
    "messagingSupportLine1": "Typing 指示器和 Reaction ACK 取决于你当前启用的平台是否支持这些能力。",
    "messagingSupportLine2": "只有在 Slack 处于启用平台集合中时，才会显示 Slack 链接预览抑制开关。",
    "messagingSupportLine3": "如果要覆盖全局默认值，请到群组页做按群组的单独配置，而不是只依赖这里的全局设置。",
    "messagingBehaviorTitle": "当前行为快照",
    "diagnosticsTitle": "诊断",
    "diagnosticsSubtitle": "运行健康检查、查看告警，并在需要时跳转到实时日志。",
    "diagnosticsDoctorTitle": "健康检查",
    "logsTitle": "实时日志",
    "logsSubtitle": "按来源、级别和搜索条件查看运行日志流。",
    "inProgressTitle": "这个设置页已经有新路由，但功能 UI 还在迁移中",
    "inProgressBody": "新版路由和页面壳子已经就位，但这个分区的具体界面还在从旧 Dashboard 和向导流程迁移。",
    "inProgressHint": "在该分区完成重构前，底层配置仍可先通过设置向导进行调整。",
    "openSetup": "打开设置向导"
  },
  "remoteAccess": {
    "badge": "Avibe Cloud Provider",
    "title": "远程访问",
    "subtitle": "通过私有 avibe.bot 地址，从另一台设备打开这个本机 Web UI。你的数据和 Agent 仍然运行在这台机器上。",
    "subtitleWithLink": "通过私有 <cloud>avibe.bot</cloud> 地址，从另一台设备打开这个本机 Web UI。你的数据和 Agent 仍然运行在这台机器上。",
    "connectTitle": "连接 Avibe Cloud",
    "connectDesc": "先在 avibe.bot 创建 remote-access bot，并复制一次性 pairing key；然后粘贴到这里完成本机配对。",
    "configuredTitle": "Avibe Cloud 已配置",
    "configuredDesc": "本机已经保存了远程访问凭证。Pairing key 是一次性兑换码，不会长期保存；重启后会使用已保存的连接凭证自动恢复。",
    "configuredBadge": "已连接到 Avibe Cloud",
    "configuredHelp": "只有在切换账号、更换域名或重新生成远程访问时，才需要重新配对。",
    "legacyHostnameTitle": "这个远程地址需要更换",
    "legacyHostnameDesc": "旧实例使用的是 *.remote.avibe.bot，这属于多级子域名，Cloudflare 免费通用证书可能无法覆盖。请在 avibe.bot 重新创建 remote-access bot，然后回到这里重新配对，拿到新的 *.avibe.bot 地址。",
    "vibeCloudService": "Avibe Cloud 服务",
    "backendUrl": "Avibe Cloud 地址",
    "pairingKey": "Pairing key",
    "pairingKeyHelp": "Pairing key 只会显示一次，通常以 vrp_ 开头。兑换成功后本地保存的是连接凭证，不是这个一次性 key。",
    "pair": "配对并启动",
    "pairing": "配对中...",
    "repair": "重新配对",
    "pairSuccess": "远程访问已配对",
    "startSuccess": "远程访问已启动",
    "stopSuccess": "远程访问已停止",
    "statusTitle": "运行状态",
    "statusDesc": "查看远程访问地址和运行状态。",
    "paired": "配对状态",
    "connector": "远程访问",
    "flowTitle": "配置步骤",
    "flowStep1": "打开 avibe.bot，注册或登录，创建 remote-access bot，并领取个人域名。",
    "flowStep2": "复制 avibe.bot 控制台里显示的一次性 pairing key。",
    "flowStep3": "把 key 粘贴到这里。Avibe 会保存连接凭证并启动远程访问。",
    "actionNeeded": "需要处理",
    "ready": "已就绪",
    "stateNeedsAttention": "需要检查"
  },
  "accessBlocked": {
    "title": "无法在此地址打开控制台",
    "body": "Avibe 正在运行，但拒绝在当前地址打开控制台。",
    "hint": "请用你的 https://<你的子域>.avibe.bot 链接打开，或在运行 Avibe 的机器上访问 http://127.0.0.1:5123。开启远程访问时，直接用局域网或 Tailscale IP 会被拦截。",
    "codeLabel": "原因",
    "retry": "重试"
  },
  "errors": {
    "project_no_folder": "这个项目没有配置本地文件夹。",
    "project_not_found": "找不到这个项目。",
    "remote_access_host_mismatch": "这个地址无法打开 Avibe 控制台。请用你的 https://<你的子域>.avibe.bot 链接打开，或在运行 Avibe 的机器上访问 http://127.0.0.1:5123。",
    "remote_access_config_unavailable": "Avibe 无法读取配置。请确认服务运行正常后重试。",
    "remote_access_public_url_invalid": "远程访问配置有误（公网地址无效）。请重新配对此设备或修正远程访问设置。",
    "remote_access_session_secret_missing": "远程访问配置有误（缺少会话密钥）。请重新配对此设备以恢复访问。",
    "remote_access_unknown": "操作没有完成。请刷新状态后再试一次；如果仍然失败，请查看远程访问运行日志。",
    "invalid_pairing_key": "这个 pairing key 无效或已过期。请回到 avibe.bot 重新生成一个 key，然后粘贴到这里。",
    "missing_pairing_key": "请先粘贴 pairing key。",
    "pairing_request_failed": "无法连接到 avibe.bot。请检查网络连接，或确认 Avibe Cloud 地址填写正确。",
    "backend_http_error": "avibe.bot 暂时拒绝了这次请求。请稍后重试，或重新生成 pairing key。",
    "invalid_pairing_response": "avibe.bot 返回的信息不完整。请刷新页面后重新生成 pairing key 再试。",
    "remote_access_disabled": "远程访问还没有启用。请先完成配对。",
    "missing_tunnel_token": "配对信息不完整，缺少 Tunnel 凭证。请重新配对。",
    "cloudflared_install_failed": "连接器安装失败。请检查当前机器的网络连接和写入权限后重试。",
    "cloudflared_spawn_failed": "连接器启动失败。请检查 cloudflared 是否可执行，或查看运行日志。",
    "cloudflared_exited": "连接器启动后立即退出。通常是 Tunnel 凭证无效或 Cloudflare 配置未生效，请重新配对后再试。",
    "cloudflared_stop_failed": "连接器暂时无法停止。请稍后重试，或在系统进程里手动结束 cloudflared。",
    "cloudflared_process_unknown": "检测到一个无法确认归属的连接器进程。为避免误杀其它进程，Avibe 没有自动处理。请手动检查 cloudflared 进程后再启动。"
  },
  "appShell": {
    "title": "Avibe OS",
    "subtitle": "Agent 操作系统",
    "workspaceLabel": "工作区",
    "openControlPanel": "控制面板",
    "backToWorkbench": "返回工作台",
    "newSession": "新建",
    "navigationLabel": "控制台",
    "statusLabel": "服务状态",
    "versionLabel": "版本",
    "accountMenuLabel": "账户（{{email}}）",
    "signedInAs": "当前登录账户",
    "signOut": "退出登录",
    "signingOut": "正在退出…"
  },
  "workbench": {
    "eyebrow": "工作台",
    "placeholderTitle": "你的 AI 工作台正在搭建",
    "placeholderBody": "Agents、Skills、Harness、Vaults 将会汇聚到这里。现在先进控制面板配置平台和 backend。",
    "canvas": {
      "heroTitle": "今天想搭点什么?",
      "heroBody": "在下面输入想做的事,Agent 会按你的描述执行。你也可以从下面的建议开始。",
      "suggestions": {
        "newProject": "打开项目",
        "newProjectHint": "选个目录开个项目,会话默认会落在里面",
        "openAgents": "管理 Agents",
        "openAgentsHint": "添加或调整可选的 Agent",
        "openHarness": "建后台任务",
        "openHarnessHint": "让 Agent 帮你写 cron / watch"
      },
      "inputPlaceholder": "和 Agent 聊点什么…",
      "noProjectForChat": "还没有项目 — 先新建一个,再来这里聊"
    },
    "openControlPanel": "进入控制面板",
    "capabilitiesLabel": "能力",
    "projectsLabel": "项目",
    "addProject": "打开项目",
    "addSession": "在该项目新建会话",
    "projectActions": "项目操作",
    "sessionActions": "会话操作",
    "projectRename": "重命名",
    "projectSettings": "设置项目",
    "projectEditAgents": "编辑 AGENTS.md",
    "projectArchive": "归档",
    "projectArchiveConfirm": "确定归档项目「{{name}}」?会话历史会保留,侧栏不再显示。",
    "projectRenamePlaceholder": "新名字",
    "sessionRename": "重命名",
    "sessionRenamePlaceholder": "会话名称",
    "sessionArchive": "归档会话",
    "archiveSession": {
      "title": "永久归档此会话？",
      "body": "会话「{{name}}」将被永久归档，且无法恢复。",
      "checking": "正在检查关联资源…",
      "previewError": "无法确认关联资源——它们仍会被永久删除。",
      "reclaimIntro": "以下关联资源会被一并永久删除：",
      "reclaimTasks": "{{n}} 个定时任务",
      "reclaimWatches": "{{n}} 个 Watch",
      "reclaimRuns": "{{n}} 个进行中的任务",
      "reclaimQueued": "{{n}} 条排队中的消息",
      "noReclaim": "此会话没有关联的定时任务或 Watch。",
      "confirm": "永久归档"
    },
    "projectsEmpty": "还没有项目 — 添加一个就能开始会话。",
    "projectsLoading": "加载项目中…",
    "projectsLoadError": "项目加载失败。",
    "sessionsLoading": "加载会话中…",
    "sessionsEmpty": "项目里还没有会话。",
    "sessionsLoadMore": "加载更多",
    "untitledSession": "未命名会话",
    "sessionStatus": {
      "idle": "空闲",
      "running": "运行中",
      "failed": "上一回合失败"
    },
    "newProjectDialog": {
      "title": "打开项目",
      "description": "选一个工作目录。打开你之前用过的文件夹会重新打开那个项目 —— 如果它被归档过,会一并恢复。",
      "pickFolder": "选择文件夹",
      "displayName": "显示名",
      "displayNamePlaceholder": "默认使用文件夹名",
      "folderLabel": "目录",
      "create": "打开项目",
      "creating": "打开中…",
      "cancel": "取消"
    },
    "nav": {
      "inbox": "收件箱",
      "agents": "Agents",
      "skills": "Skills",
      "harness": "Harness",
      "vaults": "Vaults"
    },
    "inbox": {
      "eyebrow": "收件箱",
      "title": "收件箱",
      "headerCount": "{{unread}} 条未读 · {{total}} 条全部",
      "markAllRead": "全部已读",
      "markRead": "标记已读",
      "viewAll": "查看完整收件箱",
      "openSession": "打开会话",
      "refresh": "刷新",
      "filterUnread": "未读",
      "filterAll": "全部",
      "empty": "收件箱还是空的 — Agent 回复会出现在这里。",
      "emptyTitle": "收件箱是空的",
      "emptyBody": "当 Agent 从某个会话回过来,就会显示在这里。",
      "allClearTitle": "全部看完了",
      "allClearBody": "当前没有未读的 Agent 消息。切到\"全部\"可以浏览历史。",
      "backToCanvas": "回到画布",
      "agent": "Agent",
      "you": "我",
      "replied": "已回复",
      "loadMore": "加载更多",
      "moreUnreadBeyond": "还有未读会话在后面的分页里,点击「加载更多」查看。",
      "notifications": {
        "checking": "正在检查通知",
        "unsupported": "当前不支持通知",
        "installFirst": "先添加到主屏幕",
        "enable": "开启通知",
        "enabled": "通知已开启",
        "enabledPwa": "PWA 通知已开启",
        "disable": "关闭",
        "test": "测试",
        "testTitle": "Avibe",
        "testBody": "通知已经准备好了。",
        "testSent": "测试通知已发送",
        "testFailed": "测试通知发送失败"
      }
    },
    "modules": {
      "comingSoonEyebrow": "即将就位",
      "comingSoon": "这个能力还在路上,后续版本会接入完整界面。",
      "inbox": {
        "eyebrow": "收件箱",
        "title": "收件箱",
        "description": "跨项目汇聚所有 Avibe 会话的通知。hover 浮层和完整列表视图后续 commit 接入。"
      },
      "agents": {
        "eyebrow": "Agents",
        "title": "Agents",
        "description": "全局 Avibe Agent 注册表 —— Claude / OpenCode / Codex 各自的变体,开会话时可选。"
      },
      "skills": {
        "eyebrow": "Skills",
        "title": "Skills",
        "description": "在 askill CLI 之上管理 Agent Skills(全局 + 项目级)。"
      },
      "harness": {
        "eyebrow": "Harness",
        "title": "Harness",
        "description": "后台任务、watch、webhook,以及三者的运行历史。创建走和 Agent 对话。"
      },
      "vaults": {
        "eyebrow": "Vaults",
        "title": "Vaults",
        "description": "secrets 和 API key,Agent 可以直接写进 ENV / .env,不用你复制粘贴。"
      }
    }
  },
  "wizard": {
    "title": "Avibe 设置向导"
  },
  "welcome": {
    "title": "欢迎使用 Avibe",
    "subtitle": "这台机器现在是你 AI 伙伴的家。用内置的 Workbench 就能和它对话，也可以接上 Slack、Discord、Telegram、飞书、微信。",
    "getStarted": "开始设置",
    "card1Title": "本地优先",
    "card2Title": "多平台",
    "card3Title": "多 Agent",
    "feature1": "数据与 Agent 都留在你自己的机器上。",
    "feature2": "Slack、Discord、Telegram、飞书、微信，一个入口全搞定。",
    "feature3": "Claude、OpenCode、Codex —— 按群/频道路由。"
  },
  "modeSelection": {
    "title": "选择模式",
    "saasMode": "SaaS 模式",
    "saasDescription": "OAuth 安装 + 云端中继 + 本地执行（即将推出）",
    "selfHostMode": "自托管模式",
    "selfHostDescription": "使用您自己的聊天应用 + Socket Mode 令牌"
  },
  "platform": {
    "eyebrow": "03 — 平台",
    "title": "你在哪里和 Agent 聊天",
    "subtitle": "Avibe Workbench 一直开着，是内置的网页应用，还能添加到手机主屏。也可以顺便接上 Slack、Telegram 这类聊天平台，或者先跳过，以后再设置。",
    "workbenchRequired": "必备",
    "workbenchDesc": "内置的网页聊天，用来和 Agent 对话，一直开着，不用配置。",
    "workbenchPwa": "添加到手机主屏，像原生 App 一样用。",
    "workbenchAlwaysOn": "始终开启",
    "chatPlatformsTitle": "聊天平台",
    "optionalLabel": "可选",
    "primary": "主平台",
    "primaryTitle": "主平台",
    "primaryDesc": "仅用于兼容排序和默认界面展示焦点。",
    "credentialsTitle": "平台凭证",
    "credentialsSubtitle": "为每个 IM 平台配置机器人认证所需的凭证。",
    "enabledPlatforms": "已启用平台",
    "selectedSummary": "已选择 {{count}} 个",
    "apply": "应用",
    "applyHint": "应用下方凭证标签的更新；未启用平台仍会保留已保存凭证。",
    "configureBeforeEnable": "请先配置并保存该平台，再启用它。",
    "applyingConfig": "正在应用配置...",
    "restartingService": "正在重启服务以使配置生效...",
    "restartedSuccess": "配置已应用，服务已重启",
    "restartFailed": "配置已保存，但服务重启失败",
    "credentialSetupTitle": "{{platform}} 工作区设置",
    "credentialSetupSubtitle": "在这里直接配置选中平台，并在启用群组前验证凭证。",
    "stepCreateApp": "创建平台应用",
    "stepAddBotToken": "添加 Bot 令牌",
    "stepConfigureOptions": "配置平台选项",
    "stepValidate": "验证并完成",
    "expanded": "已展开",
    "collapsed": "已收起",
    "expandedStepHint": "这里复用 {{platform}} 的凭证设置模块。",
    "credentialGuide": "打开平台控制台，复制所需凭证，粘贴到下方后验证连接。",
    "openConsole": "打开 {{platform}} 控制台",
    "validateToken": "验证令牌",
    "validationSuccess": "凭证验证成功",
    "validationFailed": "凭证验证失败",
    "wechatCredentialHint": "微信使用扫码绑定，重新绑定和登录状态仍在微信设置流程中处理。",
    "slack": {
      "title": "Slack",
      "desc": "连接 Slack 工作区并启用群组。"
    },
    "discord": {
      "title": "Discord",
      "desc": "连接 Discord 机器人并选择服务器。"
    },
    "telegram": {
      "title": "Telegram",
      "desc": "连接 Telegram 机器人，支持私聊、群组和 forum topic。"
    },
    "lark": {
      "title": "飞书",
      "desc": "连接飞书工作区，实现团队协作"
    },
    "wechat": {
      "title": "微信",
      "desc": "通过微信扫码连接微信Bot"
    },
    "avibe": {
      "title": "Avibe Workbench",
      "desc": "在本机网页工作台里直接和你的 Agent 对话。"
    }
  },
  "discordConfig": {
    "eyebrow": "Discord",
    "title": "Discord 配置",
    "subtitle": "创建 Discord 应用、邀请机器人加入服务器，然后填写令牌。",
    "botToken": "机器人令牌",
    "botTokenPlaceholder": "粘贴 Discord 机器人令牌",
    "botTokenHint": "在 Discord Developer Portal 获取令牌。",
    "validateToken": "验证令牌",
    "tokenValidated": "令牌验证成功",
    "authFailed": "验证失败",
    "guild": "允许工作的服务器",
    "guildPlaceholder": "未加载到服务器",
    "guildHint": "这里决定机器人能在哪些 Discord 服务器工作；下一步再启用这些服务器里的具体群组并设置路由。",
    "selectedGuilds": "已选择 {{count}} 个",
    "selectAllGuilds": "全选",
    "clearGuilds": "清空",
    "step1Title": "创建 Discord 应用",
    "step1Description": "在开发者后台创建新应用。",
    "step1Item1": "打开 Discord Developer Portal",
    "step1Item2": "点击「新 App」并命名",
    "step1Item3": "进入「机器人」（机器人会自动创建）",
    "openDeveloperPortal": "打开开发者后台",
    "step2Title": "开启消息内容意图",
    "step2Description": "在机器人页面开启消息内容意图，权限会自动包含在邀请链接中。",
    "step2Item1": "在「机器人」中开启「消息内容意图」并保存",
    "step2Item2": "无需在此配置 Bot Permissions",
    "step2Tip": "读取消息正文必须开启消息内容意图。",
    "step3Title": "生成邀请链接",
    "step3Description": "填写 APP ID，我们会自动生成可用的 OAuth2 邀请链接。",
    "step3Item1": "进入应用的基本信息，复制 APP ID",
    "step3Item2": "粘贴到下方生成邀请链接",
    "step3Item3": "权限已预置在邀请链接中",
    "step3Item4": "打开邀请链接，选择服务器并授权",
    "clientId": "APP ID",
    "clientIdPlaceholder": "粘贴 APP ID",
    "clientIdHint": "在 Discord 应用的基本信息中可找到。",
    "inviteUrlLabel": "OAuth2 邀请链接",
    "inviteUrlPlaceholder": "填写 APP ID 后自动生成",
    "inviteUrlCopy": "复制链接",
    "inviteUrlCopied": "已复制",
    "openInviteUrl": "打开 OAuth2 邀请链接",
    "openUrlGenerator": "打开 OAuth2 URL Generator",
    "step4Title": "填写令牌并验证",
    "step4Description": "复制机器人令牌并验证访问。",
    "step4Item1": "在「机器人」中点击「重置令牌」或「View Token」",
    "step4Item2": "复制令牌并粘贴到此处",
    "step4Item3": "验证令牌并选择服务器",
    "dmTroubleshootTitle": "私信失败排查",
    "dmTroubleshoot1": "确认你的账号和机器人至少在同一个服务器中。",
    "dmTroubleshoot2": "在服务器隐私设置中开启「允许来自服务器成员的私信」。",
    "dmTroubleshoot3": "确认你没有屏蔽该机器人账号。"
  },
  "telegramConfig": {
    "eyebrow": "Telegram",
    "title": "Telegram 配置",
    "subtitle": "按步骤创建 Telegram 机器人、验证令牌，并完成群组侧配置。",
    "step1Title": "用 BotFather 创建机器人",
    "step1Description": "先在 Telegram 里通过 @BotFather 创建一个新机器人，并准备好 API 令牌。",
    "step1Item1": "在 Telegram 中打开 @BotFather",
    "step1Item2": "发送 /newbot 并按提示操作",
    "step1Item3": "给机器人设置一个显示名称",
    "step1Item4": "设置一个以 bot 结尾的用户名，并保留生成令牌的页面",
    "step1Tip": "如果你已经创建过机器人，可以直接跳到第 2 步复制令牌。",
    "openBotFather": "打开 BotFather",
    "copyNewBotCommand": "复制 /newbot",
    "copiedCommand": "已复制",
    "step2Title": "粘贴令牌并验证",
    "step2Description": "从 BotFather 复制机器人令牌，并验证 Avibe 是否能访问这个机器人。",
    "step2Item1": "在 BotFather 中打开你的机器人，进入 API Token 相关选项",
    "step2Item2": "复制令牌并粘贴到下方",
    "step2Item3": "继续之前先完成令牌验证",
    "step3Title": "在 BotFather 完成初始化设置",
    "step3Description": "把 BotFather 里几个会直接影响群聊可用性的开关先设置好，后面就不会出现“加群了但不响应”的常见问题。",
    "step3Item1": "在 BotFather 中发送下列命令，并选择刚创建的机器人",
    "step3Item2": "如果希望群里无需 @ 也能响应普通消息，把隐私模式设为 Disable",
    "step3Item3": "如果要把机器人拉进群组或 forum，确认允许加入群组",
    "step3Item4": "把常用命令写进 BotFather，用户输入 / 时就能看到命令列表",
    "step3Command1Title": "关闭群聊隐私模式",
    "step3Command1Description": "发送 /setprivacy，选中你的 bot，然后选择 Disable。否则 Telegram 只会把命令、@提及和回复转发给机器人。",
    "step3Command2Title": "允许机器人加入群组",
    "step3Command2Description": "发送 /setjoingroups，选中你的 bot，并确保设置为 Enable。否则很容易出现机器人无法正常加入目标群聊。",
    "step3Command3Title": "设置机器人命令菜单",
    "step3Command3Description": "发送 /setcommands，给 bot 配置 /start、/settings、/new、/resume 等常用命令，让新用户更容易发现可用操作。",
    "step3TipTitle": "最容易漏掉的点",
    "step3Tip": "如果你希望机器人在群里无需 @ 也能响应普通消息，/setprivacy 必须选 Disable。这是 Telegram 群聊里最常见的初始化遗漏。",
    "step3ExtraTip": "如果你只是先在私聊里使用 bot，/setjoingroups 可以稍后再配；但一旦要进群或 forum，建议这一步先完成。",
    "step4Title": "先完成配置和绑定，再发现群组",
    "step4Description": "Telegram 会话发现必须等 Avibe 启动并收到入站消息后才会发生。先完成配置并启动服务，再从 dashboard 回来启用已发现的群组或 forum chat。",
    "step4Item1": "先完成配置流程并启动服务",
    "step4Item2": "在 Summary 页面复制首个绑定命令，并在私聊里向机器人发送 `bind <code>` 或 `/bind <code>`",
    "step4Item3": "绑定完成后，在私聊里发送 /start；如果要在群组或 forum 里用，把机器人加进去并授予发消息权限；若要自动新建 topic，请给它管理员或管理 topic 的权限",
    "step4Item4": "在每个目标群组或 forum chat 里先发一条消息，之后再到 dashboard 的群组设置页刷新 Telegram 会话列表",
    "step4Tip": "Telegram 私聊不会显示在可选会话列表里。如果群里仍然只对命令或 @ 有响应，先回头检查第 3 步的 /setprivacy 是否真的已经设成 Disable。",
    "step5Title": "选择默认会话行为",
    "step5Description": "为这个 Telegram 机器人设置默认的群聊响应方式和 forum topic 行为。",
    "botToken": "机器人令牌",
    "botTokenPlaceholder": "粘贴 Telegram 机器人令牌",
    "botTokenHint": "先通过 @BotFather 创建机器人，再把令牌粘贴到这里。",
    "proxyUrl": "代理地址（可选）",
    "proxyUrlHint": "SOCKS5、SOCKS4、HTTP 或 HTTPS 代理。如 Telegram 可直接访问，请留空。",
    "validateToken": "验证令牌",
    "tokenValidated": "令牌验证成功",
    "authFailed": "验证失败",
    "requireMention": "群组中需要显式触发",
    "requireMentionHint": "开启后，机器人只会在群组中响应显式 command、@提及或回复。",
    "forumAutoTopic": "Forum 自动建 Topic",
    "forumAutoTopicHint": "对启用了 forum 的 supergroup，新顶层消息可以自动创建新的 topic，并把它作为 session 容器。这个功能要求 bot 在该群里有管理员或管理 topic 的权限。"
  },
  "larkConfig": {
    "eyebrow": "Lark / 飞书",
    "title": "配置飞书",
    "subtitle": "几步完成飞书/Lark 机器人的配置",
    "domainLabel": "平台区域",
    "domainFeishu": "飞书（中国）",
    "domainLark": "Lark（国际版）",
    "domainHint": "如果你的组织使用 feishu.cn 请选飞书，使用 larksuite.com 请选 Lark",
    "step1Title": "创建应用",
    "step1Description": "在开放平台创建企业自建应用，并添加机器人能力。",
    "step1Item1": "进入开放平台，点击「创建企业自建应用」",
    "step1Item2": "填写应用名称和描述",
    "step1Item3": "在应用能力中，添加「机器人」",
    "openPlatform": "打开开放平台",
    "step2Title": "填入凭证并验证",
    "step2Description": "从「凭证与基础信息」页面获取 App ID 和 App Secret。",
    "step2ConnectingWs": "正在建立连接...",
    "step2WsConnected": "连接已建立，现在可以在下一步配置权限和事件订阅。",
    "appId": "App ID",
    "appIdPlaceholder": "cli_xxxxxxxxxx",
    "appIdHint": "在「凭证与基础信息」页面获取",
    "appSecret": "App Secret",
    "appSecretPlaceholder": "输入 App Secret",
    "appSecretHint": "在开放平台点击显示并复制",
    "proxyUrlLarkLimitation": "提示：当前 lark-oapi 没有代理钩子，SDK 消息通道不会走此代理；身份验证及直连 REST 调用会遵循该代理。",
    "validateCredentials": "验证凭证",
    "credentialsValidated": "凭证验证通过",
    "authFailed": "验证失败",
    "chatListLabel": "机器人所在群组",
    "chatListHint": "以下是机器人已加入的群组，你可以在下一步选择启用哪些群组。",
    "step3Title": "配置权限",
    "step3Description": "在权限管理中，点击「批量导入/导出权限」开通以下权限。",
    "step3Item1": "im:message — 收发消息",
    "step3Item2": "im:message:send_as_bot — 以机器人身份发消息",
    "step3Item3": "im:message.group_at_msg — 接收群聊 @消息",
    "step3Item4": "im:message.group_msg — 接收群聊所有消息（关闭 @提及 要求时必需）",
    "step3Item5": "im:message.p2p_msg — 接收私聊消息",
    "step3Item6": "im:resource — 上传/下载文件和图片",
    "step3Item7": "im:chat — 访问群聊信息",
    "step3Item8": "im:message.reactions — 读写表情回复",
    "step3Item9": "contact:contact.base:readonly — 读取用户基本信息",
    "step3Item10": "im:message:update — 编辑/更新已发送的消息和卡片",
    "step3Item11": "im:message:recall — 撤回机器人消息",
    "step3Item12": "cardkit:card:write — 创建和管理卡片模板",
    "step3Item13": "cardkit:card:read — 读取卡片模板",
    "step3Item14": "contact:user.base:readonly — 读取用户基本信息（旧权限）",
    "step3BatchImport": "快捷配置：复制 JSON 后使用「批量导入/导出权限」",
    "step3CopyJson": "复制 JSON",
    "step3Copied": "已复制！",
    "step3BatchImportHint": "在权限管理页面，点击「批量导入/导出权限」，粘贴此 JSON 并确认即可。",
    "step3ManualList": "或逐个手动开通权限",
    "step3OpenLink": "打开权限管理",
    "step4Title": "配置事件、回调与长连接",
    "step4Description": "订阅消息事件和卡片回调，并启用长连接，让机器人能实时接收消息和响应按钮交互。",
    "step4EventTitle": "A. 事件配置",
    "step4Item1": "切换到「事件配置」标签页",
    "step4Item2": "订阅方式选择「使用长连接接收事件」",
    "step4Item3": "点击「添加事件」，搜索并订阅「接收消息 im.message.receive_v1」",
    "step4CallbackTitle": "B. 回调配置",
    "step4CallbackDesc": "回调用于接收卡片按钮点击等交互事件，不配置的话菜单按钮将无法使用。",
    "step4CallbackItem1": "切换到「回调配置」标签页",
    "step4CallbackItem2": "点击「添加回调」，搜索并添加「卡片回传交互 card.action.trigger」",
    "step4CallbackItem3": "订阅方式同样选择「使用长连接接收回调」",
    "step4Tip": "事件和回调都必须配置，否则机器人无法收到消息或响应按钮操作。配置完成后务必发布新版本。",
    "step4OpenLink": "打开事件与回调",
    "step4LongConnFaqTitle": "找不到「使用长连接接收事件」？",
    "step4LongConnFaqDesc": "如果只看到「将事件发送至开发者服务器」，说明应用尚未开启机器人能力。请回到第 1 步，进入应用 → 添加应用能力 → 开启「机器人」。保存后再回到「事件与回调」页面，就会出现「使用长连接接收事件」选项。",
    "step4LarkWsWarning": "国际版 Lark 可能没有 WebSocket 选项。如果没有这个选项，请使用中国版飞书。",
    "step5Title": "发布应用",
    "step5Description": "创建并发布版本，让应用在组织内生效。",
    "step5Item1": "创建新版本并提交发布",
    "step5Tip": "发布后，所有配置（权限、事件、机器人能力）才会正式生效。",
    "step5OpenLink": "打开版本管理"
  },
  "wechatConfig": {
    "eyebrow": "微信",
    "title": "微信设置",
    "subtitle": "使用微信扫描二维码以连接。",
    "stepStart": "开始",
    "stepScan": "扫码",
    "stepDone": "完成",
    "startDescription": "点击下方按钮生成微信登录二维码，然后用手机扫码完成连接。",
    "startLogin": "生成二维码",
    "starting": "正在生成...",
    "startFailed": "启动登录流程失败",
    "waitingForScan": "等待扫描二维码...",
    "confirmOnPhone": "已扫描！请在手机上确认。",
    "scanHint": "打开手机微信，扫描此二维码登录。",
    "connected": "微信连接成功！",
    "connectedTitle": "已连接",
    "connectionEstablished": "微信连接已建立",
    "nextStepTitle": "下一步",
    "nextStepDesc": "你现在可以在微信里发送 `/start` 来打开菜单。",
    "qrExpired": "二维码已过期，请重试。",
    "pollError": "检查状态时发生错误。",
    "errorTitle": "连接失败",
    "retry": "重试",
    "refreshQr": "刷新二维码",
    "alreadyBound": "微信已绑定",
    "alreadyBoundDesc": "你的微信账号已绑定。可以直接继续，或点击下方按钮重新绑定其他账号。",
    "rebind": "重新绑定"
  },
  "slackConfig": {
    "eyebrow": "04 — Slack",
    "title": "Slack 配置",
    "saasDescription": "授权官方 Slack 应用并等待工作区绑定",
    "selfHostDescription": "创建 Slack 应用并配置 Socket Mode 所需的令牌",
    "oauthPrompt": "在浏览器中打开 OAuth 以授权 Avibe 访问您的 Slack 工作区",
    "openSlackOAuth": "打开 Slack OAuth",
    "afterAuth": "授权后返回此处继续",
    "botToken": "Bot 用户 OAuth 令牌",
    "botTokenPlaceholder": "xoxb-...（粘贴至此处）",
    "botTokenHint": "以此开头",
    "appToken": "应用级别令牌",
    "appTokenPlaceholder": "xapp-...（粘贴至此处）",
    "appTokenHint": "以此开头",
    "validateTokens": "验证令牌",
    "tokenValidated": "令牌验证成功",
    "authFailed": "验证失败",
    "tip": "提示",
    "important": "重要",
    "viewManifest": "查看配置清单 JSON",
    "step1Title": "创建 Slack 应用",
    "step1Description": "点击下方按钮，使用预配置的权限创建新的 Slack 应用。",
    "step1Tip": "配置清单会自动填充，只需选择工作区并点击创建。",
    "createSlackApp": "创建 Slack 应用",
    "copyManifest": "复制配置清单",
    "copied": "已复制！",
    "step2Title": "获取 Bot 令牌",
    "step2Description": "将应用安装到工作区并复制 Bot 令牌。",
    "step2Item1": "在新应用中，进入「OAuth & Permissions」",
    "step2Item2": "点击「Install to [你的工作区名称]」",
    "step2Item3": "授权应用",
    "step2Item4": "复制「Bot User OAuth Token」",
    "step3Title": "获取 App 令牌",
    "step3Description": "生成用于 Socket Mode 连接的应用级别令牌。",
    "step3Item1": "进入「Basic Information」",
    "step3Item2": "滚动到「App-Level Tokens」",
    "step3Item3": "点击「Generate Token and Scopes」",
    "step3Item4": "输入名称（如 'socket-mode'）",
    "step3Item5": "添加「connections:write」权限范围，然后点击生成",
    "step3Warning": "请妥善保管此令牌，它提供完整的 Socket Mode 访问权限。",
    "step4Title": "验证并完成",
    "step4Description": "验证令牌以确保配置正确。",
    "inviteBotTitle": "邀请机器人加入频道：",
    "step4Item1": "打开一个 Slack 频道",
    "step4Item2": "输入 /invite @avibe",
    "step4Item3": "机器人现在可以接收此频道的消息了",
    "step4Tip": "也可以右键点击频道，选择「添加应用」。"
  },
  "agentDetection": {
    "eyebrow": "后端",
    "title": "安装并配置 Agent 后端",
    "subtitle": "我们会自动扫描这台电脑上装好的 Agent。把你有的打开，缺的直接装上。",
    "backendsLabel": "Agent 后端",
    "detectedHelper": "已自动扫描这台电脑——有的就打开，缺的就装上。",
    "rescan": "重新扫描",
    "configureProvider": "配置模型供应商",
    "configureProviderTitle": "配置 {{name}}",
    "installAgentNamed": "安装 {{name}}",
    "defaultBackend": "默认后端",
    "cliPath": "CLI 路径",
    "cliPathPlaceholder": "{{name}} CLI 路径...",
    "cliPathDetection": "CLI 路径检测和启用设置",
    "recommended": "（推荐）",
    "permissionHint": "OpenCode 需要配置权限以跳过审批提示。",
    "permissionHintStrong": "不设置时 OpenCode 每次工具调用都会等审批，Avibe 无法代答，Agent 会卡住。",
    "setupPermission": "在 opencode.json 写入 allow",
    "permissionGateHint": "请先在上方为 OpenCode 写入工具调用权限，才能继续。",
    "installHint": "未找到 Agent，点击自动安装。",
    "installAgent": "一键安装",
    "installing": "安装中...",
    "showOutput": "显示详情"
  },
  "backendLifecycle": {
    "title": "后端状态",
    "statusReady": "就绪",
    "statusUpdating": "升级中",
    "statusDisabled": "已停用",
    "statusError": "未安装",
    "statusUpdateAvailable": "可升级",
    "currentVersion": "当前版本",
    "latestVersion": "最新版本",
    "readyHint": "当前已是最新版本。",
    "updateHint": "可升级：{{from}} → {{to}}",
    "errorHint": "{{name}} CLI 未安装，请在卡片上点击安装以启用该后端。",
    "disabledHint": "请在卡片顶部开关中启用该后端。",
    "upgrading": "正在升级…",
    "upgradeNow": "立即升级",
    "upgradeSuccess": "升级完成",
    "upgradeFailed": "升级失败",
    "reinstall": "重新安装",
    "restart": "重启",
    "restartSuccess": "已请求重启",
    "restartFailed": "重启失败"
  },
  "channelList": {
    "eyebrow": "群组",
    "title": "群组设置",
    "subtitle": "启用群组并配置每个群组的路由",
    "refreshList": "刷新列表",
    "lastSynced": "最近同步 {{time}}",
    "refreshingCache": "正在后台刷新",
    "refreshFailed": "刷新失败，正在显示缓存群组",
    "browseAll": "浏览所有群组",
    "showingAll": "已显示工作区所有群组",
    "cantFindChannel": "找不到你想要的群组？",
    "inviteBotHint": "请先将 Bot 邀请到频道：\n1. 打开频道，点击 ⚙️ 设置 → 集成 → 添加应用\n2. 或在频道中输入 /invite @你的Bot名称",
    "discordInviteBotHint": "请确保机器人已加入服务器并具备访问频道的权限。",
    "larkInviteBotHint": "将机器人添加到群聊：打开群 → 设置 → 群机器人 → 添加机器人。",
    "telegramInviteBotHint": "先让 Telegram 群组或 forum 给机器人发过一条消息，再回来刷新列表。",
    "wechatInviteBotHint": "向微信机器人账号发送消息即可开始对话。",
    "guild": "服务器",
    "guildPlaceholder": "选择服务器",
    "guildBrowse": "当前查看的服务器",
    "guildAccess": "允许工作的服务器",
    "guildAccessCount": "已选择 {{count}} 个",
    "discordText": "文本",
    "discordNews": "公告",
    "telegramForum": "Forum",
    "telegramSupergroup": "Supergroup",
    "telegramGroup": "群组",
    "telegramChat": "会话",
    "telegramDiscoveryTitle": "Telegram 这里只展示已发现会话",
    "telegramDiscoveryInfo": "这里只有 bot 已经从入站消息里见过的 Telegram 群组和 forum。私聊不会在这里展示。",
    "telegramDiscoveryStats": "{{visible}} 个可见会话 · {{forum}} 个 forum · {{hidden}} 个隐藏私聊",
    "telegramDiscoveryEmptyTitle": "还没有发现任何 Telegram 会话",
    "telegramDiscoveryEmptyDesc": "先在 bot 已加入的 Telegram 群组或 forum 里发一条消息，再回来刷新这个页面。",
    "telegramLastSeen": "最近出现于 {{time}}",
    "enabledCount": "已启用 {{count}} 个",
    "accessPolicy": "访问策略",
    "accessPolicyHint": "只有勾选的群组才会启用",
    "accessPolicyDiscord": "服务器和群组是两层开关",
    "accessPolicyHintDiscord": "先勾选允许工作的 Discord 服务器，再在下方启用具体群组并设置路由。",
    "noChannelsFound": "未找到群组，请检查令牌或邀请机器人",
    "noChannelsLoaded": "未加载群组",
    "addTokenFirst": "请先添加机器人令牌以加载群组",
    "workingDirectory": "工作目录",
    "useGlobalDefault": "使用全局默认值",
    "backend": "后端",
    "showMessageTypes": "显示的消息类型",
    "showMessageTypesHint": "控制在 Slack 中显示哪些消息类型：\n\n• System：Agent 启动/状态消息\n• Assistant：Agent 的回复和解释\n• Toolcall：工具执行详情（单行摘要）\n\n注意：Agent 的最终结果消息会始终显示，不受此设置影响。",
    "opencodeSettings": "OpenCode 设置",
    "claudeSettings": "Claude 设置",
    "codexSettings": "Codex 设置",
    "agent": "Agent",
    "model": "模型",
    "reasoningEffort": "推理强度",
    "claudeModelPlaceholder": "例如 claude-sonnet-4-20250514",
    "codexModelPlaceholder": "例如 o3",
    "reasoningLow": "低",
    "reasoningMedium": "中",
    "reasoningHigh": "高",
    "reasoningMax": "最大",
    "reasoningXHigh": "超高",
    "searchModel": "搜索模型...",
    "settingsSaved": "设置已保存",
    "settingsSaveFailed": "保存设置失败",
    "requireMention": "需要 @提及",
    "requireMentionOn": "需要@",
    "requireMentionOff": "不用@",
    "mentionStatusOn": "需要 @",
    "mentionStatusOff": "不需要 @",
    "allChannelsTab": "全部群组",
    "filterPlaceholder": "搜索群组…",
    "rescan": "重新扫描",
    "showInactive": "显示未启用",
    "headerSummary": "全部群组 · {{active}} 已启用 · {{discovered}} 已发现",
    "headerSummaryPlatform": "{{platform}} · {{active}} 已启用 · {{discovered}} 已发现",
    "noChannelsForSearch": "没有群组匹配你的搜索。",
    "discordNeedsGuild": "请在 Discord 标签页选择一个服务器来查看其群组。",
    "platformDisabled": "平台未启用 — 请在设置中启用后再查看群组。"
  },
  "summary": {
    "eyebrow": "概览",
    "title": "检查并完成",
    "subtitle": "确认设置并启动 Avibe",
    "mode": "模式",
    "platform": "平台",
    "slackBotToken": "Slack Bot 令牌",
    "slackAppToken": "Slack App 令牌",
    "discordBotToken": "Discord 机器人令牌",
    "telegramBotToken": "Telegram 机器人令牌",
    "larkAppId": "飞书 App ID",
    "wechatBotToken": "微信 Bot Token",
    "discordGuild": "Discord 服务器",
    "notSet": "未设置",
    "enabledAgents": "已启用的 Agent",
    "channelsConfigured": "已配置的群组",
    "requireMention": "需要 @提及",
    "requireMentionHint": "机器人仅在群组中被 @提及时响应",
    "autoUpdate": "自动更新",
    "autoUpdateHint": "系统空闲时自动安装更新",
    "usageTips": "快速上手",
    "tipStartCommand": "使用 /start 开始",
    "tipStartCommandDesc": "在任意已启用的会话中输入 /start 打开控制面板。",
    "tipAgentSwitch": "即时切换 Agent",
    "tipAgentSwitchDesc": "在消息前加 AgentName: 前缀即可路由到指定 Agent，如 \"Plan: 设计 API\"",
    "tipThread": "Thread = 会话",
    "tipThreadDesc": "每个 Thread 是独立会话，可开多个 Thread 并行执行任务。",
    "finishAndStart": "完成并启动",
    "serviceRunning": "Avibe 已启动！",
    "goToDashboard": "前往控制台",
    "bindCodeTitle": "您的首个绑定码",
    "bindCodeDesc": "在私聊中向机器人发送以下命令，成为第一个管理员：",
    "bindCodeCommand": "bind",
    "bindCodeCopied": "已复制！"
  },
  "dashboard": {
    "title": "仪表盘",
    "subtitle": "查看本地 Avibe 节点的实时状态。",
    "searchPlaceholder": "快速搜索…",
    "heroTitle": "Avibe 运行概览",
    "runningTitle": "Avibe 正在运行",
    "stoppedTitle": "Avibe 已停止",
    "startedAt": "{{time}} 启动（{{relative}}）",
    "levelHealthy": "健康",
    "levelAttention": "需要关注",
    "metricPlatforms": "活跃平台",
    "metricPlatformsHint": "已连接的平台数 / 平台目录总数",
    "metricGroups": "活跃群组",
    "metricGroupsHint": "总共发现了 {{count}} 个群组",
    "metricUsers": "已绑定用户",
    "metricUsersHint": "允许访问当前节点的用户数",
    "metricCloud": "Avibe Cloud",
    "metricCloudConnected": "已连接",
    "metricCloudConfigured": "已配置",
    "metricCloudDisconnected": "未开启",
    "metricCloudHintConnected": "{{url}} 已可通过 avibe.bot 访问",
    "metricCloudHintConfigured": "启动连接器后即可远程访问当前节点",
    "metricCloudHintDisconnected": "推荐开启 cloud 访问，让当前节点随时可达",
    "metricHealth": "健康告警",
    "metricHealthHealthy": "所有检查均正常",
    "metricHealthIssues": "存在告警或失败项需要处理",
    "platformOverviewTitle": "已连接平台",
    "platformOverviewSubtitle": "查看哪些消息平台已经在线，并快速跳转到对应的群组路由配置。",
    "platformGroupsHint": "{{active}} 个已启用 / {{discovered}} 个已发现群组",
    "platformNoGroupsHint": "该平台仅支持私聊",
    "manageAll": "统一管理",
    "manageRoute": "管理",
    "configure": "配置",
    "connected": "已连接",
    "notConfigured": "未配置",
    "recentActivityTitle": "最近活动",
    "recentActivitySubtitle": "来自主服务日志的最新运行事件。",
    "recentActivityEmpty": "还没有最近的服务日志事件。",
    "openMessaging": "打开消息设置",
    "groupsAndUsersTitle": "群组与用户",
    "groupsAndUsersHint": "群组路由和用户访问现在已经拆成独立页面，可以分别管理。",
    "settingsShortcutTitle": "设置快捷入口",
    "settingsShortcutHint": "快速进入 backend 默认值和 service 级配置。",
    "serviceStatus": "服务状态",
    "mode": "模式",
    "platform": "平台",
    "workspace": "工作区",
    "gateway": "网关",
    "health": "健康状态",
    "allSystemsOperational": "所有系统正常运行",
    "issuesDetected": "检测到问题",
    "globalPolicy": "全局设置",
    "defaultBackend": "默认后端",
    "slackWorkspace": "Slack 工作区",
    "messageHandling": "消息处理",
    "requireMention": "需要 @提及",
    "requireMentionHint": "机器人仅在被 @提及时响应",
    "ackMode": "确认模式",
    "ackModeHint": "机器人如何确认收到消息。当前模式不可用时，会自动降级到下一个模式。",
    "ackReaction": "👀 表情回应",
    "ackTyping": "✏️ 正在输入...",
    "ackMessage": "💬 消息回复",
    "audioTranscription": "语音转文字",
    "audioTranscriptionHint": "在把消息交给 Agent 前，先转写支持的语音附件",
    "audioTranscriptionRequiresVibeCloud": "请先将 Avibe 配对到 Avibe Cloud，再启用语音转文字",
    "audioTranscriptionRequiresRemoteAccessTooltip": "请先在远程访问页将本设备配对到 avibe.bot，然后即可启用语音转文字。",
    "audioTranscriptEcho": "回显转写结果",
    "audioTranscriptEchoHint": "语音识别成功后，把转写文本也发回当前对话",
    "errorRetryLimit": "错误重试次数",
    "errorRetryLimitHint": "当 LLM 流式响应出错时，自动发送 'continue' 重试（0 = 不重试）",
    "showDuration": "显示耗时",
    "showDurationHint": "在结果消息中显示任务耗时",
    "includeTimeInfo": "携带时间信息",
    "includeTimeInfoHint": "在发给 Agent 的消息前添加当前本地时间（精确到秒，包含 UTC 时区偏移）",
    "includeUserInfo": "携带用户信息",
    "includeUserInfoHint": "在发给 Agent 的消息前添加 [用户名<用户ID>]",
    "replyEnhancements": "快捷回复按钮",
    "replyEnhancementsHint": "允许 Agent 在结果消息末尾添加可点击的快捷回复按钮",
    "showPagesPrompt": "Show Page 引导",
    "showPagesPromptHint": "提示 Agent 何时以及如何使用可视化 Show Page。关闭后 vibe show CLI 仍然可用。",
    "chatMessageFontSize": "聊天消息字号",
    "chatMessageFontSizeHint": "Web UI 聊天页里用户和 Agent 消息气泡的文字大小",
    "slackLinkPreviews": "关闭 Slack 链接预览",
    "slackLinkPreviewsHint": "关闭 Avibe 发送到 Slack 的 URL 和媒体预览卡片",
    "allowedChannels": "允许的群组",
    "consoleServer": "控制台服务器",
    "host": "主机",
    "port": "端口",
    "diagnostics": "诊断",
    "logLevel": "日志级别",
    "configFile": "配置文件",
    "logs": "日志",
    "uiRestartMessage": "已保存，正在重启 UI 服务器...",
    "mainServiceRestarted": "已保存，主服务已重启",
    "versionAndUpdate": "版本与更新",
    "currentVersion": "当前版本",
    "latestVersion": "最新版本",
    "checkUpdate": "检查更新",
    "checking": "检查中...",
    "updateAvailable": "有新版本",
    "upgradeNow": "立即更新",
    "upgrading": "更新中...",
    "upToDate": "已是最新版本",
    "checkFailed": "检查失败",
    "upgradeSuccess": "更新成功！",
    "upgradeFailed": "更新失败",
    "updateHint": "从 {{from}} 更新到 {{to}}",
    "restarting": "正在重启...",
    "autoUpdate": "自动更新",
    "autoUpdateHint": "空闲时自动安装"
  },
  "doctor": {
    "title": "系统状态",
    "copyReport": "复制报告",
    "runChecks": "运行检查",
    "passed": "通过",
    "warnings": "警告",
    "failed": "失败"
  },
  "logs": {
    "title": "系统日志",
    "autoRefreshOn": "自动刷新已开启",
    "autoRefresh": "自动刷新",
    "searchPlaceholder": "按消息、记录器或时间戳搜索日志...",
    "allLevels": "所有级别",
    "error": "错误",
    "warning": "警告",
    "info": "信息",
    "debug": "调试",
    "all": "全部",
    "entriesCount": "{{filtered}} / {{total}} 条",
    "totalInFile": "（文件中共 {{total}} 条）",
    "allFiles": "全部日志文件",
    "jumpToLatest": "跳转到最新",
    "loadingLogs": "加载日志中...",
    "noLogsAvailable": "暂无日志",
    "noLogsMatch": "没有匹配的日志",
    "sources": {
      "all": "全部",
      "service": "主服务日志",
      "serviceStdout": "主服务标准输出",
      "serviceStderr": "主服务错误输出",
      "uiStdout": "UI 标准输出",
      "uiStderr": "UI 错误输出"
    }
  },
  "language": {
    "switchLanguage": "语言",
    "en": "English",
    "zh": "中文"
  },
  "directoryBrowser": {
    "title": "选择项目文件夹",
    "select": "选择此目录",
    "cancel": "取消",
    "empty": "没有子目录",
    "hiddenFiles": "隐藏文件",
    "newFolder": "新建文件夹",
    "newFolderPlaceholder": "文件夹名称",
    "createHere": "在这里新建文件夹…",
    "favorites": "收藏",
    "favoritesHome": "主目录",
    "favoritesDesktop": "桌面",
    "favoritesDocuments": "文稿",
    "favoritesDownloads": "下载",
    "favoritesApplications": "应用程序",
    "back": "后退",
    "forward": "前进",
    "newFolderExists": "已存在同名文件夹。",
    "editPath": "手动输入路径",
    "editPathPlaceholder": "输入绝对路径,Enter 跳转",
    "editPathDone": "完成",
    "pathNotFound": "路径不存在或不可访问。"
  },
  "wechat": {
    "userBound": "您的微信账号已自动配置为机器人所有者。",
    "noChannels": "微信使用私聊模式，无需配置群组。",
    "setupComplete": "微信机器人已连接！您的账号已自动配置。",
    "manageUserSettings": "管理用户设置"
  },
  "userList": {
    "title": "私聊",
    "subtitle": "来自各 IM 平台的已绑定用户 · 单独路由 & 管理员权限。",
    "noUsers": "暂无绑定用户。创建绑定码并分享给用户。",
    "filterPlaceholder": "搜索用户…",
    "allUsers": "全部用户",
    "showDisabled": "显示已停用",
    "settingsSaved": "用户设置已保存",
    "settingsSaveFailed": "保存用户设置失败",
    "admin": "管理员",
    "user": "用户",
    "bot": "机器人",
    "boundAt": "绑定于",
    "boundAgo": "绑定于 {{ago}}",
    "removeUser": "移除",
    "removeConfirm": "确定要移除此用户吗？此操作不可撤销。",
    "lastAdminDemoteWarning": "你正在取消最后一个管理员身份。继续后将进入“无管理员约束”状态，任何已绑定用户都可操作管理员菜单。是否继续？",
    "lastAdminRemoveWarning": "你正在移除最后一个管理员。继续后将进入“无管理员约束”状态，任何已绑定用户都可操作管理员菜单。是否继续？",
    "cannotRemoveLastAdmin": "无法移除最后一个管理员",
    "adminToggled": "管理员状态已更新",
    "userRemoved": "用户已移除",
    "noUsersForSearch": "没有匹配的用户。",
    "inheritsGlobal": "— 继承全局 —"
  },
  "bindCode": {
    "title": "绑定码",
    "badge": "绑定码",
    "inviteTitle": "从任意平台邀请新用户",
    "inviteDescription": "生成一个一次性绑定码，让用户从 Slack/Discord/Telegram 等平台私信机器人发送该码，即可按照下方路由规则绑定到此 Avibe 实例。",
    "noActiveCode": "暂无可用绑定码",
    "noActiveHint": "生成一个邀请用户。",
    "activeCodeLabel": "可用绑定码",
    "expiresIn": "{{time}} 后过期",
    "noExpiry": "无过期",
    "newCode": "新建绑定码",
    "createCode": "创建绑定码",
    "revoke": "撤销",
    "oneTime": "一次性",
    "expiring": "有效期",
    "active": "可用",
    "used": "已使用",
    "expired": "已过期",
    "inactive": "已失效",
    "usedBy": "已使用 {{count}} 次",
    "expiresAt": "{{date}} 到期",
    "copy": "复制",
    "copied": "已复制！",
    "delete": "删除",
    "generate": "生成",
    "codeType": "类型",
    "expirationDate": "到期日期",
    "created": "绑定码已创建",
    "deleted": "绑定码已删除",
    "noCodes": "暂无绑定码，创建一个开始使用。",
    "usageTitle": "绑定码如何使用",
    "usageHint": "把可用绑定码发给用户，并让用户私信机器人发送 `bind <code>`。`/bind <code>` 也仍然可用。用户必须先完成绑定才可和bot私聊。仅管理员用户才可操作bot菜单进行设置。",
    "viewUnavailable": "不可用（{{count}}）",
    "viewMore": "+ 还有 {{count}} 个",
    "unavailableTitle": "不可用的绑定码",
    "allCodesTitle": "所有绑定码",
    "noAvailableCodes": "暂无可用绑定码，请先创建新的绑定码。",
    "noUnavailableCodes": "暂无不可用绑定码。",
    "close": "关闭"
  },
  "agents": {
    "title": "Agents",
    "subtitle": "已登记 {{count}} 个 Agent。",
    "showDisabled": "显示已禁用",
    "statusEnabled": "已启用",
    "statusDisabled": "已停用",
    "newAgent": "新建 Agent",
    "import": "导入",
    "importFromClaude": "从 Claude 导入",
    "importFromCodex": "从 Codex 导入",
    "importFromOpenCode": "从 OpenCode 导入",
    "importSuccess": "已导入 {{imported}} 个,跳过 {{skipped}} 个。",
    "importFailed": "导入失败:{{error}}",
    "importNoneFound": "磁盘上没有找到可导入的 {{backend}} Agent。",
    "renameSuccess": "Agent 已重命名",
    "renameKeptOld": "Agent 已重命名(旧名因被引用而保留)",
    "searchPlaceholder": "搜索 Agent…",
    "backendFilter": "Backend",
    "backendAll": "全部",
    "noConfig": "未配置模型或系统提示词",
    "empty": "还没有 Agent。先创建一个,再开始对话。",
    "noSearchMatch": "没有匹配的 Agent。",
    "makeDefault": "设为默认",
    "deleteConfirm": "确认删除 Agent \"{{name}}\"？此操作不可撤销。",
    "deleteInUse": "Agent \"{{name}}\" 正被一个或多个频道使用,无法删除。",
    "detail": {
      "enabled": "已启用",
      "enabledHint": "关掉后此 Agent 不会被新会话选用,已运行的会话不受影响",
      "defaultTitle": "默认 Agent",
      "defaultHint": "未指定 Agent 的新会话和 IM 消息都会路由到这个 Agent。",
      "defaultActive": "默认",
      "setDefault": "设为默认",
      "defaultNeedsEnabled": "请先启用该 Agent 再设为默认。",
      "defaultSet": "{{name}} 已设为默认 Agent。",
      "name": "名称",
      "description": "描述",
      "descriptionPlaceholder": "这个 Agent 用来做什么…",
      "backend": "后端",
      "backendLocked": "创建时确定 · 不可改",
      "model": "模型",
      "modelPlaceholder": "选择或输入模型",
      "modelEmpty": "找不到匹配的模型,可以直接输入。",
      "modelDefault": "使用后端默认",
      "effort": "推理强度",
      "systemPrompt": "系统提示词",
      "systemPromptCount": "~{{count}} tokens",
      "systemPromptExpand": "展开编辑器",
      "systemPromptEditorHint": "在更大的编辑器里编写系统提示词，并实时预览 Markdown。",
      "systemLocked": "系统 Agent 不可删除,仍可调整模型、Effort 与系统提示词。",
      "run": "运行",
      "nameLocked": "用作引用 ID,创建后不可改"
    },
    "runDialog": {
      "title": "用此 Agent 开一个会话",
      "description": "选个项目,会在项目下新建会话并立即跳到对话页。",
      "projectLabel": "项目",
      "noProject": "还没有项目 — 先在侧栏 + 按钮建一个。",
      "cancel": "取消",
      "open": "开始会话",
      "opening": "创建会话中…"
    },
    "create": {
      "title": "新建 Agent",
      "body": "选择后端,命名 Agent,微调模型与 Effort。后端在创建后不可更改。",
      "backend": "后端",
      "name": "名称",
      "namePlaceholder": "Agent 名称（例如 reviewer）",
      "description": "描述",
      "descriptionPlaceholder": "这个 Agent 用来做什么…",
      "model": "模型",
      "modelPlaceholder": "例如 claude-sonnet-4-6",
      "effort": "Effort",
      "systemPrompt": "系统提示词",
      "systemPromptHint": "可选",
      "systemPromptPlaceholder": "可选。会拼接到使用本 Agent 的每一段对话前。",
      "submit": "创建 Agent"
    }
  },
  "editor": {
    "modeLabel": "编辑器模式",
    "edit": "编辑",
    "preview": "预览",
    "markdownHint": "支持 Markdown",
    "previewEmpty": "暂无可预览内容。"
  },
  "agentsMd": {
    "title": "编辑 AGENTS.md",
    "description": "编辑此项目的 AGENTS.md —— 交给 Agent 的项目级指令文件。",
    "placeholder": "用 Markdown 写下这个项目的 AGENTS.md…",
    "loading": "加载中…",
    "loadedFromClaude": "本项目还没有 AGENTS.md，已载入 CLAUDE.md 的内容作为起点；保存后会写入 AGENTS.md。",
    "symlinkToggle": "将 CLAUDE.md 迁移至 AGENTS.md 并创建软链接同步二者（推荐）",
    "symlinkMigrateWarning": "当前的 CLAUDE.md 文件将被删除，并替换为指向 AGENTS.md 的软链接。",
    "saved": "AGENTS.md 已保存",
    "savedSymlinkFailed": "AGENTS.md 已保存，但软链接创建失败。"
  },
  "projectSettings": {
    "title": "项目设置",
    "description": "设置该项目的工作目录,以及在该项目下新建会话默认使用的 Agent。",
    "workdir": {
      "label": "工作目录",
      "hint": "Agent 将在该工作目录下工作。",
      "unset": "未配置文件夹"
    },
    "defaultAgent": {
      "label": "默认 Agent",
      "hint": "在该项目下新建的会话会默认使用这个 Agent、模型和推理强度。保持「跟随全局默认」则使用全局默认 Agent。修改它不会影响已有会话。",
      "followGlobal": "跟随全局默认"
    },
    "guidance": {
      "label": "项目引导提示",
      "button": "编辑项目引导提示",
      "hint": "项目级指令(AGENTS.md),会在该项目的每个会话中提供给 Agent。",
      "noFolder": "请先为该项目设置文件夹,才能编辑引导提示。"
    }
  },
  "globalPrompts": {
    "button": "全局提示词",
    "title": "全局提示词",
    "description": "分别编辑各 backend 的全局指令文件，会加在本机所有 agent 系统提示词的最前面。",
    "placeholder": "用 Markdown 写下该 backend 的全局指令…",
    "tipEffect": "会加在 {{backend}} 所有 agent 系统提示词的最前面，新会话自动生效。",
    "missingHint": "该文件尚不存在，保存后会自动创建",
    "readError": "无法读取该文件（不是有效的 UTF-8），请先在磁盘上修复后再编辑。",
    "save": "保存",
    "sync": "一键同步到全部 backend",
    "syncConfirm": "用 {{backend}} 的当前内容覆盖全部三个 backend 的全局提示词文件？",
    "saved": "已保存 {{backend}} 的全局提示词。",
    "synced": "已同步到全部 backend。",
    "discardConfirm": "有未保存的修改，确定关闭并丢弃吗？"
  },
  "skills": {
    "title": "技能",
    "subtitle": "跨各 Agent 后端管理全局与项目级技能 · 基于 askill。",
    "scopeGlobal": "全局",
    "scopeProject": "项目",
    "searchPlaceholder": "搜索已安装技能…",
    "searchProjectPlaceholder": "搜索本项目的技能…",
    "backendFilter": "Backend",
    "backendAll": "全部",
    "browseRegistry": "浏览注册表",
    "addSkill": "添加技能",
    "empty": "还没有安装技能。可从 GitHub、.zip 或注册表添加。",
    "noSearchMatch": "没有匹配的技能。",
    "notInstalled": "尚未安装 askill",
    "notInstalledHint": "askill 驱动 Skills 页面。可现在安装，或在 Avibe 更新时自动安装。",
    "installAskill": "安装 askill",
    "installing": "安装中…",
    "installFailed": "安装 askill 失败。",
    "projectNoFolder": "此项目未配置文件夹，没有项目级技能——仅显示全局技能。",
    "removeConfirm": "移除技能 \"{{name}}\"？这会从当前范围解除链接。",
    "removeSuccess": "已移除 {{name}}。",
    "addSuccess": "已安装 {{count}} 个技能。",
    "updateSuccess": "已更新 {{name}}。",
    "scopeGlobalPath": "~/.agents/skills · 所有项目共享",
    "projectSectionLocal": "项目技能",
    "projectSectionLocalHint": "仅安装在本仓库",
    "projectSectionGlobal": "也可用 · 继承自全局",
    "projectSectionGlobalHint": "请在「全局」标签页管理",
    "globalBadge": "全局",
    "updateBadge": "更新",
    "globalAlsoAvailable": "全局技能在这里也可用",
    "picker": {
      "title": "切换项目",
      "openFolder": "打开项目文件夹…"
    },
    "detail": {
      "subtitleGlobal": "Agent 技能 · 已全局安装",
      "subtitleProject": "Agent 技能 · {{project}}",
      "source": "来源",
      "viewOnGithub": "在 GitHub 查看",
      "quality": "AI 质量",
      "availableTo": "可用于",
      "commands": "命令",
      "openSkillMd": "打开 SKILL.md",
      "remove": "移除",
      "update": "更新"
    },
    "addDialog": {
      "title": "添加技能",
      "subtitle": "从 GitHub 仓库，或上传本地 .zip 包。",
      "githubTab": "GitHub 链接",
      "zipTab": "上传 .zip",
      "urlLabel": "GitHub 链接或 slug",
      "urlPlaceholder": "github.com/owner/repo 或 gh:owner/repo@skill",
      "fetch": "获取",
      "package": "技能包",
      "dropzoneHint": "把 .zip 拖到这里，或点击选择。",
      "localNote": "由 askill 在本地解包安装 — 不会发送给任何第三方服务。",
      "replace": "更换",
      "found": "发现 {{count}} 个技能 · 勾选要安装的",
      "installTo": "安装到",
      "backends": "为这些 Backend 安装",
      "cancel": "取消",
      "install": "安装 {{count}} 个技能",
      "installing": "安装中…",
      "fetchFirst": "输入来源并获取以查看其技能。"
    },
    "browse": {
      "title": "浏览 askill 注册表",
      "subtitle": "来自 askill.sh、经 AI 评审的技能。",
      "searchPlaceholder": "搜索技能…",
      "resultsCount": "{{count}} 条结果",
      "showing": "显示 {{shown}}/{{total}} · 按 AI 评分排序",
      "tagAll": "全部",
      "add": "添加",
      "installed": "已安装",
      "done": "完成",
      "empty": "没有匹配你搜索的技能。"
    }
  },
  "harness": {
    "title": "Harness",
    "subtitle": "定时任务、Watch、Webhook 及其运行历史。",
    "soon": "敬请期待",
    "create": "创建",
    "searchPlaceholder": "搜索…",
    "statusFilter": {
      "all": "全部",
      "enabled": "仅启用",
      "disabled": "仅禁用"
    },
    "filtered": "{{shown}}/{{total}}",
    "selectPrompt": "选择左侧条目查看完整配置。",
    "emptyTasks": "暂无定时任务。让 Agent 帮你创建一个。",
    "emptyWatches": "没有正在运行的 Watch。让 Agent 帮你开启一个。",
    "emptyRuns": "暂无运行记录。任务或 Watch 触发后会出现在这里。",
    "webhooksSoon": "Webhook 即将上线",
    "webhooksSoonBody": "入站 HTTP 触发将在后续版本中落地。Tasks 和 Watches 已覆盖定时与事件驱动的运行。",
    "unknownSchedule": "未知计划",
    "schedule": {
      "cron": "周期 · {{value}}",
      "oneShot": "一次性 · {{value}}"
    },
    "pageLabel": "第 {{page}} 页",
    "runtime": {
      "running": "运行中",
      "paused": "已暂停",
      "idle": "空闲",
      "enabled": "已启用",
      "disabled": "已禁用"
    },
    "tabs": {
      "tasks": "Tasks",
      "watches": "Watches",
      "webhooks": "Webhooks",
      "runs": "Runs"
    },
    "detail": {
      "schedule": "计划",
      "agent": "Agent",
      "message": "消息",
      "lastRun": "上次运行",
      "id": "ID",
      "command": "命令",
      "cwd": "工作目录",
      "mode": "模式",
      "followUp": "跟进消息",
      "runtime": "运行时",
      "lastError": "上次错误",
      "type": "类型",
      "definition": "定义",
      "result": "结果",
      "error": "错误",
      "timing": "时间线",
      "nextRun": "下次运行",
      "session": "关联会话",
      "sessionPolicy": "会话模式",
      "delivery": "投递目标",
      "openInAgents": "在 Agents 打开",
      "agentInherit": "继承默认 Agent",
      "sessionNone": "未绑定会话",
      "effort": "推理 {{value}}"
    },
    "sessionPolicy": {
      "createPerRun": "每次运行新建会话",
      "createOnce": "建一次后复用",
      "existing": "复用同一会话"
    },
    "delivery": {
      "channel": "频道",
      "thread": "线程",
      "session": "默认 · 会话所在位置"
    },
    "row": {
      "enable": "启用",
      "disable": "禁用",
      "delete": "删除",
      "deleteConfirmTask": "确定要删除「{{name}}」吗?该任务将不再运行。",
      "deleteConfirmWatch": "确定要删除「{{name}}」吗?Watch 会被立即停止。"
    },
    "createDialog": {
      "title": "和 Agent 对话来创建后台任务",
      "subtitle": "写 cron 是工具时代,描述意图是同事时代",
      "body": "后台任务 / 等待器 / 未来的 Webhook 都通过和 Agent 对话创建。这样 Agent 能从你的真实意图里组装 vibe task add / vibe watch add 的参数,你不用记 cron 语法。",
      "example": "举例:「每天工作日早上 9:30 总结一下 ops 频道昨天的活动,发到 #ops。」Agent 会自动转换成 cron 表达式 + 注入 prompt 模板。",
      "projectLabel": "在哪个项目下创建",
      "noProject": "还没有项目 — 先到侧栏 + 按钮建一个吧。",
      "cancel": "取消",
      "open": "打开会话引导我创建",
      "opening": "创建会话中…",
      "kindTask": "后台任务",
      "kindWatch": "等待器",
      "promptTask": "请帮我创建一个后台任务。我的需求是:[在这里描述,例如「每个工作日早上 9:30 总结昨天的 PR 评论」]。请确认参数后用 vibe task add 创建,并把任务挂到当前项目。",
      "promptWatch": "请帮我创建一个等待器(watch)。我希望监听:[在这里描述,例如「等 CI 工作流 #1234 跑完」]。条件满足后通知我。请确认参数后用 vibe watch add 创建。"
    }
  },
  "chat": {
    "back": "返回",
    "untitled": "未命名会话",
    "titlePlaceholder": "会话标题",
    "pickAgent": "选择 Agent",
    "noAgents": "暂无已启用的 Agent。请先在 Agents 页创建。",
    "modelPlaceholder": "模型覆盖",
    "changesPersist": "下次回复时生效",
    "sessionOverrideHint": "新建会话直接进入,所有选项继承项目默认;在这里改即时生效,只覆盖本会话",
    "notFound": "未找到该会话。",
    "missingSessionId": "URL 缺少 session id。",
    "transcriptEmpty": "在下方输入消息开始对话",
    "scrollToBottom": "回到最新",
    "streaming": "实时输出中",
    "thinking": "思考中…",
    "notifyLabel": "通知",
    "collapse": "收起",
    "turnInProgress": "当前回合还在进行中，请等待回复后再发送。",
    "stopFailed": "没能联系到 Agent 来停止，它可能还在运行。",
    "source": {
      "scheduled": "定时任务",
      "watch": "Watch 监听",
      "webhook": "Webhook",
      "harness": "自动触发"
    },
    "picker": {
      "agent": "Agent",
      "model": "模型",
      "effort": "思考强度",
      "newAgent": "新建 Agent",
      "noModels": "未找到模型",
      "effortOptions": {
        "minimal": "极简",
        "low": "低",
        "medium": "中",
        "high": "高",
        "xhigh": "极高",
        "max": "最高"
      }
    },
    "compose": {
      "placeholder": "输入消息…",
      "placeholderBusy": "Agent 处理中，输入将排队…",
      "hint": "Enter 发送",
      "send": "发送",
      "queueSend": "排队发送",
      "sending": "发送中…",
      "stop": "停止",
      "attach": "添加附件",
      "voice": "语音输入",
      "stopRecording": "停止录音",
      "cancelRecording": "取消录音",
      "removeAttachment": "移除",
      "dropOverlay": "拖放文件以添加"
    },
    "media": {
      "preview": "预览",
      "download": "下载"
    },
    "viewer": {
      "close": "关闭",
      "previous": "上一张",
      "next": "下一张",
      "loading": "加载中…",
      "error": "无法加载该文件。",
      "tooLarge": "文件过大，无法预览，请直接下载。",
      "csvTruncated": "仅显示前 {{count}} 行",
      "csvColsTruncated": "显示前 {{shown}} 列，共 {{total}} 列"
    },
    "queue": {
      "title": "排队中 · {{count}}",
      "sendNow": "立即发送",
      "remove": "移出队列"
    }
  }
}
