{
  "title": "设置",
  "nav": {
    "appearance": "外观",
    "providers": "模型配置",
    "execution": "智能体与流水线",
    "browser": "浏览器自动化",
    "search": "网络搜索",
    "storage": "数据与存储",
    "users": "用户管理",
    "remote": "远程访问"
  },
  "appearance": {
    "title": "外观",
    "theme": "主题",
    "themeDesc": "选择界面视觉样式",
    "language": "语言",
    "languageDesc": "选择界面显示语言",
    "modes": {
      "system": "跟随系统",
      "light": "浅色",
      "dark": "深色",
      "cyberpunk": "赛博朋克",
      "mono": "黑白"
    }
  },
  "setupGuide": {
    "title": "欢迎 — 配置你的 LLM",
    "subtitle": "Markus 至少需要配置一个 LLM 提供商才能工作。选择一种入门方式：",
    "skip": "跳过",
    "fromEnv": {
      "step": "1",
      "title": "从环境变量读取",
      "description": "自动检测来自 .env 或系统环境的 API Key。",
      "noKeysHint": "未找到 API Key。请设置诸如 <code>ANTHROPIC_API_KEY</code> 或 <code>OPENAI_API_KEY</code> 等环境变量，然后重启服务器。"
    },
    "fromOllama": {
      "step": "2",
      "title": "本地 Ollama",
      "description": "自动检测本地运行的 Ollama 服务并选择模型。"
    },
    "fromOpenClaw": {
      "step": "3",
      "title": "从 OpenClaw 配置导入",
      "description": "从已有的 OpenClaw 安装导入模型配置。"
    },
    "manual": {
      "step": "4",
      "title": "手动配置",
      "description": "直接编辑 <code>~/.markus/markus.json</code>，然后重启服务器。"
    },
    "browserExtension": {
      "step": "5",
      "title": "安装浏览器自动化扩展",
      "description": "让 AI 智能体能直接操控 Chrome 浏览网页、测试应用，无需每次弹窗授权。",
      "notChrome": "当前浏览器不是 Chrome，请在 Chrome 中打开 Markus 以安装扩展。",
      "alreadyConnected": "扩展已连接，无需操作。",
      "downloadBtn": "下载扩展",
      "openChromeBtn": "打开扩展页面",
      "loadHint": "解压后，在 Chrome 扩展页面开启「开发者模式」→「加载已解压的扩展程序」→ 选择解压文件夹"
    },
    "applyProviders": "应用 {{count}} 个提供商",
    "foundPrefix": "已找到："
  },
  "systemStatus": {
    "title": "系统状态",
    "status": "状态",
    "healthy": "正常",
    "version": "版本",
    "activeAgents": "活跃智能体"
  },
  "defaultProvider": {
    "title": "默认 LLM 提供商",
    "primaryProvider": "主提供商",
    "primaryProviderDesc": "除非另行指定，否则用于所有智能体交互",
    "noProviders": "尚未配置提供商",
    "updated": "默认提供商已更新为 {{name}}",
    "autoFallback": "自动切换模型",
    "autoFallbackDesc": "启用后，当主模型出错时自动尝试其他提供商/模型。禁用后，仅使用所选模型 — 出错时不会自动切换。"
  },
  "modelProviders": {
    "title": "模型提供商与定价",
    "disabled": "已禁用",
    "notConfigured": "点击配置",
    "addProvider": "+ 添加提供商",
    "addNewProvider": "添加新提供商",
    "providerName": "提供商名称",
    "providerNameHint": "使用 anthropic、openai、google、ollama 表示官方接口；其他名称将按 OpenAI 兼容 API 处理",
    "apiKey": "API Key",
    "apiKeyPlaceholder": "留空则保留当前值",
    "baseUrl": "Base URL（可选）",
    "baseUrlLabel": "Base URL",
    "defaultModel": "默认模型",
    "contextWindow": "上下文窗口",
    "maxOutputTokens": "最大输出 Token",
    "inputCost": "$/1M 输入",
    "outputCost": "$/1M 输出",
    "editProvider": "编辑提供商",
    "deleteConfirm": "删除提供商「{{name}}」？",
    "providerAdded": "已添加提供商 {{name}}",
    "notConfiguredHint": "尚未配置。请使用下方「添加提供商」按钮，或在环境变量中设置 API Key。",
    "quickSetupHint": "输入 API Key 即可立即启用此提供商。",
    "quickSetupPlaceholder": "在此粘贴 API Key...",
    "quickSetupSubmit": "启用",
    "quickSetupSaving": "启用中...",
    "quickSetupSuccess": "{{name}} 已就绪！",
    "pricingTitle": "定价（每百万 Token）",
    "input": "输入",
    "output": "输出",
    "cacheRead": "缓存读取",
    "cacheWrite": "缓存写入",
    "availableModels": "可用模型",
    "addModel": "+ 添加模型",
    "modelId": "模型 ID",
    "displayName": "显示名称",
    "reasoning": "推理",
    "vision": "视觉",
    "custom": "自定义",
    "use": "使用",
    "switching": "正在切换…",
    "model": "模型",
    "ctxTokens": "{{size}}K 上下文",
    "costPerMillion": "${{input}}/{{output}} 每百万",
    "badgeDefault": "默认",
    "badgeOAuth": "OAuth",
    "clickToDisable": "点击禁用",
    "clickToEnable": "点击启用",
    "maxOutput": "最大输出",
    "kTokens": "{{k}}K tokens",
    "notApplicable": "不适用",
    "baseUrlDisplayDefault": "默认",
    "active": "当前",
    "deleteCustomModelTitle": "删除自定义模型",
    "costPair": "${{input}}/{{output}}",
    "adding": "正在添加…",
    "costPerMillionIn": "$/1M 入：",
    "costPerMillionOut": "出：",
    "placeholderContextTokens": "上下文（tokens）",
    "placeholderProviderName": "例如 deepseek、openrouter、my-provider",
    "placeholderApiKeySk": "sk-...",
    "placeholderBaseUrl": "https://api.example.com/v1",
    "placeholderDefaultModel": "例如 deepseek-chat、gpt-4o",
    "placeholderContextExample": "例如 128000",
    "placeholderMaxOutputExample": "例如 16384",
    "placeholderCostInput": "例如 1",
    "placeholderCostOutput": "例如 5",
    "addProviderSubmit": "添加提供商",
    "saveFailed": "保存失败",
    "failedToAdd": "添加失败",
    "test": "测试",
    "testing": "测试中…",
    "testOk": "正常（{{ms}}ms）",
    "testFailed": "不可用",
    "testFailedCode": "错误 {{code}}",
    "testSuccess": "连接成功，耗时 {{ms}}ms — 回复：{{reply}}"
  },
  "oauth": {
    "loginFailed": "登录失败",
    "networkErrorDuringLogin": "OAuth 登录时网络错误",
    "callbackFailed": "回调失败"
  },
  "autoDetect": {
    "title": "自动检测与导入",
    "description": "从环境变量、本地 Ollama 服务或已有配置中发现 LLM 提供商。"
  },
  "ollama": {
    "title": "本地 Ollama",
    "description": "自动检测本地运行的 Ollama 服务，并将其配置为模型提供商。无需 API Key。",
    "detect": "检测 Ollama",
    "detecting": "检测中…",
    "foundModels": "在 {{url}} 发现 {{count}} 个模型",
    "notRunning": "本地未检测到 Ollama 服务。请先启动 Ollama，然后点击检测。",
    "detectFailed": "检测 Ollama 服务失败",
    "useModel": "使用 {{model}}",
    "configured": "已配置 Ollama，模型为 {{model}}",
    "applyFailed": "配置 Ollama 失败",
    "switchModel": "切换模型"
  },
  "envConfig": {
    "title": "环境变量配置",
    "description": "从环境变量检测模型 API Key，并写入配置文件。",
    "refreshEnv": "刷新环境变量",
    "detectedProviders": "已检测到的提供商 — 选择要应用的项：",
    "noKeysFound": "环境变量中未找到模型 API Key",
    "detectionFailed": "检测失败",
    "failedToDetect": "无法检测环境变量",
    "applyToConfig": "将 {{count}} 个提供商应用到配置",
    "selectAtLeastOne": "请至少选择一个提供商再应用",
    "applyFailed": "应用失败（HTTP {{status}}）",
    "failedToApply": "无法应用环境配置",
    "detectionFailedHttp": "检测失败（HTTP {{status}}）",
    "keyLabel": "密钥：",
    "modelLabel": "模型：",
    "urlLabel": "URL：",
    "llmTimeout": "LLM 超时：{{ms}}ms（来自 LLM_TIMEOUT_MS）"
  },
  "openClaw": {
    "title": "从 OpenClaw 导入",
    "description": "检测并从已有的 OpenClaw 安装导入 LLM 配置。",
    "detect": "检测 OpenClaw 配置",
    "detectShort": "检测 OpenClaw",
    "detectFailed": "检测失败",
    "foundAt": "已找到 OpenClaw 配置：",
    "providersModels": "{{providers}} 个提供商，{{models}} 个模型",
    "importConfigs": "导入模型配置",
    "importFailed": "导入失败",
    "importedFrom": "已从 OpenClaw 导入 {{count}} 条模型配置",
    "notFound": "未找到 OpenClaw 配置。",
    "modelProvidersFound": "找到 {{count}} 个模型提供商：",
    "modelsCountSuffix": "{{count}} 个模型",
    "withBaseUrl": "（{{url}}）",
    "channelsPrefix": "通道："
  },
  "agentExecution": {
    "title": "智能体执行",
    "maxToolIterations": "最大工具迭代次数",
    "maxToolIterationsDesc": "单次智能体回合中工具调用循环的安全上限（0 表示无限制，适用于所有智能体与子智能体）",
    "saved": "已保存",
    "failedToSave": "保存失败"
  },
  "cognitive": {
    "title": "认知准备管线",
    "description": "每次主 LLM 调用之前，智能体会运行一次轻量的认知评估，分析刺激并准备角色感知上下文。这可以提升响应相关性，代价是增加一次小型 LLM 调用（约 500ms）。",
    "enabled": "启用 CPP",
    "enabledDesc": "启用后，智能体在响应前会运行认知评估",
    "maxDepth": "最大认知深度",
    "maxDepthDesc": "控制每次响应前的准备工作深度",
    "depthD1": "仅评估",
    "depthD2": "评估 + 检索 + 反思",
    "depthD3": "完整管线 + 事后评估",
    "saved": "已保存",
    "failedToSave": "保存失败"
  },
  "searchApi": {
    "title": "网络搜索 API 密钥",
    "description": "配置搜索 API 密钥，让智能体能够搜索网络获取实时信息。优先级：Serper (Google) > Brave > 博查 > DuckDuckGo（免费兜底）。",
    "serper": "Serper (Google)",
    "serperHint": "通过 serper.dev 获取 Google 搜索结果",
    "brave": "Brave Search",
    "braveHint": "通过 brave.com 提供的隐私搜索",
    "bocha": "博查 (Bocha)",
    "bochaHint": "为 AI 优化的中文及全球内容搜索，通过 bochaai.com",
    "configured": "已配置",
    "notConfigured": "未配置",
    "apiKeyPlaceholder": "在此粘贴 API Key...",
    "saved": "搜索 API 密钥已保存",
    "failedToSave": "保存搜索 API 密钥失败",
    "envDetected": "来自环境变量",
    "freeBackend": "DuckDuckGo 始终可用作免费兜底（无需 API 密钥）。"
  },
  "browserAutomation": {
    "title": "浏览器自动化",
    "description": "Chrome DevTools 浏览器技能相关设置。智能体使用 Chrome 浏览网页、测试 Web 应用并检查页面。",
    "bringToFront": "置于前台",
    "bringToFrontDesc": "启用后，智能体导航时 Chrome 标签页会被提到前台。关闭时（默认）智能体在后台静默工作，不会抢占焦点。",
    "autoCloseTabs": "自动关闭标签页",
    "autoCloseTabsDesc": "智能体任务结束或智能体被移除时，自动关闭由其占用的浏览器标签页。",
    "remoteDebuggingPort": "远程调试端口",
    "remoteDebuggingPortDesc": "设置固定调试端口（例如 9222），避免每次智能体连接 Chrome 时都弹出权限对话框。",
    "remoteDebuggingPortDescLead": "设置固定调试端口（例如 9222），避免每次智能体连接 Chrome 时都弹出权限对话框。请使用以下参数启动 Chrome：",
    "remoteDebuggingPortDescTail": "然后在此处填写相同端口。填 0 则使用自动连接（每次需手动批准权限）。",
    "tabsForeground": "标签页将置于前台",
    "tabsBackground": "标签页将保留在后台",
    "usingPort": "正在使用端口 {{port}} 的持久连接（不再出现权限对话框）",
    "usingAutoConnect": "正在使用自动连接模式（每次连接都需要权限对话框）",
    "autoClickAllowDialog": "自动允许 Chrome 调试弹窗",
    "autoClickAllowDialogDesc": "Chrome 每次被 Markus 连接时都会弹出「允许远程调试？」对话框。开启后，Markus 通过操作系统辅助功能 API 自动点击「允许」按钮。",
    "autoClickAllowDialogMacNote": "macOS：需在「系统设置 → 隐私与安全性 → 辅助功能」中授予运行 Markus 的应用（Markus.app / Terminal / iTerm）权限。",
    "autoClickAllowDialogWinNote": "Windows：无需额外权限，使用内置 UI Automation。",
    "autoClickAllowDialogLinuxNote": "Linux：暂不支持。请使用上方「远程调试端口」作为替代方案。",
    "autoClickAllowDialogSupported": "当前平台支持",
    "autoClickAllowDialogUnsupported": "当前平台暂不支持",
    "autoClickTest": "测试",
    "autoClickTesting": "测试中...",
    "autoClickTestSuccess": "自动点击验证通过！已成功连接 Chrome 并加载测试页面（{{title}}）。",
    "autoClickTestNoPermission": "辅助功能权限未授予。已打开系统设置页面，请将本应用添加到列表中。",
    "autoClickTestChromeNotRunning": "Chrome 未运行。请先启动 Chrome。",
    "autoClickTestUnsupported": "当前平台不支持自动点击。请使用「远程调试端口」作为替代方案。",
    "autoClickTestError": "测试失败：{{error}}",
    "modeExtension": "Chrome 扩展（已激活）",
    "modeExtensionDesc": "浏览器工具通过扩展运行 — 无调试弹窗、无需额外权限、锁屏可用。",
    "modeDebuggingPort": "远程调试端口 :{{port}}（已激活）",
    "modeDebuggingPortDesc": "通过持久调试端口连接 — 每次连接无需权限弹窗。",
    "modeAutoClick": "自动连接 + 自动点击（已激活）",
    "modeAutoClickDesc": "使用 chrome-devtools-mcp 并通过系统 API 自动点击调试弹窗。锁屏时可能不工作。",
    "modeManual": "自动连接（需手动允许）",
    "modeManualDesc": "每次 Agent 连接浏览器时，Chrome 会弹出权限对话框，需要手动点击「允许」。",
    "modeRecommended": "推荐",
    "generalSettings": "通用设置",
    "fallbackModes": "连接方式（备选）",
    "extensionStatus": "Chrome 扩展",
    "extensionStatusDesc": "无需调试弹窗即可实现浏览器自动化。无需辅助功能权限，锁屏状态下也能正常工作。",
    "extensionConnected": "已连接",
    "extensionDisconnected": "未连接",
    "extensionActiveNote": "扩展已激活 — 浏览器工具通过扩展运行（无调试弹窗）",
    "extensionSetupTitle": "安装 Chrome 扩展",
    "extensionStep1": "下载并解压扩展",
    "extensionStep1Desc": "下载压缩包后，解压到任意位置（如桌面）",
    "extensionStep1Btn": "下载 markus-browser-extension.zip",
    "extensionStep1Downloading": "准备下载...",
    "extensionStep2": "打开 Chrome 扩展页面",
    "extensionStep2Desc": "在 Chrome 中打开扩展管理页面",
    "extensionStep2Btn": "打开 chrome://extensions",
    "extensionStep3": "加载扩展",
    "extensionStep3Desc": "开启右上角的「开发者模式」开关，点击「加载已解压的扩展程序」，选择第 1 步解压出来的文件夹",
    "extensionDownloadError": "下载扩展失败",
    "extensionOpenError": "打开 Chrome 扩展页面失败"
  },
  "dataStorage": {
    "title": "数据与存储",
    "scanning": "正在扫描存储…",
    "openInFinder": "在访达中打开",
    "storageBreakdown": "存储明细",
    "agentStorage": "智能体存储（{{count}}）",
    "openFolder": "打开文件夹",
    "orphanedDirectories": "孤立目录",
    "orphanedDesc": "这些目录没有对应的数据库记录，可能是在删除智能体或团队时遗留的。",
    "orphanedTotal": "合计：{{size}}，共 {{count}} 个目录。",
    "cleanSelected": "清理所选（{{size}}）",
    "cleanAll": "全部清理（{{size}}）",
    "cleaning": "正在清理…",
    "cleaned": "已清理 {{count}} 个目录，释放 {{size}}",
    "bytesZero": "0 B",
    "unitB": "B",
    "unitKB": "KB",
    "unitMB": "MB",
    "unitGB": "GB",
    "teamKind": "团队",
    "selectedWithSize": "已选 {{count}} 项（{{size}}）",
    "cleanupFailed": "清理失败",
    "cleanedWithFailureNote": "{{base}}（{{count}} 项失败）"
  },
  "oauthConnected": "已通过 OAuth 连接到 {{provider}}",
  "authProfileDeleted": "认证配置已删除",
  "browserOpened": "已打开浏览器以完成授权。请在浏览器窗口中完成登录…",
  "remoteAccess": {
    "title": "远程访问",
    "description": "通过 Markus Hub 的 WebRTC P2P 连接，从手机或任何设备访问此 Markus 实例。",
    "loginRequired": "请先登录 Markus Hub 以启用远程访问。",
    "signIn": "登录",
    "signedInAs": "已登录：",
    "enabled": "远程访问已启用",
    "disabled": "远程访问已禁用",
    "connecting": "正在连接信令服务器…",
    "registering": "正在注册到 Hub…",
    "connected": "已连接",
    "disconnected": "已断开",
    "peerCount_one": "{{count}} 个对等节点",
    "peerCount_other": "{{count}} 个对等节点",
    "url": "远程访问地址",
    "copy": "复制",
    "copied": "已复制！",
    "qrCode": "二维码",
    "scanQr": "用手机相机扫描以连接",
    "enableFailed": "启用远程访问失败",
    "disableFailed": "禁用远程访问失败",
    "connectedPeers": "已连接的设备",
    "connectedSince": "连接于 {{time}}",
    "peerConnecting": "连接中"
  },
  "userManagement": {
    "title": "用户管理",
    "name": "姓名",
    "email": "邮箱",
    "role": "角色",
    "actions": "操作",
    "noUsers": "暂无用户",
    "editUser": "编辑",
    "deleteUser": "删除",
    "resetPassword": "重置密码",
    "save": "保存",
    "cancel": "取消",
    "confirmDelete": "确定要移除该用户吗？此操作不可撤销。",
    "confirmDeleteTitle": "移除用户",
    "newPassword": "新密码",
    "confirmReset": "重置",
    "resetSuccess": "密码已重置",
    "updateSuccess": "用户已更新",
    "deleteSuccess": "用户已移除",
    "error": "操作失败",
    "cannotDeleteSelf": "不能删除自己的账户",
    "cannotDeleteOwner": "不能移除主要所有者",
    "inviteLink": "邀请",
    "inviteLinkGenerated": "邀请链接已生成 — 复制并发送给用户",
    "copyInviteLink": "将此链接发送给用户，以便他们设置账号：",
    "linkCopied": "链接已复制到剪贴板",
    "copy": "复制",
    "roles": {
      "owner": "所有者",
      "admin": "管理员",
      "member": "成员",
      "guest": "访客"
    }
  }
}
