{
  "product": "YSK Server",
  "tagline": "以 AI 为核心、安全优先的 Linux 服务器管理平台",
  "company": "YSK Limited",
  "agents": {
    "title": "AI Agent 运行时",
    "body": "OpenClaw / Hermes / IonClaw 安装与监督；所有 tool call 经 Allowlist 与审批。",
    "status": {
      "running": "运行中",
      "activating": "启动中",
      "stuck": "启动卡住",
      "connected": "在线",
      "registered": "仅登记",
      "stale": "超时",
      "disconnected": "离线",
      "not_installed": "未安装",
      "failed": "失败",
      "error": "失败",
      "unknown": "未探测",
      "fallback": "未知"
    },
    "cmdStatus": {
      "queued": "已排队",
      "acked": "已确认",
      "done": "已完成",
      "error": "错误"
    },
    "activatingStuckHint": "启动超过 5 分钟，已当失败。请查日志。",
    "noOnlineAgents": "无上线代理",
    "journal": "日志",
    "writeUnit": "写入服务单元",
    "writeUnitConfirm": "把 {{kind}} 的 systemd 服务单元写入 /etc/systemd。服务不会启动或启用。",
    "liveN": "{{count}} 在线",
    "registeredOnly": "仅登记",
    "awaitProbe": "待探测",
    "runtimes": "运行时",
    "running": "运行中",
    "liveAgents": "在线 agent",
    "fleet": "机群",
    "aiTasks": "AI 任务",
    "expBanner": "实验。",
    "expBody": "登记 ≠ 在线。真实运维用 CLI：",
    "expDocs": "文档：repo",
    "expEdge": "在边缘：",
    "expPayload": "; 指令 payload 建议",
    "fleetCan": "机群能做什么",
    "fleetCanDesc": "不是空壳列表 — 以下是控制面对边缘节点的真实能力",
    "capRegister": "登记",
    "capRegisterD": "写入控制面清单（状态「仅登记」）— 不代表进程已跑",
    "capCommand": "下指令",
    "capCommandD": "CLI preset（readiness / host / projects…）或自定义；边缘 pull 后跑 ysk-server 并 ack",
    "capHistory": "指令记录",
    "capHistoryD": "queued / done / error、exit code、pretty JSON result",
    "capDelete": "删除",
    "capDeleteD": "移除 session 与相关消息",
    "capStatus": "状态",
    "capStatusD": "仅登记 → 在线（heartbeat）→ 超时（>60s 无心跳）",
    "statusFlowTitle": "状态流程",
    "statusFlow": "仅注册→在线→陈旧（>60s）→离线（断开连接）。过滤器“离线”已断开。",
    "colSession": "会话UUID",
    "copySession": "复制集群/CLI --session 的会话 UUID",
    "staleFor": "看不见的{{年龄}}",
    "commandTitle": "为此会话排队命令",
    "historyTitleShort": "打开命令历史记录（只读）",
    "fleetTitle": "机群（{{count}}）",
    "fleetDesc": "控制面登记清单 · 登记 ≠ 节点已在线",
    "registerPlus": "+ 登记 Agent",
    "colId": "标识",
    "colStatus": "状态",
    "colGroup": "分组",
    "colLastSeen": "最后上线",
    "command": "下指令",
    "history": "记录",
    "emptyAgents": "尚未登记 agent",
    "emptyAgentsDesc": "用列表右上角登记，或等边缘进程自行 register",
    "historyTitle": "指令记录 · {{id}}",
    "historyDesc": "queued 等节点 pull；done/error 为 ack。CLI 结果含 exit code + JSON（约 4s 自动刷新）",
    "refreshHistory": "刷新记录",
    "colTime": "时间",
    "finishedAt": "完成 {{at}}",
    "colCommand": "指令",
    "colResult": "结果摘要",
    "colExit": "退出码",
    "hasResult": "有结果",
    "emptyCmds": "尚未有指令",
    "emptyCmdsDesc": "按「下指令」排队；边缘 agent 未在线时会一直 queued",
    "edgeOnlineTitle": "边缘 agent 如何真正上线",
    "edgeOnlineDesc": "面板登记后，节点要跑 outbound loop 才会 heartbeat / pull 指令",
    "controlPlaneApi": "控制面 API：",
    "controlPlaneHint": "（需网络可达；生产请改成实际面板地址）",
    "queueNote": "未有边缘进程时，「下指令」仍然有效：会入队列（queued），等 agent 上线再消化。",
    "runtimeTitle": "AI 运行时",
    "runtimeDesc": "探测路径与 unit；安装会尝试 enable systemd（需系统变更与 root）",
    "emptyRuntime": "尚未有探测结果",
    "emptyRuntimeDesc": "按刷新加载运行时清单，或逐个探测",
    "pathExists": "已存在",
    "pathMissing": "尚未安装",
    "unitUnknown": "{{unit}} · 未知",
    "unitFallback": "服务单元",
    "path": "路径",
    "probe": "探测",
    "install": "安装",
    "recentOps": "最近操作",
    "registerTitle": "登记 Agent",
    "registerDesc": "只写入控制面清单；不等于节点已在线",
    "register": "登记",
    "agentId": "Agent 标识",
    "agentIdHint": "唯一 ID，例如 edge-1 或 office-gateway",
    "group": "分组",
    "groupHint": "用于分区／列表筛选",
    "registerNote": "状态会显示「仅登记」。节点跑 outbound agent 并 heartbeat 后才变「在线」。",
    "cmdTitle": "下指令 · {{id}}",
    "cmdTitlePlain": "下指令",
    "cmdDesc": "写入队列；边缘 agent pull 后执行并 ack（未在线会一直 queued）",
    "enqueue": "排队",
    "cmdPreset": "指令（CLI 优先）",
    "cmdTypeAria": "指令类型",
    "customCli": "自定义 CLI",
    "cliArgs": "CLI 参数",
    "cliArgsHint": "不用写 ysk-server；例：logs journal --unit nginx.service",
    "cmdNote": "Edge ysk-server agent run 收到 CLI JSON 会在本机执行 CLI（自动加 --json）。改系统仍要边缘设 YSK_EXECUTE=1。完成后在「记录」看 exit code 与 JSON。",
    "resultTitle": "指令结果 · exit {{code}}",
    "resultTitlePlain": "指令结果",
    "codeComment": "# 概念：register → heartbeat 循环 → 拉指令 → ack\n# 库：ysk-server-core runOutboundAgent / agentCycle",
    "resultOuter": "外层：edge ack（exitCode / stderr）。内层 result：",
    "deleteTitle": "删除 {{id}}？",
    "deleteTitlePlain": "删除 agent？",
    "deleteDesc": "相关指令记录一并移除。",
    "fact": {
      "kind": "类型",
      "name": "名称",
      "status": "状态",
      "unitActive": "服务",
      "unitName": "单元",
      "pathExists": "路径存在",
      "installPath": "安装路径"
    },
    "installBlocked": "无法在管理面板完成安装",
    "registeredMsg": "已登记 {{id}}（仅控制面；节点需跑 outbound agent 并 heartbeat 才算上线）",
    "registerFailed": "登记失败",
    "removedFleet": "已删除机群登记",
    "enqueuedMsg": "已排队指令 {{id}}…（节点 pull 后才执行）",
    "enqueueFailed": "下指令失败",
    "loadCommandsFailed": "加载指令失败",
    "probedMsg": "已探测 {{kind}}",
    "probeFailed": "探测失败",
    "wroteUnitMsg": "已写入 {{kind}} 服务设置",
    "writeFailed": "写入失败",
    "installedMsg": "已安装 {{kind}}",
    "installIncomplete": "安装未完成",
    "badgeDryRun": "计划模式（dry-run）",
    "badgeBlocked": "已阻挡",
    "labelStderr": "标准错误",
    "labelAckCli": "确认 + CLI JSON",
    "labelStdoutBody": "CLI 标准输出内容",
    "resultOuterHint": "外层 result 为 CLI --json 标准输出。",
    "noteAllowlist": "代理工具呼叫必须通过允许清单。",
    "noteRbacCap": "代理角色权限上限为低写入。"
  },
  "ai": {
    "status": {
      "completed": "已完成",
      "done": "已完成",
      "executed": "已执行",
      "failed": "失败",
      "error": "错误",
      "rejected": "已拒绝",
      "pending": "待处理",
      "planned": "待审批",
      "approved": "已批准",
      "running": "执行中",
      "cancelled": "已取消"
    },
    "activeCount": "{{count}} 进行中",
    "taskCount": "{{count}} 任务",
    "tasks": "任务",
    "active": "进行中",
    "tasksTab": "任务 ({{count}})",
    "playbooksTab": "剧本 ({{count}})",
    "queueTitle": "任务队列",
    "queueSub": "点选查看计划与步骤 · 终态不显示多余操作",
    "createTaskPlus": "+ 创建任务",
    "emptyTasks": "尚未有任务",
    "emptyTasksDesc": "用列表右上角创建任务，或从剧本库一键产生",
    "browsePlaybooks": "浏览剧本",
    "noPrompt": "（无提示）",
    "stepsOf": "步骤 {{done}}/{{total}}",
    "noPlanSummary": "（无计划摘要）",
    "pipelineAria": "任务阶段",
    "phase": {
      "plan": "计划",
      "approve": "审批",
      "run": "执行",
      "done": "完成"
    },
    "approveRun": "批准并执行",
    "cancelTask": "取消任务",
    "terminalHint": "任务已终结，可创建新任务或执行剧本",
    "stepsTitle": "步骤（{{count}}）",
    "noSteps": "尚未产生步骤",
    "needsApproval": "需审批",
    "noApproval": "免审批",
    "reject": "拒绝",
    "selectTask": "选择任务",
    "selectTaskDesc": "左侧点一笔任务查看计划与步骤",
    "playbooksTitle": "剧本库",
    "playbooksSub": "预设操作组合 · 执行后会创建任务并切到任务分页",
    "countItems": "{{count}} 个",
    "searchPh": "名称 / 说明",
    "noPlaybooks": "无符合剧本",
    "noPlaybooksDesc": "改关键字或清空搜索",
    "run": "执行",
    "createTitle": "创建 AI 任务",
    "createDesc": "产生计划 ≠ 已执行。工具只会在 allowlist 内。",
    "generatePlan": "产生计划",
    "promptLabel": "自然语言指令",
    "promptHint": "例如：检查主机负载并回报；或 nginx 状态",
    "promptPh": "描述想做的事…",
    "createHint": "下一步：在任务详情按「批准并执行」，或拒绝个别步骤。"
  },
  "apache": {
    "pageDesc": "Apache 站点（PHP 项目 + 独立站）",
    "pillSites": "{{count}} 站点",
    "pillSitesSplit": "{{n}} 站点 · 残留 {{leftover}}",
    "listTitle": "站点（{{count}}）",
    "emptyTitle": "暂无站点",
    "createSite": "+ 创建站点",
    "createTitle": "创建站点",
    "editTitle": "编辑站点",
    "deleteTitle": "删除站点？",
    "deleteDesc": "删除此 Apache 站点？",
    "stopSites": "将有 {{n}} 个站点停止回应 HTTP。",
    "colServerName": "域名",
    "colSource": "来源",
    "colKind": "类型",
    "colTarget": "目标",
    "colStatus": "状态",
    "filterSource": "来源筛选",
    "sourceAll": "全部",
    "sourceProject": "项目",
    "sourceStandalone": "独立",
    "sourceArtifact": "磁盘",
    "sourceOrphan": "残留",
    "orphanSite": "来源专案已不存在",
    "openProject": "打开项目",
    "kindLabel": "类型",
    "kindProxy": "反代",
    "kindStatic": "静态",
    "kindPhp": "PHP",
    "upstreamLabel": "上游",
    "rootLabel": "根目录",
    "sslLabel": "SSL",
    "sslTerminatedUpstream": "TLS 在 Nginx 前面结束",
    "apply": "应用",
    "notInstalled": "未安装 Apache",
    "globalSettings": "全局设置",
    "siteSettings": "站点设置",
    "saveApply": "保存并应用",
    "settingsSaved": "已保存",
    "setGzip": "压缩包",
    "setShowVersion": "显示版本",
    "setHttp2": "HTTP/2",
    "setBody": "Body 上限",
    "setKeepalive": "保活",
    "setAccessLog": "访问日志",
    "logOn": "开",
    "logOff": "关",
    "setForceHttps": "强制 HTTPS",
    "setHsts": "HSTS",
    "setIndexes": "目录列表",
    "bodyInherit": "跟随全局",
    "conflict": "域名冲突",
    "conflictHint": "同一域名有多个来源。请保留项目／独立站行，并移除磁盘残留。",
    "removeArtifact": "移除残留",
    "removeArtifactTitle": "移除残留 conf？",
    "removeArtifactDesc": "删除此未认领的 Apache conf（面板 dataDir），并在可能时停用系统副本。不会删除项目。",
    "removeArtifactHint": "只删除此残留磁盘 conf，不会删除项目。",
    "previewConf": "预览 conf",
    "cleanupConflicts": "清理冲突残留",
    "cleanupConflictsTitle": "清理全部冲突残留？",
    "cleanupConflictsDesc": "移除所有与项目或独立站 ServerName 冲突的磁盘 conf。项目行会保留。",
    "artifactRemovedOk": "已移除残留 conf"
  },
  "applyStatus": {
    "draft": "草稿",
    "written": "已写入管理文件",
    "planned": "处理中",
    "applied": "已套用到系统",
    "failed": "失败",
    "pendingExecute": "待系统权限",
    "uploaded": "已上传",
    "issued": "已签发",
    "missing": "文件缺失"
  },
  "audit": {
    "recent": "最近审计",
    "lastN": "最近 {{n}} 条",
    "actions": {
      "protection.change": "防护设置变更",
      "auth.locale": "界面语言变更",
      "auth.login": "登录",
      "auth.logout": "登出",
      "system.firewall.allow_port": "防火墙允许端口",
      "system.firewall.deny": "防火墙拒绝 IP",
      "system.firewall.apply": "防火墙应用",
      "project.deploy": "项目部署",
      "project.create": "创建项目",
      "project.delete": "删除项目",
      "ssl.request": "申请 SSL",
      "ssl.upload": "上传 SSL",
      "system.firewall.enable": "防火墙启用／停用",
      "system.firewall.delete_rule": "删除防火墙规则",
      "system.firewall.delete_deny": "移除永久拒 IP",
      "db.adminer.apply": "数据库管理项目",
      "project.goLive": "项目上线",
      "project.publish": "发布 Nginx",
      "project.suspend": "暂停项目",
      "software.install": "安装软件",
      "software.update": "更新软件",
      "backup.restore": "还原备份",
      "backup.run": "执行备份",
      "backup.delete": "删除备份"
    }
  },
  "backups": {
    "settingsSaved": "已保存备份设置",
    "saveFailed": "保存失败",
    "downloadStarted": "已开始下载 {{name}}",
    "nothingToDo": "无事可做",
    "tarOkSideFail": "tar OK／副步骤有问题",
    "success": "成功",
    "hasFailures": "有失败",
    "notYet": "尚未",
    "enabled": "已启用",
    "needPassword": "缺 password",
    "off": "关闭",
    "lastRun": "上次 {{label}}",
    "backupFiles": "备份档",
    "projects": "项目",
    "lastAll": "上次全部",
    "latestFile": "最新备份档",
    "remote": "远程",
    "withBackups": "有备份项目",
    "ops": "操作",
    "remoteExclude": "远程 / 排除",
    "about": "说明",
    "noBackups": "尚无备份",
    "noBackupsDesc": "执行「备份所有项目」或于项目详情 Backup",
    "goOps": "去操作",
    "projectShort": "项目",
    "download": "下载",
    "preview": "预览",
    "restoreWeb": "还原 web",
    "restoreFull": "完整还原",
    "restoreFullTitle": "覆盖此存档中的项目文件和数据库 - 输入文件名进行确认",
    "restoreWebTitle": "仅从此存档恢复网站文件",
    "previewTitle": "无需写入即可预览恢复",
    "partialSkipped": "部分 — 跳过一些项目",
    "delete": "删除",
    "opsTitle": "操作",
    "opsHint": "0 个项目或全部跳过 = 成功；真正有试过备而失败先算失败",
    "noProjects": "（沒有项目）",
    "successRatio": " · {{ok}}/{{total}} 成功",
    "summary": "摘要{{extra}}",
    "backupFailed": "备份失败",
    "backupDone": "备份完成",
    "backupAll": "备份所有项目",
    "controlPlane": "备份控制平面",
    "controlPlaneDone": "控制平面备份完成",
    "cronCmd": "指令：ysk-server backup all --data-dir …",
    "cronHint": "schedule 带 install=true 且 YSK_EXECUTE=1 时写入 host crontab；否则只写 managed 文件",
    "dailyCronRegistered": "已登记每日 03:00 计划",
    "registerDailyCron": "登记每日计划（含安装）",
    "resticNeedConfig": "请先在「远程／排除」启用 restic 并设置 password",
    "resticFailed": "restic 失败",
    "resticDone": "restic 增量完成",
    "resticOnly": "只跑 restic 增量",
    "listSnapshots": "列出 restic snapshots",
    "lastAllDetail": "上次全部备份明細",
    "time": "时间",
    "result": "结果",
    "nothingZero": "无事可做（0 项目）",
    "notes": "备注",
    "status": "状态",
    "skipped": "跳过",
    "failed": "失败",
    "lastNoProjects": "上次沒有项目需要备份。",
    "noPerProject": "沒有 per-project results。",
    "remoteSide": "远程／restic 副步骤",
    "step": "步骤",
    "remoteStep": "远程",
    "restoreProjectId": "还原用 projectId（可空=全部 list）",
    "needProjectOrTag": "请填 projectId 或 snapshot 需有 project: tag",
    "dryRunDone": "dry-run 完成（未写档）",
    "allSuccess": "全部成功",
    "failOrSkip": "有失败／跳过",
    "noteN": "备注 {{n}}",
    "enableRemote": "启用远程推送",
    "targetKind": "目标类型",
    "remoteKindAria": "远程目标类型",
    "localPath": "本机路径",
    "host": "主机",
    "port": "端口",
    "username": "用户名",
    "password": "密码",
    "passwordSshHint": "可留空，改用主机 SSH key",
    "savedLeaveEmpty": "已保存則留空",
    "s3Bucket": "Bucket 路径",
    "region": "区域",
    "endpointOptional": "Endpoint（可选）",
    "localMirror": "本机鏡像路径",
    "remotePath": "远程路径",
    "remotePathHint": "相对于远程用户的主目录（或 SFTP chroot）。 “。”就是那个家。",
    "resticTitle": "Restic 增量",
    "resticDesc": "可选；需 PATH 有 restic。启用后必须设置 password（不会用默认密码）",
    "enableRestic": "启用 restic",
    "repoPath": "Repo 路径",
    "repoPassword": "Repo 密码",
    "repoPassSaved": "已保存；留空＝不改。启用后必填。",
    "repoPassRequired": "启用 restic 时必填（不会用默认密码）",
    "savedPlaceholder": "已保存（留空不改）",
    "required": "必填",
    "s3RepoUrl": "或 S3 repo URL",
    "excludeTitle": "排除規則",
    "excludeSub": "tar 排除路径，每行一个 glob",
    "excludeList": "排除清单",
    "saveAll": "保存全部设置",
    "restoreFailed": "还原失败",
    "previewDone": "预览完成",
    "restoreDone": "还原完成",
    "previewQ": "预览备份内容？",
    "restoreWebQ": "选擇性还原 (web)？",
    "restoreFullQ": "完整还原？",
    "previewDesc": "只列出 {{name}} 内容，不会改档。",
    "restoreWebDesc": "将 {{name}} 解壓到项目 home（較保守）。",
    "restoreFullDesc": "完整 tar 还原 {{name}}，可能覆蓋现有文件。",
    "restore": "还原",
    "cancel": "取消",
    "deleteFailed": "删除失败",
    "deleted": "已删除",
    "deleteTitle": "删除备份档？",
    "deleteDesc": "永久删除 {{name}}",
    "tabTrash": "回收区",
    "trashTitle": "回收区（{{count}}）",
    "trashSub": "删除的备份会在此保留 7 日，之后永久移除。",
    "trashEmpty": "回收区是空的",
    "trashEmptyDesc": "删除的备份档会在此保留 7 日。",
    "trashRestore": "还原",
    "trashPurge": "永久删除",
    "trashEmptyAll": "清空回收区",
    "trashExpires": "到期 {{at}}",
    "trashPurgeTitle": "永久删除此备份？",
    "trashPurgeDesc": "永久删除 {{name}}。无法复原。",
    "trashEmptyTitle": "清空回收区？",
    "trashEmptyDescConfirm": "永久删除 {{count}} 个备份档。请输入件数确认。",
    "trashRestored": "已从回收区还原",
    "trashPurged": "已永久删除",
    "trashedOk": "已移至回收区",
    "resticSafeTitle": "restic 还原到安全目录？",
    "resticSafeDesc": "还原 {{snapshot}} 到项目 {{project}} 的 .restic-restore-* 目录",
    "resticRestoreDone": "restic 还原完成",
    "overwriteTitle": "危险：覆盖 home",
    "overwriteDesc": "将覆盖项目 {{project}} 的 home。输入 OVERWRITE 确认。",
    "confirmString": "确认字符串",
    "overwriteHome": "覆盖 home",
    "resticOverwriteDone": "restic 覆盖 home 完成",
    "opsResult": "操作结果",
    "filesTitle": "备份文件 ({{count}})",
    "filesSub": "管理目录 tar · 下载需登录 · 还原有 dry-run／web／完整",
    "backupAllBtn": "全部备份",
    "yes": "是",
    "no": "否",
    "safeDir": "安全目录",
    "remotePushTitle": "远端推送目标",
    "remotePushSub": "本地 tar 成功后可推送到 SFTP、本机路径或 S3",
    "accessKey": "访问密钥",
    "secretKey": "密钥",
    "overwriteConfirmHint": "输入 OVERWRITE 确认覆盖",
    "testRemote": "测试目的地",
    "testRemoteHint": "会连线远端主机并写入测试档，并非只读探测。",
    "testRemoteDone": "远端探测完成",
    "testRemoteFailed": "远端探测失败",
    "resticRepoPh": "面板资料目录／restic 库",
    "testDisabledHint": "请先开启远端推送才可测试。",
    "identityId": "出站 SSH 身份",
    "identityHint": "首选。与 /security SSH 相同的保管库。密码需要sshpass。",
    "identityNone": "无 — 密码或默认密钥",
    "skippedListHint": "以下专案被略过：",
    "skippedPendingOs": "已略过 — 待建立系统用户（主目录不存在）",
    "goLogs": "开启日志",
    "goAbout": "备份说明",
    "previewListingTitle": "封存内容",
    "restoreNamedDesc": "将 {{name}} 还原到专案 {{project}}。",
    "overwriteNamedDesc": "用快照 {{snapshot}} 覆写专案 {{project}} 的档案。",
    "resticSafeNamed": "将专案 {{project}} 的快照 {{snapshot}} 还原到安全目录。"
  },
  "btTracker": {
    "title": "BT追踪器",
    "sub": "自架 BitTorrent／WebTorrent，供档案分享使用",
    "pageDesc": "以 BitTorrent 为面板档案分享做种。先启動 Tracker、设定公开 announce 主机，再于「档案」建立 BT 分享。",
    "status": "状态",
    "running": "运行中",
    "stopped": "已停止",
    "installed": "已安裝（隨产品附帶）",
    "start": "启動 Tracker",
    "stop": "停止 Tracker",
    "stopTitle": "停止跟踪器 - 播种和下载将中断",
    "stopDesc": "正在运行的种子停止通知。对等点会断开连接，直到您再次启动跟踪器。",
    "fillPublicHost": "使用{{主机}}",
    "fillPublicHostTitle": "填写当前面板主机名作为公告主机",
    "refresh": "重新整理",
    "settings": "设定",
    "httpPort": "HTTP／WebSocket 埠",
    "udpPort": "UDP 埠（0 = 关閉）",
    "listenHost": "监听位址",
    "listenHostHint": "0.0.0.0 会听全部位址。若不必对外，请改绑 127.0.0.1。",
    "listenAllWarn": "Tracker 正绑定全部位址。防火墙关闭时等同对公网开放。可改绑 127.0.0.1，或在防火墙限制该埠。",
    "bindLoopback": "只绑 127.0.0.1",
    "bindAll": "0.0.0.0（全部）",
    "wsEnabled": "WebSocket Tracker",
    "wsEnabledHint": "浏览器 WebTorrent 客户端需要",
    "autostart": "隨面板自動启動",
    "autostartHint": "ysk-server serve 开机时一併启動 Tracker",
    "publicAnnounceHost": "公开 announce 主机",
    "publicAnnounceHostHint": "寫入 magnet 的主机名或 host:port。空白則用 127.0.0.1（僅同机）。",
    "maxSeeds": "同时做种上限",
    "seederPorts": "做种 peer 埠范围",
    "seederPortMin": "Peer 埠起始",
    "seederPortMax": "Peer 埠结束",
    "seederPortsHint": "程序內做种器的本机 peer 监听范围",
    "saveSettings": "储存设定",
    "applyHint": "储存埠不会自動开防火墙。请先用下方网络暴露，再启動。",
    "torrents": "Torrent",
    "torrentsEmpty": "尚无追蹤中的 Torrent",
    "torrentsEmptyHint": "请于「档案」以 BitTorrent 模式建立分享。Peers announce 及本机做种后，此表会自動更新。",
    "torrentsDesc": "Tracker 即时 swarm，并显示面板分享的本机做种状态。",
    "colName": "名称",
    "colHash": "Info hash",
    "colSeeds": "种子",
    "colLeechers": "下載者",
    "colStatus": "状态",
    "announceUrls": "Announce 网址",
    "announceDesc": "客户端可填入这些 Tracker，或直接使用面板产生的 magnet。",
    "copy": "複製",
    "copied": "已複製",
    "statsTorrents": "Torrent 数",
    "statsLibrary": "数据库",
    "statsLibraryHint": "面板数据库／档案分享的 Torrent 列",
    "statsTrackerLeftover": "Tracker leftover",
    "statsTrackerLeftoverHint": "Tracker announce hashes that are not library rows",
    "leftoverHashesTitle": "Tracker 残留杂凑",
    "publicHostMissingLive": "Tracker 已在听，但未设定公开 announce 主机。外网对等节点找不到此种子。",
    "leftoverHashesHint": "只读。这些 announce 不是数据库或分享列。",
    "statsPeers": "同行",
    "statsAnnounces": "Announce 次数",
    "statsAnnouncesHint": "Tracker 行程收到的 announce 次数",
    "statsJobs": "进行中任務",
    "openShares": "档案分享",
    "needExecute": "生产環境请启用系統变更权限（YSK_EXECUTE）以綁定埠。",
    "guideTitle": "这是什么？",
    "guideBody": "建立 BT 档案分享时，YSK 会产生 .torrent、自行做种，并透过此 Tracker 交換 peers。下載者在主机外时请开放对应埠。",
    "restoreSeeds": "重新做种",
    "restoreSeedsHint": "必要时启動 Tracker，并为仍有磁碟上 .torrent 的分享重新做种。",
    "bundledNote": "隨 YSK Server 附帶（Node）。无需 apt 安裝 — 以启動／停止管理进程。",
    "stackTitle": "软件",
    "jobs": "任務",
    "jobsEmpty": "沒有背景 torrent 任務",
    "jobsEmptyHint": "大型分享（≥128 MiB）会在背景建立 .torrent，讓档案分享对话框保持流畅。",
    "jobsDesc": "大型档案或资料夹分享的背景 create-torrent 队列。",
    "colJob": "任務",
    "colShare": "分享",
    "colJobStatus": "状态",
    "colEnqueued": "排入时間",
    "refreshJobs": "重新整理任務",
    "tabOverview": "概览",
    "tabTorrents": "Torrent",
    "tabJobs": "任務",
    "tabSettings": "设定",
    "tabAbout": "关于",
    "heroRunning": "Tracker 运行中",
    "heroStopped": "Tracker 已停止",
    "heroRunningSub": "Peers 可 announce 并發現面板分享的种子。",
    "heroStoppedSub": "要以 BitTorrent 分享大档前，请先启動 Tracker。",
    "live": "即时",
    "liveOff": "閒置",
    "quickStart": "快速开始",
    "quickStartDesc": "三步完成 BitTorrent 档案分享。",
    "step1Title": "设定公开 announce 主机",
    "step1Hint": "客户端 magnet 使用的主机名（设定）。",
    "step2Title": "启動 Tracker",
    "step2Hint": "Peers 在主机外时请开放埠暴露。",
    "step3Title": "建立 BT 分享",
    "step3Hint": "档案 → 分享，选择 BitTorrent 或兩者。",
    "stepDone": "已完成",
    "stepTodo": "待办",
    "networkCard": "网络",
    "networkCardDesc": "Tracker 监听位置，以及 magnet 显示的主机。",
    "seederCard": "做种器",
    "seederCardDesc": "程序內 WebTorrent 做种上限与 peer 埠。",
    "lifecycleCard": "生命周期",
    "lifecycleCardDesc": "开机行为与服務打包方式。",
    "pid": "PID",
    "port": "埠",
    "announceHost": "Announce 主机",
    "goSettings": "前往设定",
    "searchTorrents": "搜寻名称或 hash…",
    "filterAll": "全部",
    "filterSeeding": "做种中",
    "filterOther": "其他",
    "noMatch": "沒有符合条件的 Torrent",
    "seedStatusSeeding": "做种中",
    "seedStatusPending": "处理中",
    "seedStatusError": "错误",
    "seedStatusStopped": "已停止",
    "seedStatusNone": "无",
    "notesTitle": "服務备註",
    "exposureTitle": "网络存取",
    "protoHttp": "HTTP",
    "protoWs": "WS",
    "protoUdp": "UDP协议",
    "saveOk": "设定已储存",
    "saveOkRestart": "已保存 — 重新启动跟踪器以应用端口",
    "startedOk": "Tracker 已启動",
    "stoppedOk": "Tracker 已停止",
    "restoredOk": "重新做种完成",
    "restoredCount": "已重新做种 {{seeded}}／{{attempted}} 个 Torrent",
    "portInvalid": "请输入 1 至 65535 的埠号。",
    "extraTrackerRequired": "请填写公布网址。",
    "stopPort": "Tracker 埠 {{port}} 将停止监听。",
    "stopPid": "行程 PID {{pid}} 将结束。",
    "swarmLeftoverUnlisted": "另有 {{count}} 个残留 announce 未列杂凑。",
    "httpPortHint": "默认 8000（YSK 防火墙芯片）。Peers 在主机外时请开 TCP。",
    "udpPortHint": "可选传统 UDP announce。0 = 关闭（浏览器 WebTorrent 用 HTTP／WS 即可）。若要开 UDP，建议 6969，或与 HTTP 同一端口并在防火墙放行。",
    "udpPortOff": "0 · 关闭",
    "udpPortSameHttp": "与 HTTP 相同（{{port}}）",
    "udpPortClassic": "6969 · 传统",
    "portSuggest8000": "8000 · 建议",
    "announceHostUnset": "未设置",
    "tabTrackers": "Tracker",
    "addTorrent": "加入 Torrent",
    "addTorrentTitle": "加入 Torrent",
    "addTorrentHint": "上传 .torrent 或粘贴 magnet，再选保存文件夹。文件不齐会用 WebTorrent 下载，齐了就做种。",
    "dropTorrent": "將 .torrent 拖放到此處",
    "chooseFile": "或選擇檔案",
    "magnetLabel": "磁铁",
    "magnetPlaceholder": "磁铁:?xt=瓮:btih:…",
    "inspect": "读取",
    "extraTrackersPreview": "將額外向 {{n}} 個常用 Tracker announce",
    "saveLocation": "保存位置",
    "saveRootPublic": "公开文件",
    "newFolder": "新文件夹",
    "destPreview": "将写入",
    "startDownload": "开始下载",
    "filterDownloading": "下载中",
    "filterPaused": "已暂停",
    "filterError": "错误",
    "emptyDrop": "將 .torrent 拖放到此處，或選擇檔案",
    "emptyHint": "下载会写入你指定的文件夹；文件已齐就直接做种。引擎是 WebTorrent，不会另外安装下载软件。",
    "pause": "暂停",
    "resume": "继续",
    "openFolder": "打开文件夹",
    "remove": "移除",
    "removeKeep": "移除并保留文件",
    "removeDelete": "移除并删除文件",
    "removeConfirm": "要从资料库移除此 Torrent？",
    "kindShare": "分享",
    "filesInTorrent": "個檔案",
    "extraTrackersDesc": "这里是额外 announce。资料库下载／做种和文件 BT 分享都会一并通知这些 Tracker。不会取代 .torrent 原有清单，也不会让本机 Tracker 对外开放。",
    "extraTrackersEmpty": "还没有常用 Tracker。加入 http(s)／udp／ws(s) announce URL 才可靠外站找 peers。",
    "extraTrackerAdd": "加入",
    "extraTrackerUrl": "公布网址",
    "extraTrackerApply": "套用到现有做种",
    "extraTrackerApplyOk": "已套用常用 Tracker",
    "extraEnabled": "启用",
    "extraTrackerBad": "URL 必须以 http://、https://、udp://、ws:// 或 wss:// 开头",
    "extraTrackerDup": "清单已有此 URL",
    "extraTrackerLimit": "最多 32 个常用 Tracker",
    "addOk": "已加入资料库",
    "savedTo": "保存",
    "folderEmpty": "没有子文件夹",
    "needTorrentFile": "请选择 .torrent 文件",
    "torrentTooBig": ".torrent 大於 8 MiB",
    "seedStatusDownloading": "下載中",
    "seedStatusChecking": "檢查中",
    "seedStatusPaused": "已暫停",
    "seedStatusQueued": "排隊中",
    "swarmLeftover": "Tracker 记录另有 {{count}} 个 announce（不是数据库 Torrent 列；来源不同）",
    "addSourceSection": "来源",
    "addSourceFile": "文件",
    "addSourceMagnet": "磁铁",
    "previewSection": "预览",
    "saveRoot": "根目录",
    "clearFile": "清除文件",
    "extraTrackersTitle": "额外 announce",
    "extraTrackersEmptyTitle": "尚未加入 Tracker",
    "extraEnabledCount": "{{count}} 条已启用",
    "extraApplyHint": "至少启用一条才可套用到现有做种",
    "destMode": "此文件夹的用法",
    "seedExisting": "使用现有文件做种",
    "downloadNewFolder": "下载到新文件夹",
    "destFileConflict": "此处已有文件 {{name}}。请另选文件夹；若文件就是此 Torrent 的内容，请选「使用现有文件做种」。",
    "waitingPeers": "正在等待 peers。若文件已在此主机，请重新加入并选「使用现有文件做种」。"
  },
  "catalog": {
    "sw": {
      "vsftpd": "vsftpd（FTPS）",
      "db_util": "db-util（FTP 用户数据库）",
      "nginx": "Nginx",
      "certbot": "Certbot (Let's Encrypt)",
      "mysql_client": "MySQL／MariaDB 客户端",
      "mysql_server": "MySQL 服务器",
      "mariadb_server": "MariaDB 服务器",
      "postgresql_client": "PostgreSQL 客户端",
      "postgresql": "PostgreSQL 服务器",
      "redis_tools": "Redis 客户端",
      "redis_server": "Redis 服务器",
      "ufw": "UFW 防火墙",
      "fail2ban": "fail2ban",
      "postfix": "Postfix",
      "dovecot": "Dovecot",
      "opendkim": "OpenDKIM",
      "pdns_server": "PowerDNS",
      "git": "git",
      "node": "Node.js",
      "php": "PHP",
      "python": "Python",
      "go": "Go",
      "rust": "Rust",
      "chromium": "Chromium / Chrome"
    },
    "php": {
      "session": "会话",
      "opcache": "OPcache"
    }
  },
  "cdn": {
    "fromProjectOk": "已从项目创建 CDN 站点 — 请套用 edges / DNS",
    "fromProjectUpdated": "已更新项目绑定的 CDN 站点",
    "fromProjectFailed": "from-project 失败",
    "nodeUpdated": "节点已更新",
    "nodeCreated": "节点已建立",
    "saveFailed": "儲存失败",
    "geoMapInvalid": "geoMap JSON 无效，例：{\"hkg\":[\"node-id\"]}",
    "siteUpdated": "站点已更新",
    "siteCreated": "站点已建立",
    "probeOnline": "探活成功（online）",
    "probeOffline": "探活失败（offline）",
    "probeFailed": "探活失败",
    "batchProbeOk": "全部节点探活完成",
    "batchProbePartial": "部分／全部节点不健康",
    "batchProbeFailed": "批次探活失败",
    "drainingSet": "已设为 draining",
    "drainCleared": "已解除 drain",
    "confirmDeleteNode": "确定删除此 CDN 节点？",
    "nodeDeleted": "已删除节点",
    "deleteFailed": "刪除失败",
    "confirmDeleteSite": "确定删除此 CDN 站点？",
    "siteDeleted": "已删除站点",
    "blocked": "已封锁（需系统变更权限）",
    "previewRender": "预览渲染（{{status}}）hash={{hash}}",
    "fanoutDone": "Fan-out 完成（{{status}}）",
    "purgeDone": "Purge 完成（{{status}}）",
    "dnsSyncDone": "DNS 同步完成（{{status}}）",
    "sslDone": "SSL 操作完成（{{status}}）",
    "confWritten": "已写入 conf（{{status}}）",
    "partialFail": "未全部成功（{{status}}）— 见 notes",
    "statNodes": "节点",
    "hitNoStats": "尚无边缘统计",
    "loopbackOriginBlocked": "不会把回环 origin {{url}} 写到远端边缘。请先改成可达的 origin。",
    "applyFailedHint": "套用失败 — 见下方说明",
    "applyFailedNoNote": "没有存下失败原因。请再套用一次以记录错误。",
    "applyStatus": {
      "draft": "草稿",
      "planned": "已计划",
      "applying": "套用中",
      "applied": "已套用",
      "failed": "失败",
      "partial": "部分"
    },
    "statSites": "站点",
    "statSitesCount": "站点 {{n}}",
    "cacheMethod": {
      "none": "无法估计",
      "access_log": "存取日志",
      "cache_dir": "快取目录",
      "log_format": "需设定日志格式"
    },
    "geoMapLabel": "地区对照（JSON）",
    "statApplyFailed": "套用失败",
    "pillNodesSites": "{{n}} 个节点 · {{s}} 个站点",
    "statOnline": "线上",
    "statHit": "命中率",
    "hitUnknown": "未知",
    "lastHealthHint": "最后一次探测 {{at}} · {{ok}}",
    "lastHealthNever": "尚未探测 — 运行 Probe",
    "lastHealthFail": "探测失败",
    "healthLoopNeedSites": "先添加站点",
    "nodeStatus": {
      "online": "在线的",
      "offline": "离线",
      "draining": "排水",
      "unknown": "未知"
    },
    "recentNotes": "最近 notes",
    "previewOnlyNote": "本次仅预览，未写入边缘。",
    "statByRegion": "区域：",
    "statByApply": "套用状态：",
    "col": {
      "origin": "来源站",
      "edges": "边缘数",
      "apply": "套用状态",
      "dns": "DNS",
      "edgesOnline": "边缘 线上／已套用",
      "dnsRr": "CDN DNS 记录"
    },
    "mode": {
      "origin_pull": "回源拉取",
      "reverse_proxy": "反向代理",
      "static_edge": "静态边缘"
    },
    "dnsStrategy": {
      "multi_a": "多 A 记录",
      "cname": "CNAME",
      "geo": "地区"
    },
    "edgesOnlineApplied": "线上 {{online}}/{{total}} · 已套用 {{applied}}",
    "hitMiss": "命中 {{hits}}／未命中 {{misses}}",
    "cacheBytes": "快取约 {{n}} B",
    "hitRateUnknown": "找不到含快取状态的存取日志，也没有快取目录，因此无法估算命中率。",
    "edgeConfPreview": "Nginx edge conf 预览",
    "tabs": {
      "nodes": "节点",
      "sites": "站点",
      "dashboard": "仪表",
      "about": "说明"
    },
    "nodesTitle": "CDN 节点（{{count}}）",
    "nodesDesc": "登记 control / origin / edge / dns。探活更新 status。",
    "offlineHint": "离线／探活失败。若是测试残留，可删除此节点。",
    "colName": "名称",
    "colRole": "角色",
    "colStatus": "状态",
    "clearDrain": "解除 drain",
    "drain": "流走",
    "drainTitle": "停止向此边缘发送新的 CDN 流量",
    "drainDesc": "排空“{{name}}”？现有连接将保留直至完成。",
    "drainLastTitle": "这是最后一个边缘——排水将使每个站点都没有边缘",
    "drainLastDesc": "“{{name}}”是唯一的边缘。将其排干后，所有站点都没有边缘。",
    "clearDrainTitle": "再次在此边缘接受新流量",
    "clearDrainDesc": "清理“{{name}}”上的排水管吗？",
    "deleteNodeTitle": "删除此 CDN 边缘",
    "deleteLastNodeTitle": "删除最后一条边——所有站点都将没有边",
    "purge": "清除",
    "previewTitle": "预览 nginx 配置（不写）",
    "writeConfTitle": "编写边缘 nginx 配置文件",
    "applyEdgesTitle": "将此站点应用到边缘（写入 nginx）",
    "purgeTitle": "清除边缘缓存",
    "dnsSyncTitle": "写入CDN DNS记录",
    "probeDnsTitle": "探测边缘和 DNS（只读）",
    "distSslTitle": "将 TLS 材质复制到边缘",
    "leIssueTitle": "颁发 Let’s Encrypt 证书并分发",
    "deleteSiteTitle": "删除此 CDN 站点",
    "siteOpConfirmGeneric": "对“{{name}}”运行此操作吗？",
    "siteOpConfirmDesc": "站点“{{name}}”·{{action}}。这可以更改 nginx、DNS 或证书。",
    "siteOpConfirm": {
      "apply": "将这个网站应用到边缘？",
      "render": "为这个站点编写 nginx 配置吗？",
      "purge": "清除该网站的缓存吗？",
      "dns-sync": "同步此站点的 DNS 吗？",
      "dist": "将 TLS 分发到边缘？",
      "issue": "问题让我们加密并分发？"
    },
    "emptyNodesTitle": "尚未登記 CDN 节点",
    "emptyNodesDesc": "请使用右上角「+ 新增节点」登记 edge，再创建站点。",
    "sitesTitle": "CDN 站点（{{count}}）",
    "sitesDesc": "域名 + origin + edges + cache + multi-A DNS。套用 edges / DNS 同步 / purge。",
    "healthLoopOk": "全部站点健康循环完成",
    "healthLoopPartial": "健康循环部分失败",
    "healthLoopFailed": "health-loop 失败",
    "colDomain": "域名",
    "colMode": "模式",
    "emptySitesTitle": "尚未有 CDN 站点",
    "emptySitesDesc": "请用表格右上角「+ 新增站点」创建站点。",
    "emptySitesNoEdge": "尚无 edge：先到「节点」分页，用表格右上角「+ 新增节点」登记，再回来创建站点。",
    "dashboardTitle": "CDN 仪表",
    "updatedAt": "更新于 {{at}}",
    "dashboardEmpty": "尚未加载仪表",
    "siteStatus": "站點状态",
    "cacheHitEstimate": "缓存命中率粗估",
    "dashboardNotes": "仪表 notes",
    "editNode": "編輯 CDN 节点",
    "addNode": "新增 CDN 节点",
    "nodeAddrHint": "至少填 IPv4 / IPv6 / healthUrl / baseUrl 其中一项",
    "sshHostHint": "可空＝用 IPv4；127.0.0.1＝本机 local apply",
    "sshHostPlaceholder": "留空用 public IPv4",
    "sshUser": "SSH 用户",
    "fleetHint": "仅填 fleet、无 SSH 时：fan-out 会入队列给 agent（ysk-server agent loop），queued ≠ 已 r",
    "fleetPlaceholder": "Agents 页面 session UUID",
    "editSite": "編輯 CDN 站点",
    "addSite": "新增 CDN 站点",
    "originHint": "origin 先支持 URL；project 绑定后续强化",
    "commaSeparated": "逗号分隔",
    "originUrl": "edge 回源地址",
    "edgeNodes": "Edge 节点",
    "cache": "缓存",
    "dnsPolicy": "DNS 策略",
    "dnsPolicyHint": "multi_a=多 IP；failover=只写最健康一颗",
    "zoneOptional": "可空＝依域名自动匹配 zone",
    "sslMode": "SSL 模式",
    "sslModeHint": "upload＝SSL 页已有证书；le_http01＝edge ACME",
    "leEmailOptional": "LE email（可选）",
    "leEmailHint": "签发时预填",
    "shieldHint": "非 shield edge 经此节点回源",
    "geoMapHint": "strategy=geo 时用，例 {\"hkg\":[\"id1\"],\"nrt\":[\"id2\"]}",
    "geoSubdomain": "geo 子域名",
    "addNodeBtn": "+ 新增节点",
    "addSiteBtn": "+ 新增站点",
    "probeAll": "全部探活",
    "healthLoop": "健康循环",
    "setDraining": "设 draining",
    "fromProjectUpdatedAlt": "已更新项目绑定的 CDN 站点",
    "refresh": "刷新",
    "closePreview": "关闭预览",
    "probe": "探活",
    "preview": "预览",
    "writeConf": "写入 conf",
    "applyEdges": "套用 edges",
    "dnsSync": "DNS 同步",
    "probeDns": "探活+DNS",
    "distSsl": "分发 SSL",
    "leIssue": "LE 签发",
    "reaggregate": "重新汇总",
    "createEdgeFirst": "请先创建 edge 节点",
    "enableProxyCache": "启用 proxy_cache",
    "autoMatch": "（自动匹配）",
    "none": "（无）",
    "writeRegionDns": "写入 region 子域名 A/AAAA（如 hkg）",
    "workflowHint": "流程：写入 conf → 套用 edges → 探活+DNS → SSL。项目一键：/cdn?fromProject=项目ID",
    "healthLoopAll": "全站健康循环",
    "deleteNodeDesc": "将删除 CDN 节点「{{name}}」。",
    "deleteSiteDesc": "将删除 CDN 站点「{{name}}」。",
    "deleteSiteC1": "站点策略与边缘关联",
    "deleteSiteC2": "已下发的 nginx 配置需另行清理或重新应用",
    "statOnlineOf": "线上 {{n}}/{{total}}",
    "colRegion": "区域",
    "statDraining": "排空中 {{n}}",
    "statOffline": "离线 {{n}}",
    "localTest": "本机／测试",
    "statHitRate": "命中率 {{v}}"
  },
  "cli": {
    "unknownCommand": "未知命令：{{command}}\n执行 `{{cli}} help`",
    "usagePrefix": "用法：",
    "security": {
      "help": "用法：ysk-server security status\n       ysk-server security sessions list|revoke|revoke-others [--user U]\n       ysk-server security api-keys list|create|delete …",
      "sessionsHelp": "用法：ysk-server security sessions list [--user U]\n       ysk-server security sessions revoke --id PREFIX [--user U]\n       ysk-server security sessions revoke-others [--user U] [--keep-token T]",
      "apiKeysHelp": "用法：ysk-server security api-keys list\n       ysk-server security api-keys create --name N [--user U] [--scope full|read]\n       ysk-server security api-keys delete --id KEY_ID",
      "noUser": "找不到用户。请先创建管理员，或传入 --user <名称|id>",
      "tokenOnce": "token 只显示一次 — 请妥善保存",
      "sessionRevokeUsage": "用法：ysk-server security sessions revoke --id <sessionIdPrefix> [--user U]",
      "apiKeyDeleteUsage": "用法：ysk-server security api-keys delete --id KEY_ID"
    },
    "help": {
      "blurb": "控制平面 CLI — AI agent 请优先用 --json。\n文档：docs/agent/README.md · docs/cli/reference.md · docs/agent/commands.json",
      "main": "{{product}} ({{cli}}) v{{version}}\n\n控制平面 CLI — AI agent 请优先用 --json。\n文件：docs/agent/README.md · docs/cli/reference.md · docs/agent/commands.json\n\n用法：\n  {{cli}} <command> [options]\n\n命令：\n  setup                 初始化 dataDir + 管理员\n  update                自我更新检查／套用\n  serve                 HTTP API + Web UI\n  system unit-install   安装 ysk-server.service [--enable]\n  tools                 工具列表；tools run --tool <name> [--dry-run]\n  ask                   自然语言 → AI 计划 [--execute]\n  projects              list|get|create|deploy|stop|health|backup|template\n  backup                all|list|status|restore|delete|schedule|control-plane|settings|restic\n  templates             应用范本\n  hosting               nginx|dns|db|firewall 辅助\n  dns                   zone|zones|lookup|ddns（AI 别名 → hosting dns-*）\n  logs                  sources|query|journal|overview\n  host                  overview|metrics（唯读）\n  nginx                 status|list|test|sync\n  ssl                   list|get（憑证）\n  db-cluster            list|get|create|plan（HA 先计划）\n  ssh-key               list|create|import|public|export|install|delete（SSH 身分库）\n  ssh-2fa               list|enroll|confirm|install|pam|retire（SSH 登入 TOTP ≠ 面板 2FA）\n  services              主机服務矩阵（systemctl 探测）\n  defense | protection  status|ban|unban|whitelist\n  security              status|sessions|api-keys（2FA · 撤销工作阶段 · API 金钥）\n  cdn                   nodes|sites|render|apply|purge|probe|dashboard|health-loop|from-project\n  agents                runtimes|fleet list|commands|register（面板 + 边缘）\n  agent run             外送 fleet 轮询（实验）\n  store                 status|export|import|migrate（json|sqlite|postgres document 后端）\n  files                 list|read|write|mkdir|rm|stat|rename|copy|move|chmod|trash|shares（沙箱）\n  cron                  list|create|update|delete|enable|disable|run|install|status|host\n  email                 domains|mailboxes|deliverability|bootstrap|dns（面板对等）\n  health                本机模式快照或 --url http://host:port/health\n  readiness | doctor    生产就绪（诚实）\n  migrate               inventory|host|post|status|resume（整机迁移）\n  validators            list|chains|disk|get|checklist (Beta)\n  docker                status|ps|images|compose|prune (engine)\n  version | help\n\n全域：\n  --json                JSON 标准输出（AI）\n  --data-dir PATH\n  --config PATH\n  --help | --version\n\n结束码：0 成功 · 1 错误 · 2 验证 · 3 阻挡 · 4 找不到 · 5 主机错误\n\n安全：\n  危险操作预设 dry-run（只出计划）。\n  传 --execute（别名 --apply）+ 环境变数 YSK_EXECUTE=1 才改主机。\n\n例子：\n  {{cli}} readiness --json\n  {{cli}} host --json\n  {{cli}} nginx status --json\n  {{cli}} ssl list --json\n  {{cli}} projects get --id UUID --json\n  {{cli}} defense ban --ip 1.2.3.4 --json          # dry-run 计划\n  {{cli}} projects list --json\n  {{cli}} logs query --source journal: --lines 100 --json\n  {{cli}} tools --json"
    },
    "usage": {
      "tools": {
        "run": {
          "--tool": {
            "name": {
              "--arg": {
                "cd327c": "用法： ysk-server tools run --tool <name> [--arg key=val] [--dry-run]\n"
              }
            }
          }
        }
      },
      "email": {
        "domains": {
          "list": {
            "create": {
              "get": {
                "b94a62": "用法： ysk-server email domains list|create|get …\n"
              }
            }
          },
          "create": {
            "--domain": {
              "example": {
                "bd4036": "用法： ysk-server email domains create --domain example.com --ip A.B.C.D\n"
              }
            }
          }
        },
        "mailboxes": {
          "list": {
            "create": {
              "42b26c": "用法： ysk-server email mailboxes list|create …\n"
            }
          },
          "create": {
            "--domain": {
              "example": {
                "7227f3": "用法： ysk-server email mailboxes create --domain example.com --local user [--password P]\n"
              }
            }
          }
        },
        "dns": {
          "--domain": {
            "example": {
              "com": {
                "26b806": "用法： ysk-server email dns --domain example.com\n"
              }
            }
          }
        },
        "sub": {
          "--data-dir": {
            "path": {
              "--json": {
                "73dad0": "用法： ysk-server email <sub> [--data-dir PATH] [--json]\n  domains list|create|get [--q TEXT]\n    create --domain example.com --ip A.B.C.D\n    get --domain example.com | --id UUID\n  mailboxes list|create [--domain D | --id domainId]\n    create --domain D --local user [--password P]\n  deliverability --domain D | --id UUID\n  deliverability-overview\n  bootstrap --domain D --ip A.B.C.D [--install]\n  dns --domain D | --id UUID     # DNS bundle for panel\nAlso: hosting email-apply|email-mailbox|email-deliverability (aliases)\n"
              }
            }
          }
        },
        "deliverability": {
          "--domain": {
            "example": {
              "com": {
                "b0dff0": "用法： ysk-server email deliverability --domain example.com\n"
              }
            }
          }
        },
        "bootstrap": {
          "--domain": {
            "example": {
              "com": {
                "affc8d": "用法： ysk-server email bootstrap --domain example.com --ip 1.2.3.4 [--install]\n"
              }
            }
          }
        }
      },
      "cron": {
        "delete": {
          "--id": {
            "job": {
              "id": {
                "f6aafe": "用法： ysk-server cron delete --id JOB_ID\n"
              }
            }
          }
        },
        "sub": {
          "--id": {
            "job": {
              "id": {
                "99cfdf": "用法： ysk-server cron {{sub}} --id JOB_ID\n"
              }
            }
          },
          "--data-dir": {
            "path": {
              "--json": {
                "0349e6": "用法： ysk-server cron <sub> [--data-dir PATH] [--json]\n  list [--project-id ID] [--q TEXT]\n  create --schedule \"0 3 * * *\" --command CMD [--project-id ID] [--user USER]\n  update --id JOB_ID [--schedule S] [--command CMD] [--user USER] [--project-id ID] [--enable|--disable]\n  delete --id JOB_ID\n  enable|disable --id JOB_ID\n  run --id JOB_ID              # run-now (needs YSK_EXECUTE=1)\n  install                     # load managed crontab (needs EXECUTE)\n  status                      # probe managed file vs host crontab\n  host [list] [--user USER] [--jobs-only]\n  host edit --user USER --old-schedule S --old-command C --schedule S --command C --execute\n  host disable|enable|delete|adopt --user USER --old-schedule S --old-command C --execute\n  host run --user USER --command C --execute\n诚实：未设置 YSK_EXECUTE=1 时，install 与 host 写入会封锁。\n"
              }
            }
          }
        },
        "run": {
          "--id": {
            "job": {
              "id": {
                "a0a97f": "用法： ysk-server cron run --id JOB_ID\n"
              }
            }
          }
        },
        "create": {
          "--schedule": {
            "0": {
              "3": {
                "9a8328": "用法： ysk-server cron create --schedule \"0 3 * * *\" --command CMD [--project-id ID] [--user USER]\n"
              }
            }
          }
        }
      },
      "files": {
        "stat": {
          "--path": {
            "rel": {
              "17c8f2": "用法： ysk-server files stat --path REL\n"
            }
          }
        },
        "read": {
          "--path": {
            "rel": {
              "e35f8d": "用法： ysk-server files read --path REL\n"
            }
          }
        },
        "mkdir": {
          "--path": {
            "rel": {
              "ae0438": "用法： ysk-server files mkdir --path REL\n"
            }
          }
        },
        "rm": {
          "--path": {
            "rel": {
              "--permanent": {
                "fe2051": "用法： ysk-server files rm --path REL [--permanent]\n"
              }
            }
          }
        },
        "rename": {
          "--from": {
            "rel": {
              "--to": {
                "35a260": "用法： ysk-server files rename --from REL --to REL\n"
              }
            }
          }
        },
        "copy": {
          "--from": {
            "rel": {
              "--to": {
                "5337f4": "用法： ysk-server files copy --from REL --to REL\n"
              }
            }
          }
        },
        "move": {
          "--from": {
            "rel": {
              "--to": {
                "75cf5d": "用法： ysk-server files move --from REL --to REL\n"
              }
            }
          }
        },
        "chmod": {
          "--path": {
            "rel": {
              "--mode": {
                "39f983": "用法： ysk-server files chmod --path REL --mode 644\n"
              }
            }
          }
        },
        "trash": {
          "restore": {
            "--id": {
              "trash": {
                "c89ce9": "用法： ysk-server files trash restore --id TRASH_ID\n"
              }
            }
          },
          "list": {
            "restore": {
              "purge": {
                "ef063d": "用法： ysk-server files trash list|restore|purge\n"
              }
            }
          }
        },
        "shares": {
          "list": {
            "ac342c": "用法： ysk-server files shares list\n"
          }
        },
        "webdav": {
          "status": {
            "token": {
              "disable": {
                "f8e94b": "用法： ysk-server files webdav status|token|disable\n"
              }
            }
          }
        },
        "sub": {
          "--root": {
            "public": {
              "project": {
                "42ebd4": "用法： ysk-server files <sub> [--root public|project:ID] [--data-dir PATH] [--json]\n  list   [--path DIR] [--q TEXT] [--sort name|size|mtime] [--order asc|desc]\n  stat   --path REL\n  read   --path REL\n  write  --path REL --content TEXT | --file LOCAL\n  mkdir  --path REL\n  rm     --path REL [--permanent]\n  rename --from REL --to REL\n  copy   --from REL --to REL\n  move   --from REL --to REL\n  chmod  --path REL --mode 644\n  trash  list|restore|purge [--id TRASH_ID]\n  shares list\n  favorites list\n  upload --dir REL --file LOCAL [--file LOCAL2…]\n  webdav status|token|disable\nSandbox: only public files root or project home (path-constrained).\n"
              }
            }
          }
        },
        "write": {
          "--path": {
            "rel": {
              "--content": {
                "0addb1": "用法： ysk-server files write --path REL --content TEXT | --file LOCAL\n"
              }
            }
          }
        },
        "upload": {
          "--dir": {
            "rel": {
              "--file": {
                "f8c3bf": "用法： ysk-server files upload --dir REL --file LOCAL [--file LOCAL2…]\n"
              }
            }
          }
        }
      },
      "store": {
        "import": {
          "--in": {
            "file": {
              "json": {
                "5b6fdd": "用法： ysk-server store import --in FILE.json\n"
              }
            }
          }
        },
        "sub": {
          "--data-dir": {
            "path": {
              "--json": {
                "d580e4": "用法： ysk-server store <sub> [--data-dir PATH] [--json]\n  status                         Show backend kind + counts\n  export --out FILE.json         Dump document snapshot\n  import --in FILE.json          Overwrite snapshot from file\n  migrate --to sqlite|json [--out PATH]\n    Copy current store into another backend file\nEnv: YSK_STORE=json|sqlite|postgres  YSK_DATABASE_URL=postgres://…\nHonesty: document-blob backends (not full relational schema yet).\n"
              }
            }
          }
        },
        "migrate": {
          "--to": {
            "json": {
              "sqlite": {
                "1c52a3": "用法： ysk-server store migrate --to json|sqlite [--out PATH]\n  (postgres: export JSON then import under YSK_DATABASE_URL)\n"
              }
            }
          }
        }
      },
      "cdn": {
        "nodes": {
          "delete": {
            "--id": {
              "node": {
                "0c6a1e": "用法： ysk-server cdn nodes delete --id NODE_ID\n"
              }
            }
          },
          "drain": {
            "--id": {
              "node": {
                "a8aa81": "用法： ysk-server cdn nodes drain --id NODE_ID [--off]\n"
              }
            }
          },
          "list": {
            "upsert": {
              "delete": {
                "52549e": "用法： ysk-server cdn nodes list|upsert|delete|probe|drain …\n"
              }
            }
          },
          "upsert": {
            "--name": {
              "name": {
                "8f6f39": "用法： ysk-server cdn nodes upsert --name NAME [--id ID] [--base-url U] [--fleet-agent-id S] [--ssh-host H] [--region R]\n"
              }
            }
          }
        },
        "sites": {
          "get": {
            "--id": {
              "site": {
                "3c3c35": "用法： ysk-server cdn sites get --id SITE_ID\n"
              }
            }
          },
          "delete": {
            "--id": {
              "site": {
                "51ef8f": "用法： ysk-server cdn sites delete --id SITE_ID\n"
              }
            }
          },
          "list": {
            "get": {
              "upsert": {
                "609da6": "用法： ysk-server cdn sites list|get|upsert|delete …\n"
              }
            }
          },
          "upsert": {
            "--name": {
              "n": {
                "6ebb75": "用法： ysk-server cdn sites upsert --name N --domains a.com,b.com [--edge-id ID]… [--origin-url U] [--origin-project ID]\n"
              }
            }
          }
        },
        "render": {
          "--site-id": {
            "id": {
              "--dry-run": {
                "2149eb": "用法： ysk-server cdn render --site-id ID [--dry-run]\n"
              }
            }
          }
        },
        "apply": {
          "--site-id": {
            "id": {
              "--edge-id": {
                "a527b3": "用法： ysk-server cdn apply --site-id ID [--edge-id EDGE]\n"
              }
            }
          }
        },
        "purge": {
          "--site-id": {
            "id": {
              "--edge-id": {
                "bc08ec": "用法： ysk-server cdn purge --site-id ID [--edge-id EDGE]\n"
              }
            }
          }
        },
        "dns-sync": {
          "--site-id": {
            "id": {
              "--apply-zone": {
                "343068": "用法： ysk-server cdn dns-sync --site-id ID [--apply-zone]\n"
              }
            }
          }
        },
        "sub": {
          "--data-dir": {
            "path": {
              "--json": {
                "092842": "用法： ysk-server cdn <sub> [--data-dir PATH] [--json]\n  nodes list|upsert|delete|probe|drain\n  sites list|upsert|delete|get\n  render --site-id ID [--dry-run]\n  apply  --site-id ID [--edge-id ID]   # fan-out (fleet queue ok without EXECUTE)\n  purge  --site-id ID [--edge-id ID]\n  dns-sync --site-id ID [--apply-zone]\n  probe | dashboard | health-loop [--apply-zone]\n  from-project --project-id ID [--edge-id ID…]\nHonesty: apply_status written/queued ≠ edge nginx applied until agent ack / EXECUTE reload.\n"
              }
            }
          }
        },
        "from-project": {
          "--project-id": {
            "id": {
              "--edge-id": {
                "a96f42": "用法： ysk-server cdn from-project --project-id ID [--edge-id ID]…\n"
              }
            }
          }
        }
      },
      "agents": {
        "fleet": {
          "remove": {
            "--session": {
              "session": {
                "1827fe": "用法： ysk-server agents fleet remove --session SESSION_ID\n"
              }
            }
          },
          "register": {
            "--id": {
              "agent": {
                "209b2d": "用法： ysk-server agents fleet register --id AGENT_ID [--group g] [--edge]\n"
              }
            }
          },
          "commands": {
            "--session": {
              "session": {
                "f8067c": "用法： ysk-server agents fleet commands --session SESSION_ID\n"
              }
            }
          }
        },
        "register": {
          "--id": {
            "agent": {
              "id": {
                "3c4477": "用法： ysk-server agents register --id AGENT_ID [--group g]\n"
              }
            }
          }
        },
        "commands": {
          "--session": {
            "session": {
              "id": {
                "e620d2": "用法： ysk-server agents commands --session SESSION_ID\n"
              }
            }
          }
        },
        "runtimes": {
          "probe": {
            "fleet": {
              "list": {
                "261fa4": "用法： ysk-server agents [runtimes|probe|fleet list|fleet register|fleet commands|register|commands]\n"
              }
            }
          }
        }
      },
      "agent": {
        "run": {
          "--control-plane": {
            "url": {
              "--id": {
                "cfefbe": "用法： ysk-server agent run --control-plane URL --id AGENT_ID [--group g]\n"
              }
            }
          }
        }
      },
      "ask": {
        "check": {
          "system": {
            "info": {
              "b0c781": "用法： ysk-server ask \"check system info\"\n"
            }
          }
        }
      },
      "backup": {
        "delete": {
          "--project-id": {
            "id": {
              "--name": {
                "d66c29": "用法： ysk-server backup delete --project-id ID --name ARCHIVE\n"
              }
            }
          }
        },
        "restic": {
          "list": {
            "run": {
              "restore": {
                "10402b": "用法： ysk-server backup restic list|run|restore …\n"
              }
            }
          },
          "restore": {
            "--project-id": {
              "id": {
                "a8f133": "用法： ysk-server backup restic restore --project-id ID --snapshot SNAP [--dry-run] [--overwrite-home --confirm PHRASE]\n"
              }
            }
          }
        },
        "sub": {
          "--data-dir": {
            "path": {
              "--json": {
                "777243": "用法： ysk-server backup <sub> [--data-dir PATH] [--json]\n  all                         Backup all project homes (+ remote/restic side when configured)\n  list [--project-id ID] [--q TEXT]\n  status                      Last run + schedule probe\n  restore --project-id ID --name ARCHIVE [--mode full|web|dry-run]\n  delete  --project-id ID --name ARCHIVE\n  schedule [--cron \"0 3 * * *\"] [--install]\n  control-plane               Snapshot ysk.json + config.json\n  control-plane-restore --name ARCHIVE [--mode dry-run|full] [--confirm RESTORE-CONTROL-PLANE]\n  settings [get|set]          Remote / exclusions / restic\n    set --remote-kind local|sftp|s3 --remote-path P [--remote-host H] …\n    set --exclude a,b,c | --exclusions-file FILE\n    set --restic-enable --restic-password P [--restic-repo PATH]\n    set --from-json FILE      # full patch {remote?,exclusions?,restic?}\n  restic list|run|restore     Incremental restic helpers\n"
              }
            }
          }
        },
        "control-plane-restore": {
          "--name": {
            "archive": {
              "--mode": {
                "316a76": "用法： ysk-server backup control-plane-restore --name ARCHIVE [--mode dry-run|full] [--confirm RESTORE-CONTROL-PLANE]\n"
              }
            }
          }
        },
        "restore": {
          "--project-id": {
            "id": {
              "--name": {
                "bc7041": "用法： ysk-server backup restore --project-id ID --name ARCHIVE [--mode full|web|dry-run]\n"
              }
            }
          }
        }
      },
      "packages": {
        "list": {
          "--q": {
            "text": {
              "b8e16b": "用法： ysk-server packages list [--q text]\n"
            }
          }
        }
      },
      "projects": {
        "stop": {
          "--id": {
            "projectid": {
              "b15409": "用法： ysk-server projects stop --id <projectId>\n"
            }
          }
        },
        "backup": {
          "--id": {
            "projectid": {
              "e62846": "用法： ysk-server projects backup --id <projectId>\n"
            }
          }
        },
        "health": {
          "--id": {
            "projectid": {
              "e816ec": "用法： ysk-server projects health --id <projectId>\n"
            }
          }
        },
        "isolation": {
          "provision": {
            "--id": {
              "projectid": {
                "5aff44": "用法： ysk-server projects isolation provision --id <projectId>\n       ysk-server projects isolation provision-all [--limit 20]\n"
              }
            }
          },
          "backfill-owners": {
            "--owner-user-id": {
              "id": {
                "8691da": "用法： ysk-server projects isolation backfill-owners --owner-user-id <id>\n"
              }
            }
          },
          "list": {
            "provision": {
              "provision-all": {
                "8e9da3": "用法： ysk-server projects isolation list|provision|provision-all|backfill-owners\n"
              }
            }
          }
        },
        "get": {
          "--id": {
            "projectid": {
              "name": {
                "b0d532": "用法： ysk-server projects get --id <projectId|name> [--json]\n"
              }
            }
          }
        },
        "create": {
          "--name": {
            "name": {
              "--domain": {
                "66e857": "用法： ysk-server projects create --name <name> [--domain d] [--runtime node|php|static|python|go|rust] [--template id] [--create-dns] [--create-mail] [--server-ip A.B.C.D] [--server-ipv6 ADDR]\n"
              }
            }
          }
        },
        "deploy": {
          "--id": {
            "projectid": {
              "--entry": {
                "339111": "用法： ysk-server projects deploy --id <projectId> [--entry f] [--port N] [--fpm|--builtin] [--reload]\n"
              }
            }
          }
        },
        "git-deploy": {
          "--id": {
            "id": {
              "--git-url": {
                "a513f5": "用法： ysk-server projects git-deploy --id ID [--git-url URL] [--branch main] [--no-redeploy] [--depth 1] [--entry f]\n"
              }
            }
          }
        },
        "template": {
          "--id": {
            "projectid": {
              "--template": {
                "591ce4": "用法： ysk-server projects template --id <projectId> --template <id> [--force]\n"
              }
            }
          }
        },
        "list": {
          "get": {
            "create": {
              "deploy": {
                "253b48": "用法： ysk-server projects list|get|create|deploy|git-deploy|stop|backup|template|ftp|health [options]\n  deploy --id UUID [--entry f] [--port N] [--fpm|--builtin] [--reload]\n  git-deploy --id UUID [--git-url URL] [--branch B] [--no-redeploy]\n  ftp --id UUID --password P [--user NAME] [--home app|root]\n"
              }
            }
          }
        }
      },
      "cli": {
        "name": {
          "db-cluster": {
            "get": {
              "--id": {
                "00f803": "用法： {{CLI_NAME}} db-cluster get --id UUID [--json]\n"
              }
            },
            "plan": {
              "--id": {
                "483f52": "用法： {{CLI_NAME}} db-cluster plan --id UUID [--json]\n"
              }
            },
            "artifacts": {
              "--id": {
                "6b33c4": "用法： {{CLI_NAME}} db-cluster artifacts --id UUID [--json]\n"
              }
            },
            "bundle": {
              "--id": {
                "94ed27": "用法： {{CLI_NAME}} db-cluster bundle --id UUID [--json]\n"
              }
            },
            "delete": {
              "--id": {
                "3de0e4": "用法： {{CLI_NAME}} db-cluster delete --id UUID [--json]\n"
              }
            },
            "create": {
              "--name": {
                "e3b733": "用法： {{CLI_NAME}} db-cluster create --name N --engine mariadb --kind mariadb-galera --member HOST=role[:access] ...\n"
              }
            },
            "apply": {
              "--id": {
                "4cddb8": "用法： {{CLI_NAME}} db-cluster apply --id UUID [--execute] [--bootstrap] [--json]\n"
              }
            },
            "probe": {
              "--id": {
                "22870c": "用法： {{CLI_NAME}} db-cluster probe --id UUID [--peers] [--json]\n"
              }
            },
            "install-peers": {
              "--id": {
                "600b02": "用法： {{CLI_NAME}} db-cluster install-peers --id UUID [--execute] [--no-restart] [--identity ID] [--json]\n"
              }
            },
            "push": {
              "--id": {
                "697080": "用法： {{CLI_NAME}} db-cluster push --id UUID [--member ID] [--identity ID] [--execute] [--json]\n"
              }
            },
            "fleet": {
              "--id": {
                "239462": "用法： {{CLI_NAME}} db-cluster fleet --id UUID [--op apply|probe|plan] [--execute] [--edge-execute] [--json]\n"
              }
            },
            "list": {
              "get": {
                "3b9cfa": "用法： {{CLI_NAME}} db-cluster list|get|create|plan|apply|probe|install-peers|artifacts|bundle|push|fleet|overview|delete [--peers] [--execute] [--json]\n"
              }
            }
          },
          "ssh-key": {
            "get": {
              "--id": {
                "292716": "用法： {{CLI_NAME}} ssh-key get --id UUID [--json]\n"
              }
            },
            "public": {
              "--id": {
                "525d7d": "用法： {{CLI_NAME}} ssh-key public --id UUID\n"
              }
            },
            "export": {
              "--id": {
                "0a6d81": "用法： {{CLI_NAME}} ssh-key export --id UUID [--out PATH] [--json]\n"
              }
            },
            "delete": {
              "--id": {
                "a6e2f2": "用法： {{CLI_NAME}} ssh-key delete --id UUID [--json]\n"
              }
            },
            "create": {
              "--name": {
                "8b1d79": "用法： {{CLI_NAME}} ssh-key create --name N [--algo ed25519|rsa-4096] [--purpose user|panel|unbound] [--project ID] [--user U] [--home PATH] [--reveal] [--json]\n"
              }
            },
            "import": {
              "--name": {
                "6eb800": "用法： {{CLI_NAME}} ssh-key import --name N --file PATH [--purpose panel|user] [--json]\n"
              }
            },
            "install": {
              "--id": {
                "b99c56": "用法： {{CLI_NAME}} ssh-key install --id UUID [--execute] [--json]\n"
              }
            },
            "test": {
              "--id": {
                "e1aed3": "用法： {{CLI_NAME}} ssh-key test --id UUID --target user@host[:port] [--execute] [--json]\n"
              }
            },
            "rotate": {
              "--id": {
                "9c3224": "用法： {{CLI_NAME}} ssh-key rotate --id UUID [--reveal] [--json]\n"
              }
            },
            "authorize-self": {
              "--id": {
                "b7ea2e": "用法： {{CLI_NAME}} ssh-key authorize-self --id UUID [--json]\n"
              }
            },
            "uninstall": {
              "--id": {
                "afcba0": "用法： {{CLI_NAME}} ssh-key uninstall --id UUID [--execute] [--json]\n"
              }
            },
            "list": {
              "get": {
                "2c92c6": "用法： {{CLI_NAME}} ssh-key list|get|create|import|public|export|install|test|rotate|authorize-self|uninstall|delete [--json]\n"
              }
            }
          },
          "ssh-2fa": {
            "reveal": {
              "--id": {
                "a6c27f": "用法： {{CLI_NAME}} ssh-2fa reveal --id UUID [--json]\n"
              }
            },
            "retire": {
              "--id": {
                "6e1fa3": "用法： {{CLI_NAME}} ssh-2fa retire --id UUID [--json]\n"
              }
            },
            "enroll": {
              "--user": {
                "081432": "用法： {{CLI_NAME}} ssh-2fa enroll --user LINUX|--project ID [--home PATH] [--from-panel] [--json]\n"
              }
            },
            "confirm": {
              "--id": {
                "9ee8a2": "用法： {{CLI_NAME}} ssh-2fa confirm --id UUID --code 123456 [--json]\n"
              }
            },
            "install": {
              "--id": {
                "dace06": "用法： {{CLI_NAME}} ssh-2fa install --id UUID [--execute] [--json]\n"
              }
            },
            "uninstall": {
              "--id": {
                "0bb464": "用法： {{CLI_NAME}} ssh-2fa uninstall --id UUID [--execute] [--json]\n"
              }
            },
            "list": {
              "enroll": {
                "802ed0": "用法： {{CLI_NAME}} ssh-2fa list|enroll|confirm|install|uninstall|pam|reveal|retire [--json]\n"
              }
            }
          },
          "ssl": {
            "list": {
              "get": {
                "79c232": "用法： {{CLI_NAME}} ssl list|get --domain X [--json]\n"
              }
            },
            "get": {
              "--domain": {
                "91c444": "用法： {{CLI_NAME}} ssl get --domain example.com [--json]\n"
              }
            }
          },
          "dns": {
            "zone": {
              "--zone": {
                "ad30fa": "用法： {{CLI_NAME}} dns zone --zone example.com --ip A.B.C.D [--ipv6 X:X::X] [--validate] [--reload]\n"
              }
            },
            "zones": {
              "zone": {
                "5b8bda": "用法： {{CLI_NAME}} dns zones|zone --zone X --ip A.B.C.D [--ipv6 …] [--json]\n"
              }
            }
          },
          "nginx": {
            "status": {
              "list": {
                "d67a16": "用法： {{CLI_NAME}} nginx status|list|test|sync [--execute] [--json]\n"
              }
            }
          },
          "host": {
            "overview": {
              "metrics": {
                "93c828": "用法： {{CLI_NAME}} host overview|metrics|network [--path /] [--json]\n"
              }
            }
          },
          "logs": {
            "sources": {
              "overview": {
                "79058c": "用法： {{CLI_NAME}} logs sources|overview|units|journal|query [--source id] [--json]\n"
              }
            }
          },
          "services": {
            "sub": {
              "--unit": {
                "4fe3fa": "用法： {{CLI_NAME}} services {{sub}} --unit <systemd-unit> [--execute] [--json]\n"
              }
            },
            "matrix": {
              "start": {
                "4f3a35": "用法： {{CLI_NAME}} services matrix|start|stop|restart|reload --unit NAME [--execute] [--json]\n"
              }
            }
          },
          "defense": {
            "ban": {
              "--ip": {
                "cc22de": "用法： {{CLI_NAME}} defense ban --ip <ip> [--method fail2ban|ufw|both] [--reason t] [--execute]\n"
              }
            },
            "unban": {
              "--ip": {
                "46aa23": "用法： {{CLI_NAME}} defense unban --ip <ip> [--method fail2ban|ufw|both] [--execute]\n"
              }
            },
            "whitelist": {
              "--action": {
                "c1cbdf": "用法： {{CLI_NAME}} defense whitelist --action list|add|remove [--ip IP]\n"
              }
            },
            "status": {
              "bans": {
                "a8d96b": "用法： {{CLI_NAME}} defense status|bans|suspects|ban|unban|whitelist|stack-apply|fail2ban|firewall|timeline|presets [--json]\n  bans [--q text] [--source fail2ban|panel|ufw|auto]\n  suspects [--q text]\n  stack-apply [--execute]   # UFW + fail2ban + current preset\n  fail2ban | firewall       # deep probes (honest)\n  timeline [--limit N] [--q text]\n  presets                   # list + activePreset\n"
              }
            }
          }
        }
      },
      "system": {
        "unit-install": {
          "--enable": {
            "--data-dir": {
              "path": {
                "33daa1": "用法： ysk-server system unit-install [--enable] [--data-dir PATH]\n"
              }
            }
          }
        }
      },
      "users": {
        "create": {
          "--username": {
            "u": {
              "--password": {
                "7145c7": "用法： ysk-server users create --username <u> --password <p> [--role operator|viewer|admin] [--package-id id]\n"
              }
            }
          }
        },
        "list": {
          "--q": {
            "text": {
              "--role": {
                "544685": "用法： ysk-server users list [--q text] [--role admin|operator|viewer]\n       ysk-server users create --username u --password p [--role operator]\n"
              }
            }
          }
        }
      },
      "rbac": {
        "list": {
          "policies": {
            "330ade": "用法： ysk-server rbac list|policies\n       ysk-server rbac show --role operator\n       ysk-server rbac audit   # route→cap sample matrix\n"
          }
        }
      },
      "hosting": {
        "postgres-provision": {
          "--db": {
            "name": {
              "--user": {
                "2c8889": "用法： ysk-server hosting postgres-provision --db NAME --user U --password P(min8) [--execute]\n  Default dry-run (no host change). Pass --execute + YSK_EXECUTE=1 to apply.\n"
              }
            }
          }
        },
        "mysql-provision": {
          "--db": {
            "name": {
              "--user": {
                "fc25aa": "用法： ysk-server hosting mysql-provision --db NAME --user U --password P(min8) [--execute]\n  Default dry-run (no host change). Pass --execute + YSK_EXECUTE=1 to apply.\n"
              }
            }
          }
        },
        "dns-zone": {
          "--zone": {
            "example": {
              "com": {
                "bdaa0d": "用法： ysk-server hosting dns-zone --zone example.com --ip A.B.C.D [--ipv6 X:X::X] [--validate] [--reload]\n"
              }
            }
          }
        },
        "powerdns-load": {
          "--zone": {
            "example": {
              "com": {
                "dba49c": "用法： ysk-server hosting powerdns-load --zone example.com --ip A.B.C.D [--ipv6 X:X::X] [--load|--execute]\n"
              }
            }
          }
        },
        "email-apply": {
          "--domain": {
            "example": {
              "com": {
                "37d350": "用法： ysk-server hosting email-apply --domain example.com [--install|--execute]\n"
              }
            }
          }
        },
        "email-mailbox": {
          "--domain": {
            "x": {
              "--local": {
                "3d9be3": "用法： ysk-server hosting email-mailbox --domain X --local user [--password P] [--ip A.B.C.D]\n"
              }
            }
          }
        },
        "ftps-apply": {
          "--domain": {
            "files": {
              "example": {
                "284a7c": "用法： ysk-server hosting ftps-apply --domain files.example.com [--install|--execute]\n"
              }
            }
          }
        },
        "webmail-apply": {
          "--domain": {
            "webmail": {
              "example": {
                "2ad5b5": "用法： ysk-server hosting webmail-apply --domain webmail.example.com [--download]\n"
              }
            }
          }
        },
        "public-files": {
          "--domain": {
            "files": {
              "example": {
                "0e9013": "用法： ysk-server hosting public-files --domain files.example.com [--reload]\n"
              }
            }
          }
        },
        "email-deliverability": {
          "--domain": {
            "example": {
              "com": {
                "8774a4": "用法： ysk-server hosting email-deliverability --domain example.com\n       ysk-server hosting email-deliverability --id <domainId>\n"
              }
            }
          }
        },
        "email-bootstrap": {
          "--domain": {
            "example": {
              "com": {
                "796da5": "用法： ysk-server hosting email-bootstrap --domain example.com --ip 1.2.3.4 [--admin postmaster] [--password P] [--install]\n"
              }
            }
          }
        }
      },
      "migrate": {
        "post": {
          "--job": {
            "id": {
              "--data-dir": {
                "6a73cd": "用法： ysk-server migrate post --job <id> --data-dir PATH --execute\n"
              }
            }
          }
        },
        "host": {
          "--target": {
            "root": {
              "new": {
                "3e94a2": "用法： ysk-server migrate host --target root@NEW_IP [--identity-file PATH|--identity-id ID] [--password] --execute --data-dir PATH\n"
              }
            }
          }
        }
      },
      "x": {
        "972912": "用法：\n  ysk-server migrate inventory [--data-dir PATH] --json\n  ysk-server migrate host --target root@IP [--identity-file PATH|--identity-id ID|--password PW] --execute [--maintenance] [--force-wipe-target]\n  ysk-server migrate post --job ID --data-dir PATH --execute   # 在目标机\n  ysk-server migrate status [--job ID]\n  ysk-server migrate resume --job ID --execute\n  ysk-server migrate orphan-homes [--data-dir PATH] --json\n  ysk-server migrate orphan-homes --path /home/ysk-server-UUID --confirm PATH --execute\n"
      },
      "hostingHelp": "用法：ysk-server hosting <sub>\n  危险操作默认 dry-run；加 --execute（+ YSK_EXECUTE=1）才真正应用\n  nginx | nginx-sync [--execute]\n  redis-provision | postgres-provision | mysql-provision [--execute]\n  dns-zone --zone X --ip A.B.C.D [--ipv6 X:X::X] [--validate] [--reload]\n  dns-zones | powerdns-status | powerdns-install [--install|--execute]\n  powerdns-load --zone X --ip A.B.C.D [--load|--execute]\n  email-apply --domain X [--install|--execute]\n  email-mailbox --domain X --local user [--password P] [--ip A.B.C.D] [--system]\n  ftps-apply --domain X [--install|--execute]\n  runtimes | runtime-install --kind node|php|python|go|rust --version V [--install|--execute]\n  dovecot-passdb --domain X | --all\n  webmail-apply --domain webmail.example.com [--download]\n  public-files --domain files.example.com [--reload]\n  email-bootstrap --domain example.com --ip A.B.C.D [--install|--execute]\n  email-deliverability --domain example.com   # PTR/DNSBL/warmup 诚实报告\n  firewall-apply [--smtp] [--execute]\n",
      "logsQuery": "用法：{{CLI_NAME}} logs query --source <id> [--lines N] [--grep G] [--since 1h] [--priority err]\n  source 例：journal:  journal:nginx.service  file:syslog  project:<uuid>\n  {{CLI_NAME}} logs sources --json\n  {{CLI_NAME}} logs journal [--unit nginx.service] --json\n"
    },
    "msg": {
      "domain": {
        "missing": {
          "pass": {
            "5be09b": "缺少域名 — 请传 --ip 以先创建域名\n"
          }
        }
      },
      "--root": {
        "must": {
          "be": {
            "a84834": "--root 必须是 public 或 project:<id>\n"
          }
        }
      },
      "need": {
        "--content": {
          "or": {
            "4d7001": "需要 --content 或 --file\n"
          }
        },
        "at": {
          "least": {
            "7d311a": "至少需要一个 --member HOST[=role][:access]\n"
          }
        }
      },
      "action": {
        "must": {
          "be": {
            "ba14c1": "action 必须是 list|add|remove\n"
          }
        }
      },
      "use": {
        "ysk-server": {
          "backup": {
            "ca67f4": "请用：ysk-server backup control-plane-restore --name ARCHIVE（不要用 restore --project-id control-plane）\n"
          }
        }
      },
      "new": {
        "domain": {
          "requires": {
            "986b78": "新域名需要 --ip A.B.C.D（不要用占位默认）\n"
          }
        }
      },
      "import-sync": {
        "prefers": {
          "fleet": {
            "4d7590": "import-sync 优先使用 fleet clusterSync payload；或 --file snapshot.json\n"
          }
        }
      },
      "security": {
        "control": {
          "plane": {
            "f59a63": "安全：控制平面绑定公开地址 (0.0.0.0/::)。建议 127.0.0.1 + 反向代理 / UFW。\n"
          }
        }
      }
    },
    "err": {
      "unknown": {
        "email": {
          "sub": {
            "sub": {
              "e37257": "未知 email 子命令： {{sub}}\n执行： ysk-server email help\n"
            }
          }
        },
        "cron": {
          "sub": {
            "sub": {
              "e1a9ed": "未知 cron 子命令： {{sub}}\n执行： ysk-server cron help\n"
            }
          }
        },
        "files": {
          "sub": {
            "sub": {
              "07ad7e": "未知 files 子命令： {{sub}}\n执行： ysk-server files help\n"
            }
          }
        },
        "store": {
          "sub": {
            "sub": {
              "b7a083": "未知 store 子命令： {{sub}}\n执行： ysk-server store help\n"
            }
          }
        },
        "cdn": {
          "subcommand": {
            "sub": {
              "76664f": "未知 cdn 子命令： {{sub}}\n执行： ysk-server cdn help\n"
            }
          }
        },
        "backup": {
          "subcommand": {
            "sub": {
              "4092ad": "未知 backup 子命令： {{sub}}\n执行： ysk-server backup help\n"
            }
          }
        }
      }
    },
    "setup": {
      "dryRunOk": "{{product}} setup dry-run 成功",
      "dryRunNext": "再次执行时请去掉 --dry-run，以写入配置并初始化数据库",
      "weakPassword": "管理员密码过弱或仍为默认。请传入强密码 --admin-password（至少 8 位，勿用 admin／常见默认），或本机开发设 YSK_ALLOW_INSECURE_DEFAULTS=1。",
      "weakPasswordShort": "已拒绝过弱或默认管理员密码",
      "nextStart": "启动（API + Web UI）：{{cli}} serve --config {{configPath}}",
      "nextOpen": "打开 http://{{host}}:{{port}}/ 并以 {{user}} 登录",
      "nextUnit": "Systemd unit 模板：{{unitPath}}",
      "nextInstall": "安装 unit（root + YSK_EXECUTE）：{{cli}} system unit-install --enable --data-dir {{dataDir}}",
      "nextExecute": "生产主机变更需要 YSK_EXECUTE=1 与 root",
      "nextGolive": "上线：docs/deploy/go-live.md + ysk-server readiness --json",
      "secPassword": "安全：请立即更改管理员密码（bootstrap 使用了弱／默认密码）",
      "sec2fa": "安全：请在「账号安全 → 账户」启用管理员 2FA",
      "secListen": "安全：正在监听所有接口 — 请放防火墙／反向代理之后；管理建议 127.0.0.1 + SSH tunnel",
      "ok": "{{product}} setup 完成（数据库已初始化）",
      "okInsecure": "{{product}} setup 完成（数据库已初始化）［不安全 bootstrap — 请改密码］"
    }
  },
  "common": {
    "all": "全部",
    "cancel": "取消",
    "confirm": "确认",
    "refresh": "刷新",
    "loading": "加载中…",
    "save": "保存",
    "apply": "应用",
    "close": "关闭",
    "copy": "复制",
    "copied": "已复制",
    "expandAll": "全部展开",
    "collapseAll": "全部折叠",
    "empty": "无数据",
    "back": "返回",
    "showTechnical": "显示技术详情",
    "hideTechnical": "隐藏技术详情",
    "needExecute": "需要 YSK_EXECUTE",
    "needRoot": "需要 root",
    "needExecuteRoot": "需要 YSK_EXECUTE 与 root",
    "writtenOnly": "已写入管理文件，未套用到系统",
    "applyToLive": "套用后才生效",
    "saveDraft": "保存草稿",
    "languageName": "简体中文",
    "languageNative": "简体中文",
    "language": "语言",
    "switchLanguage": "切换语言",
    "showPassword": "展示",
    "hidePassword": "隐藏",
    "searchGlobal": "搜索页面与资源…",
    "menu": "菜单",
    "processing": "处理中…",
    "unavailable": "目前不可用",
    "retry": "重试",
    "success": "成功",
    "ok": "正常",
    "failed": "失败",
    "blocked": "无法执行",
    "status": "状态",
    "port": "端口",
    "url": "网址",
    "actions": "操作",
    "noData": "没有数据",
    "input": "输入",
    "pleaseEnter": "请输入 {{value}}",
    "pleaseFill": "请填写",
    "required": "必填",
    "about": "说明",
    "more": "更多的",
    "operation": "操作",
    "delete": "删除",
    "edit": "编辑",
    "create": "创建",
    "install": "安装",
    "installing": "安装中…",
    "reprobe": "重新探测",
    "search": "搜索",
    "yes": "是",
    "no": "否",
    "on": "开",
    "off": "关",
    "open": "开启",
    "enabled": "已启用",
    "disabled": "已停用",
    "installed": "已安装",
    "notInstalled": "未安装",
    "running": "运行中",
    "stopped": "已停止",
    "ready": "就绪",
    "unknown": "未知",
    "normal": "正常",
    "degraded": "降级",
    "missing": "缺少",
    "available": "可用",
    "applied": "已套用",
    "notApplied": "未套用",
    "completed": "已完成",
    "incomplete": "未完成",
    "probed": "已探测",
    "notProbed": "未探测",
    "probe": "探测",
    "name": "名称",
    "username": "用户名",
    "password": "密码",
    "domain": "域名",
    "host": "主机",
    "version": "版本",
    "type": "类型",
    "mode": "模式",
    "notes": "备注",
    "time": "时间",
    "steps": "步骤",
    "target": "目标",
    "package": "软件包",
    "panel": "面板",
    "system": "系统",
    "user": "用户",
    "project": "项目",
    "database": "数据库",
    "mail": "邮件",
    "files": "文件",
    "memory": "内存",
    "custom": "自定义",
    "static": "静态",
    "lifecycle": "生命周期",
    "loadFailed": "加载失败",
    "saveFailed": "保存失败",
    "opFailed": "操作失败",
    "installFailed": "安装失败",
    "createFailed": "创建失败",
    "deleteFailed": "删除失败",
    "applyFailed": "应用失败",
    "startFailed": "启动失败",
    "statusLoadFailed": "状态加载失败",
    "downloadFailed": "下载失败",
    "uploadDone": "已上传 {{count}} 个文件",
    "downloadStarted": "已开始下载 {{name}}",
    "savedOk": "已保存",
    "noneSelectedShort": "—",
    "unknownError": "未知错误",
    "writtenSettings": "已写入设置",
    "panelBlocked": "无法在管理面板完成此操作",
    "partialSuccess": "操作未完全成功",
    "createdOk": "已创建",
    "updatedOk": "已更新",
    "deletedOk": "已删除",
    "applyDone": "应用完成",
    "applyIncomplete": "应用未完成",
    "checking": "检查中…",
    "dismiss": "關閉",
    "hide": "隱藏",
    "show": "顯示",
    "done": "完成",
    "next": "下一步",
    "previous": "上一步",
    "redirectedTo": "已转到 {{to}}（原为 {{from}}）"
  },
  "cron": {
    "presetCdTrue": "cd app + true（测试）",
    "presetCleanTmp": "清理暂存（示例）",
    "presetNpmCron": "npm run cron（若有）",
    "presetAppBin": "执行 app binary",
    "presetRsync": "同步静态（示例 rsync）",
    "noLinuxUser": "（未有 linux 用户）· {{name}}",
    "projectUser": "项目用户",
    "panelUser": "ysk · 面板／系统",
    "system": "系统",
    "rootCareful": "root · 系统（慎用）",
    "customUser": "{{user}} · 自定义",
    "success": "成功",
    "failed": "失败",
    "noProjects": "尚未有项目",
    "noProjectsHint": "请先创建项目并（建议）创建系统用户，再登记 cron",
    "userSuffix": " · 用户 ",
    "mon": "一",
    "tue": "二",
    "wed": "三",
    "thu": "四",
    "fri": "五",
    "sat": "六",
    "sun": "日",
    "everyNMin": "每 N 分钟",
    "fixedInterval": "固定间隔",
    "hourly": "每小时",
    "atMinute": "指定第幾分",
    "daily": "每日",
    "atTime": "指定时:分",
    "weekly": "每周",
    "weekdayTime": "星期 + 时间",
    "monthly": "每月",
    "dayTime": "日期 + 时间",
    "advanced": "高级",
    "customExpr": "自定义表达式",
    "everyMinute": "每分钟",
    "everyMinutes": "每 {{n}} 分钟",
    "hourlyAt": "每小时 第 {{n}} 分",
    "dailyAt": "每日 {{time}}",
    "weeklyNone": "每周（未选日） {{time}}",
    "weeklyAt": "每周{{days}} {{time}}",
    "monthlyAt": "每月 {{day}} 日 {{time}}",
    "customAt": "自定义：{{expr}}",
    "frequency": "计划频率",
    "interval": "间隔",
    "fromHour": "由整点起算",
    "intervalMinutes": "间隔分钟",
    "min1": "1 分",
    "minN": "{{n}} 分",
    "minuteOfHour": "在每小时的第幾分",
    "minPad": "{{n}} 分",
    "hour": "小时",
    "minute": "分钟",
    "pickWeekdays": "选擇星期",
    "dayOfMonth": "每月第幾日",
    "dayOfMonthHint": "31 日月份沒有该日則跳过",
    "cronExpr": "Crontab 表达式",
    "cronExprHint": "五栏：分 时 日 月 周（0=日）",
    "cronExprPh": "crontab 表达式",
    "needLinuxUser": "所选项目沒有 Linux 用户 — 请先到项目资源创建系统用户",
    "boundProject": "已绑项目；执行用户 {{user}}（指令会以 runuser 隔離）",
    "systemJob": "系统工作；执行用户 {{user}}",
    "writtenManage": "已写入管理 crontab（尚未安装到系统）",
    "needInstall": "请按「安装到系统 crontab」才会真正生效",
    "createdManageOnly": "已创建（僅管理档）",
    "installedSystem": "已安装到系统",
    "hostSynced": "系统已同步",
    "hostNotInstalled": "未装到系统",
    "statusUnknown": "状态未知",
    "systemCrontab": "系统 crontab",
    "synced": "已同步",
    "managedLines": "管理行数",
    "jobsOnlyManage": "工作只写在管理档。系统 crontab ",
    "hostHasYsk": "已包含 YSK 项目",
    "hostNoYsk": "尚未安装或无 YSK 项目",
    "pressInstall": "有已登记但未写入系统的任务 — 请点「安装到系统」。",
    "jobsTab": "工作 ({{count}})",
    "jobsTabPending": "工作 ({{count}}) · 待安装 {{pending}}",
    "registeredJobs": "已登记工作 ({{count}})",
    "jobsSub": "管理档项目 · 改动后需「安装到系统」才生效",
    "addJob": "+ 新增工作",
    "noCron": "尚未有 cron",
    "noCronDesc": "用列表右上角新增工作，再安装到系统 crontab",
    "onceInstalled": "曾安装",
    "manageOnly": "僅管理档",
    "projectLabel": "项目",
    "systemLevel": "系统级",
    "runOnce": "立即执行",
    "runOnceOk": "已执行一次",
    "updatedManage": "已更新管理档；请重新安装到系统 crontab",
    "updatedManageShort": "已更新管理档",
    "deletedManage": "已从管理档删除；请重新安装同步系统",
    "installStatus": "安装状态",
    "manageVsHost": "管理档 vs 主机",
    "hostYsk": "主机 YSK",
    "lastInstall": "上次安装",
    "installToSystem": "安装到系统 crontab",
    "installHint": "安装会合并主机 crontab：保留非 YSK 行，只更新面板管理的任务。需系统变更权限。",
    "hostPreview": "主机 crontab 预览",
    "cannotRead": "无法读取或尚未安装（需权限）",
    "addJobTitle": "新增工作",
    "addJobDesc": "写入管理档；需「安装到系统」后 crontab 才会执行",
    "createManageOnly": "创建（僅管理档）",
    "whenRun": "何时执行",
    "whenRunHint": "用下方卡片揀频率与时间；高级模式可手写 crontab",
    "userPathHint": "用户 + 指令路径会跟项目 home／runtime 更新",
    "pickProject": "— 请选擇项目 —",
    "runAsUser": "执行用户",
    "runAsHint": "揀项目用户会同步上方项目；揀系统用户則为系统级 cron",
    "noProjectsYet": "（尚未有项目）",
    "runInHome": "在项目 home 下执行（{{home}}）；保存时会包 runuser",
    "absPath": "建议絕对路径",
    "commonCmds": "常用指令（{{runtime}}）",
    "actualPreview": "实際写入 crontab（预览）",
    "noLinuxName": "此项目未有 Linux 用户名 — 请到项目「资源」创建系统用户后再试。",
    "afterCreate": "创建后：",
    "projectParen": "（项目 {{name}}）",
    "systemParen": "（系统级，未绑项目）",
    "weekLabel": "星期",
    "willRun": "将执行",
    "projectNoLinux": "（未有 linux 用户）",
    "createManageOnlyParen": "创建（僅管理档）",
    "runAsHintFull": "选项目用户会同步上方项目；选系统用户則为系统级 cron",
    "systemParenFull": "（系统级，未綁项目）",
    "hostOtherLines": "主机非 YSK 行数",
    "hostOtherLinesVal": "其他 {{other}} 行（主机有效共 {{total}}）",
    "deleteTitle": "删除 Cron 工作？",
    "deleteDesc": "将删除「{{name}}」。应用到系统 crontab 前只影响控制面。",
    "hostJobs": "主机任务",
    "hostJobsTitle": "主机 crontab（{{count}}）",
    "usersScanned": "用户",
    "filterUser": "用户",
    "filterAll": "全部用户",
    "sourceYsk": "面板",
    "sourceHost": "主机",
    "noHostJobs": "此范围没有 crontab 任务",
    "hostPartial": "无法完整读取所有用户 crontab（需要 root）",
    "pendingInstall": "待安装到系统（{{count}}）",
    "pendingStale": "已 {{days}} 日未写入系统 crontab，不会执行。",
    "willNotRun": "未写入系统 crontab — 不会执行。",
    "hourRange": "小时必须介于 0–23。",
    "minuteRange": "分钟必须介于 0–59。",
    "hoursCommon": "常用小时",
    "hoursAll": "全部小时",
    "invalidExpr": "不是有效的 5 栏 cron 表达式。",
    "needCommand": "请填写指令。",
    "needUser": "请选择专案或系统用户。",
    "hostCounts": "主机行数",
    "hostCountsVal": "{{ysk}} · 其他 {{other}} · 合计 {{total}}",
    "hostYskYes": "已有面板行",
    "hostYskNo": "尚无面板行",
    "emptyHostCrontab": "用户 {{user}} 尚未有 crontab。",
    "writtenOnHost": "已写入",
    "registeredJobsChip": "已登记",
    "registeredVsWritten": "已在面板登记 vs 已写入主机 crontab",
    "installPreviewTitle": "安装到系统前预览",
    "installPreviewDesc": "会把 YSK 区块合并入主机 crontab，不会覆写非 YSK 行。",
    "installPreviewMerge": "安装会写入 YSK Server crontab merge 区块，不会整份取代 host crontab。",
    "installPreviewEmpty": "没有待安装工作 — 仍会重新整理 YSK 区块。",
    "editJobTitle": "编辑工作",
    "editJobDesc": "变更只写入控制面，须再安装到系统 crontab 才生效。",
    "saveJob": "储存（仅管理）",
    "panelLines": "面板行",
    "otherLines": "非面板行",
    "totalLines": "合计",
    "writtenOnHostHint": "已写入主机 crontab 的行",
    "registeredJobsHint": "已在面板登记的工作（含待安装）",
    "pendingInstallCount": "{{n}} 项待安装",
    "systemJobBadge": "未绑专案 · 系统用户",
    "hostEdit": "修改",
    "hostEditTitle": "修改主机 crontab 行",
    "hostEditDesc": "立即写入该用户的线上 crontab。需要 root 与 YSK_EXECUTE=1。其他行不变。",
    "hostSave": "写入 crontab",
    "hostSaveTitle": "写入此 crontab 行？",
    "hostSaveDesc": "Replaces the live line for {{user}}. Type EDIT to confirm.\n\nCurrent:\n{{from}}\n\nNext:\n{{to}}",
    "hostDisable": "停用",
    "hostDisableTitle": "停用主机 crontab 行？",
    "hostDisableDesc": "会把 {{user}} 该行改成注解。请输入 DISABLE 确认。",
    "hostEnable": "启用",
    "hostEnableTitle": "启用主机 crontab 行？",
    "hostEnableDesc": "会移除 {{user}} 该行的注解。请输入 ENABLE 确认。",
    "hostRunTitle": "试跑此主机指令一次？",
    "hostRunDesc": "立即以 {{user}} 执行。不会改 crontab。请输入 RUN 确认。",
    "hostAdopt": "纳入面板",
    "hostAdoptTitle": "把此主机行纳入面板？",
    "hostAdoptDesc": "会在线上行加上 # ysk:id 并登记。下一轮安装不会重复。请输入 ADOPT 确认。",
    "hostDeleteTitle": "移除主机 crontab 行？",
    "hostDeleteDesc": "会移除 {{user}} 的线上行。请输入该指令确认。",
    "hostUserLocked": "crontab 拥有者（此处不能搬到其他用户）",
    "hostLinePreview": "将写入的行",
    "disabledJob": "已停用",
    "confirmMismatch": "确认内容必须与指令相同。",
    "writtenHost": "已写入主机 crontab",
    "adoptedHost": "已纳入面板",
    "keepDisabledHint": "此行已停用。储存后仍保持注解。",
    "currentLine": "现时",
    "nextLine": "下一行"
  },
  "dashboard": {
    "serviceAria": "{{name}}：{{state}}",
    "sev": {
      "ok": "成功",
      "warn": "警告",
      "bad": "异常"
    },
    "title": "控制台",
    "health": "健康状态",
    "protection": "保护模式",
    "welcome": "欢迎使用 YSK Server",
    "audit": "最近审计",
    "needLogin": "请先登录以查看审计记录",
    "features": "功能菜单",
    "featuresHint": "角标：就绪＝软件已装；未安装＝需一键安装；需权限＝未开系统变更。",
    "badge": {
      "panel": "面板",
      "notInstalled": "未安装",
      "ready": "就绪",
      "installed": "已装",
      "prodReady": "可生产",
      "check": "检查",
      "needPerm": "需权限"
    },
    "status": {
      "healthy": "健康",
      "prodReady": "可生产",
      "needsCheck": "需检查"
    },
    "stat": {
      "backups": "备份",
      "notifications": "通知",
      "certExpiry": "证书到期"
    },
    "tabs": {
      "overview": "概览",
      "wizard": "一键创建",
      "notifications": "通知",
      "features": "功能入口"
    },
    "serviceHealth": "服务健康",
    "serviceHealthDesc": "systemctl 实时探测",
    "fullServiceMatrix": "完整服务矩阵",
    "readinessCheck": "就绪检查：",
    "prodOk": "可作生产",
    "notFullyReady": "尚未完全就绪",
    "readinessBlocked": "有 {{n}} 项阻挡",
    "modeScore": "模式 {{mode}} · 分数 {{ready}}/{{total}}",
    "mode": {
      "degraded": "降级",
      "production_capable": "可生产",
      "blocked": "有阻挡",
      "normal": "正常"
    },
    "details": "详情",
    "certExpiryTitle": "证书到期：",
    "certExpired": "已过期",
    "certDays": "{{days}} 天",
    "securityStrip": "安全与套用状态",
    "securityStripDesc": "真实通知 + apply 诚实审计（written ≠ applied）",
    "notifCount": "通知 {{count}}",
    "criticalCount": " · 严重 {{count}}",
    "warnCount": " · 警告 {{count}}",
    "applyAuditBadge": "套用 audit · ok {{ok}} · warn {{warn}} · bad {{bad}}",
    "executeBadge": "系统变更 {{state}}",
    "executeLabel": "系统变更",
    "publicNo2fa": "面板正听全部界面，而你的管理员账号未开 2FA。",
    "go": "前往",
    "open": "打开",
    "noCriticalWarn": "目前无严重／警告通知",
    "notifCenter": "通知中心",
    "noHealthYet": "尚未取得健康状态",
    "sysChange": "系统变更",
    "opened": "已开",
    "closed": "未开",
    "readinessLink": "就绪检查 →",
    "hostMetrics": "主机指标",
    "loadAvg": "Load average（1 · 5 · 15 分）",
    "memoryDash": "内存 —",
    "metricsLink": "详细指标 →",
    "runningOf": "运行 {{running}}/{{total}}",
    "noProjects": "尚未有项目",
    "wizardLink": "一键创建 →",
    "allProjects": "全部项目 →",
    "recentN": "最近 {{n}}",
    "runningCount": "运行中 {{n}}",
    "securityLink": "安全 →",
    "wizardTitle": "一键创建",
    "wizardDesc": "创建项目，并可选一并登记 DNS／邮件／数据库草稿（各项需再到对应页套用）",
    "projectName": "项目名称",
    "projectNameHint": "控制台显示名称；会生成对应目录",
    "nameRequired": "请输入专案名称",
    "domainOptional": "域名（可留空）",
    "domainHint": "填写后才可勾选 DNS 与邮件",
    "runtime": "运行环境",
    "runtimeHint": "决定默认 runtime 版本与部署方式",
    "runtimeVersion": "运行环境版本",
    "versionHint": "会写入项目的运行环境版本设定",
    "serverIpv4": "服务器 IPv4",
    "serverIpv4Hint": "DNS A／邮件 SPF",
    "serverIpv4Ph": "此主机公网 IPv4",
    "serverIpv6": "服务器 IPv6（可选）",
    "serverIpv6Hint": "有则写 AAAA／ip6:",
    "serverIpv6Ph": "公网 IPv6（可留空）",
    "needDomainFirst": "请先填域名",
    "withDns": "一并创建 DNS 区域",
    "withDnsDesc": "需填写域名；仅登记，需到 DNS 页写入区域文件",
    "withMail": "一并登记邮件域名",
    "withMailDesc": "需填写域名；软件安装与 DNS 在邮件详情页完成",
    "withDb": "一并创建 MySQL 数据库草稿",
    "withDbDesc": "控制面登记；需到 SQL 引擎页套用到系统",
    "wizardHint": "一键创建不会自动对外上线。DNS、邮件、数据库与 SSL 请到各功能页确认并套用。",
    "wizardSubmit": "一键创建",
    "wizardOk": "创建完成",
    "wizardPartial": "部分失败",
    "notifCenterTitle": "通知中心（{{count}}）",
    "notifCenterDesc": "严重 {{critical}} · 警告 {{warn}} · 信息 {{info}}",
    "noNotifs": "暂无通知",
    "noNotifsDesc": "系统告警与待办会显示于此",
    "applyAuditTitle": "套用状态审计",
    "applyAuditDesc": "好的 {{ok}} · 警告 {{warn}} · 不好 {{bad}}",
    "barTitle": "{{count}} 条主机提示",
    "levelCritical": "严重",
    "levelWarn": "警告",
    "levelInfo": "信息",
    "colTitle": "提示",
    "colDetail": "详情",
    "colSource": "来源",
    "notifSearch": "搜索通知",
    "notifAll": "全部",
    "notifDismiss": "隐藏",
    "goFix": "前往处理"
  },
  "dataTable": {
    "empty": "没有数据",
    "actions": "操作"
  },
  "db": {
    "serviceSettings": "服务设置",
    "installedOk": "{{engine}} 已安装",
    "startedOk": "{{engine}} 已启动",
    "installFirst": "请先安装 {{engine}}",
    "softwareMissing": "{{engine}} 所需软件尚未安装",
    "serviceOverview": "服务概览",
    "readonlyStatus": "只读状态",
    "readonlyProbe": "只读探测",
    "systemChange": "系统变更",
    "opened": "已开启",
    "notOpened": "未开启",
    "admin": "管理员",
    "client": "客户端",
    "hasClient": "有",
    "noClient": "无",
    "canProvision": "可开庫",
    "dumpOk": "导出完成",
    "dumpFailed": "导出失败",
    "noDumpToImport": "尚无可导入的备份文件",
    "expiredTempUsersProcessed": "已处理过期临时用户",
    "dumpFirstDb": "导出首个数据库",
    "importLatestDump": "导入最新备份",
    "cleanupExpiredTempUsers": "清理过期临时用户",
    "adminerEntry": "数据库管理项目",
    "browserProjectTitle": "创建数据库管理项目",
    "browserTool": "工具",
    "browserNameHint": "会创建一个 PHP 项目；名称不可重复",
    "browserNameTaken": "项目名称已存在：{{name}}",
    "browserProjectCreated": "数据库管理项目已创建",
    "createBrowserProject": "创建项目并部署",
    "downloadPhpMyAdmin": "下载 phpMyAdmin（需要系统变更权限及外网）",
    "createDatabase": "创建数据库",
    "installBannerHint": "请使用上方横幅「一键安装」安装 {{engine}}。",
    "exclusiveMariaHint": "此主机为 MariaDB。请到 MariaDB 页管理，或一键切换（须输入 SWITCH）。",
    "exclusiveMysqlHint": "此主机为 MySQL。请到 MySQL 页管理，或一键切换（须输入 SWITCH）。",
    "openMaria": "MariaDB",
    "openMysql": "MySQL",
    "openMariaService": "MariaDB 服务",
    "openMysqlService": "MySQL 服务",
    "startService": "启动服务",
    "openServiceConsole": "开启服务控制台",
    "opsResult": "操作结果",
    "tempPasswordOnce": "临时只读密码（只显示一次）：",
    "tabDatabases": "数据库 ({{count}})",
    "tabUsers": "用户 ({{count}})",
    "tabTemp": "临时只读 ({{count}})",
    "tabRemote": "远程主机 ({{count}})",
    "dbList": "数据库列表",
    "charset": "字符集",
    "noDatabasesYet": "尚未有数据库",
    "emptyDbInstallFirst": "请先使用上方横幅一键安装 {{engine}}，再用右上角「创建数据库」",
    "emptyDbCannotProvision": "目前无法在服务器创建数据库",
    "emptyDbCreateHint": "用右上角「创建数据库」新增；创建后请再按「应用」",
    "emptyDbHostHasRows": "主機已有資料庫，但尚未在控制面登記。",
    "registeredVsHostHint": "已在面板登记 / 主机实测",
    "registeredCount": "已登记",
    "hostCount": "主机",
    "registeredUsers": "已登记用户",
    "registeredUsersHint": "只计面板登记，不是主机全部 MySQL 账号",
    "hostStillExists": "主机仍存在",
    "expiresLabel": "到期",
    "dumpNeedRegistered": "请先在面板登记数据库",
    "dumpFirstDbTitle": "导出第一个已登记数据库",
    "importNeedRegistered": "请先在面板登记数据库",
    "importLatestNeedConfirm": "需确认 — 会导入到已登记数据库",
    "hostHasUntracked": "主機另有 {{count}} 個未在面板登記的資料庫",
    "hostInventoryHint": "列表只顯示控制面已登記的資料庫；即時名稱來自 SHOW DATABASES。",
    "userList": "用户列表",
    "userListDesc": "可为数据库授权用户",
    "createUserBtn": "+ 创建用户",
    "noUsersYet": "尚未有用户",
    "tempReadonlyUsers": "临时只读用户",
    "tempReadonlyDesc": "到期后控制面标记 expired；系统 DROP 需另开权限操作（标示）",
    "dbName": "数据库名称",
    "ttlHours": "有效时数",
    "ttlHoursHint": "到期后标记失效",
    "createReadonlyUser": "创建只读用户",
    "tempUserCreated": "已创建临时只读用户",
    "expiresAt": "到期",
    "revokeRegistration": "撤销登记",
    "remoteDbHosts": "远程数据库主机",
    "remoteDbHostsDesc": "登记连接目标（密码不回显）。未按「测试连接」前，已保存 ≠ 可达。",
    "remoteTest": "测试连接",
    "remoteTestDone": "远程主机探测完成",
    "remoteTestOk": "可达",
    "remoteTestFail": "不可达",
    "remoteNotChecked": "未测试",
    "remoteDeleteTitle": "仅移除登记",
    "remoteDeleteConfirm": "移除登记 {{name}}？远程服务器不会被改动。",
    "displayName": "显示名称",
    "prodReplicaPlaceholder": "生产从库",
    "remoteHostSaved": "已保存远程主机",
    "createDbTitle": "创建 {{engine}} 数据库",
    "createDbDesc": "创建控制面登记后，请按「应用」写入服务器",
    "dbNameHint": "小写英数与下划线；创建后需再应用到系统",
    "alsoCreateUser": "同时创建用户",
    "alsoCreateUserDesc": "一并创建可连接此庫的账号",
    "passwordMin8": "至少 8 位",
    "passwordMin8chars": "至少 8 字符",
    "allowConnectHost": "允许连接主机",
    "allowConnectHostHint": "常用 %（任意）或 localhost",
    "allowConnectHostHintShort": "常用 % 或 localhost",
    "createDbHint": "仅写入控制面登记；列表按「应用」才会在服务器 CREATE DATABASE。",
    "createUserTitle": "创建 {{engine}} 用户",
    "createUserDesc": "创建后请应用",
    "bindDatabase": "绑定数据库",
    "bindDatabaseHint": "可选；授权此庫权限",
    "noneOption": "— 无 —",
    "importDumpTitle": "确认导入数据库备份？",
    "importDumpDesc": "将把备份「{{dump}}」导入数据库「{{db}}」。",
    "import": "导入",
    "importOk": "导入完成",
    "importFailed": "导入失败",
    "deleteDbTitle": "删除数据库登记？",
    "deleteDbDesc": "仅移除控制面记录；不会自动 DROP 服务器上的庫。",
    "deleteUserTitle": "删除用户登记？",
    "deleteUserDesc": "仅移除控制面记录。",
    "adminerTitle": "Adminer 数据库浏览器",
    "adminerDesc": "下载輕量 Adminer + 写入 Nginx 管理 conf；应用到系统才会 nginx -t + reload",
    "adminerWritten": "Adminer 已写入管理档",
    "adminerApplied": "Adminer 应用完成",
    "writeOnly": "只写入（written）",
    "applyToSystem": "应用到系统",
    "adminerRisk": "公开 Adminer 有风险 — 请先限制来源 IP 或加 HTTP 认证。需 PHP-FPM socket（默认 php8.2）。",
    "vhostName": "虚拟主机名",
    "vhostHint": "DNS A 指到此主机后才能从外网开",
    "downloadAdminer": "下载 Adminer PHP（需 YSK_EXECUTE + 外网）",
    "downloadAdminerDesc": "关闭則仅用已下载文件",
    "adminerWriteHint": "「只写入」= 管理档 written；「应用到系统」= 复制 conf + nginx -t + reload（需 root，否則 blocked）",
    "pgInstallBanner": "请先使用上方横幅一键安装 PostgreSQL",
    "pgEmptyCreateHint": "创建后按「应用到系统」写入服务器",
    "pgNoDbs": "尚未有 PostgreSQL 庫",
    "pgCreateTitle": "创建 PostgreSQL 数据库",
    "pgCreateDesc": "写入控制面登记；需再「应用到系统」才 CREATE DATABASE（应用后才上线）",
    "pgAlsoCreateRole": "同时创建角色",
    "pgAlsoCreateRoleDesc": "一并创建登录角色并授予此数据库权限",
    "roleName": "角色名称",
    "roleHint": "PostgreSQL role／登录用户",
    "pgDeleteDbDesc": "移除控制面记录（不会自动 DROP 服务器上的庫，除非另有应用撤销）。",
    "update": "更新",
    "alsoCreateRole": "同时创建角色",
    "cluster": {
      "standaloneOtherEngines": "此引擎目前是单机。其他引擎已有丛集：{{names}}。",
      "roleUnassigned": "未指派角色",
      "title": "集群",
      "description": "计划 → 写管理档 → 应用 → 探测 → peer 分发 / fleet。默认 dry-run。",
      "redirectedFromCluster": "你由 /cluster 转到此处。这是数据库丛集分页。",
      "notApplied": "尚未套用",
      "plannedAt": "建立于 {{when}}",
      "clearStalePlans": "清过期计划",
      "clearStalePlansTitle": "删除过期计划？",
      "clearStalePlansDesc": "将删除 {{n}} 个超过 7 日的计划／草稿登记。不会套用或推送，亦不改系统设定。",
      "landingTitle": "数据库丛集",
      "landingDesc": "No database engine is installed on this host. Open an engine page to install, then return here.",
      "landingNoneInstalled": "MySQL, MariaDB, PostgreSQL, and Redis are not installed. /cluster does not open a MySQL tab when MySQL is missing.",
      "openEngine": "开启 {{engine}}",
      "overviewPill": "丛集 {{n}}",
      "enginesInstalled": "引擎",
      "plannedCount": "已计划",
      "overviewList": "丛集（{{count}}）",
      "overviewEmpty": "尚未有丛集登记。",
      "engine": "引擎",
      "kind": "类型",
      "members": "成员",
      "kindGalera": "简易 Galera",
      "kindMysqlReplica": "MySQL 主从复制",
      "kindPgReplica": "PostgreSQL 流式复制",
      "kindRedisReplica": "Redis 主从",
      "createGalera": "创建简易 Galera",
      "createMysqlReplica": "创建主从复制",
      "createPgReplica": "创建流式复制",
      "createSentinel": "创建 Sentinel",
      "createRedisReplica": "创建 Redis 主从",
      "needRealIps": "请填写本机与 peer 真实 IP／主机名",
      "hostInvalid": "请填写有效的 IPv4、IPv6 或主机名。",
      "statusNote": "状态：{{status}}（计划成功 ≠ 集群健康）",
      "artifactNote": "产物：{{dir}}",
      "planGenerated": "已生成计划（dry-run）",
      "planUpdated": "已更新计划",
      "manageWritten": "已写管理档（dry-run）",
      "bootstrapTried": "已嘗試 bootstrap",
      "applyTried": "已嘗試应用系统 conf",
      "localOk": "本机 OK",
      "localProbeFail": "本机 probe 未过",
      "probedWithPeers": "已探测（含 peer）",
      "probedLocal": "已探测本机",
      "peerTarNote": "已下载 peer 打包（.tar.gz）— 解壓后在 peer 上安装 conf",
      "downloaded": "已下载",
      "peerPushed": "已推送 peer",
      "pushPlanGenerated": "已生成 push 计划",
      "registrationDeleted": "已删除登记",
      "nodes": "节点",
      "remoteInstallPlan": "远程安装计划",
      "fleetSession": "机群 agent session id",
      "fleetSessionHint": "可选。到 /agents 复制 session UUID。填写后该对等节点走机群（不用 SSH）。留空则 scp。",
      "fleetSessionPh": "Agents 页的 session UUID",
      "fleetSessionNone": "无 — 使用 SSH",
      "fleetSessionOpenAgents": "打开 /agents 注册会话",
      "createWizardTitle": "打开计划向导。需要本地 IP 和 ≥1 个对等点。仅写入面板工件（试运行）。在您申请之前不要重新启动发动机。",
      "bootstrap": "引导程序",
      "fleetApply": "车队申请",
      "planTitle": "重新生成集群计划（不更改主机）",
      "writeFileTitle": "在面板数据目录下写入管理文件（试运行）",
      "probeLocalTitle": "仅探测该主机",
      "probeAllTitle": "探查每一位注册会员",
      "bootstrapTitle": "安装本地插件并引导第一个节点",
      "remoteInstallPlanTitle": "预览远程安装（不执行）",
      "downloadBundleTitle": "下载对等配置包 (.tar.gz)",
      "pushPlanTitle": "预览推送到对等点（无 scp）",
      "fleetSyncPlanTitle": "预览队列同步（不执行）",
      "fleetApplyTitle": "队列适用于车队成员吗？",
      "status": {
        "healthy": "健康",
        "planned": "计划",
        "partial": "部分的",
        "failed": "失败的",
        "draft": "草稿",
        "degraded": "降级",
        "applied": "应用"
      },
      "fleetSyncPlan": "Fleet sync 计划",
      "standaloneTitle": "目前：单机",
      "standaloneRepl": "未登记主从／流式。指定 primary/master + replica 后生成 conf 与脚本。",
      "standaloneHa": "未登记 HA。加 peer 节点后生成 conf 计划，再分步 bootstrap / join。",
      "recentProbe": "最近 probe（本机 wsrep）",
      "probeRequired": "healthy 必须 probe 通过",
      "planPreview": "计划预览",
      "planPreviewDesc": "dry-run · 成功只代表步骤/conf 已生成",
      "files": "文件",
      "systemChangeNeed": "应用时需要",
      "planModalDesc": "选擇节点 → 生成计划（不会自动改 peer 系统）",
      "generatePlan": "生成计划",
      "clusterName": "集群名称",
      "localIp": "本机 IP／主机",
      "primaryIpHint": "控制面所在机（primary/master + access=local）",
      "localIpHint": "控制面所在机（access=local）",
      "ipExample1": "例如 10.0.0.1",
      "ipExample2": "例如 10.0.0.2",
      "ipExample3": "例如 10.0.0.3",
      "replicaIp": "Replica IP／主机",
      "peerIp": "Peer IP／主机",
      "replicaHint": "从库节点",
      "peerHint": "第二节点（Galera 建议 3 节点）",
      "thirdNode": "第 3 节点（可选）",
      "thirdNodeHint": "Galera / 多 replica 建议填",
      "sstMethod": "SST 方式",
      "forbidDemoIp": "禁止示例 IP（203.0.113.x）。",
      "fwGalera": "防火墙内网开 3306 / 4567 / 4444 / 4568。",
      "fwPg": "流式需内网 5432；脚本密码改 CHANGE_ME。",
      "fwRedis": "Redis 内网 6379（sentinel 26379）。",
      "fwRepl": "主从需内网对应埠；脚本密码改 CHANGE_ME。",
      "needExecuteRoot": "应用系统 conf 需 YSK_EXECUTE=1 + root。",
      "topology": "拓撲：{{kind}}",
      "applyLocalTitle": "应用本机系统 conf？",
      "applyBootstrapDesc": "会安装 Galera drop-in 并 bootstrap（galera_new_cluster）。仅第一个节点用一次。",
      "applyJoinDesc": "会安装 Galera drop-in 并 systemctl restart mariadb",
      "confirmApply": "确认应用",
      "deleteClusterTitle": "删除集群登记「{{name}}」（{{engine}}）？",
      "remoteInstallTitle": "远程安装 peer？",
      "pushTitle": "Push 到 peer？",
      "fleetSyncTitle": "Fleet 同步？",
      "confirmOp": "确认操作",
      "deleteClusterDesc": "将删除 {{engine}} 集群「{{name}}」的登记。系统 conf 不会自动清（v1）。",
      "remoteInstallDesc": "在 peer 上 install conf + restart。需 YSK_EXECUTE + SSH。",
      "pushDesc": "scp 文件到 peer /tmp？需 YSK_EXECUTE=1 与 SSH key。成功 ≠ peer 已 restart。",
      "fleetSyncDesc": "同步 cluster 快照到 fleet 边緣，再可 apply。",
      "fleetApplyDesc": "enqueue apply 到 fleet 成员。",
      "remoteInstalled": "远程已安装",
      "fleetSynced": "Fleet 已同步排队",
      "fleetApplyQueued": "Fleet apply 已排队",
      "engineNotInstalled": "此主机上未安装 {{engine}} - 请先安装它，或打开实际运行的引擎。",
      "plan": "计划",
      "writeFile": "写文件",
      "applyLocal": "应用本机",
      "probeAll": "全节点探测",
      "remoteInstall": "远程安装",
      "downloadBundle": "下载包",
      "pushPlan": "Push 计划",
      "pushExecute": "Push 执行",
      "fleetSync": "Fleet 同步",
      "localConfPreview": "本机 conf 预览",
      "refresh": "刷新",
      "close": "关闭",
      "cancel": "取消",
      "delete": "删除",
      "probe": "探测",
      "name": "名称",
      "type": "类型"
    },
    "console": {
      "dataBrowse": "资料浏览",
      "dbManage": "数据库管理",
      "realtime": "实时",
      "reload": "重载",
      "needRestart": "需重启",
      "affectsProjects": "使用此引擎的站点与服务会中断。",
      "lifecycle": "生命周期",
      "overview": "概览",
      "actionDone": "已{{action}}",
      "installDone": "安装完成",
      "noChanges": "沒有变更可应用",
      "settingsApplied": "设置已应用",
      "notReadFromService": "未从服务读取",
      "applyMode": "应用方式：{{mode}}",
      "dirtyNotApplied": "已修改，尚未应用",
      "highRisk": "高风险设置",
      "engine": "引擎",
      "bootEnabled": "开机自启",
      "uptimeSec": "运行秒数",
      "currentConnections": "目前连接",
      "changes": "变更",
      "serviceTitle": "{{title}} 服务",
      "softwareMissing": "{{title}} 所需软件尚未安装",
      "overviewDesc": "只读资讯，由探测取得（非输入欄）",
      "lifecycleDesc": "安装、启动、停止与开机自启",
      "about": "说明",
      "cluster": "集群",
      "noSettings": "此分类暂无可用设置（或目前版本不支持）",
      "applyHint": "「实时」可在线修改；「需重启」应用后请到生命周期重启服务。藍色底为尚未应用的变更。",
      "applyCategory": "应用本分类",
      "applyAll": "应用全部变更",
      "applyCatCount": "应用本分类（{{n}}）",
      "applyAllCount": "应用全部变更（{{n}}）",
      "lifecycleNote": "设置分页中，「实时」可在线修改；「需重启」应用后请到生命周期重启服务。",
      "installEngine": "请使用上方橫幅「一鍵安装」安装 {{title}}。",
      "reloadConfig": "重载设置",
      "disableBoot": "取消自启",
      "disableBootConfirm": "重新启动后引擎将不会启动，直到您再次启用它。",
      "needRights": "需要系统变更权限与管理员身分。失败会显示原因，不会假装成功。",
      "noneFetched": "— 未取得 —"
    },
    "importEntry": "入口: {{url}}",
    "adminerRiskFull": "公开 Adminer 有风险 — 请先限制来源 IP 或加 HTTP 认证。需 PHP-FPM socket（预设 php8.2）。",
    "adminerWriteHintFull": "「只写入」= 管理档 written；「应用到系统」= 复制 conf + nginx -t + reload（需 root，否則 blocked）",
    "pgInstalled": "PostgreSQL 已安装",
    "pgStarted": "PostgreSQL 已启动",
    "notInstalledShort": "未装",
    "serviceConsole": "服务控制台",
    "installPgFirst": "请先安装 PostgreSQL",
    "pgSoftwareMissing": "PostgreSQL 所需软件尚未安装",
    "installPgBanner": "请使用上方橫幅「一鍵安装」安装 PostgreSQL。",
    "createPlus": "+ 创建",
    "dbNameHintPg": "小写英数与底线；创建后请再应用到系统",
    "deleteNotePg": "删除登记不会自动 DROP 服务器上的庫；应用成功才代表主机已执行 DDL。",
    "tabDatabasesSimple": "数据库 ({{count}})",
    "frozenTitle": "数据库服务需要修复",
    "frozenBody": "已检测到问题（模式／冻结：{{mode}}；数据目录为空：{{empty}}）。系统会按健康检查结果生成修复计划，而不是只针对单一错误硬编码。",
    "unfreezeBtn": "检查并修复服务",
    "unfreezeConfirmTitle": "确认修复 {{engine}}？",
    "unfreezeConfirmDesc": "将按诊断结果执行通用修复计划（停止服务、清除冻结、清理错误引擎配置、空白目录初始化、再启动）。数据目录是否为空：{{empty}}。若有重要数据请先备份。",
    "unfreezeConfirmBtn": "确认修复",
    "unfreezeOk": "{{engine}} 修复完成",
    "startAfterUnfreeze": "启动服务（失败时会自动套用修复计划）",
    "serviceDownTitle": "数据库服务未运行",
    "serviceDownBody": "服务异常。面板会诊断常见原因（冻结、配置残留、空白数据目录、端口冲突等）。数据目录为空：{{empty}}。请按「检查并修复服务」确认执行。",
    "adoptHostDb": "登记 {{name}}",
    "adoptHostDbTitle": "只在控制面登记名称，不改主机数据",
    "cleanupExpiredTempUsersTitle": "清除已过期的面板临时用户",
    "invalidSqlIdent": "请用小写识别名称：以英文字母开头，其后可为字母、数字或底线。",
    "remoteHostRequired": "请填写远端主机。",
    "remoteTestUnsaved": "请先储存此主机，再按“测试连线”。或填好主机后储存。",
    "serverNotInstalled": "服务器未安装",
    "dumpNeedEngine": "请先安装数据库引擎，才可汇出数据库。",
    "unboundDatabase": "数据库登记已移除",
    "userGoneRefresh": "该用户已不存在，已重新整理列表。"
  },
  "dialogs": {
    "confirmDefault": "确认",
    "cancelDefault": "取消",
    "severity": {
      "consequencesTitle": "将会发生：",
      "typeToConfirm": "请输入「{{text}}」以确认"
    }
  },
  "dns": {
    "templates": {
      "minimal": "最小 — 仅 apex A",
      "web": "网站 — apex + www",
      "mail": "邮件 — apex + mail + MX + SPF",
      "full": "完整 — web + mail + ftp + SPF",
      "cdn": "CDN — apex + www + cdn（多 edge 预留）"
    },
    "dnssecOk": "已生成 DNSSEC 密钥（written — 未签署 zone／未上 registrar）",
    "dnssecNotOk": "DNSSEC 未生成密钥（只写说明文件或工具不可用 — 不假成功）",
    "dnssecFailed": "DNSSEC 失败",
    "blocked": "已封锁（需系统变更权限）",
    "clusterDone": "完成（{{status}}）",
    "clusterPartial": "未全部成功（{{status}}）— 见下方明细",
    "clusterFailed": "集群操作失败",
    "validateFailed": "记录验证失败",
    "validateRequestFailed": "验证请求失败",
    "lookupFailed": "查询失败",
    "statRecords": "记录",
    "statSelected": "选中",
    "notInstalled": "DNS 所需软件尚未安装",
    "dsForRegistrar": "DS（供 registrar，未自动发布）：",
    "tabs": {
      "zones": "区域",
      "records": "记录",
      "cluster": "集群",
      "dnssec": "DNSSEC",
      "tools": "工具",
      "ddns": "DDNS",
      "about": "说明"
    },
    "recentWrite": "最近写入结果",
    "zonesTitle": "区域 ({{count}})",
    "zonesDesc": "创建区域后可写入／套用 zone",
    "createZone": "+ 创建区域",
    "mailZonesMissing": "電郵網域尚未建立 DNS 區域：{{domains}}。",
    "createMailZone": "建立郵件區域",
    "colZoneName": "区域名称",
    "colServerIp": "服务器 IP",
    "colTemplate": "模板",
    "colStatus": "状态",
    "emptyZonesTitle": "尚未有 DNS 区域",
    "emptyZonesDesc": "用列表右上角「创建区域」新增",
    "applyZoneTitle": "写入 zone 文件并挂入 PowerDNS named.conf + rediscover（写文件≠ dig 有答案）",
    "applyZone": "写入／套用",
    "recordsFor": "记录 — {{zone}}",
    "recordsNeedSelect": "记录（请先在「区域」选取）",
    "statusLabel": "状态",
    "addRecord": "+ 新增记录",
    "writeZoneFile": "写入并加载区域",
    "healthLoaded": "已加载",
    "stateLoaded": "已加载",
    "healthPublicNs": "公网 NS",
    "statePublicNs": "公网 NS",
    "publicNsHere": "→ 本机",
    "requestLeTitle": "申请 {{zone}} Let’s Encrypt",
    "requestZoneSsl": "申请本区域 SSL",
    "soaTitle": "SOA / 默认 TTL",
    "soaDesc": "写入 zone 文件时的 SOA 名称服务器与 $TTL；保存后再「写入区域文件」才落到磁盘",
    "soaBlockNs": "名称服务器",
    "soaBlockTiming": "TTL 与定时",
    "recordsListTitle": "DNS 记录（{{count}}）",
    "recordsListDesc": "编辑后记得按上方「写入区域文件」才会更新 named 磁盘文件。",
    "soaNsLabel": "SOA 名称服务器",
    "soaNsHint": "可留空 → 默认 ns1.区域.",
    "defaultTtl": "默认 TTL（秒）",
    "min1": "1 分",
    "min5": "5 分",
    "min10": "10 分",
    "hour1": "1 时",
    "day1": "1 日",
    "customSeconds": "自定义秒数",
    "soaSaved": "已保存 SOA 设定（控制面）— 请「写入区域文件」套用",
    "soaSaveFailed": "保存 SOA 失败",
    "soaSavedAndWritten": "已保存并写入区域文件",
    "soaWriteFailed": "SOA 写入失败",
    "failed": "失败",
    "colType": "类型",
    "colName": "名称",
    "colValue": "值",
    "emptyRecords": "尚无记录",
    "noZoneSelectedTitle": "尚未选择区域",
    "noZoneSelectedDesc": "到「区域」分页点选一个 zone",
    "clusterTitle": "DNS 集群",
    "clusterDesc": "SCP 推送 zone 文件后可 remote reload（rndc / named / bind9 / pdns）。written ≠ applied。",
    "peerHost": "Peer 主机",
    "peerHostHint": "次要 NS 主机名称或 IP（需 SSH 密钥登录）",
    "sshUser": "SSH 用户",
    "sshUserHint": "需有目标路径写入与 reload 权限",
    "labelOptional": "标签（可选）",
    "labelPlaceholder": "例如 ns2 / hkg-edge-dns",
    "opPerPeer": "本次操作（每 peer）",
    "registeredPeers": "已登记 peers（{{count}}）",
    "lastProbeHint": "lastProbe 于「探活」或推送后更新",
    "noPeers": "尚未登记任何 peer",
    "zoneDirMissing": "· zone 目录缺失",
    "generateKeys": "生成密钥；不自动上线",
    "selectZoneFirst": "请先选择区域",
    "lookupTitle": "DNS 查询（dig）",
    "lookupDesc": "对公网解析器查询；用于验证 multi-A / CDN 是否生效。不假造答案。",
    "lookupNamePlaceholder": "例如 example.com 或 www.example.com",
    "lookupType": "查询类型",
    "lookupResults": "查询结果（{{count}} 笔）",
    "lookupNoAnswerFail": "查询无答案／失败",
    "digNotInstalled": "dig 未安装",
    "digNotInstalledHint": "此分页需要 dig（bind9-dnsutils）。这不是 NXDOMAIN。请在主机用套件管理安装 bind9-dnsutils；本页不会自动安装。",
    "method": "方法：{{method}}",
    "noAnswers": "没有答案",
    "noAnswersDesc": "NXDOMAIN、空 RRset 或解析失败",
    "lookupOkHint": "以上为即时查询结果。CDN multi-A 应看到多个 IP；健康摘除后应减少。",
    "lookupFailHint": "查询失败或无答案。请确认名称、类型与上游解析器。",
    "validateTitle": "记录验证",
    "validateDesc": "新增／编辑时自动验证（CNAME 冲突、A/AAAA 格式等）。",
    "createZoneTitle": "创建 DNS 区域",
    "createZoneDesc": "依模板生成记录",
    "createZoneNeedValid": "请输入有效的区域名称与 IPv4 位址",
    "zoneNameHint": "例如 example.com（不含结尾点）",
    "invalidZone": "区域名称无效。使用真实域名（例如 example.com）。",
    "invalidIpv4": "IPv4 无效。每个八位位组必须为 0–255。",
    "serverIpv4": "服务器 IPv4",
    "serverIpv4Hint": "模板 A 记录使用的地址",
    "thisHostIpv4": "此主机公网 IPv4",
    "serverIpv6Optional": "服务器 IPv6（可选）",
    "serverIpv6Hint": "有公网 v6 时写入 AAAA；可留空",
    "thisHostIpv6": "此主机公网 IPv6（可留空）",
    "soaNsCreateHint": "可留空，默认 ns1.区域名称",
    "defaultTtlLabel": "默认 TTL",
    "defaultTtlHint": "SOA 与新记录默认",
    "recordTemplate": "记录模板",
    "editRecord": "编辑记录",
    "addRecordTitle": "新增记录",
    "recordModalDesc": "区域 {{zone}} · 保存后需再写入区域文件",
    "recordType": "DNS 记录类型",
    "nameHint": "@ = 根域名；www = 子域名",
    "mxPlaceholder": "例如 10 mail.example.com.",
    "spfPlaceholder": "例如 v=spf1 a mx ip4:… ip6:… ~all",
    "needIpv6": "请填 IPv6 地址",
    "needIpv4": "请填 IPv4 地址",
    "valueHint": "IP、主机名或对应内容",
    "ipv6Address": "IPv6 地址",
    "ipv4Address": "IPv4 地址",
    "cacheTime": "缓存时间",
    "deleteZoneTitle": "删除区域？",
    "deleteZoneDesc": "会一并删除其 DNS 记录登记。",
    "deleteRecordTitle": "删除记录？",
    "deleteRecordDesc": "移除后请写入区域文件",
    "addPeer": "新增 peer",
    "probe": "探活",
    "pushZones": "推送 zones",
    "reloadRemote": "remote reload",
    "generateDnssec": "生成 DNSSEC 密钥",
    "lookup": "查询",
    "saveSoa": "保存 SOA",
    "saveSoaAndWrite": "保存并写入区域文件",
    "saveSoaSettings": "保存 SOA 设定",
    "saveSoaAndWriteBtn": "保存并写入区域文件",
    "goToZones": "前往区域",
    "refresh": "刷新",
    "pushReload": "推送 + reload",
    "pushOnly": "仅推送（不 reload）",
    "reloadOnly": "仅 remote reload",
    "probePeers": "探活 peers",
    "clusterDefaultHint": "默认推送后在对等节点重新加载 DNS；需本机已开启系统变更权限。",
    "notProbed": "尚未探活",
    "probeHealthy": "探活：{{status}}",
    "pushReloadShort": "推送+reload",
    "dnssecCardDesc": "生成密钥／DS；若 dataDir 有 zone 文件会尝试 dnssec-signzone。DS 不会自动上 registrar。",
    "currentZone": "当前区域：",
    "generateAndSign": "生成密钥并尝试签署 zone",
    "lookupName": "名称",
    "fillCurrentZone": "填入当前区域",
    "lookupToolHint": "优先使用主机上的 dig；若无 dig 则 fallback 至 node dns。结果反映查询当下解析器所见，不等于 panel 内记录。",
    "validateExtra": "error 会挡保存；warn（如 apex CNAME）只提示。",
    "createAfterHint": "创建后请在「记录」分页检视并「写入区域文件」才会落到磁盘。",
    "valueLabel": "值",
    "ttlHint": "缓存时间",
    "soaSavedControl": "已保存 SOA 设定（控制面）— 请「写入区域文件」套用",
    "soaNs2Label": "次要 NS（可选）",
    "soaNs2Hint": "第二名称服务器 FQDN，例如 ns2.example.com.",
    "soaHostmaster": "SOA 管理员邮箱（RNAME）",
    "soaHostmasterHint": "用点代替 @，例如 hostmaster.example.com.",
    "soaRefresh": "Refresh（秒）",
    "soaRetry": "Retry（秒）",
    "soaExpire": "Expire（秒）",
    "soaMinimum": "Minimum／负缓存 TTL（秒）",
    "soaTimingHint": "SOA 定时参数（秒）。",
    "healthTitle": "DNS 服务健康",
    "healthDesc": "主机真实状态：服务 / 端口 53 / 已写入 zone 文件 / 本机 dig 是否有响应（写入 ≠ 已 reload ≠ 对外 answering）",
    "healthPillOk": "DNS 正常",
    "healthPillBad": "DNS 异常",
    "healthService": "服务",
    "healthServiceDown": "未运行",
    "healthListen": "端口 53",
    "healthWritten": "zone 文件",
    "healthAnswering": "本机响应",
    "healthAnsweringYes": "有",
    "healthAnsweringNo": "无／拒绝",
    "healthRefresh": "重新探测",
    "healthProbeLocal": "再探测健康",
    "healthOpen53": "开放防火墙 53（TCP+UDP）",
    "healthOpened53": "已请求开放 53 TCP+UDP",
    "healthOpen53Failed": "开放 53 失败",
    "healthPortClosed": "未监听 53",
    "healthPortOpenAlready": "53 似已在听",
    "healthHint": "dig 被拒时，请先修复 PowerDNS、开放 53，再写入 zone。",
    "stateService": "服务",
    "stateListen": "监听",
    "stateWritten": "已写入",
    "stateAnswering": "本机 answering",
    "lookupServer": "查询服务器（@）",
    "lookupServerHint": "127.0.0.1 = 本机权威；公网 IP 测对外；留空用系统 resolver",
    "healthHealPdns": "修复 PowerDNS 绑定",
    "healNeedInstall": "PowerDNS 未安装 - 首先将其安装在“软件”选项卡上",
    "applyNeedService": "DNS 服务未运行 — 在应用之前启动或安装它",
    "goStartService": "去启动 DNS 服务",
    "startBindHint": "若启动后仍未监听，多半是 53 埠被 systemd-resolved 占用。请先按下方“修复绑定”再启动。",
    "deleteZoneNeedName": "删除此区域 - 您将输入区域名称进行确认",
    "healthHealPdnsHint": "将 local-address 设为公网 IP，避免与 systemd-resolved 抢 0.0.0.0:53",
    "healthHealPdnsOk": "PowerDNS 已绑定 {{ip}} 并尝试启动",
    "healthHealPdnsFailed": "PowerDNS 修复失败",
    "startProbeFailed": "启动后无法再探测 DNS 健康",
    "startNotListening": "PowerDNS 启动已回报，但 53 埠未在答",
    "aboutTitle": "DNS 使用要点",
    "aboutSub": "区域为主；记录／集群／DNSSEC 需先选域名。",
    "aboutZonesTitle": "区域与域名范围",
    "aboutZonesBody": "先在「区域」选域名，再管理该域名的记录、集群、DNSSEC。",
    "aboutHealthTitle": "服务健康",
    "aboutHealthBody": "在「工具」探测 PowerDNS、修复绑定、开放 53 端口。",
    "aboutStackTitle": "软件版本",
    "aboutStackBody": "在「软件」检查／更新 PowerDNS 套件。",
    "aboutDdnsTitle": "DDNS",
    "aboutDdnsBody": "DDNS 分页在本机 WAN 位址变更时更新指定的 A／AAAA。它不取代区域记录编辑。写入并不等于公网解析已生效。",
    "ddns": {
      "honesty": "写入成功并非公网 DNS 已传播。解析快取与 registrar NS 仍然有效。空白或私网 IP 不会发布。",
      "needExecute": "供应商更新需要 root 与 YSK_EXECUTE=1。探测仍会执行。",
      "lastRun": "上次执行",
      "nextRun": "下次执行",
      "wanRemembered": "已记住的 WAN IPv4",
      "updateNow": "立即更新",
      "updateTitle": "发布侦测到的 WAN 位址？",
      "updateDesc": "Calls Cloudflare, nsupdate, or the local zone for each enabled record. Type UPDATE to confirm.",
      "updated": "DDNS 更新完成",
      "updateFailed": "DDNS 更新失败",
      "probe": "探测 WAN",
      "probed": "WAN 探测完成",
      "probeFailedUi": "WAN 探测失败",
      "forceHint": "“立即更新”即使位址未变更也会再发布。探测不会呼叫供应商。",
      "saved": "已储存",
      "saveFailed": "无法储存",
      "deleted": "已移除记录",
      "emptyTitle": "尚未有 DDNS 记录",
      "emptyDesc": "在下方新增主机名称。可选 Cloudflare、RFC 2136，或本机 PowerDNS（managedBy=ddns）。",
      "colFqdn": "主机名称",
      "colProvider": "供应商",
      "colPublished": "已发布",
      "colEnabled": "状态",
      "colFrom": "由",
      "colTo": "至",
      "colWhen": "时间",
      "colNote": "备注",
      "pauseRecord": "暂停",
      "resumeRecord": "恢复",
      "statusCard": "WAN 状态",
      "recordsCard": "主机名称",
      "addCard": "新增主机名称",
      "settingsCard": "设定",
      "historyTitle": "近期更新",
      "historyEmpty": "尚无 DDNS 纪录",
      "paused": "排程已暂停",
      "pausedHint": "自动更新已关闭。探测与“立即更新”仍可执行。",
      "schedulerOn": "自动更新",
      "schedulerOnHint": "行程内排程，不是 crontab。关闭后不会自动 upsert。",
      "zone": "区域",
      "zoneHint": "Leave empty to use the last two labels of the hostname",
      "zoneSelectHint": "本机已有区域。Cloudflare 与 RFC 2136 可用任意区域名称。",
      "noLocalZones": "尚无本机区域。若使用本机 PowerDNS，请先在“区域”分页建立。",
      "providerLocal": "本机 PowerDNS",
      "proxied": "Cloudflare 代理",
      "proxiedHint": "Orange cloud。VPN／WireGuard 主机名称请关闭。",
      "proxiedWarnTitle": "使用 Cloudflare orange cloud？",
      "proxiedWarnDesc": "Proxied 记录会隐藏来源 IP。VPN 与 WireGuard 主机名称应维持 DNS only。请输入 PROXY 确认。",
      "addRecord": "新增主机名称",
      "interval": "间隔（秒）",
      "intervalHint": "60–86400。行程内排程，不是 crontab。",
      "cfToken": "Cloudflare API 令牌",
      "cfTokenHint": "只写不回显。若已设环境变数 CF_API_TOKEN 则使用该值。",
      "tokenConfigured": "已储存 Cloudflare token。留空则保持原值。",
      "tokenMissing": "尚未储存 Cloudflare token（仍可使用环境变数 CF_API_TOKEN）。",
      "rfcServer": "RFC 2136 服务器",
      "rfcServerHint": "远端服务器需要资料目录内的 TSIG key file。Loopback 可以不签名。密钥不会放进 argv。",
      "rfcKeyFile": "TSIG 密钥文件",
      "rfcKeyFileHint": "相对于 DDNS 资料目录，或资料目录下的绝对路径。",
      "rfcKeyConfigured": "已储存 key file 路径。留空则保持原值。",
      "primaryFqdn": "主要主机名称",
      "primaryFqdnHint": "作为 VPN Endpoint 提示。不会改写现有 peers。",
      "updateIdentity": "记住 WAN IPv4",
      "updateIdentityHint": "把上次公网 IPv4 存入 DDNS 状态",
      "vpnHint": "VPN Endpoint 可用 DDNS 主机名称（不会自动改写现有设定）。",
      "sslHint": "Let's Encrypt HTTP-01 需要主机名称解析到本机。IP 变更后不会自动重签凭证。",
      "deleteTitle": "移除 DDNS 主机名称？",
      "deleteDesc": "请输入 {{fqdn}} 确认。不会删除 zone 编辑器里的本机记录。",
      "err": {
        "requiresExecute": "发布需要 root 与 YSK_EXECUTE=1。",
        "missingToken": "缺少 Cloudflare API token。",
        "rfc2136NeedKey": "远端 RFC 2136 需要资料目录内的 TSIG key file。",
        "rfc2136KeyMissing": "TSIG key file 不存在，或不在资料目录内。",
        "noPublicIpv4": "未侦测到公网 IPv4。",
        "noPublicIpv6": "未侦测到公网 IPv6。",
        "notPublicIpv4": "侦测到的 IPv4 不是公网位址。",
        "notPublicIpv6": "侦测到的 IPv6 不是公网位址。",
        "probeFailed": "公网 IP 探测失败。",
        "localNoZone": "此主机名称没有对应的本机 DNS 区域。",
        "localNeedsDb": "本机供应商需要控制平面数据库。",
        "managedByClash": "该名称由其他功能拥有（不是 DDNS）。",
        "unknownProvider": "未知的 DDNS 供应商。",
        "nsupdateFailed": "nsupdate 失败。",
        "updateFailed": "供应商更新失败。",
        "invalidFqdn": "主机名称无效。",
        "invalidType": "类型必须为 A 或 AAAA。",
        "invalidProvider": "未知供应商。",
        "notFound": "找不到记录。",
        "confirmMismatch": "确认内容必须与主机名称相同。",
        "schedulerDisabled": "DDNS 排程已暂停。",
        "provider": "供应商回传错误。"
      }
    },
    "createMailZoneNow": "已建立邮件区域 {{domain}}",
    "toolsFirewallTitle": "防火墙（UFW）",
    "toolsFirewallHint": "允许或拒绝 53 端口。不会启动或停止 PowerDNS。",
    "toolsUnitTitle": "PowerDNS 服务单元",
    "toolsUnitHint": "systemd 单元 pdns — 启动、停止、重启、重载。",
    "installConfirmTitle": "安装 PowerDNS？",
    "installConfirmDesc": "会安装 pdns-server 并写入受管权威配置。需要 root 与 YSK_EXECUTE=1。",
    "installConfirmConsequence": "安装并启动后，PowerDNS 会绑定 53 端口。",
    "installPort53Busy": "53 端口已有程序在监听。未停止或修复该监听前，PowerDNS 可能无法绑定。",
    "installPort53BusyConsequence": "请先修复绑定或停止其他监听，才可预期 53 端口有响应。"
  },
  "docker": {
    "title": "Docker",
    "subtitle": "在这台服务器安装 Docker Engine，并管理容器、映像、Volume 与验证者 Compose 堆栈。",
    "refresh": "刷新",
    "notInstalled": "未安装 Docker Engine。请在此页安装 docker.io 及 docker-compose-v2。",
    "protected": "受保护",
    "pruneConfirm": "输入 PRUNE 以确认清理 volume 或系统",
    "needEngineTitle": "请先安装 Docker Engine",
    "stopEngineDesc": "会停止 Docker 引擎及本机全部 {{n}} 个容器。",
    "notInstalledValue": "未安装",
    "nameHint": "字母、数字、下划线、点、连字符（最长 128）",
    "volPlaceholder": "我的数据",
    "netPlaceholder": "我的网",
    "runPorts": "发布端口",
    "runPortsHint": "每行 host:container，例如 8080:80",
    "runEnv": "环境变量",
    "runEnvHint": "每行 KEY=value",
    "runRestart": "重启策略",
    "runNetwork": "网络",
    "runVolumes": "Volume",
    "runVolumesHint": "每行 volume:dest",
    "runAdvancedHint": "多服务堆栈请用验证者节点，或主机上已有的 Compose 文件。",
    "daemonConfirmTitle": "应用引擎设置？",
    "daemonConfirmDesc": "会写入 daemon.json 并重启 docker.service。所有容器都会中断。",
    "settingsHint": "只开放安全的 daemon.json 选项。应用会写入文件并重启 docker.service。",
    "cli": {
      "usage": "用法：ysk-server docker status|ps|images|volumes|networks|df|logs|inspect|exec|start|stop|restart|rm|pull|run|prune|engine|compose [--image IMG] [--name N] [--preset version|help|hostname] [--bin BIN] [--project P] [--execute] [--json]"
    },
    "tab": {
      "overview": "概览",
      "containers": "容器",
      "images": "映像",
      "compose": "Compose",
      "volumes": "Volume",
      "networks": "网络",
      "prune": "清理",
      "settings": "设置",
      "about": "说明"
    },
    "col": {
      "engine": "引擎",
      "containers": "容器",
      "version": "版本",
      "dataRoot": "数据目录",
      "disk": "磁盘",
      "validators": "验证者堆栈",
      "name": "名称",
      "image": "映像",
      "status": "状态",
      "ports": "端口",
      "managed": "由面板管理",
      "size": "大小",
      "driver": "驱动",
      "type": "类型",
      "reclaimable": "可回收"
    },
    "state": {
      "up": "运行中",
      "down": "已停止",
      "running": "运行中",
      "exited": "已结束",
      "exitedCode": "已结束（{{n}}）",
      "restarting": "重启中",
      "restartingCount": "重启中 · {{n}} 次",
      "paused": "已暂停",
      "created": "已建立",
      "dead": "已失效",
      "removing": "删除中",
      "unknown": "未知"
    },
    "df": {
      "images": "映像",
      "containers": "容器",
      "volumes": "本机 volume",
      "builder": "建置快取",
      "other": "其他"
    },
    "actions": {
      "start": "启动",
      "stop": "停止",
      "restart": "重启",
      "remove": "删除",
      "logs": "日志",
      "inspect": "检查",
      "exec": "执行（version）",
      "run": "运行映像",
      "pull": "拉取",
      "up": "启动",
      "down": "停止",
      "createVolume": "创建 volume",
      "createNetwork": "创建网络",
      "pruneContainers": "清理容器",
      "pruneImages": "清理映像",
      "pruneVolumes": "清理 volume",
      "pruneSystem": "系统清理",
      "startEngine": "启动引擎",
      "stopEngine": "停止引擎",
      "restartEngine": "重启引擎",
      "applyDaemon": "应用引擎设置"
    },
    "empty": {
      "containers": "没有容器",
      "images": "没有映像",
      "compose": "没有 Compose 项目",
      "composeDesc": "专案来自验证者节点或主机上已有的 Compose 档。本页不接受任意上载 YAML。",
      "composeCta": "开启验证者节点",
      "volumes": "没有 volume",
      "networks": "没有网络"
    },
    "logs": {
      "empty": "没有日志",
      "follow": "跟随"
    },
    "deleteRunningWarn": "此容器仍在运行或重启中，删除会强制移除。",
    "settings": {
      "logMaxSize": "容器日志上限",
      "liveRestore": "即时还原（引擎重启时保留容器）",
      "mirrors": "Registry 镜像（每行一个网址）",
      "insecure": "未加密 Registry（每行一个主机）"
    },
    "about": {
      "body": "Docker 是 YSK Server 的一级主机服务，与 Nginx 同级。由面板用 Ubuntu docker.io + docker-compose-v2 安装。验证者节点以 yskval-* Compose 项目运行。",
      "honesty": "变更主机需要 root 及 YSK_EXECUTE=1。默认是试运行。此页不是 Kubernetes。",
      "validators": "打开验证者节点"
    },
    "alerts": {
      "daemonTitle": "Docker 引擎未运行",
      "daemonBody": "已安装 Docker，但 docker.service 未启动。验证者堆栈无法启动。"
    },
    "errors": {
      "notInstalled": "未安装 Docker",
      "daemonDown": "Docker 引擎未运行",
      "needCompose": "需要 docker compose（v2 插件）",
      "badImage": "映像名称无效",
      "badName": "名称无效",
      "badPort": "端口映射无效",
      "badEnv": "环境变量无效",
      "badVolume": "磁盘挂载无效",
      "badNetwork": "网络无效",
      "protectedNetwork": "不可以删除内建 Docker 网络",
      "badRestart": "重启策略无效",
      "badPrune": "清理范围无效",
      "needPruneConfirm": "清理 volume 或系统需要 confirm=PRUNE",
      "badDaemon": "引擎设置无效",
      "composeMissing": "找不到这个项目的 Compose 文件",
      "logsFailed": "读不到容器日志",
      "mutateFailed": "Docker 命令失败",
      "engineFailed": "无法控制 docker.service",
      "badExec": "exec 只限允许清单内的二进制与预设（不可用 shell，不可开 TTY）",
      "uninstallBusy": "请先停止由面板管理的容器（包括验证者堆栈）再卸载 Docker",
      "badCommand": "指令或 entrypoint 无效",
      "portBusy": "主机埠 {{bind}}:{{port}} 已被占用",
      "nameInUse": "已有名称为 {{name}} 的容器。请先删除或改名。",
      "unpublished": "容器未挂上网络或未发布埠，不当成已启动。"
    },
    "notes": {
      "dryMutate": "此为试运行。要改主机请加 --execute 及 YSK_EXECUTE=1。",
      "dryPrune": "清理预览（未应用）。",
      "dryEngine": "引擎控制此为试运行。",
      "dryDaemon": "将写入 /etc/docker/daemon.json 并重启 docker.service。",
      "daemonWrote": "已写入 daemon.json",
      "start": "已启动容器",
      "stop": "已停止容器",
      "restart": "已重启容器",
      "remove": "已删除容器",
      "ran": "已用映像启动容器",
      "leftoverRemoved": "绑定失败后已删除残留容器 {{name}}",
      "pulled": "已拉取映像",
      "exec": "已执行允许清单内的 exec",
      "imageRemoved": "已删除映像",
      "volumeCreated": "已创建 volume",
      "volumeRemoved": "已删除 volume",
      "networkCreated": "已创建网络",
      "networkRemoved": "已删除网络",
      "pruned": "清理完成",
      "compose": {
        "up": "已启动 Compose 项目",
        "down": "已停止 Compose 项目",
        "restart": "已重启 Compose 项目",
        "rm": "已删除 Compose 项目"
      },
      "engine": {
        "start": "已启动 docker.service",
        "stop": "已停止 docker.service",
        "restart": "已重启 docker.service"
      }
    },
    "ui": {
      "whatYouGet": "此页可以做什么",
      "whatYouGetLead": "先安装 Docker Engine。之后可以运行单个容器、拉取映像，并查看本机已有的验证者 Compose 堆栈。",
      "capEngine": "引擎",
      "capEngineDesc": "一键安装 docker.io 及 docker-compose-v2。可在此页启动或停止 docker.service。",
      "capWork": "容器与映像",
      "capWorkDesc": "选择常用映像、拉取、运行，然后查看日志或检查容器。",
      "capStacks": "验证者堆栈",
      "capStacksDesc": "多服务堆栈是验证者 Compose 项目（yskval-*）。本页不接受上传 YAML。",
      "cardEngine": "引擎",
      "cardDisk": "磁盘",
      "cardWork": "本机现况",
      "compose": "Compose",
      "cgroup": "组组",
      "used": "已用",
      "free": "可用",
      "running": "运行中",
      "images": "映像",
      "volumes": "Volume",
      "networks": "网络",
      "goImages": "映像",
      "goValidators": "验证者节点",
      "imagePickHint": "请选择常用映像。只有需要其他参考名称时，才选「其他」。",
      "imageCustom": "其他",
      "driver": "驱动",
      "driverLocalOnly": "本页只创建 local volume。",
      "netDefaultDriver": "新建网络使用 Docker 默认的 bridge 驱动。",
      "pruneWhat": "要清理什么",
      "pruneAck": "我明白未使用的数据会被删除，并且无法还原",
      "pruneAckDesc": "清理 volume 或整个系统无法还原。会按所选范围删除已停止的容器与未使用的映像。",
      "pruneNow": "立即清理",
      "useMirrors": "使用 Registry 源",
      "useInsecure": "允许未加密 Registry",
      "publishPorts": "向主机发布端口",
      "attachVolume": "挂载 volume",
      "setEnv": "设置环境变量",
      "defaultNet": "默认",
      "mountPath": "挂载路径",
      "restartNo": "从不",
      "restartUnless": "除非已停止",
      "restartAlways": "始终",
      "restartOnFail": "失败时",
      "needAck": "清理前请先确认",
      "scopeContainers": "已停止的容器",
      "scopeImages": "未使用的映像",
      "scopeVolumes": "未使用的 volume",
      "scopeBuilder": "构建缓存",
      "scopeSystem": "所有未使用项",
      "noVolumesYet": "尚无 volume — 请先到 Volume 分页创建。",
      "command": "指令",
      "commandHint": "选填。映像之后的参数。留空则用映像 CMD。",
      "entrypoint": "入口点",
      "entrypointHint": "选填单一程式。留空则用映像 ENTRYPOINT。",
      "portMap": "主机:容器",
      "portOccupied": "此主机埠已被占用",
      "validatorImage": "由验证者页管理",
      "newVolume": "新建 named volume",
      "loopbackUrl": "本机测试网址",
      "nginxProxy": "建立 Nginx 反向代理",
      "intentPorts": "意图（未发布）",
      "customPort": "其他主机端口",
      "customPortHost": "主机端口",
      "customPortContainer": "容器端口",
      "pctUsed": "已用 {{n}}%",
      "customPortHint": "1–65535。例如 9090 → 80。",
      "pickBridge": "选择 bridge 网络"
    },
    "deleteTitle": "删除 {{id}}",
    "deleteDesc": "此操作无法复原。",
    "deleteC1": "会从这台主机移除该资源。",
    "deleteComposeVal": "这是验证者堆栈 — 验证者实例会一并删除。",
    "pruneTitle": "清理 Docker 资源",
    "pruneDesc": "输入 PRUNE 以确认。已删除的数据无法复原。",
    "pruneC1": "会删除所选范围内未使用的资源。",
    "pruneC2": "Volume 与系统清理会永久删除未使用的数据卷。",
    "pruneC3": "会移除此范围内已停止的容器或未使用映像。"
  },
  "email": {
    "title": "邮件",
    "subtitle": "域名、DNS、信箱与 Relay",
    "externalTodos": "Server 以外必须自行处理的事项",
    "ptr": "反向 DNS（PTR）需由 VPS/云端供应商设定",
    "port25": "出站 Port 25 可能被云端封锁，需申请解除或使用 Relay",
    "create": "创建邮件域名",
    "createHint": "登记域名后可查看 DNS、信箱与健康检查",
    "domains": "已登记域名",
    "empty": "尚未登记邮件域名",
    "emptyHint": "建立域名后可产生 DNS 清单与外部待办",
    "searchPlaceholder": "搜寻域名…",
    "domain": "域名",
    "serverIp": "服务器 IP",
    "notFound": "找不到此邮件域名",
    "backToList": "返回邮件域名",
    "softwareNeeded": "邮件所需软件尚未安装",
    "applyApplied": "已套用",
    "applyWritten": "已写入",
    "applyFailed": "失败",
    "applyDraft": "草稿",
    "queueMsgCount": "伫列 {{count}} 封",
    "queueLoadFailed": "读取伫列失败",
    "queueFlushRequested": "已请求清空伫列",
    "queueFlushFailed": "清空失败",
    "queueDeleted": "已删 {{id}}",
    "queueDeleteFailed": "删除失败",
    "pillDomains": "{{count}} 域名",
    "pillNoDomain": "无域名",
    "statDomains": "域名",
    "statHealthy80": "健康≥80",
    "statApplied": "已套用",
    "statDraft": "草稿",
    "tabDomains": "域名",
    "tabWebmail": "网页邮件",
    "tabQueue": "伫列",
    "tabStack": "软件",
    "tabOps": "分工",
    "webmailGlobalDesc": "整个面板共用一套网页邮件；所有邮件域名的用户都用同一入口登录。",
    "webmailGlobalHint": "需要系统变更权限（YSK_EXECUTE）与外网以下载 Roundcube／SnappyMail。未开权限时不会创建半成品项目。",
    "webmailMovedHint": "网页邮件已改为全站共用设置，不再按单一域名安装。",
    "openGlobalWebmailSettings": "前往网页邮件设置",
    "domainsTitle": "域名 ({{filtered}}/{{total}})",
    "domainsListDesc": "在此主机上注册的邮件域",
    "emptyFilterHint": "没有符合搜寻的域名",
    "emptyCreateHint": "用列表右上角“建立”登记域名；成功后进入详情完成一键设定与 DNS。",
    "queueLocalTitle": "邮件队列",
    "needExecute": "需 YSK_EXECUTE",
    "viewQueue": "查看伫列",
    "flushQueue": "清空伫列",
    "flushQueueEmpty": "队列为空",
    "flushQueueNeedExecute": "刷新队列需要YSK_EXECUTE（主机执行权限）",
    "queueHint": "本机 Postfix 队列。查看是读取探测；清空需要 YSK_EXECUTE。",
    "deleteThisId": "删除此 ID",
    "queueEmpty": "无待送邮件",
    "queueEmptyHint": "目前没有待送邮件",
    "mtaTitle": "MTA 软件",
    "mtaBody": "探测与一键安装由上方横幅驱动。列表页不假装已安装。",
    "mtaSmtp": "SMTP 出站／入站",
    "mtaImap": "IMAP／POP3 信箱",
    "mtaDkim": "出站 DKIM 签署",
    "mtaMissingHint": "缺软件时横幅会显示“一键安装／重新探测”。安装成功 ≠ 域名已可收发。",
    "pathTitle": "域名设定路径",
    "path1": "右上角登记域名",
    "path2": "进入域名详情 → 一键设定邮件",
    "path3": "DNS 页或外部 checklist 加 MX／SPF／DKIM／DMARC",
    "path4": "SSL 绑定 mail／webmail 主机名",
    "viewDomainList": "查看域名列表",
    "opsPanelTitle": "面板 vs 外部",
    "opsThisPage": "本页：域名登记、伫列观测、软件探测",
    "opsDetail": "域名详情：一键 bootstrap、信箱、别名、relay、webmail",
    "opsHost": "主机商：PTR、Port 25 出站策略",
    "opsRegistrar": "域名商：MX／SPF／DKIM／DMARC 发布",
    "statusTitle": "状态",
    "statusDraft": "draft：仅面板",
    "deliverabilityChecks": "检查项",
    "statusWritten": "written：已写管理档，未必套到系统",
    "statusApplied": "applied：曾成功套用（仍视服务 is-active）",
    "statusReputation": "国际收件匣信誉永远无法 100% 自动化",
    "createModalDesc": "",
    "registerDomain": "创建",
    "domainApexHint": "不含 mail. 前缀",
    "serverIpv4Hint": "MX／A／SPF",
    "serverIpv4Ph": "公网 IPv4",
    "serverIpv6": "IPv6（可选）",
    "serverIpv6Hint": "AAAA／SPF ip6",
    "serverIpv6Ph": "可留空",
    "registerNote": "",
    "flushConfirmTitle": "清空全部邮件伫列？",
    "flushConfirmDesc": "队列中的邮件会被删除，不可复原。",
    "flushConfirm": "清空",
    "tabMailbox": "邮箱",
    "tabAliases": "别名／转发",
    "tabHealth": "健康",
    "tabRelay": "中继",
    "tabSieve": "过滤／SSO",
    "tabAdvanced": "进阶",
    "pillApplied": "已套用",
    "pillManaged": "管理档",
    "pillDraft": "草稿",
    "statHealth": "健康",
    "statApply": "套用",
    "statDomain": "域名",
    "pausedFlag": "已暂停（旗标）",
    "normal": "正常",
    "statMailboxes": "邮箱",
    "statDnsRecords": "DNS 纪录",
    "dnsTodosTitle": "域名系统",
    "copyAllRecords": "复制全部纪录",
    "openDnsPage": "开启 DNS 页",
    "healthScore": "健康分",
    "healthUnchecked": "尚未檢查",
    "healthUncheckedHint": "尚未实测 DNS／PTR／25 端口。",
    "healthPartialScore": "部分评分 {{n}}/100（仅 DNS）",
    "healthPartialHint": "只计了 DNS 清单 — 即时检查与黑名单尚未测。",
    "deliverabilityScore": "送达能力检查包",
    "opendkimNoReload": "OpenDKIM 不支持重载 — 更改密钥或对照表后请用重启。",
    "opendkimNoReloadTitle": "此堆栈不支持 systemctl reload opendkim",
    "healthChecklist": "检查清单 {{score}}/100",
    "healthChecklistHint": "检查清单分数 — 尚未做 DNS／PTR／25 端口实测",
    "healthLiveHint": "实测分数",
    "suggestedRecords": "建议纪录数",
    "externalTodosCount": "外部待办",
    "colType": "类型",
    "colName": "名称",
    "colValue": "值",
    "colNote": "说明",
    "copy": "复制",
    "noDnsRecords": "尚无 DNS 纪录",
    "externalTodosHeading": "外部待办（面板无法代劳）",
    "externalTodosBody": "PTR、端口 25、注册商 DNS 须自行完成。",
    "copyExternalTodos": "复制外部待办清单",
    "todoDone": "完成",
    "todoPending": "待办",
    "refreshDnsHint": "按「重新整理」加载 DNS 建议",
    "mailboxListTitle": "邮箱列表（{{count}}）",
    "createMailbox": "+ 建立邮箱",
    "writeDovecot": "写入 Dovecot 密码库",
    "noMailboxes": "尚未有邮箱 — 按“建立邮箱”开启对话框",
    "mailboxOpsResult": "邮箱操作结果",
    "aliasesTitle": "别名／转发／Catch-all",
    "aliasType": "类型",
    "aliasTypeAria": "别名类型",
    "typeForward": "转发",
    "typeAlias": "别名",
    "localPart": "本地部分",
    "localPartHint": "例如 sales",
    "targetMailbox": "目标信箱",
    "targetMailboxHint": "可用逗号分隔多个",
    "addAlias": "新增别名",
    "noAliases": "尚未有别名／转发",
    "aliasResult": "别名结果",
    "autoreplyTitle": "自动回复／暂停",
    "autoreplyDesc": "自动回复",
    "autoreplyBodyHint": "可选「应用到系统」",
    "enableAutoreply": "启用自动回复",
    "enableAutoreplyDesc": "vacation.sieve；系统套用后挂 .dovecot.sieve",
    "applyToSystem": "套用到系统（Postfix／Dovecot）",
    "applyToSystemDesc": "需 YSK_EXECUTE=1 + root；失败不会假成功",
    "subject": "主旨",
    "body": "内文",
    "saveApplyAutoreply": "储存并套用自动回复",
    "saveAutoreplyWritten": "储存自动回复（written）",
    "suspendApply": "暂停并套用 REJECT",
    "suspendWritten": "暂停域名（written）",
    "resumeApply": "恢复并更新 map",
    "resumeWritten": "恢复域名（written）",
    "flagsResult": "旗标／系统套用结果",
    "defaultAutoreplySubject": "自动回复",
    "defaultAutoreplyBody": "已收到您的邮件，稍后回复。",
    "healthLiveTitle": "寄达健康（真实 DNS／端口探测）",
    "healthLiveDesc": "即时检查",
    "serverIpLabel": "服务器 IP",
    "liveCheck": "即时检查",
    "liveOk": "大致正常",
    "liveBad": "有问题",
    "notTested": "未测",
    "blacklist": "黑名单",
    "healthExternalNote": "PTR 与端口 25 须在主机商完成。",
    "runLiveCheck": "执行 Live 检查",
    "dnsblThisIp": "DNSBL（本 IP）",
    "multiIpRbl": "多 IP RBL",
    "warmupAdvice": "暖身建议",
    "probeMatrix": "探测结果",
    "colItem": "项目",
    "colStatus": "状态",
    "pass": "通过",
    "fail": "失败",
    "unknown": "未知",
    "colDetail": "详情",
    "outboundPort25": "出站端口 25",
    "noProbeResults": "尚无探测结果",
    "noLiveYet": "尚未执行 Live 检查",
    "noLiveYetHint": "先执行即时检查",
    "mailSslTitle": "证书与 TLS",
    "mailSslHint": "真实签发在 SSL 页完成；此处一键跳到对应主机名（mail / webmail / 域名）",
    "openSslPage": "开启 SSL 页",
    "webmailSsoSkeleton": "Webmail SSO 骨架",
    "writeRoundcubeSso": "写入 Roundcube SSO 骨架",
    "ssoSkeletonSymlink": "SSO 骨架 + 系统 symlink",
    "rateLimitTitle": "出站限速／反垃圾",
    "rateLimitDesc": "真实写入 Postfix anvil 与 Rspamd 设定（需 YSK_EXECUTE + root 才会 applied）",
    "hourlyMsgCap": "每小时消息上限",
    "hourlyMsgCapHint": "全局取各域名最小值",
    "enableAntispam": "启用反垃圾标记（Rspamd multimap）",
    "enableAntispamDesc": "关则域名标记 antispam off",
    "writeControlOnly": "只写入控制面",
    "applyToSystemBtn": "套用到系统",
    "dnsblResult": "DNSBL 结果",
    "warmupResult": "暖身结果",
    "policyResult": "策略结果",
    "relayTitle": "SMTP 出站中继",
    "relayHost": "中继主机",
    "applyRelaySystem": "套用到系统 Postfix",
    "applyRelaySystemDesc": "写入系统 Postfix 中继",
    "saveApplyRelay": "储存并套用到系统",
    "saveOnly": "只储存设定",
    "relayResult": "中继结果",
    "webmailSsoTitle": "Webmail 单点登入",
    "webmailSsoDesc": "Webmail 登录令牌",
    "mailboxPasswordOptional": "信箱密码（可选）",
    "mailboxPasswordHint": "可留空",
    "mailboxPasswordPh": "填写后 token 可自动登入 Roundcube",
    "ssoTokenHint": "生成短期登录令牌",
    "issueSsoToken": "签发 SSO token",
    "sieveTitle": "Sieve 过滤",
    "sieveDesc": "写入 dataDir/email/sieve；写入 ≠ Dovecot 已载入",
    "sieveTemplateHint": "默认过滤模板",
    "writeDefaultSieve": "写入预设 Sieve",
    "listWrittenFiles": "列出已写入档案",
    "result": "结果",
    "domainSslTitle": "此域名 SSL",
    "domainSslDesc": "跳转 SSL 页并预填域名，申请 Let’s Encrypt",
    "requestCert": "申请 {{domain}} 凭证",
    "clientAutoTitle": "用户端自动设定",
    "clientAutoDesc": "客户端自动配置",
    "clientAutoHint": "生成 autodiscover／autoconfig",
    "generateCopyXml": "产生并复制设定 XML",
    "queueTitle": "邮件伫列",
    "queueDesc": "查询或清空本机 MTA 伫列（亦可在邮件首页操作；需系统变更权限）",
    "publicAutoconfig": "公开配置",
    "bootstrapTitle": "一键设定邮件",
    "bootstrapDesc": "安装套件并套用邮件堆叠（需系统变更 + 管理员）。必须自订管理员密码。",
    "adminPassword": "管理员密码",
    "adminPasswordHint": "管理员邮箱密码",
    "adminPasswordPh": "至少 8 字元",
    "adminPasswordRequired": "请设定至少 8 字元的管理员密码",
    "bootstrapBtn": "一键设定邮件",
    "webmailInstallDesc": "下载／套用 Roundcube",
    "webmailHostname": "Webmail 主机名",
    "webmailHostnameHint": "虚拟主机 server_name，例如 webmail.example.com",
    "installWebmail": "安装／套用 Webmail",
    "bootstrapResult": "一键设定／Webmail 结果",
    "createMailboxTitle": "建立邮箱",
    "createMailboxDesc": "完整位址会是 {{local}}@{{domain}}",
    "createMailboxBtn": "建立邮箱",
    "localPartLabel": "本地部分",
    "localPartFullHint": "完整位址会是 {{local}}@{{domain}}",
    "passwordOptionalHint8": "可选；至少 8 位才会写入杂凑",
    "live": {
      "noMx": "无 MX",
      "mxLookupFailed": "MX 查询失败",
      "noSpf": "无 SPF TXT",
      "spfLookupFailed": "SPF 查询失败",
      "noDkim": "无 DKIM TXT",
      "dkimLookupFailed": "DKIM 查询失败",
      "noDmarc": "无 DMARC",
      "dmarcLookupFailed": "DMARC 查询失败",
      "noPtr": "无 PTR",
      "ptrLookupFailed": "PTR 查询失败",
      "port25Open": "外发 TCP 25 似乎畅通（探测 gmail-smtp-in.l.google.com）",
      "port25Blocked": "外发 TCP 25 探测失败 — 可能被封锁；请申请解封或改用中继",
      "dnsblListed": "已列入：{{list}}",
      "dnsblClean": "以下清单干净：{{list}}"
    },
    "deliv": {
      "mx": "MX 记录",
      "mxFix": "在 DNS 供应商新增 MX 指向邮件主机",
      "spf": "SPF 文本",
      "spfFix": "发布 v=spf1 并包含本机 IP",
      "dkim": "DKIM TXT",
      "dkimFix": "发布面板提供的 selector._domainkey TXT",
      "dmarc": "DMARC 文本",
      "dmarcFix": "发布 _dmarc 政策（可先 p=none）",
      "ptr": "反向 DNS（PTR）",
      "ptrFix": "在 VPS／云控制台设置 PTR 对齐邮件主机名 — 面板无法代设",
      "port25": "外发 Port 25",
      "port25Fix": "向主机商申请解封 Port 25，或设置 SMTP 中继（submission 587）",
      "dnsbl": "DNSBL 声誉",
      "dnsblFix": "于列出的服务除名；干净前勿大量发信",
      "relay": "SMTP 中继（Port 25 被封锁时）",
      "relayOptional": "Port 25 探测畅通 — 中继可选",
      "relayPresent": "dataDir 已有中继设置（应用仍可能需 EXECUTE）",
      "relayMissing": "未设置中继 — Port 25 持续封锁时必须设置",
      "relayFix": "面板邮件 → 中继，或 ysk-server hosting email-bootstrap 加 relay",
      "warmup": "暖机计划",
      "warmupDetail": "{{phases}} 阶段 · 第 1 日最多 {{day1}} 封",
      "warmupFix": "跟随阶段限额；勿用新 IP 对冷名单大量发送",
      "honesty1": "面板从不保证全球 inbox 送达（Gmail／Outlook 过滤属外部）。",
      "honesty2": "PTR 与 Port 25 属 VPS／网络供应商 — 非 YSK 控制平面可改。",
      "honesty3": "MX／SPF／DKIM／DMARC 必须在权威 DNS 供应商发布。",
      "honestyPortBlocked": "Port 25 似乎被封锁 — 大量发送前请用中继或申请解封。",
      "honestyPortOk": "Port 25 探测成功 — 仍请监察退信与 DNSBL。"
    },
    "catchall": "Catch-all（全收）",
    "webmailRoundcube": "网页邮件",
    "warmup": {
      "p1g1": "只发交易类／已知可靠收件人",
      "p1g2": "监控退信；投诉率保持接近零",
      "p1g3": "放量前确保 SPF／DKIM／DMARC／PTR 已生效",
      "p2g1": "只向有互动的联系人缓慢扩张",
      "p2g2": "每日查 DNSBL；被列入即暂停",
      "p2g3": "若 Port 25 受限，优先用 587 submission 而非 bulk",
      "p3g1": "指标保持干净再加倍量",
      "p3g2": "名单分段；硬退信即移除",
      "p4g1": "无封锁再接近正常量",
      "p4g2": "持续监控 DMARC rua",
      "c1": "PTR 对齐 HELO／EHLO（邮件主机名）",
      "c2": "SPF + DKIM + DMARC 已发布并对齐",
      "c3": "DNSBL 干净（Spamhaus／SpamCop／Barracuda）",
      "c4": "外发 Port 25 畅通或已设中继",
      "c5": "不使用购入的「bulk email」IP 段",
      "c6": "考虑域名年龄／历史（新域名要更慢爬升）",
      "noteNewIp": "视此 IP 为新 IP — 从第 1–3 日限额开始",
      "noteOldIp": "既有 IP 在改设置后仍宜逐步爬升",
      "noteProcess": "暖机是操作员流程；YSK 提供提示 + DNSBL，不假装营销 ESP 量"
    },
    "health": {
      "dnsUnconfirmed": "DNS 记录（MX／SPF／DKIM）尚未确认",
      "dmarcMissing": "缺少 DMARC — 强烈建议设置",
      "dmarcUnpublished": "DMARC 記錄已在面板產生，但公網尚未解析到",
      "ptrBad": "PTR 反向 DNS 缺失或不正确 — 请向 VPS 供应商申请",
      "port25Blocked": "外发 Port 25 似乎被封锁 — 请申请解封或改用 SMTP 中继",
      "port25Unknown": "Port 25 状态未知 — 请执行连通性检查"
    },
    "stack": {
      "tlsNote": "SMTP／IMAP 用 Let’s Encrypt TLS 证书",
      "externalNote": "送达率仍需外部 DNS／PTR／Port25"
    },
    "test": {
      "defaultSubject": "YSK Server 邮件测试",
      "needMta": "需要本机 MTA（Postfix）已安装，且 Port 25／中继已设置",
      "checkSpam": "寄出后请查收件人垃圾箱与服务器邮件日志",
      "hintDeferred": "若 deferred：查 Port 25 封锁或中继凭证",
      "hintSpam": "若已接受但仍进垃圾：改善 SPF／DKIM／DMARC／PTR 并暖机",
      "hintLogs": "检查 /var/log/mail.log 或 journalctl -u postfix"
    },
    "leMailHost": "申请证书 · {{host}}",
    "leWebmailHost": "申请证书 · {{host}}（网页邮件）",
    "leApexHost": "申请证书 · {{host}}（主域名）",
    "applyMailTls": "套用邮件 TLS 路径",
    "applyMailTlsHint": "须已有 Let’s Encrypt 证书；只写入邮件服务路径并重新加载。",
    "probeMx": "MX 记录",
    "probeSpf": "SPF",
    "probeDkim": "DKIM",
    "probeDmarc": "DMARC",
    "probePtr": "PTR",
    "probeDnsbl": "DNSBL",
    "dnsAuthRepairTitle": "DNS 验证待修",
    "dnsAuthRepairHint": "到 DNS tab 复制记录并发布。",
    "fixHintSpf": "SPF 未通过：请发布 v=spf1 的 TXT（@）。",
    "fixHintDkim": "DKIM 未通过：请发布选择器._domainkey 的 TXT。",
    "fixHintDmarc": "DMARC 未通过：请发布 _dmarc 的 TXT。",
    "fixHintMx": "MX 未通过：请将邮件主机 MX 指到 mail.域名。",
    "mailTls": {
      "needRootExecute": "套用邮件 TLS 需要管理员权限与系统变更权限。",
      "certMissing": "未找到 {{host}} 证书文件（{{path}}）。",
      "getCertFirst": "请先在 SSL 页为 {{host}} 申请 Let’s Encrypt 证书。",
      "certFound": "已找到 {{host}} 证书。",
      "postconfFailed": "postconf 失败：{{detail}}",
      "postfixPathsSet": "已设置 Postfix TLS 证书路径。",
      "postfixReloaded": "已重新加载 Postfix。",
      "postfixReloadFailed": "Postfix 重新加载失败：{{detail}}",
      "dovecotApplied": "已写入 Dovecot TLS 片段并尝试重新加载。",
      "dovecotSkipped": "已跳过 Dovecot（未安装或 doveconf 不可用）。",
      "dovecotSslOmitted": "邮件证书不存在，已改写 Dovecot 为 ssl=no，避免单元因缺少证书而无法启动。"
    },
    "policyApplySystemHint": "勾选「套用到系统」才会写入 Postfix／Rspamd 映射并重新加载；否则只写控制面草稿。",
    "rateLimitAppliedNote": "已套用每小时外发限额与反垃圾标记（若启用系统套用）。",
    "bootstrapHonesty": "一键设置写入管理文件；应用到系统需权限。DNS／PTR／端口 25 须自行完成。",
    "bootstrapAfterSteps": "完成后建议：① 发布 DNS（MX/SPF/DKIM/DMARC）② 申请 mail.域名 SSL ③ 按「套用邮件 TLS 路径」。",
    "bootstrapThenSsl": "下一步：申请 mail SSL",
    "bootstrap": {
      "mtaOk": "已写入 MTA 配置（{{count}} 个文件）",
      "mtaIncomplete": "MTA 配置未完成：{{detail}}",
      "seeNotes": "见 notes",
      "mailboxOk": "邮箱 {{address}}（状态 {{status}}）",
      "mailboxExists": "邮箱已存在（跳过）：{{detail}}",
      "passdbOk": "Dovecot passdb 已写入（{{count}} 个邮箱）",
      "webmailOk": "网页邮件方案 {{mode}}（{{host}}）",
      "mailTlsTodo": "邮件 TLS：请为 {{mailHost}} 申请证书后，在健康分页按「套用邮件 TLS 路径」。",
      "externalDns": "外部待办（你负责）：在 DNS 商设置 MX/SPF/DKIM/DMARC；VPS 设 PTR；开放端口 25 或改用 SMTP 中继。",
      "healthScore": "健康分数 {{score}}/{{max}}（DNS/PTR/端口 25 不会自动完成）",
      "webmailProjectOk": "网页邮件项目 {{tool}} @ {{host}}（{{status}}）",
      "dovecotApplyOk": "已套用 Dovecot 虚拟认证"
    },
    "tabDeliverability": "送达",
    "pendingCount": "待处理",
    "externalTodosOneLiner": "PTR、端口 25、注册商 DNS 须自行完成。",
    "runDeliverabilityPack": "执行送达检查",
    "deliverabilityTitle": "送达检查",
    "deliverabilityEmpty": "尚未检查",
    "deliverabilityEmptyDesc": "按「执行送达检查」探测 DNS、PTR、端口 25。",
    "panelReady": "面板可验",
    "gaps": "有缺口",
    "checkOk": "通过",
    "checkExternal": "外部",
    "checkFail": "失败",
    "mailboxListDesc": "建立后可写入 Dovecot 密码库（需系统变更权限）",
    "aliasesDesc": "把地址转到其他信箱",
    "relayDesc": "经外部 SMTP 寄信；套用到系统才会写 Postfix（需系统变更权限）",
    "deliverabilityDesc": "PTR／DNS／端口 25 检查",
    "dnsTodosDesc": "建议纪录可复制到外部 DNS 或到 DNS 页建 zone（写入 ≠ 权威上线）",
    "deliverabilityHonesty": "无法代设 PTR 或解除端口 25 封锁",
    "warmupSuggest": "预热建议",
    "writeSsoSkeleton": "写入 Roundcube SSO 骨架",
    "rateLimitPerHour": "每小时讯息上限",
    "rateLimitGlobalHint": "全域取各域名最小值",
    "savePolicyWritten": "只写入控制面",
    "dnsblMultiIp": "多 IP RBL",
    "webmailTool": "网页邮件软件",
    "webmailToolRoundcube": "Roundcube（默认）",
    "webmailToolSnappy": "SnappyMail（轻量）",
    "webmailProjectName": "项目名称",
    "installWebmailProject": "创建并上线网页邮件",
    "openWebmail": "打开网页邮件",
    "webmailRisk": "公开网页邮件有风险 — 请尽快上 HTTPS。",
    "webmailForceHttps": "强制 HTTPS（Roundcube；需已绑 SSL）",
    "reinstallWebmail": "重新安装／升级",
    "installWebmailTitle": "创建共享网络邮件项目（首次安装）",
    "reinstallWebmailTitle": "重建/升级现有的Webmail项目",
    "reinstallNeedInstall": "首先安装网络邮件",
    "webmailSsoAdvanced": "高级 · SSO 插件",
    "tlsRoleMail": "mail（IMAP／SMTP）",
    "tlsRoleMailHint": "邮件服务器主机名",
    "tlsRoleWebmail": "webmail（网页邮件）",
    "tlsRoleWebmailHint": "网页邮件虚拟主机",
    "tlsRoleApex": "主域名",
    "tlsRoleApexHint": "网页／apex 证书",
    "tlsRequestLe": "申请 LE",
    "tlsRequestLeFor": "为 {{host}} 申请 LE",
    "advancedToolsTitle": "队列与客户端",
    "flushQueueConfirm": "确定清空本机 MTA 队列？此操作不可复原。",
    "mailSslTitleShort": "证书与 TLS",
    "deleteDomain": "删除域名",
    "deleteDomainConfirmTitle": "删除邮件域名？",
    "deleteDomainConfirm": "将删除 {{domain}} 及其邮箱、别名与控制面数据。系统 Postfix／Dovecot 配置可能需另行清理。",
    "deleteDomainBtn": "删除",
    "deleteMailbox": "删除邮箱",
    "deleteMailboxTitle": "删除邮箱？",
    "deleteMailboxDesc": "将删除 {{address}} 及其控制面数据与本机 Maildir（若存在）。",
    "deleteMailboxC1": "邮箱登录与邮件文件",
    "deleteMailboxC2": "重写该域 virtual map（控制面）",
    "deleteMailboxC3": "系统 Dovecot／Postfix 可能仍需另行清理",
    "deleteAliasTitle": "删除别名／转发？",
    "deleteAliasDesc": "将删除 {{source}}。",
    "deleteImpact": "{{mailboxes}} 个信箱 · {{records}} 笔 DNS 纪录 · {{aliases}} 个别名",
    "deleteDomainC1": "所有邮箱与别名",
    "deleteDomainC2": "控制面 DKIM、DNS 建议与旗标",
    "deleteDomainC3": "本机 dataDir/email 目录（若存在）",
    "deleteDomainC4": "系统 MTA 映射可能仍在，需另行清理",
    "deleteDialogTitle": "永久删除邮件域名",
    "deleteDialogDesc": "即将删除 {{domain}}，无法还原。",
    "deletePermanent": "永久删除",
    "deleteRemoveData": "一并删除本机邮件数据",
    "deleteRemoveDataDesc": "取消则只移出面板，磁盘上的 Maildir 会保留",
    "deleteTypeName": "输入域名以确认",
    "deleteTypeNameHint": "必须完全一致：{{name}}",
    "deleteWillData": "本机 dataDir/email 目录（若存在）",
    "deleteKeepData": "保留本机 dataDir 邮件数据",
    "deleteSystemWarn": "系统 Postfix／Dovecot 映射不会自动清理；必要时请另行处理。",
    "hostIpPick": "本机 IPv4",
    "hostIpPickV6": "本机 IPv6",
    "editMailboxTitle": "修改邮箱",
    "editMailboxDesc": "更改 {{address}} 的密码或其他登录设置",
    "editMailboxSave": "保存更改",
    "newPassword": "新密码",
    "newPasswordHint": "留空则保持现有密码；若填写至少 8 个字符",
    "confirmPassword": "确认密码",
    "mailboxStatus": "状态",
    "mailboxStatusActive": "启用（允许登录）",
    "mailboxStatusDisabled": "停用（禁止登录）",
    "mailboxStatusHint": "停用时会写入 Dovecot 密码库 *，拒绝登录",
    "colAddress": "地址",
    "colLocalPart": "本地部分",
    "colPassword": "密码",
    "colCreated": "创建时间",
    "hasPassword": "已设置",
    "noPassword": "未设置",
    "mailboxPager": "邮箱分页",
    "prevPage": "上一页",
    "nextPage": "下一页",
    "pageOf": "第 {{page}} / {{total}} 页 · {{count}}",
    "mailboxEmptyTitle": "尚无邮箱",
    "passwordMismatch": "两次密码不一致",
    "passwordTooShort": "密码至少 8 个字符",
    "mailboxUpdateNeedField": "请设置新密码或更改状态",
    "catchallHint": "未对应的本地部分会送到目标信箱。只写草稿，须套用邮件才生效。",
    "queueSearchPh": "搜索 ID、发件人或收件人…",
    "queueId": "队列 ID",
    "queueSender": "发件人",
    "queueRecipients": "收件人",
    "queueSize": "大小",
    "queueReason": "原因",
    "queueActive": "传送中",
    "queueHeld": "已暂停",
    "queueDeferred": "延迟",
    "deleteQueueTitle": "删除此队列邮件？",
    "deleteQueueDesc": "从本机 MTA 队列移除 {{id}}。需要 YSK_EXECUTE。",
    "openQueuePage": "打开邮件队列",
    "dovecotFailedHint": "Dovecot 服务失败。请先到软件分页查看状态；若邮件证书尚未签发，请先到 SSL 签发 mail 主机名。",
    "dovecotFailedStatus": "鸽舍是{{status}}。打开设备摘要的“软件”选项卡。",
    "mailCertMissing": "{{hosts}} 没有证书。在 SSL 页面上发布。",
    "mailCertPresent": "邮件证书已颁发 - 这不是缺少证书的问题。",
    "webmailNeedCert": "{{host}} 没有证书 — 在强制使用 HTTPS 之前在 SSL 上颁发证书。",
    "domainRequired": "请填写域名",
    "domainInvalid": "请输入有效域名",
    "serverIpRequired": "请填写服务器 IP",
    "serverIpInvalid": "请输入有效 IP 位址",
    "serverIpv6Invalid": "请输入有效 IPv6 位址",
    "localPartRequired": "请填写本机部分",
    "localPartInvalid": "本机部分只可用英文字母、数字与 . _ + -",
    "aliasDestRequired": "请填写至少一个目标信箱",
    "mailboxStatusManaged": "受管",
    "mailboxStatusActiveShort": "启用",
    "mailboxStatusDisabledShort": "停用",
    "mailboxStatusSystem": "系统已布建",
    "mailboxStatusPending": "待系统布建",
    "mailboxStatusFailed": "系统布建失败",
    "dnsblCleanStatus": "未列入",
    "dnsblListedStatus": "已列入",
    "deliverabilityDone": "送达检查完成（{{score}}/100）",
    "sieveEmpty": "尚未写入 Sieve 档案",
    "sieveListed": "已列出 {{count}} 个档案",
    "webmailHostnameRequired": "请填写网页电邮主机名",
    "sieveFilesTitle": "已写入档案"
  },
  "errors": {
    "YSK_UNAUTHORIZED": "未授权",
    "YSK_FORBIDDEN": "禁止访问",
    "YSK_NOT_FOUND": "找不到资源",
    "YSK_VALIDATION": "输入无效",
    "YSK_ALLOWLIST_DENIED": "不在允许清单",
    "YSK_APPROVAL_REQUIRED": "需要审批",
    "YSK_APPROVAL_PENDING": "审批处理中",
    "YSK_APPROVAL_REJECTED": "审批已拒绝",
    "YSK_SANDBOX_VIOLATION": "沙箱限制",
    "YSK_LLM_UNTRUSTED": "不可信 LLM 输出",
    "YSK_CONFIG_INVALID": "配置无效",
    "YSK_SETUP_INCOMPLETE": "安装未完成",
    "YSK_UPDATE_FAILED": "更新失败",
    "YSK_INTERNAL": "内部错误",
    "YSK_NEED_EXECUTE": "需要系统变更权限",
    "YSK_NEED_ROOT": "需要系统管理员权限",
    "YSK_RATE_LIMITED": "尝试过多，请稍后再试",
    "YSK_TOTP_REQUIRED": "需要双重验证码",
    "auth": {
      "needCredentials": "请输入用户名与密码",
      "rateLimited": "登录尝试过多，请稍后再试",
      "badCredentials": "账号或密码不正确",
      "accountSuspended": "账户已暂停",
      "adminTotpStrict": "管理员必须先启用 2FA（strict）。请用已启用 2FA 的账号，或关闭 strict 设置。",
      "totpReplay": "验证码已使用，请等下一个周期",
      "totpRequired": "需要有效的双重验证码",
      "mustEnrollTotp": "管理员政策：请立即启用双重验证",
      "userNotFound": "找不到用户",
      "totpSetupNeedReauth": "设置 2FA 需要重新输入密码（或近期 step-up 验证码）",
      "totpBeginFirst": "请先开始设置 2FA",
      "totpInvalid": "验证码无效",
      "stepUpRequired": "此操作需要重新输入双重验证码",
      "missingCredential": "缺少登录凭证",
      "apiKeyUserMissing": "API 密钥对应用户不存在",
      "apiKeyInvalid": "API 密钥无效",
      "sessionExpired": "登录已失效，请重新登录",
      "sessionIdle": "闲置超时，请重新登录",
      "totpNotEnabled": "未启用 2FA",
      "totpSecretNoDataDir": "TOTP secret 已加密但未设置 dataDir",
      "mustChangePassword": "请先设定新密码才可继续",
      "policyNeedsOwn2fa": "为此账户启用 2FA 并使用 TOTP 代码进行确认，然后再要求其他账户使用 2FA"
    },
    "http": {
      "notFoundRoute": "找不到：{{method}} {{path}}",
      "unauthorized": "未登录或会话已过期",
      "forbidden": "没有权限执行此操作",
      "notFound": "找不到资源",
      "unprocessable": "操作无法完成（服务器拒绝）",
      "requestFailed": "请求失败（{{status}}）",
      "jsonInvalid": "JSON 无效",
      "internal": "内部错误",
      "payloadTooLarge": "请求内容过大"
    },
    "YSK_HOST_BROWSE_SSRF": "主機瀏覽已被安全政策攔截",
    "YSK_HOST_BROWSE_SESSION": "主機瀏覽工作階段不存在或已過期",
    "YSK_HOST_BROWSE_UPSTREAM": "主機瀏覽上游擷取失敗",
    "YSK_HOST_BROWSE_NEED_CHROME": "真實瀏覽器引擎需要主機上的 Chrome／Chromium"
  },
  "fail2ban": {
    "backToProtection": "防护中心",
    "statCurrentBan": "当前 ban",
    "statTotal": "累计",
    "statBanList": "封锁列表",
    "statBoot": "开机",
    "startedOk": "已启动 fail2ban",
    "startService": "启动服务",
    "notInstalled": "fail2ban 尚未安装",
    "toolHintPrefix": "底层工具：",
    "toolHintBody": "fail2ban 会扫描日志后临时封锁。攻击应变请用",
    "toolHintTemp": "",
    "toolHintBody2": "",
    "toolHintUfw": "负责端口与永久规则。",
    "tabs": {
      "bans": "封锁列表",
      "whitelist": "白名单",
      "jails": "Jail",
      "policy": "策略",
      "service": "服务",
      "about": "说明"
    },
    "manualBanTitle": "手动 ban（临时）",
    "ipPlaceholder": "IPv4 或 IPv6",
    "banipOk": "已 banip",
    "manualBanHint": "临时封锁，过 bantime 会自动解；永久拒请用 UFW。白名单见「白名单」分页。",
    "currentBans": "当前封锁",
    "bannedTableTitle": "Banned IPs（真实 fail2ban-client）",
    "bannedTableDesc": "需能读取 client；unban 需 YSK_EXECUTE",
    "unbanOk": "已 unban",
    "unban": "解封",
    "addWhitelistTitle": "加入 ignoreip 白名单",
    "whitelistAdded": "已加入白名单",
    "addWhitelistShort": "+白名单",
    "emptyBansTitle": "无封锁中 IP",
    "emptyBansDesc": "或无权读取 fail2ban-client",
    "ignoreipTitle": "ignoreip 白名单",
    "ignoreipDesc": "永不会被 ban 的 IP（管理文件 + 可选 live fail2ban-client）。建议加入你的办公／居家 IP。",
    "whitelistEmptyWarn": "白名单为空，jail 可能把你自己封锁。套用 ignoreip 前请先加入登录 IP。",
    "suggestIgnoreLogin": "你的登录 IP {{ip}}",
    "applyIgnoreEmptyWarn": "白名单为空时套用会清空 ignoreip",
    "applyIgnoreNeedConfirm": "会重写 jail ignoreip 并重新载入 fail2ban",
    "addIp": "新增 IP",
    "addWhitelist": "加入白名单",
    "applyPolicyIgnoreip": "套用策略（含 ignoreip）",
    "applyIgnoreipOk": "已把 ignoreip 写入 jail.local 并套用",
    "ignoreipHint": "没有系统变更权限时只写面板档。套用策略会重建 jail.local 的 ignoreip 并重新载入。",
    "whitelistTitle": "白名单 ({{count}})",
    "whitelistRemoved": "已移除白名单",
    "remove": "移除",
    "emptyWhitelistTitle": "尚未有白名单 IP",
    "emptyWhitelistDesc": "加入管理 IP，避免自己被 ban",
    "activeJails": "作用中 Jail",
    "colCurrent": "当前",
    "colTotal": "累计",
    "colDesc": "说明",
    "emptyJailsTitle": "无 jail",
    "emptyJailsDesc": "服务未启动或尚未套用 jail.local",
    "policyTitle": "Jail 策略",
    "policyDesc": "写入管理 jail.local；套用时 copy + reload（不经 UFW）",
    "bantimeHint": "封锁时长",
    "findtimeHint": "统计窗口",
    "maxretryHint": "窗口内最多失败次数",
    "customExample2h": "自定义，例 2h",
    "customExample15m": "自定义，例 15m",
    "customMaxretry": "自定义 1–50",
    "min": "{{n}} 分",
    "hour": "{{n}} 时",
    "week": "{{n}} 周",
    "enableJailsHint": "启用 jail（勾选后套用）：",
    "writtenOnlyMsg": "已写管理文件（未套用系统）",
    "writeOnly": "只写管理文件",
    "appliedOk": "已套用 fail2ban",
    "applyToSystem": "套用到系统",
    "systemdTitle": "systemd 控制",
    "enableAndStart": "启用并启动",
    "serviceHint": "攻击应变请用",
    "serviceHintSuffix": "（会调用本页 jail + Nginx 限速，不重复建第二套 UFW）。",
    "actionOk": {
      "enable": "已启用并启动 fail2ban",
      "start": "已启动 fail2ban",
      "reload": "已重新加载 fail2ban",
      "restart": "已重启 fail2ban",
      "stop": "已停止 fail2ban"
    },
    "statWhitelist": "白名单",
    "invalidIp": "请输入有效的 IPv4、IPv6 或 CIDR。",
    "whitelistPendingApply": "已写入面板名单。请按「套用策略」才会写入 jail.local。",
    "ignoreipFile": "dataDir/fail2ban/ignoreip.txt",
    "jailsTabHint": "显示作用中 Jail 状态。要开关 Jail 请到「策略」分页。",
    "colJail": "监狱",
    "colEnabled": "开启",
    "serviceStateLine": "单元 {{unit}} · {{state}} · 开机 {{boot}}",
    "jail": {
      "sshd": "远程登录暴力破解",
      "nginxHttpAuth": "Nginx HTTP 验证",
      "nginxBotsearch": "Nginx 扫描／机器人探测",
      "nginxBadbots": "Nginx 已知恶意机器人",
      "nginxLimitReq": "Nginx 限速 Jail",
      "postfix": "Postfix 邮件暴力破解",
      "dovecot": "Dovecot 邮件登录",
      "recidive": "累犯"
    },
    "cannotBanSelf": "这是主机或您的登录 IP — 将其添加到ignoreip而不是禁止",
    "suggestIgnoreHint": "建议的管理 IP（仅在您应用策略之前为面板文件）：",
    "suggestIgnoreAdd": "添加 {{ip}}"
  },
  "featurePage": {
    "back": "返回"
  },
  "files": {
    "pillFiles": "{{count}} 文件",
    "pillTrash": "回收桶 {{count}} 项",
    "pillSpace": "已用 {{used}}",
    "statFiles": "文件",
    "statFolders": "文件夹",
    "statUsage": "用量",
    "statSelected": "已选",
    "statTrash": "回收站",
    "statShares": "分享",
    "publicSiteSettings": "公用站设置",
    "opsResultTitle": "文件操作结果",
    "closeResult": "关闭结果",
    "tabBrowse": "浏览",
    "tabTrash": "回收站",
    "tabShares": "分享",
    "spaceLabel": "空间",
    "publicFiles": "公用文件",
    "viewLabel": "视图",
    "allFiles": "全部文件",
    "favorites": "收藏",
    "upload": "上传",
    "newFolder": "新建文件夹",
    "newTextFile": "新建文本文件",
    "download": "下载",
    "copy": "复制",
    "move": "移动",
    "zip": "压缩 zip",
    "unzip": "解压",
    "unzipDone": "已解压 {{path}}",
    "unzipFailed": "unzip 失败",
    "delete": "删除",
    "searchName": "搜索…",
    "sortAria": "排序",
    "sortNameAsc": "名↑",
    "sortNameDesc": "名↓",
    "sortSizeAsc": "小↑",
    "sortSizeDesc": "大↓",
    "sortMtimeDesc": "最新",
    "sortMtimeAsc": "最旧",
    "viewList": "列表",
    "viewIcons": "图标",
    "viewAria": "视图模式",
    "toolbarAria": "文件操作",
    "pathAria": "路径",
    "rootPublic": "公用",
    "rootProject": "项目",
    "emptyFavorites": "尚未有收藏",
    "emptyFolder": "此文件夹是空的",
    "emptyFolderHint": "拖放文件或整个文件夹到此处上传，或按「上传」",
    "selectItem": "选择 {{name}}",
    "colName": "名称",
    "colSize": "大小",
    "colMtime": "修改",
    "rename": "重命名",
    "unfavorite": "取消收藏",
    "favorite": "收藏",
    "share": "分享",
    "versions": "版本",
    "selectAllAria": "全选",
    "selectAll": "全选",
    "folder": "文件夹",
    "dirNamedLikeFile": "（文件夹残留；名称像文件）",
    "dropToUpload": "放开以上传",
    "trashTitle": "回收站 ({{count}})",
    "trashDesc": "删除的文件可还原或永久清除",
    "emptyTrash": "清空回收站",
    "emptyTrashTitle": "清空垃圾箱？",
    "emptyTrashDesc": "垃圾箱中的每个文件都将被永久删除。此操作无法撤消。",
    "purgeForeverDesc": "该文件将被永久删除。此操作无法撤消。",
    "emptyTrashDone": "已清空回收站",
    "colOrigPath": "原路径",
    "colDeletedAt": "删除时间",
    "restore": "还原",
    "restored": "已还原",
    "purgeForever": "永久删除",
    "purged": "已永久删除",
    "trashEmpty": "回收站是空的",
    "sharesTitle": "公开分享链接 ({{count}})",
    "colPath": "路径",
    "colLink": "链接",
    "colDownloads": "下载次数",
    "unshare": "取消",
    "unshareDone": "已取消分享",
    "sharesEmpty": "尚未创建分享",
    "sharesEmptyHint": "在文件行按「分享」",
    "webdavTitle": "WebDAV 设置",
    "webdavDesc": "用 Basic 认证把公用文件根挂到 Finder／Windows／rclone；令牌只显示一次。",
    "enableIssueToken": "启用并签发令牌",
    "webdavReissueToken": "重新签发令牌",
    "webdavReissueConfirm": "重新签发会立即作废旧密码，已挂载的客户端会断线。确定？",
    "webdavDisableConfirm": "停用后 /webdav 将拒绝所有连接。确定？",
    "tokenIssued": "已签发令牌",
    "status": "状态",
    "enabledMount": "已启用 · {{path}}",
    "notEnabled": "未启用",
    "disable": "停用",
    "webdavAlreadyOff": "WebDAV 已关闭",
    "webdavDisabled": "已停用 WebDAV",
    "webdavEnabledNoEcho": "已启用（密码不会再次显示；需要时请重新签发）",
    "webdavDefaultOff": "默认关闭 — 点「启用并签发令牌」开始",
    "webdavAfterEnable": "启用 WebDAV 并签发令牌后才可用。",
    "webdavOn": "已启用",
    "webdavOff": "已关闭",
    "webdavOffNoToken": "已停用（无有效权杖）",
    "webdavTokenId": "令牌 #{{id}}",
    "webdavTokenInactive": "已停用，权杖 #{{id}} 不生效",
    "webdavUpdated": "更新于 {{at}}",
    "webdavTokenOnceTitle": "请立即复制密码",
    "webdavTokenOnceHint": "此密码只显示一次；关闭本页后无法再查看。",
    "webdavConnTitle": "连接信息",
    "webdavConnDesc": "客户端用以下 URL 与 Basic 账密连入",
    "webdavUrl": "服务器 URL",
    "webdavUsername": "用户名",
    "webdavPassword": "密码（令牌）",
    "webdavPasswordHidden": "已签发但不再显示 — 请重新签发或使用已保存的密码",
    "webdavPasswordNone": "尚未签发",
    "webdavRoot": "挂载根目录",
    "webdavRootValue": "面板公用文件根（public files）",
    "webdavAuth": "认证方式",
    "webdavAuthValue": "HTTP Basic · 用户 ysk · 密码 = 面板签发的令牌",
    "webdavConnBundle": "连接资料",
    "webdavCopyAll": "复制全部连接资料",
    "webdavClientsTitle": "客户端设置",
    "webdavClientsDesc": "常见挂载方式（建议 HTTPS；自签证书需在客户端信任）",
    "webdavClientFinder": "macOS 查找器",
    "webdavClientFinderHint": "前往 → 连接服务器…（⌘K），粘贴 URL，用户 ysk，密码为令牌。",
    "webdavClientWin": "视窗",
    "webdavClientWinHint": "此电脑 → 映射网络驱动器 → 选择「使用其他凭据」；或用 Cyberduck / WinSCP（WebDAV）。",
    "webdavNotesTitle": "注意事项",
    "webdavNote1": "WebDAV 对应公用文件根，不是整个主机文件系统。",
    "webdavNote2": "需要 reverse proxy／防火墙放行面板端口，并建议仅用 HTTPS。",
    "webdavNote3": "重新签发令牌会立即作废旧密码；停用会拒绝所有 /webdav 请求。",
    "webdavNote4": "支持 OPTIONS／PROPFIND／GET／PUT；高级 LOCK 等未必齐全。",
    "copiedLabel": "已复制「{{label}}」",
    "newFolderTitle": "新建文件夹",
    "willCreateAt": "将创建于「{{path}}」",
    "nameRequired": "请输入名称",
    "folderCreated": "已创建文件夹",
    "create": "创建",
    "folderName": "文件夹名称",
    "noPathSepHint": "不可含路径分隔符",
    "newTextTitle": "新建文本文件",
    "fileNameRequired": "请输入文件名",
    "textFileCreated": "已创建文本文件",
    "fileName": "文件名",
    "fileNameHint": "例如 readme.md 或 notes.txt",
    "versionsTitle": "版本历程",
    "versionsDesc": "",
    "noVersions": "尚无历史版本",
    "noVersionsHint": "",
    "versionRestored": "已还原",
    "restoreVersionConfirm": "用 {{version}} 覆写现档 {{file}}？磁盘上的现档会被盖掉。",
    "renameTitle": "重命名",
    "renameCurrent": "当前：{{name}}",
    "renamed": "已重命名",
    "newName": "新名称",
    "newNameHint": "仅改文件名，不变更所在目录",
    "copyTo": "复制到…",
    "moveTo": "移动到…",
    "copyMoveDesc": "{{action}} {{count}} 个项目",
    "actionCopy": "复制",
    "actionMove": "移动",
    "copied": "已复制",
    "moved": "已移动",
    "targetFolderPath": "目标文件夹路径",
    "targetFolderHint": "相对 root，例如 docs 或 docs/a；留空 = 根目录",
    "shareCreateTitle": "分享文件",
    "shareCreateDesc": "创建公开下载链接；密码可选。",
    "createLink": "创建链接",
    "sharePath": "路径：",
    "passwordOptional": "密码（可选）",
    "passwordOptionalHint": "留空则任何人持有链接即可下载",
    "passwordPlaceholder": "可选",
    "linkCreated": "链接已创建：",
    "chmodTitle": "修改权限（chmod）",
    "chmodDone": "已 chmod {{mode}} → {{count}} 个项目",
    "chmodDoneShort": "已 chmod {{mode}}",
    "chmodFailed": "chmod 失败",
    "apply": "套用",
    "chmodApplyHint": "将套用到已选 {{count}} 个项目（八进制，如 644 / 755）",
    "chmod644": "644 文件",
    "chmod755": "755 可执行",
    "chmod600": "600 私密",
    "chmod700": "700 目录私密",
    "chmod775": "775 组写",
    "chmodCustomPh": "自定义 0644…",
    "mode": "模式",
    "zipTitle": "压缩为 zip",
    "zipCreated": "已创建 {{path}}",
    "zipDone": "已压缩 → {{path}}",
    "zipFailed": "zip 失败",
    "compress": "压缩",
    "zipHint": "将压缩已选 {{count}} 个项目到当前文件夹（需系统有 zip 命令）",
    "destFileName": "目标文件名",
    "destPathHint": "路径：{{path}}",
    "movedToTrash": "已移至回收站",
    "moveToTrashTitle": "移至回收站？",
    "moveToTrashDesc": "将删除 {{count}} 个项目（可于回收站还原）",
    "deleteMore": "，以及另外 {{n}} 项",
    "unshareTitle": "撤销此分享？",
    "unshareDesc": "撤销 {{name}} 的连结（{{url}}）。连结会立即失效。",
    "preview": "预览",
    "imagePreviewNeedLogin": "图片预览需要已登录；请改用下载",
    "pdfDownloadHint": "PDF 请按下载打开（需授权头）",
    "noEmbedPreview": "此类型无法内嵌预览，请下载。",
    "uploadDone": "已上传 {{count}} 个文件",
    "downloadFailedStatus": "下载失败 ({{status}})",
    "downloadFailed": "下载失败",
    "uploadFolder": "上传文件夹",
    "dropFolderOrFile": "放开以上传文件或整个文件夹",
    "uploadPanelTitle": "上传进度",
    "uploadPanelStats": "{{done}}／{{total}} 完成 · 失败 {{err}}",
    "uploadClearDone": "清除已完成",
    "uploadInFolder": "文件夹 {{folder}}",
    "uploadStatusDone": "完成",
    "uploadStatusError": "失败",
    "uploadStatusQueued": "排队",
    "uploadNoFile": "无文件内容",
    "uploadSomeFailed": "{{count}} 个项目上传失败",
    "uploadTruncated": "一次最多上传 {{max}} 项（共选了 {{total}} 项，其余已跳过）",
    "previewFailed": "预览失败",
    "videoNotSupported": "浏览器无法播放此视频。",
    "audioNotSupported": "浏览器无法播放此音频。",
    "edit": "编辑",
    "editorTitle": "编辑 · {{name}}",
    "editorSave": "保存",
    "editorSavedIdle": "已保存",
    "editorSaved": "已保存 {{name}}",
    "editorSaveFailed": "保存失败",
    "editorDirty": "未保存",
    "editorClean": "已保存",
    "editorChars": "{{count}} 字符",
    "editorAria": "编辑 {{name}}",
    "editorDiscardConfirm": "放弃未保存的更改？",
    "shareReadyTitle": "链接已就绪",
    "shareReadyDesc": "复制后发送。持有链接者即可下载。",
    "shareReadyBadge": "已创建",
    "shareProtected": "已设密码",
    "shareOpenAccess": "无密码",
    "shareLinkLabel": "公开链接",
    "shareCopyHint": "可点选字段或点「复制」。",
    "shareAgain": "再建一个",
    "shareCreatedToast": "分享链接已创建",
    "linkCopied": "已复制链接",
    "linkCopyFailed": "无法自动复制，请手动选择复制",
    "shareExpireLabel": "链接有效期",
    "shareExpireHint": "到期后链接失效",
    "shareExpireNever": "永不过期",
    "shareExpire1h": "1 小时",
    "shareExpire1d": "1 天",
    "shareExpire7d": "7 天",
    "shareExpire30d": "30 天",
    "shareExpireCustom": "自定义…",
    "shareExpireAt": "到期时间",
    "shareExpireInvalid": "请选择未来的日期时间",
    "shareExpiresAt": "到期 {{at}}",
    "colExpires": "到期",
    "pdfInlineHint": "若浏览器无法内嵌显示 PDF，请下载查看。",
    "publicShareTitle": "有人与你分享文件",
    "publicShareSub": "通过安全链接下载，无需登录",
    "publicShareChecking": "检查链接…",
    "publicShareDownloading": "下载中…",
    "publicShareWait": "请稍候",
    "publicShareNeedPassword": "此链接需要密码才能下载",
    "publicSharePasswordPh": "分享密码",
    "publicShareDownload": "下载",
    "publicShareDownloadAgain": "再次下载",
    "publicShareDone": "下载已开始",
    "publicShareDoneHint": "请查看浏览器下载栏；若未出现可再点一次",
    "publicShareNotFound": "分享不存在或已过期",
    "publicShareDenied": "无法访问此分享",
    "publicShareBadPassword": "密码错误",
    "publicShareMissing": "链接无效",
    "publicShareFailed": "下载失败（{{status}}）",
    "publicShareFailedGeneric": "下载失败",
    "publicShareDefaultName": "下载",
    "publicSharePanelLogin": "登录控制面",
    "publicShareLang": "语言",
    "publicShareProgress": "{{loaded}} / {{total}}（{{pct}}%）",
    "publicShareProgressIndeterminate": "已接收 {{loaded}}…",
    "publicShareCancel": "取消",
    "publicShareCancelled": "已取消下载",
    "publicSharePoweredBy": "由 {{company}} 提供",
    "publicSharePoweredPrefix": "由 ",
    "publicSharePoweredSuffix": " 提供",
    "publicShareHasAccount": "已有账号？登录",
    "password": "密码",
    "editorLines": "{{count}} 行",
    "editorLargeHint": "文件较大，编辑可能较慢。超过约 2 MB 请改用下载（服务器上限）。",
    "editorLnCol": "行 {{line}}，列 {{col}}",
    "editorSpaces": "空格：{{n}}",
    "copyLink": "复制链接",
    "versionsTitleShort": "版本历程",
    "versionsCount": "{{count}} / {{max}} 版",
    "versionN": "第 {{n}} 版",
    "versionLatest": "最新",
    "shareModeLabel": "下载方式",
    "shareModeDirect": "直接下载",
    "shareModeBt": "BitTorrent（WebTorrent）",
    "shareModeBoth": "直接下载 + BitTorrent",
    "shareModeHint": "BT 需要运行中的 Tracker（文件 → BT Tracker）。持有 magnet 链接者即可下载，请慎用密码与有效期。",
    "shareModeBtBlocked": "Tracker 未运行 — 请先启动，或改选仅直接下载。",
    "shareMagnet": "Magnet 链接",
    "shareTorrentFile": "下载 .torrent",
    "shareSeedStatus": "做种状态",
    "shareBtStats": "BitTorrent 状态",
    "btSeeds": "种子",
    "btLeechers": "下载者",
    "btPeers": "同行",
    "btUploadSpeed": "上传速度",
    "btDownloadSpeed": "下载速度",
    "btUploaded": "已上传",
    "btDownloaded": "已下载",
    "btRatio": "分享率",
    "btUpdatedAt": "更新时间",
    "btServerStats": "服务器做种",
    "btClientStats": "你的客户端",
    "btSeeding": "做种中",
    "btPending": "做种准备中",
    "btStopped": "已停止做种",
    "btError": "做种错误",
    "publicShareMethod": "请选择下载方式",
    "publicShareDirect": "直接下载",
    "publicShareBt": "BT",
    "openBtTracker": "打开 BT Tracker",
    "publicShareBtInBrowser": "在浏览器以 WebTorrent 下载",
    "publicShareBtProgress": "已下载 {{pct}}% · {{peers}} 个 peers · ↓ {{down}} · ↑ {{up}}",
    "publicShareBtStarting": "正在连接 peers…",
    "publicShareBtFailed": "WebTorrent 失败：{{detail}}",
    "publicShareBtNeedMagnet": "此分享没有 magnet 链接",
    "publicShareBtUnsupported": "此浏览器无法运行 WebTorrent；请改用 magnet 或 .torrent",
    "btNone": "—",
    "uploadStatusSkipped": "已跳过",
    "uploadStatusCancelled": "已取消",
    "conflict": {
      "titleFile": "已有名为“{{name}}”的项目",
      "titleFolder": "已有名为“{{name}}”的文件夹",
      "descFile": "请选择处理方式。在选择“替换”之前不会覆盖现有文件。",
      "descFolder": "请选择处理方式。“合并”会保留现有文件夹，再处理其中的文件。",
      "incoming": "即将加入",
      "existing": "已在此处",
      "kindFile": "文件",
      "kindFolder": "文件夹",
      "skip": "跳过",
      "skipHint": "不加入此项目",
      "keepBoth": "保留两者",
      "keepBothHint": "将新项目存为 {{name}}",
      "replace": "替换",
      "replaceHint": "覆盖现有文件。可能时会保留版本快照。",
      "replaceFolderHint": "覆盖文件夹中的同名文件，其余文件会保留。",
      "merge": "合并",
      "mergeHint": "保留现有文件夹，并将新文件加入其中",
      "applyAll": "应用到其余所有重名",
      "applyAllHint": "本次拖放或复制／移动的其余项目都使用同一做法",
      "cancelRest": "取消其余项目",
      "progress": "第 {{current}}／{{total}} 项",
      "typeMismatch": "此处已有名为“{{name}}”的{{destKind}}，即将加入的是{{incomingKind}}。",
      "skipped": "已跳过",
      "cancelled": "已取消"
    },
    "webdavReissueUnchanged": "重新签发后令牌编号未变——写入可能未生效，请再试一次。",
    "webdavDisableFailed": "停用后状态仍为启用——写入可能未生效，请再试一次。"
  },
  "firewall": {
    "profiles": {
      "web": {
        "label": "Web 主机",
        "short": "SSH · 80 · 443"
      },
      "mail": {
        "label": "Web + 邮件",
        "short": "另开 25/465/587/993"
      },
      "ftps": {
        "label": "网络+FTPS",
        "short": "21 + PASV 30000–30100"
      }
    },
    "appliedProfile": "已套用配置档：{{label}}",
    "backToProtection": "防护中心",
    "statRules": "规则",
    "statDenyIps": "永久拒 IP",
    "statAllow": "允许",
    "statDeny": "拒绝",
    "statDefaultIn": "入站默认",
    "defaultNotApplied": "不适用（UFW 关闭）",
    "ufwOffHint": "UFW 关闭时不应用默认传入",
    "executeOn": "开",
    "executeOff": "关",
    "ufwDisabled": "已停用 UFW",
    "ufwEnabled": "已启用 UFW",
    "disableUfw": "停用 UFW",
    "enableUfw": "启用 UFW",
    "notInstalled": "UFW 尚未安装",
    "toolHintPrefix": "底层工具：",
    "toolHintBody": "UFW = 端口／永久规则 · 攻击应变与自动 ban 请用",
    "toolHintfail2ban": "fail2ban = 日志临时 ban",
    "toolHintFail2ban": "fail2ban = 基于日志的临时禁令",
    "executeOffHint": "系统变更未开 — 可看状态，改规则需 root + YSK_EXECUTE=1",
    "tabs": {
      "rules": "规则表",
      "ports": "开端口",
      "deny": "永久拒 IP",
      "profiles": "配置档",
      "about": "说明",
      "services": "服务"
    },
    "currentRules": "当前规则",
    "rulesSourceHint": "UFW 编号规则（ufw status numbered）",
    "colAction": "动作",
    "colTo": "目标",
    "colFrom": "来源",
    "deleteShort": "删除",
    "denyBadge": "拒绝",
    "emptyRulesTitle": "无规则或无权读取",
    "emptyRulesInstalled": "UFW inactive 或需 root 读取",
    "emptyRulesNotInstalled": "安装 UFW 后再刷新",
    "allowPortTitle": "允许端口",
    "protocol": "协议",
    "protoBoth": "两者",
    "protoBothLabel": "TCP+UDP",
    "port": "端口",
    "portHint": "选常用端口，或下面自定义",
    "portHintYsk": "YSK 服务端口一览（Panel／Web／SSH／邮件／FTP／DNS／DB／Redis）；可自定义",
    "privatePortWarn": "{{service}} 默认宜只听内网；公开 allow 有风险。建议填写来源 IP／CIDR。",
    "privatePortWarnWithFrom": "{{service}} 将只允许指定来源；仍请确认 IP／CIDR 正确。",
    "allowFrom": "来源 IP／CIDR（可选）",
    "allowFromHint": "留空 = 全部来源；填写后只允许该 IP 或网段连入此端口",
    "allowFromPlaceholder": "例 203.0.113.10 或 10.0.0.0/8",
    "customPort": "自定义端口（如 8080 或 30000:30100）",
    "allowedPort": "已允许 {{proto}}/{{port}}",
    "allowedPortFrom": "已允许 {{proto}}/{{port}}（来源 {{from}}）",
    "allowThisPort": "允许此端口",
    "allowPortHint": "默认 Web 主机应保留 22／80／443；DB／Redis／Panel 请用来源 IP 限制，勿对全世界 allow。",
    "denyTitle": "永久拒绝 IP",
    "denySub": "UFW DENY · 与 fail2ban 临时 ban 不同",
    "denyPlaceholder": "要拒绝的 IPv4 或 IPv6",
    "deniedOk": "已永久拒绝",
    "removedDeny": "已移除 DENY",
    "remove": "移除",
    "noDenyRules": "没有永久拒 IP 规则",
    "oneClickProfiles": "一键配置档",
    "oneClickDesc": "写入管理脚本并套用 UFW（不会装 fail2ban — 请到 fail2ban 页）",
    "customApply": "自定义套用",
    "allowSmtp": "允许 SMTP／IMAP 端口",
    "extraTcp": "额外 TCP 端口",
    "extraTcpHint": "点选预设组合；可再自定义逗号／范围",
    "noExtra": "无额外",
    "mailGroup": "邮件组",
    "customExtraPlaceholder": "自定义：8080,9000:9010",
    "appliedCustom": "已套用自定义规则",
    "applyToSystem": "套用到系统",
    "deletedRule": "已删 #{{n}}",
    "deleteRuleTitle": "删规则 #{{n}}？",
    "deleteRuleDesc": "将从 UFW 移除该规则编号（需系统变更权限）。",
    "servicesTitle": "托管服务端口",
    "servicesHint": "YSK 托管服务的期望网络暴露。启动服务时会自动同步这些规则。",
    "servicesUfwOff": "UFW 已關閉。此列表只是預期暴露，並非主機上已強制執行的規則。",
    "servicesEmpty": "尚无服务暴露数据",
    "servicesEmptyDesc": "启动托管服务（Web、FTPS、VPN、数据库…）后会出现在此列表。",
    "servicesManualHint": "手动开端口 chips 在「端口」分页 — 建议在此管理，规则会带 ysk-svc 标记。",
    "portsManualHint": "高级手动规则。托管软件请优先用「服务」分页。",
    "colService": "服务",
    "colMode": "模式",
    "colPorts": "端口",
    "colSync": "状态",
    "synced": "已同步",
    "syncNow": "立即同步",
    "disableConfirmTitle": "停用 UFW？",
    "disableConfirmDesc": "主机防火墙将停止过滤流量。若主机在公众网络上，SSH 与面板可能直接暴露。",
    "disableConfirmConsequence": "现有允许／拒绝规则仍会保留，但要重新启用 UFW 才会生效。",
    "desiredOnlyUfwOff": "设定：{{mode}} · UFW 关闭（未套用）",
    "syncNotApplied": "UFW 关闭 · 未套用"
  },
  "ftp": {
    "title": "FTPS 账户",
    "accountsCount": "{{count}} 账户",
    "accounts": "账户",
    "applied": "已应用",
    "pendingApply": "待应用",
    "sftpKeys": "SFTP 钥",
    "softwareMissing": "尚未安装 FTPS 服务所需软件",
    "ftpAccounts": "FTP 账户",
    "sftpPubkeys": "SFTP 公钥",
    "homeDir": "家目录",
    "domain": "域名",
    "user": "用户",
    "keyFingerprint": "密钥指纹（前缀）",
    "createHint": "请先在「FTP 账户」分页创建账户，再回来登记公钥。",
    "pubkeyHint": "点击「+ 新增公钥」，选择 FTP 用户并粘贴 ssh-ed25519 或 ssh-rsa 公钥整行。",
    "sftpKeyInvalid": "需要用户名，以及以 ssh- 开头的公钥。",
    "quickSelect": "快速选择账户",
    "quickSelectHint": "点用户名帶入新增公钥表单",
    "editAccount": "编辑 FTP 账户",
    "createAccount": "创建 FTP 账户",
    "accountModalDesc": "域名与家目录请从列表选擇；无列表时可手填。保存后需「应用」才写入 vsftpd",
    "usernameHintCreate": "英数、点、下划线、减号；创建后不可改",
    "usernameHint": "英数、点、下划线、减号",
    "newPasswordOptional": "新密码（可留空）",
    "passwordKeepHint": "留空表示不变更",
    "passwordMin8": "至少 8 字符",
    "domainHint": "对应站点或邮件域名，用于分组与路径建议",
    "domainPh": "可先创建站点／邮件域名，或暂时输入",
    "homeHint": "用户登录后的根目录（chroot 后可见範圍）",
    "addPubkey": "新增 SFTP 公钥",
    "addPubkeyDesc": "选择账户、可选备注，并粘贴完整公钥一行。写入管理文件不代表已验证可连接。",
    "pubkeyAdded": "已新增公钥",
    "ftpUsername": "FTP 用户名",
    "ftpUsernameHint": "须与已登记的 FTP 账户相同",
    "ftpUsernamePh": "与 FTP 账户相同",
    "note": "备註",
    "noteHint": "方便识别设备，例如 笔记本／公司",
    "notePh": "笔记本 / 公司主机",
    "sshPubkey": "SSH 公钥",
    "sshPubkeyHint": "通常来自 ~/.ssh/id_ed25519.pub，整行粘贴",
    "deleteAccountTitle": "删除 FTP 账户？",
    "deleteAccountNamed": "删除 FTP 账户 {{name}}？",
    "deleteAccountDesc": "移除后请再应用",
    "deleteKeyTitle": "删除 SFTP 公钥？",
    "deleteKeyDesc": "会从管理档移除；系统 authorized_keys 可能仍需重载才生效。",
    "serviceTitle": "vsftpd 服务",
    "softwareMissingService": "FTPS 所需软件尚未安装",
    "lifecycle": "生命周期",
    "overview": "概览",
    "network": "网絡",
    "security": "安全",
    "installStart": "安装与启动",
    "listenPort": "监听端口",
    "accountCount": "账户数",
    "loginBanner": "登录横幅",
    "sslDomain": "SSL 域名",
    "plaintextInsecure": "明文 FTP（未开 TLS）— 不安全。对外开放 21 埠前请先启用 FTPS。",
    "plaintextPublicLive": "vsftpd 正以公网位址监听且未启用 FTPS，账号密码会明文传送。请启用 FTPS、改为仅本机监听，或输入 PLAINTEXT 确认后维持此状态。",
    "bindAddress": "监听范围",
    "bindAddressHint": "新安装预设仅本机。对外监听且未开 FTPS 需打字确认。",
    "bindLocal": "仅本机",
    "bindLocalHint": "127.0.0.1 — 本机测试可不开 TLS",
    "bindPublic": "公开",
    "bindPublicHint": "全部界面 — 请启用 FTPS，或确认 PLAINTEXT",
    "enableFtpsAndStart": "启用 FTPS 并启动",
    "publicPlainNeedConfirm": "公开明文 FTP 需输入 PLAINTEXT 确认",
    "plainConfirmTitle": "未开 FTPS 就对外启动 FTP？",
    "plainConfirmDesc": "21 埠会在公网位址接受明文登入与传输。",
    "plainConfirmC1": "网络上可见用户名与密码。",
    "plainConfirmC2": "PASV 会通告已设定的公网 IP。",
    "plainConfirmC3": "不会代你开主机防火墙或云安全组。",
    "plainConfirmAction": "启动明文 FTP",
    "pasvRange": "PASV 範圍",
    "forceTls": "强制 TLS",
    "allowWrite": "允许写入",
    "networkTitle": "网絡设置",
    "networkDesc": "监听端口与 PASV 被动模式；保存只改管理设置，应用才写入 vsftpd 并重启",
    "listenPortHint": "默认 21；若防火墙另开埠请一并放行",
    "customPort": "自定义埠",
    "ipStack": "IP 棧",
    "ipStackHint": "vsftpd 多数版本 listen 与 listen_ipv6 互斥；IPv6 用 listen_ipv6=YES",
    "listenConflictLive": "Live vsftpd.conf 有listen={{v4}} 和listen_ipv6={{v6}} — 两个YES 都将无法启动。",
    "listenConflictNeedFix": "首先修复listen/listen_ipv6（它们不能同时为YES），然后应用。",
    "fixListenIpv4": "仅使用 IPv4（listen=YES，listen_ipv6=NO）",
    "liveFileValue": "立即归档：{{value}}",
    "startBlockedFailed": "服务失败 - 在启动前应用有效的配置",
    "ftpsNeedCert": "首先选择一个证书域",
    "ipv4Only": "仅 IPv4",
    "ipv6Mapped": "IPv6（可 mapped）",
    "bannerHint": "连接成功后客户端可见的欢迎字符串",
    "pasvStart": "PASV 起始埠",
    "pasvStartHint": "被动模式资料通道起始",
    "customStart": "自定义起始",
    "pasvEnd": "PASV 结束埠",
    "pasvEndHint": "需 ≥ 起始埠；防火墙需放行此範圍",
    "openFirewallPage": "打开防火墙页",
    "customEnd": "自定义结束",
    "pasvPublicIp": "PASV 公网 IP",
    "detectPublicIp": "检测公网IP",
    "detectPublicIpTitle": "填写来自该主机的第一个非环回 IPv4",
    "pasvPublicIpHint": "NAT／雲主机可填公网 IP；本机可留空",
    "pasvIpRequired": "套用前请填写 PASV 公网 IP（NAT／云主机）。可探测或手动输入。",
    "optionalEmpty": "（可留空）",
    "securityTitle": "安全设置",
    "securityDesc": "TLS、写入权限与 chroot；变更后请应用并重启才会生效",
    "sslCertDomain": "SSL 证书域名",
    "sslCertDomainHint": "选已上传／申请的证书域名",
    "enableFtps": "启用 FTPS（SSL/TLS）",
    "enableFtpsDesc": "以 TLS 加密控制通道；建议开启",
    "forceTlsLogin": "强制 TLS 登录",
    "forceTlsLoginDesc": "拒绝明文 FTP；需客户端支援 FTPS",
    "allowWriteDesc": "关闭則账户仅能下载／列目录",
    "chrootUsers": "Chroot 用户",
    "chrootUsersDesc": "登录后锁在家目录，无法浏览系统其他路径",
    "writableChroot": "允许可写 chroot",
    "writableChrootDesc": "家目录可写时仍启用 chroot（vsftpd 常见需求）",
    "settingsSaved": "已保存设置",
    "installIncomplete": "无法完成安装",
    "ftpsReady": "FTPS 已就绪",
    "settingsApplied": "已应用设置",
    "opsResult": "操作结果",
    "saved": "已保存",
    "accountsList": "账户列表",
    "accountsListDesc": "创建后按「应用」同步到 vsftpd。服务未装时请先用上方安装，再到 ",
    "startService": " 启动。",
    "createAccountPlus": "+ 创建账户",
    "noFtpAccounts": "尚未有 FTP 账户",
    "noFtpAccountsDesc": "用列表右上角「创建账户」新增；可指定家目录与域名，再应用到系统。",
    "applyHint": "提示：应用只写入管理设置；真正聽端口需 vsftpd 服务为 active。",
    "sshdMatchNote": "；系统 sshd Match 设置后才真正生效。",
    "addPubkeyPlus": "+ 新增公钥",
    "noPubkeys": "尚未登录公钥",
    "pickDomain": "— 选擇域名 —",
    "currentDomain": "{{domain}}（目前）",
    "pickHome": "— 选择家目录 —",
    "currentHome": "{{path}}（目前）",
    "fullPath": "完整路径：",
    "emptyHomes": "若列表为空，请先创建项目或站点以生成家目录选项。",
    "pickAccount": "— 选择账户 —",
    "installFtpsBanner": "请使用上方横幅「一键安装」安装 FTPS，完成后再启动服务。",
    "applyRestart": "应用并重启",
    "afterInstall": "安装后即可使用 FTPS 账户登录。需系统管理员权限才能完成安装。",
    "saveSettings": "保存设置",
    "saveApplyHint": "保存只更新面板设置；「应用并重启」才写入 vsftpd.conf 并重载服务。",
    "installAndStart": "安装并启动",
    "manageAccounts": "账户",
    "openFirewallPorts": "开防火墙端口",
    "firewallPortsApplied": "已放行 TCP {{ports}}",
    "sftpTabDesc": "为 FTP 账户登记 SSH 公钥，以便使用 SFTP 免密登录。请先选择账户、粘贴公钥一行，再保存。",
    "sftpNeedAccountTitle": "尚无 FTP 账户",
    "sftpNeedAccount": "请先创建至少一个 FTP 账户，再为该用户登记公钥。",
    "sftpFilterLabel": "账户",
    "sftpFilterAll": "全部账户",
    "sftpKeyCount": "{{count}} 枚公钥",
    "sftpEmptyFiltered": "此账户尚无公钥",
    "sftpEmptyFilteredDesc": "“{{user}}”还没有登记的 SSH 公钥。",
    "sftpRegister": "登记公钥",
    "sftpAddedAt": "添加于 {{time}}",
    "sftpTechSummary": "技术细节（高级）",
    "sftpTechNote": "公钥会写入管理路径",
    "filterProject": "只显示此项目的 FTP 帐户",
    "clearProjectFilter": "显示全部帐户",
    "vsftpdFailedHint": "vsftpd 服务失败。请到服务分页查看设定与日志（listen 与 listen_ipv6 不可同时为 YES）。",
    "vsftpdFailedGeneric": "vsftpd 服务失败。请到服务分页查看现行设定与日志。",
    "stateFailed": "启动失败",
    "tabService": "服务"
  },
  "geo": {
    "continents": {
      "AS": "亚洲",
      "EU": "欧洲",
      "NA": "北美洲",
      "SA": "南美洲",
      "AF": "非洲",
      "OC": "大洋洲",
      "AN": "南极洲"
    },
    "countries": {
      "CN": "中国",
      "HK": "香港",
      "MO": "澳门",
      "TW": "台湾",
      "JP": "日本",
      "KR": "韩国",
      "KP": "朝鲜",
      "SG": "新加坡",
      "MY": "马来西亚",
      "TH": "泰国",
      "VN": "越南",
      "PH": "菲律宾",
      "ID": "印尼",
      "IN": "印度",
      "AU": "澳大利亚",
      "NZ": "新西兰",
      "US": "美国",
      "CA": "加拿大",
      "MX": "墨西哥",
      "BR": "巴西",
      "AR": "阿根廷",
      "GB": "英国",
      "IE": "爱尔兰",
      "DE": "德国",
      "FR": "法国",
      "NL": "荷兰",
      "BE": "比利时",
      "CH": "瑞士",
      "AT": "奥地利",
      "SE": "瑞典",
      "NO": "挪威",
      "DK": "丹麦",
      "FI": "芬兰",
      "PL": "波兰",
      "CZ": "捷克",
      "ES": "西班牙",
      "PT": "葡萄牙",
      "IT": "意大利",
      "RU": "俄罗斯",
      "UA": "乌克兰",
      "TR": "土耳其",
      "IL": "以色列",
      "AE": "阿联酋",
      "SA": "沙特",
      "EG": "埃及",
      "ZA": "南非",
      "NG": "尼日利亚",
      "PK": "巴基斯坦",
      "BD": "孟加拉",
      "IR": "伊朗",
      "IQ": "伊拉克",
      "RO": "罗马尼亚",
      "BG": "保加利亚",
      "HU": "匈牙利",
      "GR": "希腊",
      "LT": "立陶宛",
      "LV": "拉脱维亚",
      "EE": "爱沙尼亚",
      "BY": "白俄罗斯",
      "KZ": "哈萨克斯坦",
      "UZ": "乌兹别克斯坦",
      "CL": "智利",
      "CO": "哥伦比亚",
      "PE": "秘鲁",
      "VE": "委内瑞拉",
      "CU": "古巴",
      "SC": "塞舌尔",
      "PA": "巴拿马"
    },
    "regions": {
      "CN-BJ": "北京",
      "CN-SH": "上海",
      "CN-TJ": "天津",
      "CN-CQ": "重庆",
      "CN-GD": "广东",
      "CN-ZJ": "浙江",
      "CN-JS": "江苏",
      "CN-SD": "山东",
      "CN-HN": "河南",
      "CN-HB": "湖北",
      "CN-HU": "湖南",
      "CN-SC": "四川",
      "CN-HE": "河北",
      "CN-FJ": "福建",
      "CN-AH": "安徽",
      "CN-JX": "江西",
      "CN-LN": "辽宁",
      "CN-JL": "吉林",
      "CN-HL": "黑龙江",
      "CN-SX": "山西",
      "CN-SN": "陕西",
      "CN-GS": "甘肃",
      "CN-QH": "青海",
      "CN-HA": "海南",
      "CN-YN": "云南",
      "CN-GZ": "贵州",
      "CN-GX": "广西",
      "CN-NX": "宁夏",
      "CN-XJ": "新疆",
      "CN-XZ": "西藏",
      "CN-NM": "内蒙古",
      "TW-TPE": "台北",
      "TW-TXG": "台中",
      "TW-KHH": "高雄",
      "HK-HK": "香港",
      "MO-MO": "澳门",
      "US-CA": "California",
      "US-NY": "New York",
      "US-TX": "Texas",
      "US-FL": "Florida",
      "US-WA": "Washington",
      "US-IL": "Illinois",
      "US-VA": "Virginia",
      "US-OR": "Oregon",
      "US-GA": "Georgia",
      "US-NJ": "New Jersey",
      "US-MA": "Massachusetts",
      "US-OH": "Ohio",
      "US-PA": "Pennsylvania",
      "US-AZ": "Arizona",
      "US-CO": "Colorado",
      "US-NC": "North Carolina",
      "US-MI": "Michigan",
      "US-NV": "Nevada",
      "JP-13": "东京",
      "JP-27": "大阪",
      "JP-14": "神奈川",
      "JP-23": "爱知",
      "KR-11": "首尔",
      "KR-26": "釜山",
      "SG-01": "Singapore",
      "AU-NSW": "New South Wales",
      "AU-VIC": "Victoria",
      "GB-ENG": "England",
      "DE-BE": "Berlin",
      "DE-BY": "Bayern",
      "RU-MOW": "Moscow",
      "RU-SPE": "St Petersburg"
    }
  },
  "hostBrowse": {
    "tabBrowse": "主機瀏覽",
    "subtitle": "經主機出站代理瀏覽外網或內網；目標站不會看見你本機瀏覽器身分。",
    "modeInternet": "外網",
    "modeIntranet": "內網",
    "modeHint": "外網會拒絕私網 IP；內網可開啟 LAN。兩者均拒絕 cloud metadata。",
    "urlPlaceholder": "https://example.com 或 192.168.1.1",
    "go": "前往",
    "back": "返回",
    "forward": "前進",
    "reload": "重新整理",
    "stop": "停止",
    "clearCookies": "清除 Cookie",
    "clearCookiesConfirm": "这会清除此代浏览工作阶段在主机上的 Cookie。已登入的网站需要重新登入。",
    "closeSession": "關閉工作階段",
    "copyUrl": "複製網址",
    "newSession": "新工作階段",
    "privacyOn": "私隱代瀏覽",
    "viaHost": "經主機",
    "emptyTitle": "主機代瀏覽",
    "emptyBody": "請輸入網址。DNS、TLS 與出站由本伺服器處理，而非你的桌面瀏覽器。Cookie 僅存於伺服器 jar。",
    "needUrl": "请先在上方输入网址开始会话。",
    "ssrfBlocked": "已由安全政策攔截（SSRF／模式）",
    "loadFailed": "主機擷取失敗",
    "sessionReady": "工作階段就緒",
    "noSession": "尚未建立工作階段",
    "statusLine": "{{status}} · {{ms}}ms · {{type}} · 經主機",
    "cookies": "Cookie",
    "latency": "延遲",
    "locked": "HTTPS",
    "insecure": "HTTP",
    "loading": "載入中…",
    "modeSwitchHint": "切換模式會開啟新工作階段並清除 Cookie。",
    "copied": "已複製網址",
    "downloadHint": "非 HTML 回應 — 請查看內容框或重新導航。",
    "engineLabel": "引擎",
    "engineProxy": "代理",
    "engineBrowser": "真實瀏覽器",
    "engineSwitchHint": "切換引擎會開啟新工作階段。",
    "needChrome": "真實瀏覽器需要系統 Chrome／Chromium（或於設定指定路徑）。否則請使用代理模式。",
    "engineBrowserNeedChrome": "真实浏览器（未安装 Chrome）",
    "egressHint": "目标站会看见此服务器的出站位址（{{host}}），不是你本机。Cookie 留在服务器工作阶段。",
    "needChromeFallback": "Chrome 不可用 — 已切換至代理引擎。",
    "liveError": "即時串流失敗",
    "liveWaiting": "正在連線至主機瀏覽器…",
    "tabSettings": "設定",
    "softwareNeeded": "真實瀏覽器引擎需要 Chromium／Chrome",
    "softwareHint": "一鍵經 apt 安裝發行版 Chromium。若已安裝 Google Chrome 亦會自動偵測。需要 root 與 YSK_EXECUTE=1。",
    "closeNoSession": "尚未建立工作阶段",
    "goInstallChrome": "前往軟件分頁",
    "settingsIntro": "以下面板設定會覆寫主機瀏覽相關環境變數。",
    "settingsEngine": "預設引擎",
    "engineAuto": "自動",
    "settingsChromePath": "Chrome／Chromium 路徑",
    "settingsChromePathHint": "留空 = 自動偵測。例如 /usr/bin/google-chrome",
    "settingsLoopback": "內網模式允許 loopback（127.0.0.1）",
    "settingsNoSandbox": "Chromium --no-sandbox（僅限 container）",
    "settingsSave": "儲存設定",
    "settingsSaved": "主機瀏覽設定已儲存",
    "envHintsTitle": "程序環境變數（唯讀；面板已設定時優先採用面板值）",
    "stream": {
      "label": "畫質",
      "smooth": "流暢",
      "balanced": "均衡",
      "sharp": "高清"
    },
    "zoom": {
      "label": "縮放",
      "fit": "適合窗口",
      "fill": "填滿"
    },
    "retryNav": "重試導航",
    "retryLive": "重連畫面",
    "tryProxy": "改用代理引擎",
    "err": {
      "LIVE_NO_FRAME": "畫面串流逾時：尚未收到主機畫面。請重連畫面或重試導航。",
      "LIVE_WS_FAIL": "即時連線失敗。請重連畫面。",
      "SSRF_BLOCKED": "目標位址已被安全政策攔截。",
      "BOT_CHALLENGE": "目標頁面可能要求人機驗證或阻擋自動化瀏覽；請在畫面上完成驗證，或改用其他網絡。",
      "TIMEOUT": "載入逾時。請重試。",
      "DNS_FAIL": "網域名稱解析失敗。",
      "TLS_FAIL": "安全連線（TLS）失敗。",
      "NAV_FAIL": "導航失敗。",
      "CHROME_LAUNCH": "無法啟動主機 Chromium。請檢查軟件安裝與 no-sandbox 設定。",
      "SESSION_GONE": "工作階段已失效。請重新前往。",
      "NEED_CHROME": "需要安裝 Chrome／Chromium。"
    },
    "home": "主頁",
    "bookmark": "書籤",
    "bookmarkAdd": "加入或移除書籤",
    "bookmarkList": "書籤清單",
    "bookmarks": "書籤",
    "history": "瀏覽記錄",
    "bookmarkToggled": "已更新書籤",
    "newTab": "新分頁",
    "fullscreen": "全螢幕",
    "mediaNote": "真实浏览器：视频会流到面板。在设置启用音频桥接即可听到页面声音（需用户操作）。",
    "isolationNote": "真實瀏覽器會建立臨時 Linux 用戶隔離 Chrome；離開頁面或逾時會結束並刪除該用戶。",
    "resumeHint": "可恢复上次浏览（{{count}} 个标签页）",
    "resumeHintDetail": "可恢复上次浏览（{{count}} 个分页）· {{url}} · {{when}}",
    "resumeHintOwned": "可恢复 {{user}} 上次浏览（{{count}} 个分页）· {{url}} · {{when}}",
    "clearSessionData": "清除工作阶段资料",
    "clearSessionConfirm": "这会舍弃上一工作阶段的还原快照，之后不能还原那些分页。",
    "resume": "恢复",
    "resumeDismiss": "关闭",
    "resumeDone": "已恢复会话",
    "settingsSafety": "浏览安全",
    "settingsSafetyHint": "严格会拦截更多高风险主机；宽松允许更广的内网目标。不会关闭云端元数据的 SSRF 防护。",
    "safetyStrict": "严格",
    "safetyStandard": "标准",
    "safetyRelaxed": "宽松",
    "settingsBlockHosts": "封锁主机后缀",
    "settingsBlockHostsHint": "每行一个主机名或后缀（例如 malware.test）。精确与后缀匹配均会封锁。",
    "settingsAllowDangerousDownloads": "允许高风险下载（可执行文件/脚本）",
    "settingsAudioBridge": "将页面音频桥接到面板",
    "settingsAudioBridgeHint": "把主机 Chrome 音频流到此浏览器。部分网站需点击才能解锁播放。",
    "downloads": "下载",
    "downloadsEmpty": "此会话尚无下载",
    "downloadReady": "就绪",
    "downloadBlocked": "已封锁",
    "downloadPending": "处理中",
    "downloadFailed": "失败",
    "downloadSave": "保存",
    "audioUnlock": "启用声音",
    "audioUnlockHint": "点击以解锁此标签页音频播放",
    "audioUnlocked": "音频已解锁",
    "audioPlaying": "正在播放音频",
    "audioNeedsUnlock": "音频需解锁",
    "audioBridgedHint": "页面音频已由主机浏览器桥接",
    "audioNotBridged": "音频关闭",
    "audioNotBridgedHint": "在设置中开启音频桥接即可听到页面声音",
    "mediaPolicyTitle": "真实浏览器媒体",
    "mediaVideoLabel": "视频",
    "mediaVideoDesc": "在主机上渲染，再以画面流到面板。",
    "mediaAudioLabel": "音频",
    "mediaAudioDesc": "可选自主机 Chrome 的桥接；可能需要解锁点击。",
    "mediaPolicyLabel": "策略",
    "mediaPolicyDesc": "下载与自动播放遵循上方安全与下载设置。",
    "frameBlocked": "页面无法在面板框架内显示。",
    "historyEmpty": "此工作阶段尚无浏览记录。",
    "bookmarksEmpty": "尚未有书签。",
    "closeSessionHint": "会清掉此浏览工作阶段的 Cookie；书签会保留。",
    "envUnset": "未设置",
    "envPanelValue": "面板：{{value}}",
    "envColVar": "变量",
    "envColHost": "主机进程",
    "envColPanel": "面板设置",
    "envColEffective": "生效值",
    "settingsNoSandboxWarn": "会关闭 Chromium 沙箱。只应在可信的 container 内使用。下次真实浏览器工作阶段才生效。",
    "settingsDangerDlWarn": "允许经主机浏览器下载可执行文件与脚本。请确认确实需要。",
    "settingsDangerConfirmTitle": "启用高风险浏览设置？"
  },
  "legal": {
    "hubTitle": "法律文件",
    "hubSub": "YSK Server 的使用条款、隐私政策与免责声明",
    "terms": "使用条款",
    "privacy": "隐私政策",
    "disclaimer": "免责声明",
    "updated": "最后更新日期：{{date}}",
    "englishPrevails": "正式语言为英文及香港书面中文。如有歧义，以英文为准。",
    "notOfficialLocale": "你的界面语言并非正式法律语言。除非你切换，以下具约束力的文本为英文。",
    "officialLang": "正式文本",
    "officialEn": "英语",
    "officialZh": "繁体中文（香港）",
    "signIn": "登录",
    "mitNote": "源代码以 MIT 许可。本页为额外使用条件。",
    "backToIndex": "全部法律文件"
  },
  "listToolbar": {
    "searchPlaceholder": "搜索…",
    "searchAria": "搜索列表",
    "clearSearch": "清除搜索",
    "clearAll": "清除筛选",
    "resultCount": "{{count}} 项结果",
    "showingOf": "显示 {{shown}} / {{total}}",
    "activeFilters": "已应用 {{count}} 个筛选",
    "noResults": "无匹配结果",
    "noResultsHint": "试试其他关键词，或清除筛选。",
    "searching": "搜索中…",
    "emptyChip": "此筛选没有项目"
  },
  "logViewer": {
    "banIpTitle": "到防护中心 ban {{ip}}",
    "filter": "筛选",
    "filterPh": "关键字",
    "levels": "级别",
    "wrap": "换行",
    "follow": "跟随",
    "download": "下载",
    "nextError": "下一则错误",
    "prevError": "上一则错误",
    "lines": "{{n}} 行",
    "shown": "显示 {{n}}",
    "errors": "错误 {{n}}",
    "warnings": "警告 {{n}}",
    "all": "全部",
    "empty": "没有日志行"
  },
  "login": {
    "title": "登录 YSK Server",
    "subtitle": "服务器控制台",
    "username": "用户名",
    "password": "密码",
    "submit": "登录控制台",
    "failed": "登录失败，请检查账号或密码",
    "footer": "产品由 YSK Limited 提供",
    "totpRequired": "此账户已开启 2FA，请输入 6 位验证码",
    "totpLabel": "双重验证码",
    "totpHint": "Authenticator 应用中的 6 位数字",
    "submitting": "登录中…",
    "sessionExpired": "登录已失效，请重新登录",
    "newPassword": "新密码",
    "newPasswordAgain": "再次输入新密码",
    "changePassword": "更改密码",
    "passwordMismatch": "两次输入的密码不一致",
    "passwordChanged": "密码已更新"
  },
  "logs": {
    "catSystem": "系统文件",
    "catMail": "邮件",
    "catSecurity": "安全",
    "catApp": "应用",
    "catOther": "其他",
    "journalService": "Journal 服务",
    "unavailable": "不可用",
    "compressed": " · 压缩",
    "noLogFileYet": "（尚未有 log 档）",
    "afterDeploy": "部署后会出现",
    "logsLoaded": "已加载日志",
    "sseFailed": "SSE 串流失败，改用轮询",
    "sseInterrupted": "SSE 中断",
    "settingsSaved": "设定已保存",
    "exportedJsonl": "已导出 JSONL",
    "exported": "已导出",
    "bookmarkSaved": "已存书签",
    "title": "日志中心",
    "fullAccess": "完整权限",
    "nonRoot": "非 root",
    "noExecute": "无 EXECUTE",
    "error": "错误",
    "projectLog": "项目 log",
    "filesCount": "{{count}} 档",
    "tabExplore": "探索",
    "tabMaint": "维护",
    "tabSettings": "设定",
    "tabAbout": "说明",
    "sources": "日志来源",
    "filterPlaceholder": "筛选 unit / 文件…",
    "filterSources": "筛选来源",
    "noProjectLogs": "未发现项目 log — 部署项目后会出现",
    "noMatchSources": "无匹配来源",
    "projectPrefix": "项目 · ",
    "timeRange": "时间范围",
    "unlimited": "不限",
    "priority": "优先级",
    "all": "全部",
    "keywordIp": "关键字 / IP…",
    "custom": "自定义",
    "copied": "已复制",
    "truncated": " · 已截断",
    "following": " · 跟随中",
    "followingSse": " · 跟随中 (SSE)",
    "loadingSources": "加载来源中…",
    "pickSource": "选左側来源，或按快捷 · 再按「查询」",
    "noRowsInWindow": "该时间窗口内没有记录",
    "showInactiveUnits": "显示非活动单位",
    "sseNeedFollow": "先开启关注——SSE仅用于实时尾随",
    "maintOverview": "维护概况",
    "executable": "可执行",
    "restricted": "受限",
    "needRootExecute": "需 root+EXECUTE",
    "retention": "保留时间",
    "retentionHint": "例 7d · 14d · 30d",
    "defaultLines": "默认行数",
    "followInterval": "跟随间隔",
    "maxBytes": "最大字节",
    "maskSecrets": "遮罩 secret",
    "defaultVacuumDays": "默认 vacuum 天数",
    "d7": "7 日",
    "d14": "14 日",
    "d30": "30 日",
    "d90": "90 日",
    "journalAlerts": "Journal 告警",
    "autoVacuum": "自动 vacuum",
    "deleted": "已删",
    "bookmarkDeleted": "已删书签",
    "opsResult": "操作结果",
    "saveBookmark": "保存书签",
    "bookmarkNamePrompt": "为目前查询條件命名",
    "query": "查询",
    "follow": "跟隨",
    "export": "导出",
    "vacuum": "清理（Vacuum）",
    "loadFailed": "加载失败",
    "projectLogsLink": "项目 → 日志",
    "projectLogsDesc": " — 单站快捷 + 深鏈",
    "queryFollow": "查询与跟隨",
    "queryFollowDesc": "探索页预设行数、跟隨节奏、回应上限",
    "retentionAlerts": "保留与告警",
    "retentionAlertsDesc": "vacuum 预设、journal 磁碟告警、自动清理时间窗",
    "dailyNeedRoot": "每日（需 root + EXECUTE）",
    "customAllow": "自定义 allow 路径",
    "customAllowDesc": "僅 /var/log 或 /run/log · 拒绝 .ssh、密钥、/etc",
    "pathsCount": "{{n}} 條",
    "noCustomPaths": "尚未加入自定义路径",
    "bookmarks": "书籤",
    "bookmarksDesc": "探索页常用过滤；开启会切回探索并应用来源",
    "noBookmarks": "尚未有书籤 — 在探索页查询后按「书籤」保存",
    "settingsWriteNote": "设置写入面板 DB；自动 vacuum 由排程每 15 分鐘检查时间窗。",
    "saveSettings": "保存设置",
    "vacuumDaysQ": "Vacuum 时间 {{days}}？",
    "vacuumSizeQ": "Vacuum 大小 500M？",
    "vacuumDesc": "journalctl vacuum 会删除舊日志，不可复原。",
    "vacuumRequested": "已请求 vacuum",
    "vacuumSizeRequested": "已请求 vacuum size",
    "scLogs": "观测 journal／文件／项目",
    "scProtection": "攻擊应变、自动 ban（点 IP）",
    "shortcuts": "快捷",
    "projectsOnly": "只显示项目",
    "filesTitle": "{{n}} 档",
    "bookmarksLabel": "书签",
    "filter": "筛选",
    "followSec": "跟随 {{sec}}s",
    "wrap": "换行",
    "bookmark": "书签",
    "standby": "待命",
    "partialFail": "部分／失败",
    "lines": "{{n}} 行",
    "followingSseDyn": " · 跟随中{{sse}}",
    "ipBan": "IP → 封禁",
    "vacuumNote": "释放 systemd-journald 占用的磁盘。没有系统变更权限时会封锁，不会假装成功。",
    "vacuumTime": "依保留时间清理",
    "vacuumNeedRetention": "请先填写保留时间（例如 14d）",
    "vacuumNeedConfirm": "需确认 — 会删除旧 journal 日志",
    "vacuumSizeNeedConfirm": "需确认 — 会限制 journal 磁盘用量",
    "vacuumHint": "建议保留 ≥7 日；操作后重新探测磁盘用量。",
    "logrotateStatus": "系统 logrotate 状态（只读探测）",
    "logrotateMissing": "无 status 档或不可读 — 可于服务矩阵检查 logrotate 套件",
    "relatedOps": "相关运维",
    "relatedOpsDesc": "日志观测 vs 攻击应变分工",
    "scLogsLine": "观测 journal／文件／项目",
    "scProtLine": "攻击应变、自动 ban（点 IP）",
    "journalVacuumTitle": "清理 journald 磁盘",
    "journalSection": "杂志",
    "sseLabel": "SSE",
    "logrotateLabel": "对数旋转",
    "srcNginx": "nginx",
    "srcSsh": "SSH",
    "srcfail2ban": "失败2禁止",
    "srcFail2ban": "失败2禁止",
    "srcAuthLog": "验证日志",
    "srcNginxError": "nginx 错误",
    "srcLetsEncrypt": "让我们加密",
    "groupJournal": "杂志",
    "groupVarLog": "/var/log",
    "prioErr": "错误+",
    "prioWarn": "警告+",
    "prioInfo": "信息+",
    "vacuumSize": "限制至 500 MB",
    "logrotateNoStatus": "尚未有 logrotate 状态档（从未跑过时属常见）。",
    "autoVacuumOff": "自动清理未启用。启用前时间设定不会执行。",
    "aboutAllowlist": "探索只可读允许清单内的 journal 单元与 /var/log 路径，不会提供任意主机路径。",
    "aboutCustomPath": "请在「设置」加入自定义路径（仅限 /var/log 或 /run/log），再到「探索」开启。",
    "vacuumSizeAlreadyBelow": "目前用量已低于上限，此操作通常无动作",
    "vacuumSizeNoopDesc": "journal 已低于 500 MB。仍会执行 vacuum --size=500M，通常不会删除任何内容。",
    "journalDiskHint": "目前 systemd-journald 用量（作用中 journal）。不含 /var/log 下的轮替档。",
    "varLogDiskHint": "/var/log 的估算用量（含轮替档）。",
    "queryFirst": "请先查询",
    "errorsWindowHint": "上次概览探测的近期错误（切换分页不会重算）",
    "sourceCount": "显示 {{shown}}",
    "sourceUnavailable": "此来源尚未产生日志",
    "sourceNoLog": "尚无日志",
    "projectSourcesTitle": "{{n}} 个来源（文件 + journal）",
    "logrotatePath": "小路",
    "logrotateLast": "上次旋转",
    "exportJsonl": "汇出 JSONL",
    "sseLive": "（即时串流）",
    "logrotateExpand": "显示另外 {{n}} 个",
    "logrotateCollapse": "显示更少",
    "logrotateVersion": "状态版本 {{v}}"
  },
  "metrics": {
    "alert": {
      "memory_high": "内存偏高",
      "load_high": "负载偏高",
      "disk_high": "磁盘偏高"
    },
    "loadFailed": "加载指标失败",
    "projectUsageFailed": "项目用量加载失败",
    "procListFailed": "进程列表失败",
    "streamEnded": "stream 已结束（{{reason}}）",
    "streamOpenFailed": "无法打开 stream",
    "signalFailed": "信号失败",
    "detailFailed": "无法加载详情",
    "alertCount": "{{count}} 条告警",
    "attention": "需留意",
    "normal": "正常",
    "disk": "磁盘",
    "alerts": "告警",
    "auto5s": "自动 5s",
    "hostSettings": "主机设置",
    "loading": "加载指标…",
    "tabs": {
      "overview": "概览",
      "live": "实时进程",
      "disk": "磁盘",
      "projectUsage": "项目用量",
      "alerts": "告警"
    },
    "load": "负载",
    "load1m": "负载 1 分钟",
    "uptime": "运行时间",
    "filterCpu5": "≥5%CPU",
    "filterMem5": "≥5% 内存",
    "signalHint": "先勾选进程，再送 TERM 或 KILL。",
    "signalFromRow": "选取此进程以便送讯号",
    "selectForSignal": "选取",
    "forceKillTitleNamed": "KILL PID {{pid}}（{{cmd}}）？",
    "sendSigTitleNamed": "向 PID {{pid}}（{{cmd}}）送 TERM？",
    "min1": "1 分",
    "min5": "5 分",
    "min15": "15 分",
    "loadHint": "相对 {{cpus}} CPU；高于 1.0× 表示可能排队。",
    "memory": "内存",
    "total": "总量",
    "available": "可用",
    "mainDisk": "主磁盘",
    "path": "路径",
    "diskReadFail": "无法读取磁盘",
    "viewAllMounts": "查看全部 {{count}} 个 mount →",
    "nAlerts": "{{count}} 告警",
    "details": "详情",
    "noThresholdAlerts": "目前无内存／负载／磁盘阈值告警",
    "projectDisk": "项目磁盘（真实 du）",
    "viewAllProjectUsage": "查看全部项目用量 →",
    "loadProjectDisk": "加载项目磁盘用量（真实 du）→",
    "followSse": "跟随（SSE）",
    "interval": "间隔",
    "sort": "排序",
    "rows": "行数",
    "onceQuery": "单次查询",
    "procSearchPh": "搜索 PID / USER / COMMAND",
    "procSearchAria": "搜索进程",
    "filterAll": "全部",
    "filterMine": "非系统",
    "selectedN": "选中 {{count}}",
    "showOf": " · 显示 {{shown}}/{{total}}",
    "topLoading": "加载 top 摘要中…（/proc/stat 双样本）",
    "topAria": "top 摘要",
    "perCore": "每核",
    "noPerCore": "无每核数据",
    "uptimeDays": "{{d}} 天，{{h}}:{{m}}",
    "used": "已用",
    "free": "空闲",
    "signal": "信号",
    "kill": "结束",
    "send": "送出",
    "procDetail": "进程详情",
    "refreshProc": "刷新进程",
    "noProcs": "没有进程",
    "noProcsFilter": "没有符合筛选的进程",
    "mounts": "挂载点",
    "fs": "文件系统",
    "mount": "挂载",
    "size": "容量",
    "usage": "用量",
    "project": "项目",
    "quota": "配额",
    "ratio": "占比",
    "unlimited": "无限制",
    "noProjects": "尚无项目",
    "noProjectsDesc": "创建项目后可在此看真实 home 用量",
    "usageNote": "用量来自本机 du（非估算）。配额为控制面 soft limit；硬 setquota 需「套用限制到系统」。",
    "thresholdAlerts": "阈值告警",
    "alertsBuiltinOnly": "仅内置 CPU/内存/磁盘阈值。没有电子邮件、网络钩子或 Slack 通道。",
    "lastEvaluated": "最后检查",
    "alertsOkTitle": "目前正常",
    "alertsOkDesc": "没有内存／负载／磁盘阈值告警。",
    "cpu": "中央处理器",
    "command": "命令",
    "user": "用户",
    "clearSelection": "清除选择",
    "batchSignal": "批量信号",
    "liveHint": "实时进程列表（SSE 或轮询）。信号需 root + YSK_EXECUTE。",
    "signalTo": "信号 {{sig}} → PID {{pid}}",
    "procAlive": "进程仍在（kill -0 成功）",
    "procGone": "进程已结束",
    "procTable": "进程 ({{count}}{{more}})",
    "procTableDesc": "ps 列表 · 勾选后可 TERM/KILL（需 YSK_EXECUTE）",
    "selectAllAria": "全选筛选结果",
    "selectPidAria": "选取 PID {{pid}}",
    "controlPlane": "控制面",
    "controlPlaneNoSignal": "不可对控制面进程送出讯号",
    "protectedPid": "无法从面板发出 PID 1 / init / systemd 信号",
    "sigTermTitle": "发送SIGTERM（要求进程退出）",
    "sigKillTitle": "发送SIGKILL（强制杀死——无法被捕获）",
    "batchTerm": "TERM",
    "batchKill": "杀",
    "rawTopLabel": "原始上衣（未翻译）",
    "followSseLabel": "关注（直播）",
    "alertsReadOnly": "仅内置 CPU/内存/磁盘阈值。没有电子邮件、网络钩子或 Slack 通道。",
    "alertsGoNotifications": "打开通知中心",
    "lastCheck": "最后检查",
    "rawTopHint": "未翻译的 top(1) 输出",
    "detailShort": "详",
    "procUnavailable": "无法取得进程",
    "noProcData": "尚无进程数据",
    "noProcFilter": "无符合筛选的进程",
    "clickOnceOrFollow": "按「单次查询」或开跟随",
    "liveFootnote": "等同 SSH top：/proc/stat 双样本算 %Cpu（开「每核」= top 按 1）、Mem/Swap、Tasks；进程表来自 ps。不是交互 PTY。Kill 需 YSK_EXECUTE；PID 1 与控制面默认保护。",
    "forceKillTitle": "强制结束 PID {{pid}}（SIGKILL）",
    "sendSigTitle": "向 PID {{pid}} 发送 SIG{{sig}}",
    "forceKillDesc": "无法拦截，可能丢数据。命令：{{cmd}}",
    "termDesc": "进程可自行清理后退出。命令：{{cmd}}",
    "forceKillBtn": "强制 KILL",
    "sendTermBtn": "发送 TERM",
    "procPidTitle": "进程 PID {{pid}}",
    "readingProc": "读取 /proc…",
    "applyRenice": "套用 renice",
    "reniceHint": "-20 最高优先 · 19 最低（需 EXECUTE）",
    "noData": "无数据",
    "shareOfMeasured": "占已量度 {{pct}}%",
    "mountsTitle": "磁盘 mounts ({{count}})",
    "mountsDesc": "真实 df -P -B1（已过滤 tmpfs 等）",
    "noMounts": "无 mount 列表",
    "noMountsDesc": "df 不可用或被过滤。主磁盘仍见于概览。",
    "seeProjectUsage": "项目 home 用量见「项目用量」分页（真实 du · 共 {{size}}）",
    "measuringDu": "测量项目 home（du）…",
    "projectUsageTitle": "项目磁盘用量 ({{count}})",
    "projectUsageDesc": "真实 du · 合计 {{total}} · {{at}}",
    "projectUsageDescEmpty": "对各项目 home_dir 执行 du",
    "remeasure": "重新测量",
    "usageNoteFull": "用量来自本机 du（非估算）。配额为控制面 soft limit；硬 setquota 需「套用限制到系统」。",
    "sseNeedLogin": "未登录，无法开启 SSE",
    "sseSessionExpired": "未登录或 session 失效，无法开启 SSE",
    "sseHttpError": "流 HTTP {{status}}",
    "colFilesystem": "文件系统",
    "colMount": "挂载点",
    "colSize": "容量",
    "colUsed": "已用",
    "colAvail": "可用",
    "colUsePct": "使用率",
    "colHome": "主目录",
    "usageNoteLink": "配额是控制面软上限。要套用硬限制请到专案「隔离」分页。",
    "shareNoQuotaHint": "未设配额，故无占比。请到项目「隔离」分页设定配额。",
    "setQuotaLink": "设定配额",
    "unusualHome": "非标准路径",
    "unusualHomeHint": "不是 /home/... 项目主页。规范隔离是 /home/ysk-server-{id}。"
  },
  "migrate": {
    "tabInventory": "盘点",
    "tabTarget": "目标",
    "tabRun": "执行",
    "tabDone": "完成",
    "refreshFailed": "刷新失败",
    "migrateIncomplete": "迁移未完成",
    "requestFailed": "迁移请求失败",
    "title": "整机迁移",
    "subtitle": "来源控制面 → 新机全量复制。完成后只改公网 IP／DNS，账号、路径与项目保持一致。",
    "inventorying": "盘点中",
    "inventoried": "已盘点",
    "inventoriedWarn": "已盘点 · {{n}} 警告",
    "inventoriedOrphans": "已盘点 · {{n}} 个孤立主目录",
    "inventoriedWarnAndOrphans": "已盘点 · {{w}} 则警告 · {{n}} 个孤立主目录",
    "inventoryFailed": "盘点失败",
    "pendingInventory": "待盘点",
    "projects": "项目",
    "mailboxes": "信箱",
    "users": "用户",
    "software": "软件",
    "jobs": "工作",
    "notFound": "找不到",
    "wizard": "迁移向导",
    "jobLog": "工作记录",
    "about": "说明",
    "steps": "迁移步骤",
    "sourceInventory": "来源盘点",
    "sourceInventoryDesc": "只读扫描控制面与项目路径，不会修改系统",
    "inventoryRunning": "正在盘点本机…",
    "host": "主机",
    "projectHome": "项目 / home",
    "needSoftware": "需安装软件",
    "noInventory": "尚未取得盘点",
    "noInventoryHint": "按右上角「刷新」扫描本机状态与工作记录。API 需已加载 migrate 路由。",
    "targetHost": "目标主机",
    "targetHostDesc": "僅需 root SSH；密码只用于本次请求，不会写入数据库",
    "sshTarget": "SSH 目标",
    "sshPort": "SSH 埠",
    "targetDataDir": "目标 dataDir",
    "authMethod": "认证方式",
    "rootPassword": "Root 密码",
    "notPersisted": "不会持久化",
    "passwordNotStored": "密码只用于今次 SSH，不会写入磁盘。",
    "overwriteDanger": "覆写会取代目标机现有 YSK 资料，面板无法复原。",
    "outboundIdentity": "vault 内 outbound identity",
    "dryRun": "执行预检（dry-run）",
    "startMigrate": "开始整机迁移",
    "needSshTarget": "请填写 SSH 目标",
    "needMaintWindow": "请勾选维护窗",
    "needRootPassword": "请输入 root 密码",
    "needRequired": "请完成必要字段",
    "result": "迁移结果",
    "blocked": "已阻挡",
    "failed": "失败",
    "detail": "详细说明",
    "jobsTitle": "迁移工作（{{count}})",
    "jobsDesc": "状态落在 dataDir/migrate/；密码从不写入 job 档。按右上角「刷新」更新。",
    "phase": "阶段",
    "jobPhase": "工作 {{id}} · {{phase}}",
    "phaseName": {
      "failed": "失败",
      "done": "完成",
      "running": "进行中",
      "queued": "排队中",
      "cancelled": "已取消"
    },
    "target": "目标",
    "updated": "更新",
    "notes": "备注",
    "noJobs": "尚无迁移工作",
    "noJobsHint": "在「迁移向导」完成一次 dry-run 或正式迁移后会出现在此。",
    "confirmTitle": "确认整机迁移",
    "confirmDesc": "即将对 {{target}} 执行全量 rsync 与目标 bootstrap。来源进入维护窗，过程可能数十分钟。密码僅本次使用。",
    "confirmStart": "确认开始",
    "cancel": "取消",
    "success": "成功",
    "unfilledTarget": "（未填目标）",
    "restartApiHint": "若刚部署新版本，请重启 API（",
    "afterRestart": "）后再按「刷新」。",
    "inventoryWarnings": "盘点警告（{{count}}）",
    "orphanHomesHint": "孤立项目主目录（store 无对应）。确认无用途后再删。",
    "orphanHomesTitle": "孤立专案主目录（{{count}}）",
    "orphanHomesSummary": "磁盘上有 {{count}} 条路径不在 store。不确定请先备份，确认无用后再删。",
    "orphanColHome": "主目录",
    "orphanColModified": "最后修改",
    "orphanColEntries": "目录项",
    "orphanEntries": "目录内有 {{n}} 个顶层项目",
    "orphanKpi": "孤立主目录",
    "sourceOs": "操作系统",
    "sourceDataDir": "数据目录",
    "sourceDbRedis": "数据库 / Redis",
    "sourceDbRedisValue": "{{db}} 个数据库 · {{redis}} 个 Redis",
    "orphanRemove": "删除孤立主目录",
    "orphanRemoveTitle": "删除此孤立项目主目录？",
    "orphanRemoveDesc": "将永久删除磁盘上的 {{path}}。这不是 store 内项目。需 YSK_EXECUTE=1。",
    "orphanRemovePhrase": "请输入 DELETE 确认。",
    "orphanRemoveNeedConfirm": "需确认",
    "orphanBackupFirst": "请先到备份页备份",
    "orphanMtime": "最后修改 {{at}}",
    "expandAllWarnings": "展开全部 {{n}} 则警告",
    "collapseWarnings": "收合",
    "moreWarnings": "…另有 {{n}} 則",
    "authPassword": "root 密码（安装临时密钥后改用 key）",
    "authIdentity": "SSH 身份庫 identityId",
    "authAgent": "本机预设 agent / 密钥",
    "confirmMaint": "确认维护窗",
    "confirmMaintDesc": "· 来源将短暂停服以保证 dump 一致（正式迁移必勾）",
    "allowOverwrite": "允许覆写目标既有 YSK 资料",
    "allowOverwriteDesc": "· 目标已有 ysk.json 时需勾选",
    "dryRunOnly": "僅 dry-run",
    "dryRunOnlyDesc": "· 只做盘点 + 预检，不 rsync、不写目标",
    "executeNote": "本机需 YSK_EXECUTE=1 且以 root 执行 API。迁移完成后请改 DNS A/AAAA，并检查雲防火墙与邮件 PTR。",
    "dnsCutover": "DNS cutover（需人工）",
    "dnsCutoverDesc": "将下列主机名的 A / AAAA 指到新机公网 IP；并确认 80/443/25/587 等防火墙与邮件 rDNS。"
  },
  "multiCheck": {
    "customPlaceholder": "自定义代码",
    "searchPlaceholder": "搜索…",
    "emptyText": "无符合项目",
    "removeTitle": "点击移除",
    "noneSelected": "尚未选择",
    "optionsAria": "选项",
    "showingCapped": "显示前 {{shown}}／共 {{total}} 项 — 用搜索收窄",
    "add": "加入",
    "bulkAria": "批量选择",
    "selectAll": "全选",
    "selectAllTitle": "全选全部 {{n}} 项",
    "selectFiltered": "全选筛选（{{n}}）",
    "selectFilteredTitle": "全选当前搜索结果 {{n}} 项",
    "clearAll": "全不选",
    "clearFiltered": "清除筛选",
    "selectedCount": "已选 {{n}}／{{total}}",
    "chipsCollapsed": "已选 {{n}} 项 — 展开",
    "chipsCollapse": "收起"
  },
  "nav": {
    "dashboard": "仪表盘",
    "ai": "AI 任务",
    "projects": "项目",
    "security": "账号安全",
    "email": "邮件",
    "files": "文件",
    "system": "系统套用",
    "updates": "更新",
    "agents": "AI Agent（实验）",
    "login": "登录",
    "logout": "退出",
    "publicFiles": "公共文件",
    "ftp": "FTPS",
    "ftpService": "FTPS",
    "mysql": "MySQL",
    "mysqlService": "MySQL 服务",
    "mariadb": "MariaDB",
    "mariadbService": "MariaDB 服务",
    "postgres": "PostgreSQL",
    "postgresService": "PostgreSQL 服务",
    "redis": "Redis",
    "redisService": "Redis 服务",
    "cluster": "丛集",
    "dns": "DNS",
    "ssl": "SSL 证书",
    "nginx": "Nginx",
    "node": "Node.js",
    "php": "PHP",
    "python": "Python",
    "go": "Go",
    "rust": "Rust",
    "protection": "防护中心",
    "firewall": "防火墙",
    "fail2ban": "fail2ban",
    "users": "用户与方案",
    "services": "服务状态",
    "metrics": "主机指标",
    "network": "网络接口",
    "logs": "日志中心",
    "cron": "Cron",
    "backups": "备份",
    "migrate": "整机迁移",
    "systemd": "systemd",
    "readiness": "就绪探测",
    "systemIndex": "系统工具",
    "sections": {
      "overview": "总览",
      "sites": "账号与站点",
      "mail": "邮件",
      "files": "文件与 FTP",
      "databases": "数据库",
      "dnsSsl": "域名与 SSL",
      "runtimes": "运行环境",
      "security": "安全",
      "system": "系统",
      "ai": "人工智能",
      "validators": "验证者节点",
      "containers": "容器"
    },
    "java": "Java",
    "kotlin": "Kotlin",
    "bun": "Bun",
    "software": "软件中心",
    "terminal": "终端",
    "hostBrowse": "主機瀏覽",
    "cdn": "CDN",
    "vpn": "VPN",
    "vnc": "VNC",
    "apache": "Apache",
    "bookmarkedProjects": "已固定项目",
    "bookmarkedEmailDomains": "已固定域名",
    "bookmark": "固定到侧栏",
    "unbookmark": "取消侧栏固定",
    "bookmarkPinned": "已固定",
    "bookmarkAdded": "已固定到侧栏",
    "bookmarkRemoved": "已从侧栏移除",
    "btTracker": "BT Tracker",
    "support": "支持",
    "noAccessTitle": "没有权限",
    "noAccessDesc": "你的角色不能开启此页。如需使用，请向管理员申请。",
    "backToDashboard": "返回仪表板",
    "validators": "验证者节点 (Beta)",
    "docker": "Docker"
  },
  "network": {
    "title": "网络接口",
    "canMutate": "可变更",
    "readOnlyBlocked": "只读／受阻",
    "statIfaces": "接口",
    "statUp": "已启用",
    "oper": {
      "up": "已启用",
      "down": "已停用",
      "unknown": "未知",
      "loopback": "永久启用",
      "loopbackHint": "回环界面一律可用，不可变更。",
      "other": "其他"
    },
    "statGateway": "网关",
    "pageActions": "页面操作",
    "loadingSnap": "读取网络快照…",
    "mutateHint": "变更即时生效，重启可能还原。",
    "cannotMutate": "无法变更：需 EXECUTE 与 root。",
    "tabs": {
      "ifaces": "接口",
      "routes": "路由",
      "dns": "域名系统",
      "advanced": "高级",
      "about": "说明",
      "realip": "真实 IP / CDN"
    },
    "ifaceSummary": "{{count}} 个接口 · {{up}} 個 UP",
    "noIfaces": "没有接口",
    "noIfacesDesc": "ip 不可用或無權读取",
    "colName": "名称",
    "colStatus": "状态",
    "ifaceOps": "{{name}} 操作",
    "routeTable": "路由表",
    "defaultGw": "預設网关 {{gw}}",
    "liveIpRoute": "即时 ip route",
    "noRoutes": "没有路由",
    "colDest": "目的地",
    "addRoute": "新增路由",
    "persistNm": "保存到 NetworkManager 连接（重启仍在）",
    "ephemeralRoute": "僅即时 ip route（重开可能消失）",
    "destPlaceholder": "default 或 10.0.0.0/8",
    "devOptional": "Dev（可选）",
    "defaultDev": "默认出口：{{dev}}",
    "saveNm": "保存（NetworkManager，重启不消失）",
    "ephemeralHint": "取消則只做即时 ip route add",
    "nmUnavailable": "NetworkManager 未运行 — 只能添加实时路由",
    "defaultRouteDownNeedName": "这是默认路由出口。输入接口名称进行确认 - 面板可能会断开连接。",
    "saveRoute": "保存路由",
    "dnsSettings": "DNS 设置",
    "dnsNmHint": "经 NetworkManager 写入连接「{{conn}}」并重连（持久）",
    "dnsCannotApply": "当前无法套用：需 NetworkManager 活动连接 + EXECUTE + root",
    "mode": "模式",
    "connection": "连接",
    "source": "来源",
    "ignoreAutoDns": "现况 ignore-auto-dns",
    "ignoreYes": "yes（忽略 DHCP DNS）",
    "ignoreNo": "no（跟 DHCP）",
    "nameserverEditHint": "可加减服务器；套用写入 NetworkManager 并重连",
    "routerDns": "路由器 {{dns}}",
    "current": "当前",
    "serverList": "服务器列表",
    "emptyDnsTitle": "尚未加入 DNS",
    "emptyDnsDesc": "按「加服务器」开始",
    "keepOneRow": "至少保留一列（可清空后再删）",
    "removeServer": "移除此服务器",
    "searchDomainsPlaceholder": "可选，空白分隔",
    "ignoreDhcpDns": "忽略 DHCP 自动 DNS（ipv4.ignore-auto-dns=yes）",
    "restoreDhcpHint": "用「还原 DHCP DNS」可交回路由器分配",
    "noNmConnection": "無可用 NM 连接 — 不會盲改 /etc/resolv.conf（避免假成功）。",
    "needExecuteRoot": "需 YSK_EXECUTE=1 与 root 才会真写入。",
    "resolveTest": "解析测试",
    "resolveTestDesc": "getent ahosts（本机实际解析结果）",
    "hostname": "主机名",
    "testFailed": "测试失败",
    "stackDetect": "本机网络堆栈检测",
    "available": "可用",
    "unavailable": "不可用",
    "persistNmCap": "可持久化（NM）",
    "ifaceDetail": "接口 {{name}}",
    "type": "类型",
    "addresses": "地址",
    "noAddresses": "无地址",
    "ifaceAdjust": "接口调整",
    "addIpTitle": "加 IP · {{name}}",
    "saveIp": "保存 IP",
    "add": "新增",
    "cidrPlaceholder": "例：10.0.0.5/24 或 2001:db8::5/64",
    "saveIpHint": "寫入连接 +ipv4/ipv6.addresses 並 connection up",
    "confirmIfaceName": "输入接口名「{{name}}」确认",
    "deleteRouteTitle": "删除路由？",
    "deleteRouteNamed": "删除路由 {{dst}}？",
    "deleteRouteBody": "将从即时路由表移除 {{dst}}{{via}}{{dev}}。",
    "viaGw": " 经 {{gw}}",
    "onDev": " 装置 {{dev}}",
    "deleteDefaultWarn": "— 删除 default 可能断线。",
    "alsoRemoveNm": "同時從 NetworkManager 连接移除（重开不再出現）",
    "loadFailed": "加载失败",
    "loadNetworkFailed": "加载网络失败",
    "on": "开",
    "off": "关",
    "addServer": "加服务器",
    "applyDns": "套用 DNS",
    "restoreDhcpDns": "还原 DHCP DNS",
    "test": "测试",
    "refresh": "刷新",
    "hostSettings": "主机设置",
    "protection": "防护中心",
    "defaultEgressBadge": "默认",
    "opsAria": "{{name}} 操作",
    "details": "详情",
    "addIp": "加 IP",
    "reset": "重置",
    "ephemeralOnly": "仅即时",
    "saveRouteHint": "保存会写入 NM 连接并 connection up；",
    "deleteShort": "删",
    "resetForm": "重置表单",
    "applyDnsNotes": "套用后会 nmcli connection modify + up；短暂断线属正常。stub 127.0.0.53 不会写入（本机 resolved 内部用）。",
    "testResolve": "测试解析",
    "loadRaw": "加载 raw 输出",
    "hideRaw": "隐藏 raw 输出",
    "rawLoadedAt": "加载时间 {{time}}",
    "confirmDown": "确认 Down",
    "linkDownTitle": "將 {{name}} 離線",
    "linkDownNeedConfirm": "需輸入介面名稱確認",
    "defaultRouteDownWarn": "此接口是默认路由出口，down 后可能无法连上管理面板。",
    "deleteDefaultMayDrop": " — 删除 default 可能断线。",
    "deleteDefaultPanelWarn": "删除默认路由可以删除此面板会话。键入 DEFAULT 进行确认。",
    "deleteDefaultNeedConfirm": "需确认 — 请输入 DEFAULT（可能中断本面板）",
    "deleteRouteNeedConfirm": "需确认",
    "typeDefaultToConfirm": "输入 DEFAULT 进行确认",
    "gateway": "网关",
    "nameservers": "名称服务器",
    "searchDomains": "搜索域",
    "backend": "后端",
    "cidr": "CIDR",
    "realip": {
      "title": "CDN / 真实用户 IP",
      "desc": "还原 CDN 后方访客 IP；只信任边缘 CIDR。",
      "provider": "默认供应商",
      "providerHint": "直连选 none；在 CDN 后选供应商。",
      "mode": "信任模式",
      "modeSingle": "单一供应商头（推荐）",
      "modeXff": "X-Forwarded-For + 合并 CDN CIDR",
      "customCidrs": "额外信任 CIDR",
      "customCidrsHint": "每行一个 CIDR。",
      "lastRefresh": "上次 CIDR 更新",
      "active": "当前默认",
      "republishHint": "保存后请重新发布项目 Nginx。",
      "refresh": "更新 CDN IP 列表",
      "refreshOk": "已更新 CIDR 列表",
      "providers": {
        "none": "无（直连源站）",
        "cloudflare": "Cloudflare",
        "fastly": "快速",
        "bunny": "兔子CDN",
        "cloudfront": "AWS 云前",
        "azure_frontdoor": "蔚蓝前门",
        "gcore": "国核CDN",
        "custom": "自定义代理"
      },
      "needProvider": "请先选择 CDN 供应商，才可更新 IP 列表。",
      "spoofWarn": "信任错误的 CIDR 会让客户端伪造 X-Forwarded-For／CDN 标头，假装成真实来源 IP。"
    },
    "linkUp": "向上",
    "linkDown": "断开",
    "linkDownDefault": "下线预设路由",
    "loopbackImmutable": "回环界面不可变更",
    "operUnknownHint": "核心未回报 UP／DOWN（lo 常见）。界面仍可用。",
    "persistNmHint": "可持久化代表经 NetworkManager 写入后，重启后设定仍然有效。"
  },
  "nginx": {
    "pillSites": "{{count}} 站点",
    "statSites": "站点",
    "statSslFlag": "SSL 标记",
    "purgeOk": "已 purge",
    "projectSitesHint": "项目站点（受管 conf）与独立站点分开列出。改项目 Nginx 请到项目 → 网络。",
    "purgeCache": "清除 Cache + Reload",
    "purgeCacheTitle": "清除 Nginx cache 并重新载入？",
    "purgeCacheDesc": "清除磁盘 cache 并重载 Nginx。线上站点不会中断。",
    "notInstalled": "Nginx 尚未安装",
    "listTitle": "站点（{{count}}）",
    "listDesc": "创建后再按「套用」同步到系统",
    "createSite": "+ 创建站点",
    "colServerName": "服务器名称",
    "colKind": "类型",
    "kindProxy": "反向代理",
    "kindStatic": "静态",
    "kindPhp": "PHP-FPM",
    "colTarget": "上游／根目录",
    "colStatus": "状态",
    "emptyTitle": "暂无站点",
    "emptyDesc": "用列表右上角「创建站点」新增；创建后再按「套用」",
    "applyTitle": "写入管理文件并尝试同步到系统 + nginx -t + reload",
    "applyToSystem": "同步到系统",
    "createTitle": "创建 Nginx 站点",
    "createDesc": "创建后需套用",
    "editTitle": "编辑 Nginx 站点",
    "editDesc": "保存后需套用",
    "deleteTitle": "删除站点？",
    "deleteDesc": "确定删除此站点？",
    "deleteTitleNamed": "删除站点 {{name}}？",
    "deleteDescNamed": "从面板移除 {{name}}。已套用到系统的站会一并删受管 conf。",
    "invalidServerName": "请填写有效主机名称（例如 app.example.com）。",
    "needUpstream": "反向代理必须填写上游。",
    "needRoot": "静态与 PHP 站必须填写网站根目录。",
    "serverNameHint": "server_name，例如 app.example.com",
    "kindLabel": "站点类型",
    "upstreamLabel": "上游地址",
    "upstreamHint": "例如 127.0.0.1:3000 或 http://backend:8080",
    "rootLabel": "网站根目录",
    "rootHintPhp": "PHP 项目 document root，例如 /var/www/app/public",
    "rootHintStatic": "静态文件目录绝对路径",
    "sslLabel": "启用 SSL 区块",
    "sslDesc": "生成 listen 443 ssl；证书需于 SSL 页就绪后绑定",
    "saveThenApply": "保存后按「套用」写入 nginx",
    "statProjectSites": "项目",
    "projectListTitle": "项目站点（{{count}}）",
    "projectListDesc": "由项目 publish／goLive 写入的受管 conf；修改请到项目「网络」。",
    "colProject": "项目",
    "colRuntime": "运行时",
    "colConf": "配置",
    "confWritten": "已写入",
    "confMissing": "无路径",
    "projectEmptyTitle": "尚无项目 Nginx",
    "projectEmptyDesc": "部署后到项目「网络」发布 Nginx",
    "preview": "预览",
    "openProject": "打开项目",
    "projectPager": "项目站点分页",
    "prevPage": "上一页",
    "nextPage": "下一页",
    "pageOf": "第 {{page}} / {{total}} 页 · 共 {{count}}",
    "projectConfEmpty": "（配置文件为空）",
    "projectConfReadFail": "读取项目 conf 失败",
    "projectPreviewPath": "{{小路}}",
    "pageDesc": "Nginx 站点",
    "filterSource": "来源",
    "sourceAll": "全部",
    "sourceProject": "项目",
    "sourceStandalone": "独立",
    "colSource": "来源",
    "filterProject": "已按项目筛选",
    "globalSettings": "全局设置",
    "siteSettings": "站点设置",
    "saveApply": "保存并应用",
    "settingsSaved": "已保存",
    "setGzip": "压缩包",
    "setShowVersion": "显示版本号",
    "setShowVersionDesc": "关 = server_tokens off",
    "setHttp2": "HTTP/2（SSL）",
    "setBody": "Body 上限",
    "setKeepalive": "保活",
    "setAccessLog": "访问日志",
    "logOn": "开",
    "logBuffered": "缓冲",
    "logOff": "关",
    "setForceHttps": "强制 HTTPS",
    "setHsts": "HSTS",
    "setCfRealIp": "Cloudflare 真实 IP",
    "setIndexes": "目录列表",
    "bodyInherit": "跟随全局",
    "stopSites": "将有 {{n}} 个站点停止回应 HTTP。"
  },
  "notFound": {
    "title": "找不到页面",
    "body": "{{path}} 处没有面板页面。",
    "hint": "未知 URL 不再将您发送至仪表板。",
    "home": "仪表板"
  },
  "notes": {
    "agents": {
      "sessionNotFound": "找不到 session：{{sessionId}}"
    },
    "notFound": "找不到",
    "needPath": "请指定路径",
    "needName": "请填写名称",
    "needHost": "请填写主机",
    "needDomain": "请填写域名",
    "needProjectName": "请填写项目名称",
    "needServerIp": "请指定服务器 IP",
    "passwordMin8": "密码至少 8 个字符",
    "invalidPath": "无效路径",
    "invalidIp": "无效 IP",
    "invalidIp46": "无效 IPv4／IPv6",
    "invalidPackageName": "软件包名称无效",
    "fileMissing": "文件不存在",
    "notRegularFile": "不是普通文件",
    "readFailed": "读取失败",
    "pathResolveFailed": "路径解析失败",
    "fieldInvalid": "字段 {{field}} 无效：{{value}}",
    "apt": {
      "updateIndex": "更新软件包索引"
    },
    "state": {
      "closed": "已关闭",
      "active": "运行中"
    },
    "cat": {
      "security": "安全",
      "mail": "邮件",
      "database": "数据库",
      "runtime": "执行环境"
    },
    "ssh": {
      "identityNotFound": "找不到 identity",
      "registrationNotFound": "找不到登记",
      "keyOkNologin": "Key accepted. Account has no login shell (nologin) — use SFTP. Treated as PASS.",
      "keyOkSftp": "SSH shell 被拒绝后，SFTP pwd 成功。"
    },
    "cdn": {
      "siteNotFound": "找不到 CDN 站点",
      "nodeMissing": "节点不存在",
      "loopbackOriginRemote": "来源是 127.0.0.1 — 这是该主机，而不是远程边缘。设置可达的源IP或bind_ip。",
      "originRemoteRewrite": "远程边缘将使用可达源 {{url}} 而不是环回。",
      "originRemoteUnknown": "来源是环回，并且没有已知的公共/LAN IP 或bind_ip — apply 将拒绝远程边缘，直到设置为止。",
      "needSshOrFleet": "远程边缘需要出站 SSH 身份（或用户名）或 /agents 队列会话。仅健康 URL 不适用传输。",
      "probe": {
        "timeout": "连接超时 {{ms}}ms（{{detail}}）。对端可能被防火墙挡住。",
        "dns": "DNS 查询失败（{{detail}}）。",
        "refused": "连接被拒 {{ms}}ms（{{detail}}）。端口未开或单向封锁。",
        "tls": "TLS 验证失败（{{detail}}）。",
        "unreach": "主机不可达 {{ms}}ms（{{detail}}）。",
        "http": "HTTP 探活失败 {{ms}}ms（{{detail}}）。"
      }
    },
    "backup": {
      "testUnsaved": "正在测试未保存的表单（尚未写入设置）。",
      "testIdentity": "ssh (identity) to {{spec}} ok",
      "sshAuthFailed": "SSH 密钥或密码被拒绝（公钥）。选择出站身份或安装 sshpass。",
      "remotePathIsFile": "远程路径 {{path}} 是一个文件。使用目录。",
      "remoteMkdirFailed": "无法创建远程目录：{{detail}}",
      "sidecarPushed": "还推送了 SQL sidecar {{name}}",
      "fileNotFound": "找不到备份文件",
      "resticNoPassword": "restic 已启用但未设置 password",
      "resticNotInPath": "restic 不在 PATH",
      "dbEnvUnreadable": "无法读取 .db.env，跳过 SQL 导出。",
      "dbEnvNoName": ".db.env 没有数据库名称，跳过 SQL 导出。",
      "targetOutside": "还原目标必须在项目家目录或公开文件根目录之内。",
      "controlPlaneDryRun": "仅预览 - 没有写任何东西。在面板中，使用“恢复”并确认要写入的短语。",
      "controlPlaneNeedConfirm": "完全控制平面恢复需要确认短语 RESTORE-CONTROL-PLANE。",
      "controlPlaneRestartAfter": "恢复成功后重新启动API。",
      "movedToTrash": "已将 {{name}} 移至回收区。{{days}} 日后永久删除。",
      "restoreNameExists": "无法还原 {{name}} — 已有同名备份档。",
      "restoredFromTrash": "已从回收区还原 {{name}}。",
      "trashEmptied": "已从回收区永久删除 {{n}} 个备份档。",
      "partialOk": "部分成功 — 略过 {{n}} 个专案"
    },
    "health": {
      "portListening": "埠 {{port}} 正在监听",
      "portNotListening": "埠 {{port}} 未在监听",
      "httpOk": "HTTP 正常 {{status}}",
      "httpFail": "HTTP 失败：{{detail}}"
    },
    "redis": {
      "cliMissing": "未安装 redis-cli",
      "requirepassAlreadySet": "Redis 已有 requirepass — 未覆写。",
      "requirepassApplied": "已在执行中套用 requirepass",
      "requirepassApplyFailed": "无法 CONFIG SET requirepass（将靠重启与设定档）",
      "generatedRequirepass": "已产生 Redis 密码（只显示一次）：{{password}}"
    },
    "nginx": {
      "reloaded": "nginx 已 reload",
      "configOk": "Nginx 配置检查通过",
      "reloadExit": "Nginx reload 结束码={{code}}",
      "managedDir": "管理配置目录：{{path}}",
      "includeHint": "在 Nginx 加入：include {{path}}/*.conf;",
      "removedOrphan": "已删除幽灵 Nginx conf {{path}}",
      "keptLiveSsl": "保留 {{path}} 的 HTTPS 区块（受管范本没有 listen 443）",
      "orphanCleanupFailed": "清理幽灵 Nginx conf 失败：{{detail}}",
      "settingsWritten": "已写入 Nginx 全局 snippet",
      "settingsNeedExecute": "应用需 YSK_EXECUTE",
      "reloadFailed": "nginx reload 失败"
    },
    "ssl": {
      "requestCert": "申请证书"
    },
    "ftp": {
      "startVsftpd": "启动 vsftpd",
      "writeVsftpd": "写入 vsftpd 配置",
      "vsftpdStarted": "vsftpd 已启动",
      "openPortsStep": "防火墙端口（需手动）",
      "openPortsReminder": "请在主机防火墙和云安全组放行 TCP：{{ports}}。套用 FTPS 不会代你开端口。",
      "openPortsPasvHint": "若登录成功但列目录 LIST 超时，多半是 PASV 数据端口被挡——要开齐 PASV 范围，不是只开 21。",
      "publicPlaintextBlocked": "拒绝在未启用 FTPS 时对外启动 FTP。请改为仅本机监听、选凭证启用 FTPS，或输入 PLAINTEXT 确认后才公开明文服务。"
    },
    "deploy": {
      "nodeMissingIsolated": "隔离部署找不到 Node：{{path}} — 请先安装 Node {{version}} toolchain 再部署。拒绝写入会 203/EXEC 的 unit。",
      "nodeMissing": "找不到 Node：{{path}} — 请安装 toolchain（Node {{version}}）再部署",
      "nodeRejectedPath": "project user 不能执行此 Node 路径：{{path}} — 应使用 {{planned}}",
      "unitUnhealthy": "systemd unit 不健康（{{detail}}）。journalctl -u {{unit}} — 203/EXEC 多半是 binary 对 project user 无权限",
      "skippedPanelNode": "已跳过 panel Node {{path}}（project user 无法执行，会导致 systemd 203/EXEC）",
      "usingFallback": "Node binary：使用 {{path}}（计划路径 {{planned}} 不存在）",
      "usingPanelExec": "Node binary：回退 panel execPath {{path}}",
      "usingPanelDegraded": "Node binary：degraded 部署使用 panel {{path}}（不适用于 systemd User=ysks_*）",
      "nodeNotFoundPlanned": "主机未找到 Node {{version}} — unit 将使用 {{planned}}；请安装 toolchain 再部署"
    },
    "files": {
      "needSrcDst": "请指定来源与目标路径",
      "pathOutsideSandbox": "路径超出沙箱范围：{{target}}",
      "notFoundRel": "找不到：{{relPath}}",
      "fileNotFoundRel": "找不到文件：{{relPath}}",
      "notFoundFrom": "找不到：{{fromPath}}",
      "alreadyExists": "已有同名项目：{{name}}"
    },
    "dns": {
      "needZoneServerIp": "请填写 zone 与 server IP",
      "noClusterPeer": "尚未登记集群 peer",
      "planOnly": "仅计划 — 需 apply=true（root + YSK_EXECUTE）写入 /etc/powerdns 并 rediscover",
      "needRootNamed": "需要 root + EXECUTE 才能更新 named.conf 并 rediscover",
      "noManagedZonesClear": "dataDir/dns/zones 无区域文件 — 将清空 PowerDNS YSK include",
      "bindRegistered": "PowerDNS BIND：已注册 {{count}} 个 zone（list-zones 已确认）",
      "listZonesIncomplete": "named.conf 已更新但 list-zones 未确认全部 zone — 不标 loaded",
      "noLaunchDefaultBind": "未找到 launch= — 默认走 bind 路径",
      "writeNotAnswerDig": "只写 zone 文件不会响应 dig — 需载入 PowerDNS（named.conf + rediscover）",
      "bindDigFailed": "zone 已列出但 dig SOA 失败 — 不标 loaded",
      "bindLoadedOk": "Zone {{zone}} 已挂入 PowerDNS BIND 且 dig OK",
      "bindSyncFailed": "BIND named.conf 同步失败或 dig 无应答",
      "bindSkipPdnsutil": "跳过 BIND 路径（后端偏好 pdnsutil）",
      "pdnsCtlNoConfirm": "有 pdns_control 但 zone 未确认；检查 named.conf 或用 pdnsutil 后端",
      "usingExistingZone": "使用现有 zone 文件：{{path}}",
      "healNeedRoot": "需要 root + EXECUTE 才能改写 pdns local-address",
      "pdnsUnitActive": "pdns 单元：active",
      "pdnsUnitInactive": "pdns 单元：非 active",
      "udp53Listening": "UDP/53：监听中",
      "udp53NotListening": "UDP/53：仍未监听",
      "healResyncOk": "已修复 listener 并重新同步 zone 到 PowerDNS BIND",
      "healResyncPartial": "listener 已修好但 zone 同步未完 — 请点「写入并加载区域」",
      "installAfterLoad": "安装后请 apply DNS zones（写 named.conf + rediscover）或 POST powerdns/load",
      "bindFileNotEnough": "BIND 后端：只写 zone 文件不够，需 named.conf include 才会响应 dig",
      "zeroDomainsHint": "PowerDNS list-zones: 0 — 磁盘有 zone 文件但未加载",
      "localAFailed": "本机 A 探测失败（www/ftp/@）zone={{zone}}",
      "publicNsCloudflare": "公网 NS 是第三方 DNS/CDN（例如 Cloudflare）— 公网 dig 不会用本机 zone",
      "publicNsOther": "公网 NS 不是本机 — 全球查询会忽略本机 PowerDNS，直到改注册商 NS",
      "publicNsHere": "公网 NS 似 in-zone（ns1/ns2.zone）— 外网可能查询你",
      "firewall53Hint": "ss 看不到 UDP/53 — 若外网 dig 失败请开放防火墙 53 both（TCP+UDP）",
      "applyDigOk": "PowerDNS BIND：list-zones + dig OK",
      "applyDigFail": "conf 已注册但 dig 仍空/REFUSED — 不标 applied",
      "applySyncIncomplete": "PowerDNS bind 同步未完 — 仅写盘。请检查 EXECUTE/root 或 pdns 日志",
      "writeOnlyHint": "仅写了 zone 文件 — 需 load/apply 挂 named.conf 才会应答",
      "noActiveUnit": "没有运行中的 named／bind9／pdns 单元",
      "pdnsUnitRestarts": "pdns 单元状态／重启次数：{{detail}}",
      "port53LoopbackOnly": "53 埠只绑在 loopback（systemd-resolved 127.0.0.53）— 不是产品权威 nameserver",
      "port53Closed": "53 埠未在听（UDP／TCP）",
      "udp53NotPublic": "UDP/53 未绑公网位址",
      "tcp53NotPublic": "TCP/53 未绑公网位址",
      "noManagedZones": "dataDir/dns/zones 没有管理中的 zone 档",
      "pdnsListZones": "PowerDNS list-zones：{{n}}",
      "lookupIgnoredAt": "dig 不可用 — 已忽略 @{{server}}。不会把系统 resolver 当成该服务器的答案。",
      "digNotInstalled": "dig 未安装",
      "digEmpty": "dig 无答案",
      "localAOk": "本机 A {{name}} → {{ip}}"
    },
    "db": {
      "needExecuteCreate": "服务器未开启系统变更权限，无法在管理面板创建数据库",
      "dryRunMysql": "dry-run：未创建数据库。加 --execute 且 YSK_EXECUTE=1 才真正 provision",
      "remoteNoCreds": "未存账号／密码——只测 TCP（登记 ≠ 已登录）。",
      "remoteReachable": "TCP {{host}}:{{port}} 可达（{{ms}}ms）。",
      "remoteUnreachable": "TCP {{host}}:{{port}} 关闭或被过滤（{{ms}}ms）。"
    },
    "net": {
      "invalidIface": "接口名称无效",
      "invalidDev": "dev 名称无效",
      "needNmActive": "无法持久化：需要 NetworkManager 活动连接"
    },
    "project": {
      "notFound": "找不到项目：{{id}}",
      "docRootMustBeRelative": "文档根必须为相对路径（相对于项目家目录），不可用绝对路径。",
      "docRootInvalid": "文档根路径无效（不可含 .. 或非法字符）。",
      "domainInvalid": "域名格式无效：{{domain}}",
      "domainInUse": "域名 {{domain}} 已被项目「{{other}}」使用。"
    },
    "email": {
      "domainNotFound": "找不到邮件域名：{{id}}",
      "wroteNginx": "已写入 Nginx 配置：{{nginxPath}}",
      "wrotePath": "已写入 {{path}}",
      "domainDeleted": "已删除域名 {{domain}}（邮箱 {{mailboxes}}、别名 {{aliases}}）",
      "domainDataDirRemoved": "已移除本机数据目录 {{path}}",
      "domainDataDirRemoveFailed": "无法移除数据目录 {{path}}：{{detail}}",
      "domainDeleteSystemHint": "控制面已删除；系统 MTA 映射若仍存在请重新应用其余域名或手动清理",
      "mailboxDeleted": "已删除邮箱 {{address}}",
      "mailboxNotFound": "找不到邮箱",
      "mailboxDataRemoved": "已移除本机目录 {{path}}",
      "domainDeleteConfirmMismatch": "确认字符串与域名不符，已拒绝删除",
      "domainDataKept": "已保留本机 dataDir 邮件数据（removeData=false）",
      "mailboxPasswordUpdated": "已更新 {{address}} 的密码",
      "mailboxStatusUpdated": "已将 {{address}} 状态设为 {{status}}",
      "mailboxUpdateEmpty": "没有可更新项 — 请提供密码和/或状态",
      "mailboxStatusInvalid": "无效的邮箱状态",
      "mailboxNoChanges": "没有变更",
      "dovecotApplyNeedRoot": "套用 Dovecot 虚拟邮箱认证需要 root + YSK_EXECUTE",
      "dovecotNotInstalled": "本机未安装 Dovecot",
      "dovecotNoPassdbSnippets": "dataDir/email 下找不到域名 passdb snippet",
      "dovecotApplyFailed": "套用 Dovecot 虚拟邮箱认证失败：{{detail}}",
      "dovecotApplyOk": "已安装 Dovecot 虚拟邮箱认证（{{conf}}，{{count}} 个域名）",
      "dovecotPassdbWrittenNeedApply": "已写入 passwd-file（dataDir）— 需 EXECUTE+root 套用到 Dovecot 才可登录",
      "postqueueSetgidBroken": "Postfix 队列工具失败：main.cf 中 setgid_group 为空。应设为 postdrop（有 YSK_EXECUTE 时面板会尝试自动修复）。",
      "postqueueMailDown": "Postfix 未运行（showq 不可用）。有 YSK_EXECUTE 时面板会尝试启动 — 请检查软件分页或 systemctl status postfix。",
      "postqueueSpoolMissing": "Postfix 队列目录缺失（例如 hold/）。有 YSK_EXECUTE 时面板会尝试创建 spool 并启动 Postfix。",
      "invalidDomain": "请输入有效邮件域名",
      "invalidServerIp": "请输入有效服务器 IP",
      "mailboxLocalPartInvalid": "邮箱本机部分只可用英文字母、数字与 . _ + -",
      "passwordTooShort": "密码至少 8 个字元"
    },
    "software": {
      "startUnit": "启动 {{u}}",
      "installedSpec": "已安装 {{title}}",
      "installPkg": "安装 {{p}}",
      "npmGlobal": "npm install -g {{pkgs}}",
      "needNodeForNpm": "未找到 node／npm — 请先安装 Node.js 再安装 {{title}}",
      "uninstallNoTargets": "未选择要卸载的软件",
      "uninstallNothingInstalled": "所选范围内没有已安装项目",
      "uninstallProtected": "已跳过受保护组件：{{ids}}",
      "uninstallConfirmMismatch": "确认短语不匹配",
      "uninstallOk": "已卸载 {{n}} 个组件",
      "uninstallPartial": "卸载完成但有错误 — 请查看步骤"
    },
    "php": {
      "aptPackages": "将安装 {{count}} 个软件包：{{list}}"
    },
    "runtime": {
      "plugins": "一并安装工具：{{list}}",
      "pluginsOk": "选定工具已安装",
      "pluginsFailed": "部分工具安装失败或跳过：{{list}}",
      "pluginsUninstall": "卸载工具：{{list}}",
      "pluginsUninstallOk": "选定工具已卸载",
      "pluginsUninstallFailed": "部分工具卸载失败或跳过：{{list}}",
      "pluginsNoneToUninstall": "没有可卸载的工具（可能已移除或属必装）"
    },
    "approval": {
      "notFound": "找不到审批：{{id}}"
    },
    "readiness": {
      "core": "控制面",
      "security": "安全",
      "binaries": "二进制／软件包",
      "hosting": "托管",
      "dns": "域名系统",
      "email": "邮件",
      "isolation": "项目隔离",
      "ops": "运维",
      "runtimesNode": "Node.js",
      "runtimesPhp": "PHP",
      "runtimesPython": "Python",
      "runtimesGo": "Go",
      "pm2": "PM2",
      "runtimesNodeFix": "从 /runtimes/node 安装 Node",
      "runtimesPhpFix": "从 /runtimes/php 安装 PHP",
      "runtimesPythonFix": "从 /runtimes/python 安装 Python",
      "runtimesGoFix": "从 /runtimes/go 安装 Go",
      "pm2Fix": "从 Node 运行时页面安装 PM2"
    },
    "needAdmin": "需要管理员权限",
    "notInstalled": "未安装",
    "unknown": "未知",
    "failed": "失败",
    "running": "运行中",
    "stopped": "已停止",
    "probe": "探测",
    "install": "安装",
    "port": "端口",
    "git": {
      "missingBin": "git 不在路径上",
      "auth": "认证失败。添加部署密钥或 HTTPS 令牌。",
      "hostkey": "SSH 主机密钥验证失败。确认并固定主机密钥。",
      "dirty": "工作树有 {{count}} 个本地更改。拉动被阻止。",
      "diverged": "无法快进。如果您打算丢弃本地 Git 历史记录，请重置为远程引用。",
      "missingRef": "该分支、标签或提交不在远程上。",
      "shallow": "这个克隆很浅。在固定旧提交之前获取完整历史记录。",
      "notRepo": "app/ 还不是 Git 存储库。",
      "diffEmpty": "没有未暂存的差异（受保护的 .env 被排除）。",
      "unrelated": "无关的历史。仅在确认后重新克隆 - 自定义文件将丢失。",
      "lock": "Git index.lock 存在。仅当没有 git 进程正在运行时才将其删除。",
      "disk": "磁盘已满或超出配额。",
      "timeout": "Git 超时。",
      "network": "与远程通信时出现网络错误。",
      "lfs": "此存储库使用 Git LFS 并且 git-lfs 不可用。",
      "submodule": "子模块更新失败。",
      "unknown": "吉特失败了。查看命令输出。",
      "fetchOk": "从原产地获取。",
      "checkoutOk": "签出{{ref}}。",
      "resetOk": "硬重置为{{ref}}。",
      "envRestored": "从控制平面恢复了 app/.env。",
      "needPinHost": "SSH 主机密钥未固定。在克隆或获取之前扫描并固定它。",
      "tokenSaved": "已存储 HTTPS 令牌（不再显示）。",
      "tokenCleared": "HTTPS 令牌已删除。",
      "tokenInvalid": "令牌必须至少包含 8 个字符。",
      "deployKeyCreated": "已创建部署密钥。在 Git 主机上添加公钥。",
      "deployKeyCleared": "部署与该项目分离的密钥。",
      "hostPinned": "{{host}} 的固定 SSH 主机密钥。",
      "hostUnpinned": "清除固定的 SSH 主机密钥。",
      "hostScanFailed": "ssh-keyscan 没有返回该主机的密钥。",
      "hookEnabled": "入站 Git 挂钩已打开。自行将 URL 粘贴到 GitHub、Gitea 或 GitLab 中。",
      "hookDisabled": "入站 Git 挂钩已关闭。 URL 将不会同步。",
      "hookSecretOnce": "现在复制这个钩子秘密。它不再显示。",
      "refsNeedUrl": "首先输入 Git URL。",
      "refsOk": "已加载 {{branches}} 分支和 {{tags}} 标签。",
      "refsEmpty": "远程没有发布任何分支或标签。"
    },
    "auto": {
      "n0001": "状态：applied",
      "n0002": "找不到用户",
      "n0003": "blocked: 需要 YSK_EXECUTE=1",
      "n0004": "找不到資源",
      "n0005": "无法应用系統：需 YSK_EXECUTE + root",
      "n0006": "需要系統变更权限",
      "n0007": "状态：written",
      "n0008": "需要系統管理员（root）权限才能完成",
      "n0009": "创建账户数据库",
      "n0010": "完成",
      "n0011": "找不到账户",
      "n0012": "状态：failed",
      "n0013": "未运行",
      "n0014": "启动中",
      "n0015": "未安装 mysql 客戶端",
      "n0016": "未安装 psql",
      "n0017": "UFW 防火墙",
      "n0018": "运行环境",
      "n0019": "找不到 cron 工作",
      "n0020": "已匯入",
      "n0021": "以 root 执行",
      "n0022": "管理员双重验证",
      "n0023": "错误日誌路径",
      "n0024": "找不到站点",
      "n0025": "系统变更未开启",
      "n0026": "自动 ban 已熔断",
      "n0027": "請指定 agentId",
      "n0028": "找不到项目",
      "n0029": "需要 name",
      "n0030": "緊急",
      "n0031": "自動 ban 未开启",
      "n0032": "dry-run：此計劃未改系統",
      "n0033": "dry-run：未改系統",
      "n0034": "建議至少 1 個 replica",
      "n0035": "無节点 probe 成功",
      "n0036": "服务器未开启系統变更权限，无法 rsync",
      "n0037": "reapply 關鍵步驟失败",
      "n0038": "无法 bootstrap：未开启 YSK_EXECUTE",
      "n0039": "bootstrap 需要 YSK_EXECUTE=1",
      "n0040": "最大连接數",
      "n0041": "綁定位址",
      "n0042": "站点無域名",
      "n0043": "略過 draining",
      "n0044": "找不到 CDN 节点",
      "n0045": "每日（GitHub Releases latest）",
      "n0046": "execute 模式（仍需 YSK_EXECUTE 才能寫系統目录）",
      "n0047": "dry-run 默认：加 --execute 先同步到系統 nginx",
      "n0048": "需要管理员",
      "n0049": "projectId 與 name 必填",
      "n0050": "            ^.*账号或密码不正確.*$",
      "n0051": "            ^.*需要有效的双重验证碼.*$",
      "n0052": "  echo \"pdnsutil 找不到\" >&2",
      "n0053": " : ''}（重開可能消失；要持久請用「保存」）",
      "n0054": "# rsa_cert_file= (尚未选择有效证书)",
      "n0055": "$_GET / $_POST / $_COOKIE 變數上限",
      "n0056": "--password 需值，或設 YSK_MIGRATE_SSH_PASSWORD",
      "n0057": "-1 关闭；0 全部记录",
      "n0058": "/proc/meminfo 不可讀",
      "n0059": "/proc/stat 不可讀 — CPU% 无法計算",
      "n0060": "0 = 不限制；可設 256mb",
      "n0061": "0 = 使用全部 CPU",
      "n0062": "0（关闭）",
      "n0063": "1 分钟 load 超过 CPU×2",
      "n0064": "1. 於面板创建 MySQL 数据库",
      "n0065": "1=最安全；2=效能較佳",
      "n0066": "2. 下载 WordPress 到 app/public",
      "n0067": "3. 设置 wp-config.php",
      "n0068": "4. 部署 PHP + 發布 Nginx／SSL",
      "n0069": "A 记录值必須是 IPv4",
      "n0070": "A 记录必須是 IPv4",
      "n0071": "AAAA 记录值必須是 IPv6",
      "n0072": "AAAA 记录必須是 IPv6",
      "n0073": "AOF 持久化",
      "n0074": "Adminer 文件不存在；請 download:true",
      "n0075": "Agent 无法在全域範圍执行高風險写入",
      "n0076": "Agent 运行時",
      "n0077": "Allowlist 工具清單",
      "n0078": "Axum + Tokio；需 cargo build 下载 crates（需外網）",
      "n0079": "Axum 範本：cargo build --release 需外網 crates.io",
      "n0080": "Binlog 保留（天）",
      "n0081": "Binlog 保留（秒）",
      "n0082": "Binlog 格式",
      "n0083": "Bootstrap 第一個节点（僅一次）",
      "n0084": "Bot 扫描",
      "n0085": "CLI 啟用 OPcache",
      "n0086": "CONFIG SET databases 未成功（可能需重啟後生效）",
      "n0087": "CPU 配額須為 1–10000",
      "n0088": "Cloudflare UA 未成功",
      "n0089": "Cloudflare Under Attack 已請求",
      "n0090": "Cookie Secure（僅 HTTPS）",
      "n0091": "DB index 必須為 0–15",
      "n0092": "DB 標記已隔離但 home 目录不存在",
      "n0093": "DB 標記已隔離但 id 找不到用户 — 請重新创建系統用户",
      "n0094": "DB_PASSWORD 為空 — 請在資源頁创建 MySQL 後填入或設 WP_DB_* 環境變數",
      "n0095": "DDoS 啟發式",
      "n0096": "DKIM 公鑰",
      "n0097": "DMARC 政策",
      "n0098": "DNS written ≠ 公網 resolver 立即生效（受 TTL／上游快取影響）",
      "n0099": "DS 在 registrar 發佈前，請勿宣稱已上線。",
      "n0100": "Django 骨架：部署時 pip install django/gunicorn",
      "n0101": "Down 需 confirmName 等於接口名",
      "n0102": "EmailService 無 dataDir — 只寫数据库（需 dataDir 才建 Maildir）",
      "n0103": "FPM 重载失败",
      "n0104": "FTPS 需要域名",
      "n0105": "FastAPI + uvicorn；requirements.txt；/ 與 /health",
      "n0106": "Flask 最小 app.py；requirements.txt；/ 與 /health",
      "n0107": "GTID 模式：兩邊 conf 已開 gtid_mode=ON",
      "n0108": "Galera 僅支援 mariadb 引擎",
      "n0109": "Git URL 无效",
      "n0110": "GitHub package.json 缺少 version",
      "n0111": "GitHub release 缺少 tag",
      "n0112": "Go 运行时",
      "n0113": "Go 多版本",
      "n0114": "HTTP conf with ACME webroot（尚未掛 TLS）",
      "n0115": "HTTP 基本認證失败",
      "n0116": "HTTPS 站点建議开启",
      "n0117": "IMAP／POP 登入失败",
      "n0118": "IP 准入政策未啟用（只影響查詢／enrich）",
      "n0119": "IP 无效",
      "n0120": "IPv4 前綴須 0–32",
      "n0121": "IPv6 前綴須 0–128",
      "n0122": "InnoDB 提交刷盤",
      "n0123": "InnoDB 日志檔大小",
      "n0124": "InnoDB 緩衝池",
      "n0125": "Install and publish via admin panel (Webmail 安装).",
      "n0126": "L7 爆量／异常流量",
      "n0127": "LLM 回應格式异常（缺少安全標記）",
      "n0128": "Let’s Encrypt HTTP-01 需要 80 可達；DNS-01 則需 API token。",
      "n0129": "LimitNOFILE 須為 64–10000000",
      "n0130": "MTU 須在 68–65535",
      "n0131": "MX 指向邮件主機名",
      "n0132": "MX 格式：優先級 主機（例如 10 mail.example.com.）",
      "n0133": "MariaDB 服务器",
      "n0134": "MariaDB 特有：one-thread-per-connection / pool-of-threads",
      "n0135": "MySQL 服务器",
      "n0136": "MySQL/MariaDB 客户端",
      "n0137": "NetworkManager 不可用，无法写入 DNS",
      "n0138": "Nginx 收緊限速（約 8 req/s）",
      "n0139": "Nginx 極嚴限速（約 3 req/s）",
      "n0140": "Nginx 溫和限速（約 20 req/s）",
      "n0141": "Node 多版本",
      "n0142": "Node 安装失败",
      "n0143": "Node.js 起步",
      "n0144": "OPcache 内存（MB）",
      "n0145": "PHP docroot + wp-config 範例（核心需另下载）",
      "n0146": "PHP 多版本",
      "n0147": "PHP 进程启动後未取得进程編號",
      "n0148": "PHP 隔離 degraded — 未以项目 Linux 用户（需 root + 创建系統用户）",
      "n0149": "PID 必須為正整數",
      "n0150": "PID 无效",
      "n0151": "PING 成功",
      "n0152": "PM2 启动失败 — 改用 pidfile 启动",
      "n0153": "PM2 进程管理",
      "n0154": "POST 體積上限",
      "n0155": "Per-sender：依 envelope sender domain 計 msgs/hour；超限 DEFER_IF_PERMIT",
      "n0156": "Postfix suspend map 已应用（check_recipient_access REJECT）",
      "n0157": "PostgreSQL 服务器",
      "n0158": "PostgreSQL 服务器尚未安装",
      "n0159": "PostgreSQL 客户端",
      "n0160": "PostgreSQL 服务未运行",
      "n0161": "PowerDNS 工具",
      "n0162": "Primary：创建 replication 用户（SQL 腳本）",
      "n0163": "Python Django（骨架）",
      "n0164": "Python 多版本",
      "n0165": "Python 行为",
      "n0166": "RDB 快照规则",
      "n0167": "RDB 檔名",
      "n0168": "RUSTFLAGS（构建）",
      "n0169": "Redis dbIndex 須為 0–15",
      "n0170": "Redis dump 需要 YSK_EXECUTE=1",
      "n0171": "Redis 服务器",
      "n0172": "Redis 服务器尚未安装或无法连接",
      "n0173": "Redis 启动後仍无法 PING",
      "n0174": "Redis 客户端",
      "n0175": "Redis 已启动",
      "n0176": "Redis 还原需要 YSK_EXECUTE",
      "n0177": "Renewal via certbot.timer（dns-01 續期需自動化插件）",
      "n0178": "Rust 构建／运行",
      "n0179": "S3 bucket/path 未设置",
      "n0180": "SFTP .ssh chown 需 root + YSK_EXECUTE",
      "n0181": "SIGKILL 需 confirmKill: true",
      "n0182": "SMTP 濫用／暴力",
      "n0183": "SPF 政策",
      "n0184": "SRV 建議格式：priority weight port target",
      "n0185": "SSH 暴力破解",
      "n0186": "SSH 连接失败",
      "n0187": "SSH 需要 YSK_EXECUTE=1",
      "n0188": "SSO 已验证（單次）· 含自動登入密码",
      "n0189": "SSO 已验证（單次）· 無密码",
      "n0190": "SST=mariabackup：各节点需 mariadb-backup",
      "n0191": "Session 保存方式",
      "n0192": "Session 嚴格模式",
      "n0193": "Session 存活秒數",
      "n0194": "TCP 連接 (inuse)",
      "n0195": "TOTP 确认成功",
      "n0196": "TasksMax 須為 1–1000000",
      "n0197": "UFW 未安装",
      "n0198": "UFW 状态读取失败",
      "n0199": "VACUUM 工作程序數",
      "n0200": "WAL 等級",
      "n0201": "Web + 邮件",
      "n0202": "Web UI:  找不到 (build apps/web or set YSK_WEB_ROOT)\\n",
      "n0203": "Web 主機",
      "n0204": "Web 接口建置",
      "n0205": "WebAuthn 註冊验证失败",
      "n0206": "WebDAV 未啟用",
      "n0207": "Webmail 域名无效",
      "n0208": "Wildcard／dns-01：certbot 需手動 TXT；面板會启动流程但 DS/TXT 需於 DNS 提供商完成",
      "n0209": "WordPress（PHP 骨架）",
      "n0210": "YSK PHP OK — WordPress 尚未安装\\\\n",
      "n0211": "YSK_EXECUTE 已开但进程非 root — 部分 systemctl／nginx reload 会被 blocked",
      "n0212": "YSK_EXECUTE 已开启",
      "n0213": "YSK_EXECUTE 未开 — written ≠ applied",
      "n0214": "YSK_EXECUTE 未开 — 应用到系统的操作会被 blocked",
      "n0215": "access log 解析失败",
      "n0216": "access=fleet 需要 fleetAgentId",
      "n0217": "action 須為 reboot | poweroff | cancel",
      "n0218": "apex + www（多 edge 預留）+ cdn 主機名佔位",
      "n0219": "apex CNAME 在多數授權服务器不建議／不相容",
      "n0220": "app.py 已存在 — 已略過",
      "n0221": "applied ≠ healthy — 請跑 probe 确认 wsrep",
      "n0222": "apply 後需 reload sshd；错误 Match 可能鎖死 — 先 dry-run",
      "n0223": "applySystem 已傳但本次無 suspend/autoreply 变更",
      "n0224": "apply_status=written（控制面成功 ≠ 系統 MTA 已生效；加 applySystem:true 先应用）",
      "n0225": "apps/web/dist 已存在",
      "n0226": "apt list --upgradable：無輸出（可能無更新或 apt 未就绪）",
      "n0227": "apt 安装失败",
      "n0228": "apt-get 可用",
      "n0229": "auto vacuum 关闭",
      "n0230": "blocked: 需要 HostExecutor + YSK_EXECUTE=1",
      "n0231": "bootstrap 中止：Node 失败",
      "n0232": "bootstrap 中止：apt 失败",
      "n0233": "bootstrap 關鍵步驟失败",
      "n0234": "candidateVersion 含非法字符",
      "n0235": "cargo 可执行檔",
      "n0236": "certbot exit 0 — 检查 /etc/letsencrypt/live/",
      "n0237": "chown 需要 YSK_EXECUTE + root",
      "n0238": "clone 前已清除佔位應用檔（YSK scaffold / stub）",
      "n0239": "cluster_size 未知或 0",
      "n0240": "command 含 ysk-server / ysk-server 特徵",
      "n0241": "control plane 文件不完整",
      "n0242": "cwd 不可讀",
      "n0243": "dataDir 不存在",
      "n0244": "dataDir 缺 ysk.json — 控制面状态不完整",
      "n0245": "dataDir/email 已存在",
      "n0246": "dataDir/web 已存在",
      "n0247": "database 找不到",
      "n0248": "db-util（FTP 账户库）",
      "n0249": "deployNode 只適用於 Node 项目",
      "n0250": "df 無可用 mount（或全被過濾）",
      "n0251": "dig 不可用，改用 node dns",
      "n0252": "dig 無答案（NXDOMAIN 或空）",
      "n0253": "dns-01：面板唔代填公網 TXT — 完成後再「分發 SSL」",
      "n0254": "dnssec-dsfromkey 未能產生 DS",
      "n0255": "dnssec-keygen 不在 PATH（apt install bind9-dnsutils）",
      "n0256": "dnssec-keygen 失败",
      "n0257": "dnssec-signzone 不可用 — 只保留密钥／DS",
      "n0258": "dnssec-signzone 未產生 .signed 檔",
      "n0259": "domain 必填",
      "n0260": "domain 找不到",
      "n0261": "dovecot reload 失败或服务未裝（sieve 檔已寫；唔標假 reload 成功）",
      "n0262": "预览试行机群派送（未入队列）",
      "n0263": "dry-run peer push 計劃（未 scp）",
      "n0264": "dry-run remote install（未 ssh）",
      "n0265": "dry-run transfer 完成（略過 full bootstrap）",
      "n0266": "dry-run — pass apply/execute 才寫 home 檔",
      "n0267": "dry-run — pass apply/execute 才真正 ssh",
      "n0268": "dry-run — 未写入 /etc",
      "n0269": "dry-run 默认：加 --execute 先应用 ufw",
      "n0270": "dry-run：inventory + preflight 通过，未 package/transfer",
      "n0271": "dry-run：僅探测／計劃。加 --execute 且 YSK_EXECUTE=1 先真正 provision",
      "n0272": "dry-run：已写入管理檔（dataDir）。加 execute + YSK_EXECUTE=1 + root 先裝系統 drop-in",
      "n0273": "dry-run：未封禁。加 --execute 且 YSK_EXECUTE=1 先真正 ban",
      "n0274": "dry-run：未解封。加 --execute 且 YSK_EXECUTE=1 先真正 unban",
      "n0275": "dryRun=true — 不實際变更 API",
      "n0276": "dryRun：未写入磁盘",
      "n0277": "dump 已写入 dataDir，尚未 transfer",
      "n0278": "enable 失败",
      "n0279": "execute 模式（仍需 YSK_EXECUTE=1 + root）",
      "n0280": "execute 需要 enqueue 回調",
      "n0281": "export 僅限 admin",
      "n0282": "fail2ban 应用指令失败",
      "n0283": "fail2ban 服务",
      "n0284": "fail2ban 未 active",
      "n0285": "fail2ban 未在跑",
      "n0286": "fail2ban 活躍封禁",
      "n0287": "fail2ban 状态读取失败",
      "n0288": "fail2ban：sshd、nginx-http-auth 等標準 jail",
      "n0289": "fd 計數不可用",
      "n0290": "files（文件）",
      "n0291": "fleet purge blocked — 需 enqueue 或 SSH",
      "n0292": "fleet 成員請用 db-cluster fleet --op probe --execute",
      "n0293": "fromPanel 僅限 admin",
      "n0294": "fromPanel 需要先 step-up：POST /api/v1/auth/totp/step-up",
      "n0295": "fullchain 必須是 PEM 证书",
      "n0296": "gateway 須為純 IP",
      "n0297": "geo apex：無 EDNS 時写入所有 geo 健康 edge 的 multi-A（唔係真·用户就近 Anycast）",
      "n0298": "geoMap 內無健康 edge — 回退全部健康 edge",
      "n0299": "geo：未设置 geoMap — 等同 multi_a（全部健康 edge）。請在站点 dns.geoMap 填 region→nodeIds",
      "n0300": "git binary 找不到 on PATH",
      "n0301": "git 可执行檔",
      "n0302": "go 可执行檔",
      "n0303": "healthUrl 必須是 http(s) URL",
      "n0304": "http-01 webroot — 需 80 端口可達且 ACME conf 已 fan-out",
      "n0305": "identity 未綁定 linuxUser/project — 无法寫 authorized_keys",
      "n0306": "ignoreip 來源：dataDir/fail2ban/ignoreip.txt",
      "n0307": "index.html + CSS，供 Nginx root 或靜態部署",
      "n0308": "install conf → systemctl restart mariadb（非 bootstrap 节点）",
      "n0309": "ip -j addr 無接口",
      "n0310": "job 無 manifest",
      "n0311": "journal 來源；實際可讀性視权限",
      "n0312": "journalctl 可能需要 root 或使用者在 systemd-journal／adm 組",
      "n0313": "key 不存在",
      "n0314": "key 不存在或未删除",
      "n0315": "kill -0 仍成功：進程可能為 zombie 或权限不足",
      "n0316": "kill -0 失败",
      "n0317": "last_apply applied 但 blocked",
      "n0318": "last_apply 同時 ok=true 與 blocked（不誠實）",
      "n0319": "local cache 目录空／新建",
      "n0320": "localhost 或 *",
      "n0321": "logical DB 0 … N-1；改後需重啟",
      "n0322": "logrotate 已安装",
      "n0323": "logrotate 未安装或不在 PATH",
      "n0324": "main.py 已存在 — 已略過",
      "n0325": "manage.py + minimal settings/urls/wsgi；需 pip install django",
      "n0326": "manifest 無 dumpRelPath — 未打包？",
      "n0327": "manifest 無 rdbRelPath",
      "n0328": "memoryMax 格式須如 512M 或 1G",
      "n0329": "migrate host 需 --execute + YSK_EXECUTE=1，或 --dry-run（僅 inventory+preflight）",
      "n0330": "migrate post 需 --execute 且 YSK_EXECUTE=1（在目標機执行）",
      "n0331": "migrate post 需要 YSK_EXECUTE=1",
      "n0332": "migrate post 需要 YSK_EXECUTE=1（應在目標機执行）",
      "n0333": "minimal bootstrap 失败",
      "n0334": "mysql 用户端",
      "n0335": "mysql-replica 僅支援 mysql 引擎",
      "n0336": "mysql_databases 列缺 name",
      "n0337": "named-checkzone 不在 PATH — 檔已写入，語法未验证",
      "n0338": "nginx -t 或 reload 失败",
      "n0339": "nginx -t 未通过，未重载",
      "n0340": "nginx reload ok · 状态：applied",
      "n0341": "nginx reload 失败",
      "n0342": "nginx 可执行檔",
      "n0343": "nginx 执行層已关闭（enforce.nginx=false）",
      "n0344": "nginx 服务",
      "n0345": "nice 須在 -20（最高優先）至 19（最低）",
      "n0346": "node 可执行檔",
      "n0347": "npm latest 缺少版本信息",
      "n0348": "npm 指令 exit 0 但仍找不到 binary — 软件包可能未提供 CLI 或 PATH 未更新",
      "n0349": "nullok 避免未寫檔用户被鎖",
      "n0350": "nullok：無 .google_authenticator 的用户仍可用 key 登入",
      "n0351": "open_basedir 路径限制",
      "n0352": "openssl 不可用，改用 YSK-SCRYPT 雜湊",
      "n0353": "openssl（信箱雜湊）",
      "n0354": "optionalEtc 失败不中止 transfer（可於目標重簽证书）",
      "n0355": "origin shield：此节点為 shield，直接連 origin",
      "n0356": "origin.kind 必須是 project 或 url",
      "n0357": "origin.project 需要 projectId",
      "n0358": "origin.url 必須是 http(s) URL",
      "n0359": "originShieldNodeId 必須在 edgeNodeIds 內",
      "n0360": "package dump 未完成 — 禁止 transfer",
      "n0361": "package 失败 — 不得進入 transfer",
      "n0362": "package 需要 YSK_EXECUTE=1",
      "n0363": "pam.d/sshd 尚未引用 pam_google_authenticator（檔寫了也未 enforce）",
      "n0364": "panel 尚未设置 2FA 或无 secret — 请先在「我的安全」启用 TOTP",
      "n0365": "panel 無 TOTP secret — 先在 Web 啟用 2FA 或勿用 --from-panel",
      "n0366": "panel 需把 login 失败写入可被 fail2ban 讀的 log（journal 或檔）",
      "n0367": "passkey 已登记",
      "n0368": "passkey 验证失败",
      "n0369": "passkey 验证成功",
      "n0370": "pdnsutil 找不到 — install PowerDNS tools or run helper script as root after install",
      "n0371": "peer SSH probe 需 YSK_EXECUTE=1（已只做本機）",
      "n0372": "peer 未探测（只 probe 本機）",
      "n0373": "peer 节点仍需各自应用 conf 並 join",
      "n0374": "php binary 找不到 — install php-cli",
      "n0375": "php 可执行檔",
      "n0376": "php 未在 PATH",
      "n0377": "pidfile 以控制面用户启动（degraded）",
      "n0378": "pidfile 启动未取得 pid",
      "n0379": "pm2 不在 PATH（仍可用 pidfile／systemd）",
      "n0380": "pm2 找不到 on PATH — install: npm i -g pm2",
      "n0381": "post-transfer 停在 reapply",
      "n0382": "post-transfer 停在 restore",
      "n0383": "postconf 未能确认 message_rate_limit（唔當完整 applied）",
      "n0384": "postgres-replica 僅支援 postgres",
      "n0385": "postgres_databases 列缺 name",
      "n0386": "postqueue 不可用或邮件堆疊未安装",
      "n0387": "preflight 失败",
      "n0388": "primary 無 binlog / MASTER STATUS 空",
      "n0389": "privkey 必須是 PEM 私鑰",
      "n0390": "productionReady 未達標（資料可能已齊）",
      "n0391": "ps 輸出無進程列",
      "n0392": "ps 降级：無 --sort／精簡字段",
      "n0393": "ps 降级：無 pri/vsz/stat 等欄",
      "n0394": "psql 用户端",
      "n0395": "purge 全部失败或無目標",
      "n0396": "python3 可执行檔",
      "n0397": "queued ≠ edge 已 purge",
      "n0398": "queued ≠ edge 已 reload — agent 需拉取並执行 cdn.edge.apply",
      "n0399": "queued ≠ edge 已执行 — Agents 纪录看 exit/JSON",
      "n0400": "realpath 快取大小",
      "n0401": "realpath 快取秒數",
      "n0402": "reapply 需要 YSK_EXECUTE=1",
      "n0403": "redis 集群僅支援 redis",
      "n0404": "registry shasum 非 sha256（npm 常用 sha1）— 以 npm integrity 為準",
      "n0405": "reload/restart 失败",
      "n0406": "remote post 失败 — 可於目標機手動 migrate post",
      "n0407": "restic 增量备份完成（written/applied 視 restic exit）",
      "n0408": "restic 已啟用但未设置 password — 拒绝使用內建默认密码（請在备份设置填寫）",
      "n0409": "restic 未啟用",
      "n0410": "restic 未啟用 — 无法列出 snapshots",
      "n0411": "restic 未啟用 — 請先在「遠端／排除」开启並设置 password",
      "n0412": "restic 未启用（仅 tar）",
      "n0413": "restic 未啟用（略過增量）",
      "n0414": "restic 未安装（不在 PATH），請於系統安装 restic 後再試",
      "n0415": "restore ok；略過 reapply/verify",
      "n0416": "restore 完成",
      "n0417": "restore 有失败項",
      "n0418": "restore 未完全成功",
      "n0419": "restore 需要 YSK_EXECUTE=1",
      "n0420": "restore+reapply ok；略過 verify",
      "n0421": "rsync dataDir 失败",
      "n0422": "rsync 需要 YSK_EXECUTE=1",
      "n0423": "scp 已写入但无法 reload：遠端無 rndc/named/bind9/pdns",
      "n0424": "scp 成功 ≠ peer 已 restart / 已 join",
      "n0425": "secrets key 可用",
      "n0426": "secrets master key 存在",
      "n0427": "sentinel 模式但未登记 sentinel 角色成員",
      "n0428": "sentinel：INFO replication 僅作參考；請查 sentinel masters",
      "n0429": "server IP 必須是 IPv4",
      "n0430": "server IPv6 无效",
      "n0431": "setquota 不在 PATH — 僅控制面軟配額（deploy 前 du 擋）",
      "n0432": "shell 路径无效",
      "n0433": "signal 必須為 TERM | KILL | HUP | USR1",
      "n0434": "ssh true 成功 → verified",
      "n0435": "sshd keyboard-interactive / challenge-response 似已开启",
      "n0436": "sshd 可能未開 KbdInteractiveAuthentication — TOTP 无法在 SSH 提示",
      "n0437": "sshpass 可用（密码登入）",
      "n0438": "strict Match 僅針對已寫檔用户（password off）",
      "n0439": "symlink 指向敏感路径",
      "n0440": "symlink 逃出 log 目录",
      "n0441": "symlink 逃出项目 home",
      "n0442": "systemctl 指令失败",
      "n0443": "systemd 啟用失败 — 改試 PM2／pidfile",
      "n0444": "systemd 啟用未能执行：需要系統变更权限與管理员",
      "n0445": "target 格式：user@host 或 user@host:port",
      "n0446": "token 已使用",
      "n0447": "token 已過期",
      "n0448": "top -b 不可用（進程表仍以 ps 為準）",
      "n0449": "transfer 中止：dataDir rsync 失败",
      "n0450": "transfer 中止：无法创建遠端目录",
      "n0451": "transfer 完成（略過 full bootstrap）",
      "n0452": "transfer 已完成，但目標 restore/reapply/verify 失败",
      "n0453": "transfer 有失败項",
      "n0454": "transfer 校驗失败",
      "n0455": "transfer 需要 YSK_EXECUTE=1",
      "n0456": "transfer/bootstrap 失败",
      "n0457": "ufw 指令执行失败",
      "n0458": "unit 與 action 必填",
      "n0459": "useradd 需要 YSK_EXECUTE + root",
      "n0460": "value 過大（上限 256KB）",
      "n0461": "verify 有關鍵不一致",
      "n0462": "verify 未通过 — 不得視為遷移完成",
      "n0463": "verify 通过 — job=done",
      "n0464": "vsftpd 启动失败",
      "n0465": "vsftpd 未能成功启动",
      "n0466": "weighted: 無 edge",
      "n0467": "wp-config.php 已存在 — 已略過",
      "n0468": "written ≠ Dovecot Pigeonhole 已加载 — 需 ManageSieve 或 symlink 到 user sieve",
      "n0469": "written ≠ Roundcube 已加载 — 用 enableSystem 或手動 symlink",
      "n0470": "已写入不等于已套用：需同步到系统 conf.d，并通过 nginx 检查后重新加载",
      "n0471": "written ≠ 公開可連 — 需 reverse proxy 到面板 /webdav",
      "n0472": "written ≠ 線上进程已重载",
      "n0473": "ysk-server CLI 安装失败 — 可稍後手動 npm i -g ysk-server",
      "n0474": "ysk-web 群組供 Nginx/www-data 讀靜態（非 world-readable）",
      "n0475": "ysk-web 群組需 YSK_EXECUTE + root（靜態 Nginx 可能无法讀 750 home）",
      "n0476": "ysk.json fingerprint 已變（可能 reapply 寫回）local≠source",
      "n0477": "ysk.json fingerprint 與來源一致",
      "n0478": "ysk.json fingerprint 與來源不同（若只清了 bind_ip 屬預期）",
      "n0479": "ysk.json 存在",
      "n0480": "ysk.json 校驗失败",
      "n0481": "zone apply blocked（無 EXECUTE）— 记录已更新於控制面",
      "n0482": "zone rectify 完成",
      "n0483": "zone 名稱无效",
      "n0484": "zone 找不到",
      "n0485": "zone 解析失败",
      "n0486": "一般查詢日志",
      "n0487": "一鍵安装",
      "n0488": "一鍵创建完成（draft 資源請到各頁「应用」）",
      "n0489": "上传與 POST",
      "n0490": "上次全部备份有失败",
      "n0491": "下一步：写入 conf → 应用 edges → DNS 同步（及可選 SSL）",
      "n0492": "下一步：將 PAM 片段併入 /etc/pam.d/sshd（nullok）",
      "n0493": "下一步：系統安装 libpam-google-authenticator + 合併 PAM 片段（見下方）",
      "n0494": "不可删除沙箱根目录",
      "n0495": "不可删除沙箱根目录或回收桶路径",
      "n0496": "不存在",
      "n0497": "不支援此操作方法",
      "n0498": "不支援的訊號（只允许 TERM / KILL / HUP / USR1）",
      "n0499": "不是資料夾",
      "n0500": "不能删除最後一個 admin",
      "n0501": "中繼埠號无效",
      "n0502": "中繼已应用到系統",
      "n0503": "中繼设置已写入 dataDir（应用到系統需开启系統变更）",
      "n0504": "主机 memory 使用率超过 90%",
      "n0505": "主機指標",
      "n0506": "主要内存快取，通常為 RAM 50–70%",
      "n0507": "二进制不在 PATH，服务无法就绪",
      "n0508": "二進制日志",
      "n0509": "互動超时（秒）",
      "n0510": "人必須做：雲防火墙、邮件 PTR/rDNS、舊機保留觀察期",
      "n0511": "今日已自動 vacuum",
      "n0512": "仍需到 Cron 頁「安装到系統 crontab」才會真正生效",
      "n0513": "以 Nginx root 或「靜態部署」提供 public/",
      "n0514": "以 root 启动 ysk-server 服务（systemctl / 控制面 unit）",
      "n0515": "以 root 启动並设置 YSK_EXECUTE=1（見主機设置／部署文件）",
      "n0516": "以控制面用户执行指令（degraded — 非项目 Linux 用户）",
      "n0517": "任意 shell — 默认拒绝",
      "n0518": "服务器字符集",
      "n0519": "服务器尚未安装對應程式（command -v 無結果）",
      "n0520": "服务器排序规则",
      "n0521": "服务器未安装 MySQL 客戶端",
      "n0522": "服务器未安装 PostgreSQL 客戶端",
      "n0523": "服务器未安装 Redis 客戶端",
      "n0524": "服务器未安装必要元件，无法在管理面板完成此操作",
      "n0525": "服务器未开启 YSK_EXECUTE",
      "n0526": "服务器未开启系統变更权限或缺少 root，无法在管理面板完成安装",
      "n0527": "服务器未开启系統变更权限，无法匯出 Redis",
      "n0528": "服务器未开启系統变更权限，无法在管理面板下载安装 Webmail",
      "n0529": "服务器未开启系統变更权限，无法完成应用",
      "n0530": "服务器未开启系統变更权限，无法创建 SSH 连接",
      "n0531": "服务器未开启系統变更权限，无法打包 dump",
      "n0532": "服务器未开启系統变更权限，管理面板无法完成系統層操作",
      "n0533": "服务器未开启系統变更权限：已写入管理檔，无法 named-checkzone / reload",
      "n0534": "服务器監聽埠",
      "n0535": "佇列為空",
      "n0536": "位元碼快取",
      "n0537": "使用 YSK-SCRYPT 後備雜湊（生產環境建議改為 openssl 雜湊）",
      "n0538": "使用 YSK_SECRETS_KEY",
      "n0539": "使用 baseUrl/.ysk-cdn-health 默认探活路径（C2 可裝 health location）",
      "n0540": "使用呼叫端指定版本（latestOverride）",
      "n0541": "使用環境變數 YSK_LATEST_VERSION（離線／測試覆蓋）",
      "n0542": "來源不可用",
      "n0543": "來源缺 mysqldump — package 階段將无法匯出 MySQL",
      "n0544": "來源缺 pg_dump — package 階段將无法匯出 Postgres",
      "n0545": "來源缺 redis-cli — package 階段將无法匯出 Redis RDB",
      "n0546": "來源缺 sshpass",
      "n0547": "來源需要 rsync（未安装）",
      "n0548": "來源預檢未通过",
      "n0549": "來源預檢通过",
      "n0550": "例如 128M、256M、512M、-1（無限）",
      "n0551": "例如 512MiB；留空不设",
      "n0552": "例如 900 1 300 10；空字串关闭",
      "n0553": "例：--member 10.0.0.3=replica:fleet:SESSION_UUID",
      "n0554": "供應商 = ASN（自治系統），非消費品牌名",
      "n0555": "保持 22/80/443；受攻擊時可手動關非必要埠",
      "n0556": "保留策略：最近 10 份",
      "n0557": "保護 ysk-server process.pid",
      "n0558": "保護模式",
      "n0559": "偵測到 pam_google_authenticator 模組",
      "n0560": "备份 tar 成功但远端／restic 有问题",
      "n0561": "僅 admin",
      "n0562": "僅 admin 可 impersonate",
      "n0563": "僅 admin 可执行整機電源操作",
      "n0564": "僅 apex A",
      "n0565": "已列出托管配置（未写入系统）",
      "n0566": "僅写入 PM2 设置，未启动程序",
      "n0567": "僅写入管理檔（未要求重载）",
      "n0568": "僅写入管理设置 — 就绪後再發布並重载",
      "n0569": "僅写入範本（未要求 enable）",
      "n0570": "僅控制面登记（apply:false）；密码只回傳一次",
      "n0571": "僅支援 postgres + postgres-replica",
      "n0572": "僅支援 redis + redis-replica|redis-sentinel",
      "n0573": "僅有磁盘佔用粗估，唔係 HIT 比率",
      "n0574": "僅見 stub resolv（127.0.0.53）；實際上行 DNS 請看 resolvectl",
      "n0575": "僅警告，可繼續",
      "n0576": "儀表為控制面彙總；公網流量／真實 CDN 命中率需 edge access log 含 cache status",
      "n0577": "保存後會於下次部署写入 systemd Environment / 进程 env",
      "n0578": "允许 URL include",
      "n0579": "允许 URL 當文件開",
      "n0580": "允许上传文件",
      "n0581": "免費最高細分：國家 + 省／州 + 城市（enrich）+ ASN；城市政策默认關",
      "n0582": "全部 edge fan-out applied",
      "n0583": "全部 edge fan-out 失败",
      "n0584": "全部 edge purge 成功",
      "n0585": "全部 peer nameserver 已 reload",
      "n0586": "全部 peer reload 失败 — 文件可能已在磁盘但權威未刷新",
      "n0587": "全部 peer 失败",
      "n0588": "全部 peer：zone 已推送並 remote reload 成功",
      "n0589": "全部成功",
      "n0590": "全部略过（没有可备份的 home）— 不视为失败",
      "n0591": "共享緩衝",
      "n0592": "共用同一 RDB，已还原",
      "n0593": "其他运行期变量",
      "n0594": "其他常用",
      "n0595": "分享不存在或已過期",
      "n0596": "分數極高 — 建議人手应用「緊急」檔（永不自動）",
      "n0597": "分数极高 — 紧急档需人手确认（永不自动）",
      "n0598": "列出目录",
      "n0599": "列出进程",
      "n0600": "删除 default 路由需 confirmDefault: true",
      "n0601": "删除文件或目录",
      "n0602": "删除系統用户 — 默认拒绝",
      "n0603": "删除被阻擋：未开启系統变更权限，且路径在管理資料目录外",
      "n0604": "到 fail2ban 頁应用並 enable 服务",
      "n0605": "到封禁頁一鍵开启（soft／normal）",
      "n0606": "加固",
      "n0607": "匯出不存在或已過期",
      "n0608": "受攻擊",
      "n0609": "另開 21 與 PASV 段",
      "n0610": "只寫管理檔",
      "n0611": "可应用系統",
      "n0612": "可手動打包 dataDir/clusters/<id>/",
      "n0613": "可查看设置；安装／重启／写入系统设置需要系统变更权限",
      "n0614": "可考慮切回「日常」或「加固」",
      "n0615": "可選安装 pm2：npm i -g pm2",
      "n0616": "可選：SSL、WP-CLI、外掛",
      "n0617": "同步账户",
      "n0618": "否則只允许还原到 .restic-restore-* 安全目录",
      "n0619": "启动、停止、重启、开机自启",
      "n0620": "启动进程後未取得进程編號",
      "n0621": "啟用 OPcache",
      "n0622": "啟用 SSL",
      "n0623": "啟用中",
      "n0624": "單一文件上限",
      "n0625": "單次最多文件數",
      "n0626": "單节点有 wsrep，但 HA 需 ≥2 节点",
      "n0627": "在「資源」创建 MySQL（或填入現有 DB）並設 WP_DB_* 環境變數",
      "n0628": "域名尚無郵箱 — 只保留 domain-level vacation 草稿",
      "n0629": "域名无效",
      "n0630": "域名状态：active（控制面旗標）",
      "n0631": "域名状态：suspended（控制面旗標；唔等於 Postfix 已拒信）",
      "n0632": "端口、绑定、连接上限",
      "n0633": "埠检查异常",
      "n0634": "运行时",
      "n0635": "执行緒模型",
      "n0636": "壓縮檔唔支援預覽（.gz 等）",
      "n0637": "壞 Bot",
      "n0638": "外網探测",
      "n0639": "失控時最後手段",
      "n0640": "软件包名不合法",
      "n0641": "软件包安装未能执行：需要系統变更权限",
      "n0642": "软件包更新需要系統管理员权限",
      "n0643": "应用到 vsftpd",
      "n0644": "应用到系統",
      "n0645": "应用防護檔只會寫管理檔；需 YSK_EXECUTE=1 + root 才 applied",
      "n0646": "威脅已回落",
      "n0647": "字串 intern 緩衝（MB）",
      "n0648": "存取密码",
      "n0649": "存在错误級問題，請修正後再 apply",
      "n0650": "安全 → 我的安全 → 启用 2FA；政策可开 requireAdminTotp",
      "n0651": "安全與路径",
      "n0652": "安装 PAM",
      "n0653": "安装 vsftpd",
      "n0654": "安装失败",
      "n0655": "安装软件包",
      "n0656": "安装完成",
      "n0657": "安装步驟",
      "n0658": "安装系統设置",
      "n0659": "完整",
      "n0660": "客戶端闲置超时",
      "n0661": "密码加密",
      "n0662": "密码只出現在 SQL 腳本佔位符 CHANGE_ME",
      "n0663": "密码已以 crypt 雜湊保存（唔存明文）",
      "n0664": "密码為空",
      "n0665": "密码登入需要 sshpass",
      "n0666": "密码登入需要本機安装 sshpass",
      "n0667": "密码至少需要 8 字符",
      "n0668": "密码過短（至少 8 字）— 郵箱已创建但未写入雜湊",
      "n0669": "密码需由安全管道设置",
      "n0670": "审批仍在等待中",
      "n0671": "审批動作與請求不符",
      "n0672": "审批已被拒绝",
      "n0673": "写入 NODE_OPTIONS=--max-old-space-size=N",
      "n0674": "写入 Nginx 限速 drop-in",
      "n0675": "写入 home 檔 ≠ PAM 已生效",
      "n0676": "写入失败",
      "n0677": "写入账户檔",
      "n0678": "写入文件",
      "n0679": "封存模式",
      "n0680": "將片段 Include 到 sshd_config，或 POST /api/v1/sftp/sshd-snippet/apply 安装",
      "n0681": "项目 Linux 用户隔離",
      "n0682": "项目 id 必填",
      "n0683": "项目 id 无效，无法產生 home",
      "n0684": "项目 id 過短，无法產生系統用户名",
      "n0685": "项目 internal-sftp Match 用户通常唔走 interactive shell — TOTP 主要影響 SSH shell/scp",
      "n0686": "项目 managed log 无效",
      "n0687": "项目不存在",
      "n0688": "项目不存在或未设置 home",
      "n0689": "项目名稱无法產生有效系統用户名",
      "n0690": "项目已恢復",
      "n0691": "项目已暫停（503）",
      "n0692": "项目创建失败，已中止",
      "n0693": "项目沒有 domain — 請先设置主域名",
      "n0694": "项目無 linux_user",
      "n0695": "项目級 purge 目前清主機共用 nginx cache 目录（非 per-vhost zone）",
      "n0696": "项目缺少 linuxUser — 无法创建對齊隔離的 FTP 账户",
      "n0697": "项目缺少 linux_user",
      "n0698": "项目覆寫只填要改的鍵；空白＝沿用全域",
      "n0699": "项目詳情 → 資源 → 创建系統用户／遷移到 /home/ysk-server-{id}（需 YSK_EXECUTE + root）",
      "n0700": "對齊 jail 擁有權",
      "n0701": "尚未 os_provisioned",
      "n0702": "尚未下载 GeoIP 庫 — 請在防護中心「IP 准入」按更新",
      "n0703": "尚未分配埠，請先部署项目",
      "n0704": "尚未同步到系統 Nginx（僅管理檔）",
      "n0705": "尚未在服务器创建 Redis 資源，請确认 redis-cli、TCP 與 YSK_EXECUTE=1",
      "n0706": "尚未应用到 vsftpd 服务 — 請使用「应用」或 vsftpd 服务頁完成启动",
      "n0707": "尚未应用邮件域名",
      "n0708": "尚未建置 Web 接口 — 僅 API 模式",
      "n0709": "尚未有本地 GeoIP 庫 — 請更新",
      "n0710": "尚未產生 DNSSEC 密钥",
      "n0711": "尚未登记 CDN 节点",
      "n0712": "尚未登记 passkey",
      "n0713": "尚未确认維護窗（package 階段會停服）",
      "n0714": "尚未设置 LLM 连接",
      "n0715": "尚未加载 zone：請於管理面板重試",
      "n0716": "尚無 CDN 站点",
      "n0717": "尚无托管 Nginx 配置",
      "n0718": "尚無可用 HIT/MISS 抽樣 — overall hit-rate 未知",
      "n0719": "尚無项目",
      "n0720": "尚無產物 — 請先 plan",
      "n0721": "就绪",
      "n0722": "工作階段保存與 cookie",
      "n0723": "已 enable --now fail2ban",
      "n0724": "已 galera_new_cluster（bootstrap）",
      "n0725": "已 reload fail2ban",
      "n0726": "已 reload nginx",
      "n0727": "已 restart fail2ban",
      "n0728": "已 scp zone 檔（written on peer ≠ named reloaded）",
      "n0729": "已 scp 到 peer /tmp（written on peer ≠ service restarted）",
      "n0730": "已 systemctl reload nginx",
      "n0731": "已下载並解壓 Roundcube",
      "n0732": "已停用 UFW（警告：主機埠將直接暴露）",
      "n0733": "已保存项目 php.ini 覆寫；重新应用 FPM／部署後生效",
      "n0734": "已保存管理设置（未应用到系統服务）",
      "n0735": "已保存设置（未要求应用系統）",
      "n0736": "已删除",
      "n0737": "已删除 key · 重寫 authorized_keys",
      "n0738": "已删除集群登记；系統 conf 需人手清理（v1 不自動拆除）",
      "n0739": "已删除本機臨時密钥",
      "n0740": "已即時 ip addr add（设置檔已写入，重開應仍在）",
      "n0741": "已即時应用 databases（部分選項仍需重啟）",
      "n0742": "已取消排程關機／重啟",
      "n0743": "已同步到系統並重载",
      "n0744": "已启动",
      "n0745": "已啟用 HSTS",
      "n0746": "已启用 NTP 同步",
      "n0747": "已啟用 UFW",
      "n0748": "已啟用 WebDAV · Basic 用户 ysk · 密码為本次 token（只显示一次）",
      "n0749": "已啟用 systemd 服务",
      "n0750": "已嘗試 stop redis",
      "n0751": "已嘗試清除 nginx cache 目录並 reload（若主機未開 proxy_cache 則可能無檔可清）",
      "n0752": "已在服务器完成证书申請流程",
      "n0753": "已应用 CF-only UFW（origin 只收 CF + 保留埠）",
      "n0754": "已应用 fail2ban",
      "n0755": "已应用中繼设置到系統 Postfix",
      "n0756": "已应用到系統 Nginx",
      "n0757": "已应用防火墙规则",
      "n0758": "已安装並嘗試啟用 ysk-server.service",
      "n0759": "已安装到目前程序用户的系統 crontab",
      "n0760": "已写入 .google_authenticator（含 5 組 scratch codes）",
      "n0761": "已写入 rspamd multimap + postfix snippet",
      "n0762": "已写入安装腳本",
      "n0763": "已写入控制面；請用「应用限制到 OS」或重新 Deploy 写入 unit",
      "n0764": "已写入管理 jail.local（未要求应用系統）",
      "n0765": "已写入管理文件；尚未套用到系统 conf.d",
      "n0766": "已写入设置檔（未下载软件包）",
      "n0767": "已写入調校檔；重新部署项目後才會進線上进程",
      "n0768": "已寫管理檔，但未应用系統 conf：需 YSK_EXECUTE=1",
      "n0769": "已寫管理檔，但未应用系統 conf：需要 root",
      "n0770": "已封锁：無真實 candidateVersion",
      "n0771": "已封锁：需确认高風險更新",
      "n0772": "已封锁：需要管理员权限",
      "n0773": "已创建 DNSSEC 目录（僅說明檔）",
      "n0774": "已從",
      "n0775": "已從庫移除（disk install 未自動清除；用 uninstall --purge）",
      "n0776": "已從控制面移除；系統账号需手動 DROP USER（誠實：未自動 drop）",
      "n0777": "已從连接",
      "n0778": "已拒绝",
      "n0779": "已拒绝 by allowlist",
      "n0780": "已拒绝：無真實升級目標",
      "n0781": "已扫描 nginx access log 樣本",
      "n0782": "已於 MySQL/MariaDB 创建只讀用户",
      "n0783": "已於 PostgreSQL 创建只讀角色",
      "n0784": "已是最新版本（頻道已确认）",
      "n0785": "已暫停",
      "n0786": "已清空全部佇列",
      "n0787": "已清除 catch-all",
      "n0788": "已產生 DS 紀錄（請自行提交 registrar — 面板唔會自動發佈）",
      "n0789": "已產生加密备份（同一 dataDir master key 可解密）",
      "n0790": "已用 SHA512-CRYPT 雜湊密码（Dovecot）",
      "n0791": "已略過 Nginx 设置检查（未安装或未開系統变更权限）",
      "n0792": "已登记上传证书路径（文件置於 /etc/ysk-server/certs）",
      "n0793": "已知惡意 UA",
      "n0794": "已确认",
      "n0795": "已确认維護窗",
      "n0796": "已移除控制面登记",
      "n0797": "已移除登记紀錄",
      "n0798": "已符合意圖隔離，無需遷移",
      "n0799": "已裝版本 = apt Candidate，無可用升級",
      "n0800": "已复制到 /etc/fail2ban/jail.local",
      "n0801": "已退役（磁盘文件未自動刪；可 uninstall）",
      "n0802": "已送出立即重啟指令",
      "n0803": "已送出立即關機指令",
      "n0804": "已重啟 postgresql",
      "n0805": "已重啟 redis-server",
      "n0806": "已重啟 redis-server 以应用需重啟項目",
      "n0807": "已重啟（重载不支援）",
      "n0808": "已重新啟用连接（重開仍在）",
      "n0809": "已重渲染 TLS edge conf（控制面）",
      "n0810": "已重载 Nginx (static site live if DNS points here)",
      "n0811": "已重新加载 Nginx",
      "n0812": "已开启系統变更权限（YSK_EXECUTE）",
      "n0813": "已附一次性登入密码 — Roundcube 外掛可自動 login",
      "n0814": "账户已登记於管理面；需系統权限才能讓 FTP 服务生效",
      "n0815": "账号已解鎖 (usermod -U)",
      "n0816": "账号已鎖定 (usermod -L)",
      "n0817": "常見漏洞路径扫描",
      "n0818": "庫中無此 IP 记录",
      "n0819": "创建系統用户需要系統管理员权限",
      "n0820": "创建邮件域名並於詳情頁应用",
      "n0821": "建置完成",
      "n0822": "建議切換至「受攻擊」防護檔",
      "n0823": "建議检查 SSH 與非必要埠",
      "n0824": "建議緊急檔",
      "n0825": "建議至少 1 個 replica；而家計劃仍可產生 primary conf",
      "n0826": "建議至少 2 個节点（生產建議 3）；而家計劃仍可產生",
      "n0827": "建議开启 CDN Under Attack 模式",
      "n0828": "建議开启自動 ban",
      "n0829": "強制 HTTPS（HTTP→301）",
      "n0830": "強制安全傳輸",
      "n0831": "強制離線模式",
      "n0832": "恢復：控制面 status=active",
      "n0833": "慢查詢日志",
      "n0834": "慢查詢閾值（ms）",
      "n0835": "慢查詢閾值（秒）",
      "n0836": "证书申請失败",
      "n0837": "應 ≥ 單一文件上限",
      "n0838": "應设置保留策略清理舊备份",
      "n0839": "成功僅代表此 target 可 BatchMode 登入，≠ 全域授權",
      "n0840": "或整數如 32767",
      "n0841": "所需软件均已安装",
      "n0842": "打包被权限/工具阻擋",
      "n0843": "批量封禁",
      "n0844": "找不到 CLI binary — systemd 唔會 enable 成 silent placeholder",
      "n0845": "找不到 DNS zone — 請在站点 dns.zoneId 指定，或先创建匹配域名的 zone",
      "n0846": "找不到 PowerDNS 工具 — 請安装 pdns-server / pdns-tools",
      "n0847": "找不到 Roundcube plugins 目录 — 已寫骨架；請安装 Roundcube 或傳 roundcubePluginsDir",
      "n0848": "找不到 SQL 檔",
      "n0849": "找不到 Sieve 腳本",
      "n0850": "找不到 config.inc.php — 請手動: $config[\\'plugins\\'][] = \\'ysk_sso\\';",
      "n0851": "找不到 edge.conf — 請先渲染",
      "n0852": "找不到 key",
      "n0853": "找不到 migrate job",
      "n0854": "找不到 pm2 — 无法以 PM2 停止",
      "n0855": "找不到別名",
      "n0856": "找不到集群",
      "n0857": "找不到可 reload 的本機 nameserver（rndc/named/bind9/pdns）",
      "n0858": "找不到可用证书 — 請先於 SSL 頁上传，或执行 LE 簽發",
      "n0859": "找不到可用的 NetworkManager 连接",
      "n0860": "找不到回收項目",
      "n0861": "找不到實例",
      "n0862": "找不到项目 access log — 請确认 nginx access_log 路径或日志檔存在",
      "n0863": "找不到方案",
      "n0864": "找不到步驟",
      "n0865": "找不到版本",
      "n0866": "找不到节点",
      "n0867": "找不到数据库",
      "n0868": "拒绝",
      "n0869": "拒绝 down loopback",
      "n0870": "拒绝 renice 自身控制面進程",
      "n0871": "拒绝 systemctl enable：未安装真實 agent CLI（避免 placeholder 假 running）",
      "n0872": "拒绝修改 loopback 位址（保護）",
      "n0873": "拒绝删除 loopback 核心地址",
      "n0874": "拒绝覆寫 homeDir — 請設 overwriteHome + confirmPhrase 或改用安全目標目录",
      "n0875": "拒绝訊號 PID 1（init/systemd 保護）",
      "n0876": "拒绝訊號疑似 ysk 控制面進程；進階可 forceControlPlane",
      "n0877": "拒绝訊號自身進程（ysk-server）；若確定需要請 forceSelf",
      "n0878": "拒绝读取敏感路径",
      "n0879": "拒绝路径穿越或非法字符",
      "n0880": "持久 default 路由需要 Gateway",
      "n0881": "持久化",
      "n0882": "指令參數為空",
      "n0883": "指令被阻挡：变更主机需开启系统变更权限（YSK_EXECUTE）",
      "n0884": "扫描",
      "n0885": "扫描路径",
      "n0886": "探测 INFO replication",
      "n0887": "探测 SHOW MASTER / REPLICA STATUS",
      "n0888": "探测 pg_is_in_recovery / pg_stat_replication",
      "n0889": "探测 wsrep（SHOW STATUS LIKE 'wsrep%'）",
      "n0890": "控制面已写入但尚未 applied 到系统 — 检查各功能页「应用」",
      "n0891": "控制面維持正常模式",
      "n0892": "控制面緊急降级（local ops）",
      "n0893": "控制面資料目录",
      "n0894": "控制面進入 ddos-protection 提示",
      "n0895": "推送結果不完整（partial/failed）",
      "n0896": "提升连接速度，僅用 IP 授權",
      "n0897": "提示：填 Cloudflare zones + CF_API_TOKEN 先可 Under Attack API",
      "n0898": "操作无法完成",
      "n0899": "收緊 Nginx 限速並強化 fail2ban",
      "n0900": "性能与资源",
      "n0901": "新 IP／域名不宜立刻高量出站。請检查 Spamhaus 等黑名單，並遵循暖機指引。",
      "n0902": "新增 A／AAAA（apex 與 www）",
      "n0903": "新增 DMARC TXT 记录",
      "n0904": "新增 MX／SPF／DKIM DNS 记录",
      "n0905": "新增 _dmarc TXT 以改善投遞與回報。",
      "n0906": "方式 + 閾值",
      "n0907": "於 DNS 供應商新增產生的 MX、SPF（TXT）與 DKIM（TXT）。Cloudflare：邮件相關记录請用僅 DNS（灰雲）。",
      "n0908": "於 DNS 頁安装 PowerDNS 相關软件包",
      "n0909": "在面板 Go 运行环境安装目标版本",
      "n0910": "於面板 Node 执行環境安装目標版本",
      "n0911": "於面板 PHP 执行環境安装目標版本",
      "n0912": "於面板 Python 执行環境安装目標版本",
      "n0913": "於面板 Rust 执行環境安装 rustup／cargo",
      "n0914": "日常",
      "n0915": "日志",
      "n0916": "日志建議写入项目 logs 目录",
      "n0917": "日志收集器",
      "n0918": "日志檔",
      "n0919": "日志相對路径含不允许字符",
      "n0920": "日志等級",
      "n0921": "日志路径无效",
      "n0922": "時區",
      "n0923": "時區與字符",
      "n0924": "暫存表大小",
      "n0925": "暴露 PHP 版本頭",
      "n0926": "更多 fail2ban jail、更快封禁",
      "n0927": "更強隔離請使用獨立 Redis 實例",
      "n0928": "更新 fail2ban jail 清單（管理檔）",
      "n0929": "更新未完成",
      "n0930": "最嚴 Nginx 限連（約 1 req/s）",
      "n0931": "最多 12 個額外目录",
      "n0932": "最多 8 個 nameserver",
      "n0933": "最多快取文件數",
      "n0934": "最多輸入變數",
      "n0935": "最大 WAL",
      "n0936": "最大客戶端數",
      "n0937": "最大内存",
      "n0938": "最大连接错误",
      "n0939": "最小",
      "n0940": "最小 HTTP 服务器（/health）+ public 靜態目录",
      "n0941": "最長执行時間",
      "n0942": "最長輸入時間",
      "n0943": "有可用升級",
      "n0944": "有扫描／暴力跡象時",
      "n0945": "有效快取估計",
      "n0946": "有数据库/Redis dump 失败，已中止（不會 transfer）",
      "n0947": "服务名稱无效",
      "n0948": "未下载 WordPress 核心（需外網／另下）— 見 WORDPRESS_INSTALL.txt",
      "n0949": "未以系統 unit 启动（需 root + 已隔離）— 改用 pidfile",
      "n0950": "未偵測到 pam_google_authenticator — apt install libpam-google-authenticator",
      "n0951": "未啟用 2FA",
      "n0952": "已仅导出控制面摘要（未同步 Nginx）",
      "n0953": "未应用到系統 nginx（需 YSK_EXECUTE + root）— 状态：written",
      "n0954": "未应用到系統：需 YSK_EXECUTE + root",
      "n0955": "未安装 redis-cli 客戶端",
      "n0956": "未写入任何文件",
      "n0957": "未對系統產生可验证变更 — 唔會標 ok",
      "n0958": "未找到 postgresql conf.d — conf 只寫在 dataDir；唔會假裝已应用系統",
      "n0959": "未找到 secrets/ssh/.master.key 且無 YSK_SECRETS_KEY — 目標機可能无法解密 vault/2FA",
      "n0960": "未授權",
      "n0961": "未探测",
      "n0962": "未登记 certbot/LE 續期 cron（可用系統 certbot.timer）",
      "n0963": "未發布 nginx conf",
      "n0964": "未知 passkey",
      "n0965": "未知 source（journal:… / file:… / project:…）",
      "n0966": "未知的資源類型",
      "n0967": "未知软件",
      "n0968": "未知软件 ID",
      "n0969": "未知软件項目",
      "n0970": "未知電源動作",
      "n0971": "未确认維護窗，拒绝打包（避免熱 dump 不一致）",
      "n0972": "未綁项目 home — 僅写入控制面 ftps/ssh；需 sshd Match 才生效",
      "n0973": "未能应用更新：請設 YSK_SOURCE_ROOT 指向 git 工作目录，或 publish npm 软件包後設 YSK_NPM_PACKAGE",
      "n0974": "未能确认遠端最新版 — 唔會假裝「已是最新」",
      "n0975": "未能确认遠端最新版 — 唔會假裝已是最新",
      "n0976": "未裝 City Lite — 僅國家／ASN；更新庫可下载 DB-IP（免費 CC BY）",
      "n0977": "未裝 City Lite — 無省／市；請更新庫（免費 DB-IP）",
      "n0978": "未复制到 /etc/nginx（非 root 或未 EXECUTE）— managed conf 已在 dataDir",
      "n0979": "未设置 CF_API_TOKEN — 无法呼叫 Cloudflare API",
      "n0980": "未设置 Cloudflare API Token — 僅 dry-run",
      "n0981": "未设置磁盘配額（軟配額关闭）",
      "n0982": "操作完成",
      "n0983": "未請求安装到系統（installSystem=false）",
      "n0984": "未开启 YSK_EXECUTE",
      "n0985": "未开启系統变更权限（僅写入控制面设置）",
      "n0986": "未开启系統变更：无法执行 dnssec-keygen",
      "n0987": "未附密码 — 僅验证 email（外掛需另行登入）",
      "n0988": "未验证／重载：服务器未开启系統变更权限（僅写入管理檔）",
      "n0989": "本地 conf 缺失，請先 plan",
      "n0990": "本地备份檔不存在",
      "n0991": "本地尚無 zone 檔",
      "n0992": "本地無证书檔（或從未上传）",
      "n0993": "本地部分无效",
      "n0994": "本小时封禁次数达上限 — 到防护中心检查",
      "n0995": "本機 ip 可能不支援 -j；請升級 iproute2（目前僅 notes）",
      "n0996": "本機 nginx -t OK（僅控制面 managed conf，≠ edge applied）",
      "n0997": "本機 wsrep 尚可，但 size 未達全部登记节点",
      "n0998": "本機 ysk.json 无法读取 / 無 fingerprint",
      "n0999": "本機指標 OK；完整 healthy 需 peer probe（未做）",
      "n1000": "本機無 nginx — conf 已写入，未 reload",
      "n1001": "本機無可用 NM 连接；唔會假成功。可改用「僅即時」或啟用 NetworkManager。",
      "n1002": "本機無可用 ps — 无法列出進程（唔假空表當健康）",
      "n1003": "本機無對應 NM 连接；唔會假成功。可改「僅即時」或啟用 NetworkManager。",
      "n1004": "本輪無可 ban 對象",
      "n1005": "查詢名稱无效",
      "n1006": "查詢服务状态",
      "n1007": "根分区使用率超过 90%",
      "n1008": "根目录无效",
      "n1009": "根磁盘空間",
      "n1010": "概览",
      "n1011": "標準庫 TcpListener（無額外 crate）；Cargo.toml",
      "n1012": "標準庫 net/http；go.mod；/ 與 /health",
      "n1013": "模式：可生产",
      "modeProductionCapable": "可生产",
      "modeDegraded": "降级",
      "n1014": "模擬执行：未實際复制",
      "n1015": "预览试运行完成 — 未复制、未重新加载（正式同步请关闭预览试运行）",
      "n1016": "预览试运行完成 — 正式同步需管理员权限与系统变更权限",
      "n1017": "檔名須以 .conf 結尾",
      "n1018": "檔名須以 .sieve 結尾",
      "n1019": "文件",
      "n1020": "文件上传與 POST 體積",
      "n1021": "文件不存在或不可讀",
      "n1022": "文件不存在或已删除",
      "n1023": "检查佔用进程；見主機指標",
      "n1024": "检查文件变更",
      "n1025": "检查間隔（秒）",
      "n1026": "检查點超时",
      "n1027": "檢視者為唯讀，无法执行写入",
      "n1028": "权限模式須為 3–4 位八進制數字",
      "n1029": "权限與安全",
      "n1030": "正常",
      "n1031": "正常營運默认",
      "n1032": "正式環境請改 SECRET_KEY／DEBUG 並配置数据库",
      "n1033": "此 planner 僅支援 mariadb + mariadb-galera",
      "n1034": "此 planner 僅支援 mysql + mysql-replica",
      "n1035": "此主機無 systemd 服务管理",
      "n1036": "此项目是 Node runtime，請使用 Node 部署",
      "n1037": "此项目是 Node runtime，請使用 Node 部署（或改 runtime 為 static）",
      "n1038": "此更新需人工确认（高風險／需审批）。請勾選确认後再应用。",
      "n1039": "此清單為站外待辦（DNS 供應商／IP 擁有者）；控制面无法代勞 PTR／解封 25",
      "n1040": "此資源不支援应用到系統",
      "n1041": "此软件無 apt 软件包定義",
      "n1042": "每一列一個设置；内存、执行時間、輸入限制",
      "n1043": "每個项目以獨立 Linux 用户／群組运行",
      "n1044": "每小時 auto-ban 上限",
      "n1045": "每日（IPinfo Lite）",
      "n1046": "永久 ban",
      "n1047": "沒有 edge 节点 — 請先於 CDN 頁登记至少一個 edge",
      "n1048": "沒有可应用的真實升級（缺 candidate 或與目前版本相同）",
      "n1049": "沒有项目可做 restic 增量",
      "n1050": "沒有项目可备份（0 個）— 不視為失败",
      "n1051": "沙箱指令不可為空",
      "n1052": "清理日志／备份；見主機设置保存",
      "n1053": "清空防火墙规则 — 默认拒绝",
      "n1054": "測試寄信需要寄件者與收件者",
      "n1055": "準備创建系統用户…",
      "n1056": "瀏覽器开启站点完成 WP 安装精靈",
      "n1057": "無 .zone 檔可推",
      "n1058": "無 HostExecutor — 請手動 chown 文件",
      "n1059": "無 HostExecutor — 跳過 chown（請手動 chown）",
      "n1060": "無 IP 可写入 DNS",
      "n1061": "無 NM 连接可改；僅刪即時地址",
      "n1062": "無 NM 连接可改；僅刪即時路由",
      "n1063": "無 Redis 實例需 dump",
      "n1064": "無 SQL 数据库需 dump",
      "n1065": "無 SSH 目標",
      "n1066": "無 SSH／fleet 目標",
      "n1067": "無 access log cache status、亦無 cache 目录 — hit-rate 未知（請開 log_format 或先 apply edge）",
      "n1068": "無 access=fleet 且填了 fleetAgentId 的成員",
      "n1069": "無 access=ssh 的成員 — 請在 create 時用 :ssh 或改 members",
      "n1070": "無 apply_status",
      "n1071": "無 apt-get",
      "n1072": "無 authentication challenge",
      "n1073": "無 bind_ip 需清理",
      "n1074": "無 dataDir — 只更新数据库",
      "n1075": "無 domain vacation.sieve — 略過 per-mailbox 复制",
      "n1076": "無 edge 可应用（皆 skip/drain）— 控制面 conf 仍 written",
      "n1077": "無 galera_new_cluster；已 restart mariadb",
      "n1078": "無 home_dir",
      "n1079": "無 install 记录 — 庫状态改為 stored",
      "n1080": "無 linuxUser",
      "n1081": "無 master key / YSK_SECRETS_KEY",
      "n1082": "無 nameserver（可能未配置）",
      "n1083": "無 rdbRelPath",
      "n1084": "無 registration challenge",
      "n1085": "無 ssh peer",
      "n1086": "無 ssh peer 可推",
      "n1087": "無 sshpass（僅能用 key/agent 登入）",
      "n1088": "無 vacation.sieve 可部署",
      "n1089": "無 vhost 需要更新（或 conf 尚無 server 塊）",
      "n1090": "無 wsrep 状态（可能未裝 Galera 或服务未開）",
      "n1091": "無作用中 jail 或 fail2ban 未运行",
      "n1092": "無匹配檔名的日志",
      "n1093": "無可执行系統步驟（仍只是 written）",
      "n1094": "無可探活目標（無 healthUrl / baseUrl / publicIpv4）",
      "n1095": "無可用 access log 行（或格式不符）",
      "n1096": "無可用 access log（仍可用手動 / 自動 ban）",
      "n1097": "無可用 access／auth log 樣本",
      "n1098": "無可用 edge IP — 不修改 DNS（保留既有 managed 记录）",
      "n1099": "無可用 strict 用户（全部是救援或未登记）",
      "n1100": "无效 conf 名稱",
      "n1101": "无效 export id",
      "n1102": "无效 export 檔名",
      "n1103": "无效 linux_user",
      "n1104": "无效 public key",
      "n1105": "无效 snapshot id",
      "n1106": "无效 token",
      "n1107": "无效 unit",
      "n1108": "无效 unit 名稱",
      "n1109": "无效 vacuum-size（例：500M）",
      "n1110": "无效 vacuum-time（例：7d）",
      "n1111": "无效备份",
      "n1112": "无效备份格式",
      "n1113": "无效埠",
      "n1114": "无效的 key 名稱",
      "n1115": "无效的 projectId",
      "n1116": "无效的备份檔名",
      "n1117": "无效的搜尋 pattern",
      "n1118": "无效规则編號",
      "n1119": "无效数据库名",
      "n1120": "無暫停域名 — map 為空（系統应用後會 postmap 空檔）",
      "n1121": "無有效 IP",
      "n1122": "無模組時政策仍可用於嫌疑人 auto-ban enrich",
      "n1123": "無法封鎖到主機：未開啟系統變更權限。面板清單沒有新增。",
      "n1124": "无法 dump Redis：缺 redis-cli",
      "n1125": "无法 dump：服务器未开启系統变更权限",
      "n1126": "无法 fan-out：未开启系統变更权限",
      "n1127": "无法 import：服务器未开启系統变更权限",
      "n1128": "无法 list：未开启系統变更权限",
      "n1129": "无法 probe DNS cluster：未开启系統变更权限",
      "n1130": "无法 probe：未开启系統变更权限（SSH 需 EXECUTE）",
      "n1131": "无法 purge cache：未开启系統变更权限（YSK_EXECUTE）",
      "n1132": "无法 purge：未开启系統变更权限",
      "n1133": "无法 remote reload：未开启系統变更权限",
      "n1134": "无法 restic：未开启系統变更权限",
      "n1135": "无法 restore：未开启系統变更权限",
      "n1136": "无法 scp：需 YSK_EXECUTE=1",
      "n1137": "无法 stat home",
      "n1138": "无法 symlink：未开启系統变更权限",
      "n1139": "无法 unban：未开启系統变更权限",
      "n1140": "无法 unban：需 YSK_EXECUTE",
      "n1141": "无法下载 Adminer：未开启系統变更权限",
      "n1142": "无法下载 WordPress：服务器未开启系統变更权限",
      "n1143": "无法使用 PM2，改用本機进程管理",
      "n1144": "无法停服：未开启 YSK_EXECUTE",
      "n1145": "无法停止 PM2：服务器未开启系統变更权限",
      "n1146": "无法分發 SSL：未开启系統变更权限",
      "n1147": "同步已封锁：需系统变更权限",
      "n1148": "无法同步到系統 Nginx：需要系統变更权限",
      "n1149": "无法启动 PM2：服务器未开启系統变更权限",
      "n1150": "无法啟用 Apache 站点：需要系統变更权限",
      "n1151": "无法啟用 NTP：需要系統变更权限與 root",
      "n1152": "无法啟用 PHP-FPM：需要系統管理员权限",
      "n1153": "无法啟用 systemd 服务（請确认权限）",
      "n1154": "无法啟用 systemd 服务：需要系統管理员权限",
      "n1155": "无法啟用服务：需要系統管理员权限",
      "n1156": "无法在目標安装 rsync，且目標原本也沒有 rsync",
      "n1157": "无法在系統创建账号：需要 YSK_EXECUTE + root；已登记控制面（written/blocked）",
      "n1158": "无法执行 certbot：未开启系統变更权限",
      "n1159": "无法执行電源操作：需要系統变更权限（YSK_EXECUTE）與 root",
      "n1160": "无法应用到系統：需要 YSK_EXECUTE + root",
      "n1161": "无法应用系統中繼设置：需要系統变更权限",
      "n1162": "无法应用：計劃失败",
      "n1163": "无法安装 PowerDNS：需要系統管理员权限",
      "n1164": "无法安装到 /etc/ssh：需要 YSK_EXECUTE + root",
      "n1165": "无法安装到系統：服务器未开启系統变更权限（僅写入管理檔）",
      "n1166": "无法寄送測試信：服务器未开启系統变更权限或未安装邮件服务",
      "n1167": "无法创建 virtual user 数据库（缺 db_load）",
      "n1168": "无法创建账户数据库，登入可能失败",
      "n1169": "无法创建系統邮件用户：需要系統管理员权限",
      "n1170": "无法從 npm 或 GitHub 取得最新版本（未假裝已是最新）",
      "n1171": "无法探测 systemctl",
      "n1172": "无法推送 DNS cluster：未开启系統变更权限",
      "n1173": "无法推送遠端：未开启系統变更权限（本地备份仍成功）",
      "n1174": "无法收集 metrics",
      "n1175": "无法清除佇列：服务器未开启系統变更权限",
      "n1176": "无法準備 ACME：未开启系統变更权限",
      "n1177": "无法產生 crypt 密码雜湊（需要 openssl passwd）",
      "n1178": "无法立即执行：服务器未开启系統变更权限",
      "n1179": "无法統計 Tasks（ps state 失败）",
      "n1180": "无法复制 zone 檔到 dnssec 目录",
      "n1181": "无法計算 ysk.json fingerprint",
      "n1182": "无法讀 /etc/resolv.conf",
      "n1183": "无法读取 cmdline（進程可能已結束或無权限）",
      "n1184": "无法读取 numbered 规则",
      "n1185": "无法读取 statfs",
      "n1186": "无法读取佇列：服务器未开启系統变更权限",
      "n1187": "无法读取用户庫以检查 2FA",
      "n1188": "无法读取目標磁盘空間",
      "n1189": "无法变更 UFW：需 YSK_EXECUTE=1",
      "n1190": "无法变更主機名稱／時區：需要系統变更权限與 root",
      "n1191": "无法变更網路：需要系統变更权限（YSK_EXECUTE）與 root",
      "n1192": "无法加载 PowerDNS zone：服务器未开启系統变更权限",
      "n1193": "无法辨識 IPv4/IPv6",
      "n1194": "无法连接 127.0.0.1:6379",
      "n1195": "无法连接目標機",
      "n1196": "無登记紀錄",
      "n1197": "無硬阻擋項（仍可能有建議項）",
      "n1198": "無臨時密钥目录",
      "n1199": "無過期臨時用户",
      "n1200": "無郵箱 — 跳過系統 sieve 部署",
      "n1201": "無需创建遠端目录",
      "n1202": "熔斷",
      "n1203": "片段已写入 dataDir/security/fail2ban（未自動裝到 /etc）",
      "n1204": "片段已复制；請修正後手動 reload",
      "n1205": "状态 draft — 請到 FTP 服务頁「应用」才會写入 vsftpd",
      "n1206": "状态与版本",
      "n1207": "状态：",
      "n1208": "状态：applied（anvil + per-sender policy + maps）",
      "n1209": "状态：applied（symlink + config plugins[] 已啟用）",
      "n1210": "状态：applied（安全目录）",
      "n1211": "状态：applied（已覆寫 homeDir）",
      "n1212": "状态：applied（系統命令成功）",
      "n1213": "状态：applied（密钥+簽署本地 zone；非 registrar 上線）",
      "n1214": "状态：blocked — 管理檔已寫；未改 Postfix/Dovecot",
      "n1215": "状态：blocked（placeholder written）",
      "n1216": "状态：blocked（policy daemon 已生成；系統应用需 EXECUTE+root）",
      "n1217": "状态：executed ≠ 已上線，直到 certbot 完成且 reload",
      "n1218": "状态：failed（nginx -t 或 reload 失败）",
      "n1219": "状态：partial — 唔會標 applied（避免假成功）",
      "n1220": "状态：partial — 部分系統步驟失败",
      "n1221": "状态：partial（symlink 成功；config 需手動加 plugins）— 唔會標成完整 applied",
      "n1222": "状态：preview only",
      "n1223": "状态：written/partial（系統复制／reload／验证未完全成功）",
      "n1224": "状态：written/partial（關鍵步驟失败 — 唔標 applied）",
      "n1225": "状态：written（apply=false；未应用到系統）",
      "n1226": "状态：written（blocked system apply）",
      "n1227": "状态：written（conf 已寫；reload blocked）",
      "n1228": "状态：written（控制面）— 遠端 edge 尚未应用；PR-C3 才 fan-out + nginx -t/reload",
      "n1229": "状态：written（未应用到系統 Postfix/Rspamd）",
      "n1230": "状态：written（未复制到系統 Nginx；設 applySystem 才會 try reload）",
      "n1231": "状态：written（管理白名單已存；live fail2ban-client 需 YSK_EXECUTE，或「策略→应用到系統」重寫 jail.local）",
      "n1232": "状态：written（密钥/DS 已有；zone 未簽署或未找 zone 檔）",
      "n1233": "状态：written（非已上線 SSO）",
      "n1234": "状态：written（非已簽署／非已上線）— 唔假成功",
      "n1235": "状态：written（預覽／只寫管理檔）",
      "n1236": "状态：已写入並成功 reload 本機 nameserver",
      "n1237": "状态：已写入管理 zone 檔（尚未成為權威 DNS，除非你已 reload nameserver）",
      "n1238": "状态：已写入管理檔（未应用到系統）",
      "n1239": "状态：無資料（非假統計）",
      "n1240": "獨立 TOTP（與 panel operator 2FA 分開）",
      "n1241": "獨立於 panel operator 2FA",
      "n1242": "生命周期",
      "n1243": "生產可關並手動重载",
      "n1244": "生產環境請关闭",
      "n1245": "生产门槛：尚未完全达标，请查看下方缺项",
      "n1246": "生产门槛：通过（权限、Nginx、Node 就绪）",
      "n1247": "生产隔离：到项目「资源」创建 Linux 用户与 home",
      "n1248": "用户名 2–32 字符 [a-z0-9._-]",
      "n1249": "申請 SSL 需要域名與邮件",
      "n1250": "留空不限制；多路径用 : 分隔",
      "n1251": "留空用系統默认；可填絕對路径",
      "n1252": "略過",
      "n1253": "略過 DNS 解析",
      "n1254": "略過 chown（未以 root 隔離模式执行）",
      "n1255": "略過 chown（需 YSK_EXECUTE + root）— 文件可能為控制面用户擁有",
      "n1256": "略過 draining 节点",
      "n1257": "略過 reload：zone 验证失败",
      "n1258": "略過 remote reload（reload=false）— written ≠ applied",
      "n1259": "略過 usermod（未 os_provisioned）",
      "n1260": "略過 zone apply（applyZone=false）— 僅更新控制面 records",
      "n1261": "略過无效用户名",
      "n1262": "疑似 DDoS — 降级运行",
      "n1263": "白名單 IP：拒绝封禁",
      "n1264": "白名單：略過",
      "n1265": "監控 IP／域名聲譽並暖機",
      "n1266": "監聽 IP；建議 127.0.0.1 僅本機",
      "n1267": "監聽位址",
      "n1268": "目前以本機进程模式部署",
      "n1269": "目前以簡易 PHP 模式部署",
      "n1270": "目前权限讀不到防火墙状态（非攻擊）",
      "n1271": "目前非系統管理员权限，部分系統设置无法应用",
      "n1272": "目標 ysk.json 校驗失败",
      "n1273": "目標尚無 ysk-server CLI — 請确认 bootstrap 或手動 npm i -g ysk-server",
      "n1274": "目標已有 YSK 資料，已确认 forceWipeTarget",
      "n1275": "目標有 rsync",
      "n1276": "目標為 root",
      "n1277": "目標用户已暫停",
      "n1278": "目標缺 rsync（將在 bootstrap 安装）",
      "n1279": "目標認證需要 sshpass（未安装）",
      "n1280": "目標預檢失败",
      "n1281": "目標預檢未通过",
      "n1282": "目標預檢通过",
      "n1283": "目的地必須以 .zip 結尾",
      "n1284": "真正推送需 execute + YSK_EXECUTE=1",
      "n1285": "短標籤 <?",
      "n1286": "硬配額略過：未 os_provisioned",
      "n1287": "確保 guest 用户",
      "n1288": "确认 80／443 可從公網到達（LE HTTP-01）",
      "n1289": "确认 PHP runtime 與 FPM 已就绪",
      "n1290": "确认出站 Port 25 已開放",
      "n1291": "磁盘、备份、AOF/WAL",
      "n1292": "磁盘空间不足",
      "n1293": "禁用函式列表",
      "n1294": "私網／本機，不应用公網 geo",
      "n1295": "秒",
      "n1296": "秒；0 = 無限（CLI）",
      "n1297": "秒；解析請求的最長時間",
      "n1298": "移除软件包",
      "n1299": "空=关闭；設路径則开启",
      "n1300": "站点名稱无效",
      "n1301": "站点無 edge 节点",
      "n1302": "符合主機默认版本",
      "n1303": "节点 host 无效",
      "n1304": "节点名稱无效",
      "n1305": "节点處於 draining — 健康結果僅供參考，状态保持 draining",
      "n1306": "系統应用需 YSK_EXECUTE + root",
      "n1307": "系統用户不存在（尚未 provision 或已刪）",
      "n1308": "系統管理员权限",
      "n1309": "系統变更未开启；设置可保存，应用系統需权限",
      "n1310": "系統变更权限",
      "n1311": "系統負載",
      "n1312": "系統软件",
      "n1313": "累犯",
      "n1314": "維護内存",
      "n1315": "網站",
      "n1316": "網路條件不足（例如網域验证所需埠无法使用）",
      "n1317": "網路无法连接",
      "n1318": "网页",
      "n1319": "缺 rsync",
      "n1320": "缺 ssh",
      "n1321": "缺 ysk.json",
      "n1322": "缺少 conf 產物，請先 plan",
      "n1323": "缺少 dataDir，无法安装 runtime",
      "n1324": "缺少 linuxUser/homeDir",
      "n1325": "臨時 ban",
      "n1326": "臨時密钥失败",
      "n1327": "臨時密钥安装失败",
      "n1328": "自動 VACUUM",
      "n1329": "自動 ban → 關（日常檔）",
      "n1330": "自動 ban 暫停：未开启系統变更（YSK_EXECUTE）",
      "n1331": "自動 ban 熔斷",
      "n1332": "自動切檔 或 人手",
      "n1333": "自動化主開關关闭",
      "n1334": "自動化白名單 IP：拒绝封禁",
      "n1335": "自動回覆",
      "n1336": "自動回覆：状态 written — 未自動進 Dovecot/Pigeonhole（需 ManageSieve 或 symlink）",
      "n1337": "自動防護檔",
      "n1338": "自訂 allow 路径",
      "n1339": "至少一個轉送目標",
      "n1340": "至少选择一個 edge 节点",
      "n1341": "至少需要一個域名",
      "n1342": "至少需要一個节点",
      "n1343": "至少需要一個角色（control/origin/edge/dns）",
      "n1344": "與 panel operator 2FA 分開",
      "n1345": "舊公鑰若在 remote authorized_keys，需手動更新或 authorize-self",
      "n1346": "萬用字符域名无效",
      "n1347": "表快取",
      "n1348": "复制 filter/jail 後 systemctl reload fail2ban",
      "n1349": "复制 jail.local 失败",
      "n1350": "见审计",
      "n1351": "解密預覽成功（secret 已遮罩）",
      "n1352": "觸發 limit_req 過多",
      "n1353": "訊息格式无效",
      "n1354": "訊號加總 0–100 → 威脅級",
      "n1355": "内存、缓冲、并发",
      "n1356": "内存上限",
      "n1357": "内存偏高",
      "n1358": "内存壓力",
      "n1359": "内存淘汰策略",
      "n1360": "内存与 V8",
      "n1361": "内存表上限",
      "n1362": "记录值不可為空",
      "n1363": "记录語句類型",
      "n1364": "记录错误到日志",
      "n1365": "记录防護模式提示",
      "n1366": "设置反向 DNS（PTR）",
      "n1367": "设置已保存於管理面；系統 conf／重啟需权限",
      "n1368": "设置已写入但应用失败",
      "n1369": "设置已写入连接但重啟失败；請手動 nmcli connection up",
      "n1370": "设置已写入连接但重新啟用失败，請手動 nmcli connection up",
      "n1371": "设置檔 product 必須是 ysk-server",
      "n1372": "设置檔格式错误（須為物件）",
      "n1373": "设置檔缺少 dataDir",
      "n1374": "許多雲供應商封锁出站 TCP 25。請申請解鎖，或改用外部 SMTP 中繼。",
      "n1375": "評分",
      "n1376": "誠實：一鍵只创建控制面政策，唔等於公網 CDN 已生效",
      "n1377": "誠實：部分公網 resolver 會去重相同 A 记录 — 權重偏差唔保證；高權重 edge 仍建議用更多獨立 IP 或 Anycast",
      "n1378": "請使用 CIDR 格式，例如 192.168.1.10/24",
      "n1379": "請使用 POST /api/v1/ssl/upload 或 POST /api/v1/ssl/letsencrypt",
      "n1380": "請先登记至少一個 CDN 节点（PR-C1）",
      "n1381": "請先确认 maintenanceAccepted",
      "n1382": "请到备份操作页查看 sideResults",
      "n1383": "请到备份页查看",
      "n1384": "请到通知 → 应用状态审计",
      "n1385": "请到防护中心检视信号并切换防护档",
      "n1386": "請在 peer 上安装 conf 並 restart / join",
      "n1387": "請填寫 serverName",
      "n1388": "請填寫 serverName 與 upstream",
      "n1389": "請填寫 serverName 與文件根目录",
      "n1390": "請填寫 serverName、文件根目录與 FPM socket",
      "n1391": "請填寫 zone",
      "n1392": "請填寫 zone 名稱",
      "n1393": "請填寫中繼主機",
      "n1394": "請填寫集群名稱（≤64）",
      "n1395": "請填寫方案名稱",
      "n1396": "請填寫用户、排程與指令",
      "n1397": "請填寫真實节点位址（不可用示範 IP）",
      "n1398": "請將 DNS A/AAAA 指向新 IP；检查雲防火墙與邮件 PTR",
      "n1399": "請將下列 XML 部署到對應 hostname，或复制到外部 DNS 主機",
      "n1400": "請指定 IP",
      "n1401": "請指定 action 或 mtu",
      "n1402": "請指定 dataDir",
      "n1403": "請指定 listenHost",
      "n1404": "請指定 zip 路径",
      "n1405": "請指定备份來源",
      "n1406": "請指定啟用状态（是／否）",
      "n1407": "請指定回收項目",
      "n1408": "請指定工具名稱",
      "n1409": "請指定设置檔路径",
      "n1410": "請指定路径與权限模式",
      "n1411": "請指定路径與版本",
      "n1412": "請指定路径與目的地",
      "n1413": "請提供 DKIM 公鑰",
      "n1414": "請提供 Git URL（或先在项目设置）",
      "n1415": "請提供 IP",
      "n1416": "請提供软件包名稱",
      "n1417": "請提供软件包名稱與目前版本",
      "n1418": "請提供密码（至少 8 字符）",
      "n1419": "請提供查詢名稱",
      "n1420": "請提供訊息內容",
      "n1421": "請求率偏高 — 已啟用限流",
      "n1422": "請用「应用到系統」或重新部署 PHP 项目（pool php_admin_*）",
      "n1423": "請确认 /etc/default/ufw 內 IPV6=yes",
      "n1424": "請确认 dataDir 已创建且程序可写入",
      "n1425": "請至少填一個 nameserver，或選「还原 DHCP DNS」",
      "n1426": "請至少提供 publicIpv4 / publicIpv6 / healthUrl / baseUrl 其中一項",
      "n1427": "請輸入提示內容",
      "n1428": "請选择文件",
      "n1429": "請限制來源 IP 或 HTTP auth 後再公開",
      "n1430": "警告：manifest 無 packagedAt — 若需 DB 請先跑 package",
      "n1431": "警告：unit 為 active 但找不到 CLI binary（可能係舊 placeholder unit）",
      "n1432": "警告：將覆寫目標既有 YSK 資料",
      "n1433": "警告：此接口為默认路由出口，down 可能令面板斷線",
      "n1434": "警告：無 secrets/ssh/.master.key 且無 YSK_SECRETS_KEY（vault/2FA 可能无法解密）",
      "n1435": "警告：缺 config.json（可稍後 setup 補）",
      "n1436": "读取 banned 列表失败",
      "n1437": "读取 banned 可能需更高权限；unban／ban 仍需 YSK_EXECUTE",
      "n1438": "读取 banned 失败（权限或服务）",
      "n1439": "读取 fail2ban bans 失败",
      "n1440": "读取已封禁清單失败",
      "n1441": "读取日志失败",
      "n1442": "读取文件",
      "n1443": "读取系統信息",
      "n1444": "变更 default 路由需 confirmDefault: true",
      "n1445": "变更會写入管理檔；「应用到系統」才會進 /etc/php/.../conf.d 並 reload FPM",
      "n1446": "负载偏高",
      "n1447": "資料可讀寫；安装／重啟服务需要系統变更权限",
      "n1448": "数据库可能過舊（>7 日）— 建議立即更新",
      "n1449": "数据库尚未创建。請确认 mysql 客戶端與 YSK_EXECUTE=1 後再試。",
      "n1450": "数据库尚未创建。請确认 psql、TCP 與 YSK_EXECUTE=1 後再試。",
      "n1451": "数据库數量",
      "n1452": "数据库缺 name",
      "n1453": "数据库轉儲需另行納入",
      "n1454": "資料目录",
      "n1455": "資源分頁：创建／遷移系統用户",
      "n1456": "資源限制",
      "n1457": "超過閾值",
      "n1458": "路径不允许",
      "n1459": "路径不在已允许的額外 log 目录",
      "n1460": "路径越界拒绝",
      "n1461": "跳過",
      "n1462": "跳過刪舊 home：目標 canonical 內容不完整",
      "n1463": "軟配額已存；硬 setquota 請「应用限制到 OS」",
      "n1464": "輸入巢狀層級",
      "n1465": "輸入資料无效",
      "n1466": "逗號分隔；過嚴可能弄壞软件包",
      "n1467": "通常為 RAM 25%",
      "n1468": "连接与网络",
      "n1469": "進程仍在（可再送 KILL）",
      "n1470": "進程已結束（kill -0 失败）",
      "n1471": "高级",
      "n1472": "進階：secret 來自 panel（與 operator 2FA 同源 — 風險自負）",
      "n1473": "運維",
      "n1474": "遠端 SFTP 设置不完整（host/username/path）",
      "n1475": "遠端 applied ≠ cluster healthy — 請跑 probe --peers",
      "n1476": "遠端 migrate post 失败",
      "n1477": "遠端 mkdir 失败",
      "n1478": "遠端 post 回報 ok=false",
      "n1479": "遠端备份未啟用（略過推送）",
      "n1480": "遠端安装需 YSK_EXECUTE=1",
      "n1481": "遠端找不到 rndc / active named|bind9|pdns",
      "n1482": "远端推送或 restic 有失败 — 本地 tar 可能已成功，请看 sideResults",
      "n1483": "遠端文件、暴露信息、函式禁用",
      "n1484": "遠端無 active named/bind9/pdns（仍可 scp 文件）",
      "n1485": "遠端無 nginx — conf 已 scp（written on peer）",
      "n1486": "远端／restic 步骤已处理",
      "n1487": "遷移需要 YSK_EXECUTE + root",
      "n1488": "还原後未 chown（需 root + YSK_EXECUTE）",
      "n1489": "部分 DNSBL 未必完整支援 IPv6；結果僅供參考",
      "n1490": "部分 peer applied；其餘僅 written 或失败 — 勿當全集群已 reload",
      "n1491": "部分 peer reload 成功（partial）",
      "n1492": "部分或全部失败 — 请查看 results",
      "n1493": "部分或全部未应用到系統（需 YSK_EXECUTE）",
      "n1494": "部分推送失败 — 检查 SSH key / 防火墙",
      "n1495": "部分步驟失败 — 見 steps",
      "n1496": "部分系統步驟失败",
      "n1497": "部署",
      "n1498": "部署 PHP + 發布 Nginx（文件根 app/public）",
      "n1499": "部署时可覆盖",
      "n1500": "部署會 go build -o app .；需主機已安装 Go toolchain",
      "n1501": "部署會执行 venv + pip；ExecStart 使用 uvicorn main:app",
      "n1502": "部署會执行 venv + pip；entry 默认 app.py（非 ASGI）",
      "n1503": "部署／应用 FPM pool 時写入 php_admin_value",
      "n1504": "部署：面板「部署」會启动 server.js；written ≠ 已對外",
      "n1505": "邮件主機 A 记录",
      "n1506": "邮件主機 AAAA 记录（IPv6）",
      "n1507": "邮件管理设置目录",
      "n1508": "郵箱 ID 无效",
      "n1509": "郵箱本地部分无效",
      "n1510": "配額須為 1–1000000 MiB",
      "n1511": "配額須至少 1 MiB",
      "n1512": "重啟系統服务",
      "n1513": "重複被 ban 再加重",
      "n1514": "重载 vsftpd",
      "n1515": "重载網頁服务",
      "n1516": "错误報告等級",
      "n1517": "错误日志、慢查询",
      "n1518": "错误與日志",
      "n1519": "門檻數字",
      "n1520": "开启會嚴重影響效能",
      "n1521": "闲置超时（秒）",
      "n1522": "关闭",
      "n1523": "防火墙建議（不自動改 UFW 除非应用系統）",
      "n1524": "防火墙（內網）：TCP 3306, 4567, 4444, 4568",
      "n1525": "防護檔写入 nginx limit_req",
      "n1526": "防護檔維持期（hold）中，暫不降檔",
      "n1527": "防护：危急",
      "n1528": "防护：建议紧急档",
      "n1529": "防护：疑似受攻击",
      "n1530": "限制已写入控制面；应用到 OS 需 YSK_EXECUTE + root",
      "n1531": "限速",
      "n1532": "限速越界",
      "n1533": "限速／反垃圾旗標已存 DB；要進 Postfix/Rspamd 請用「应用限速/反垃圾到系統」",
      "n1534": "隔離模式：degraded — build／进程可能以控制面用户执行；生產請创建系統用户",
      "n1535": "隔離模式：degraded — 进程可能以控制面用户执行；生產請 root + YSK_EXECUTE 並创建系統用户",
      "n1536": "離線保存；含 TOTP secret。遺失 Authenticator 時可手動重建。",
      "n1537": "需 EXECUTE + root 先可自動 vacuum",
      "n1538": "需 NetworkManager active 才能持久改 DNS（唔會盲寫 /etc/resolv.conf）",
      "n1539": "需 YSK_EXECUTE 先可 ufw apply",
      "n1540": "需 YSK_EXECUTE 才會真正 auto-ban",
      "n1541": "需 YSK_EXECUTE 才能 banip",
      "n1542": "需 YSK_EXECUTE 才能控制 fail2ban 服务",
      "n1543": "需 YSK_EXECUTE=1 先可 vacuum journal",
      "n1544": "需 execute:true 或 dryRun:true",
      "n1545": "需 nginx log_format 含 $upstream_cache_status（或 X-YSK-Cache）先有 HIT/MISS",
      "n1546": "需 root + YSK_EXECUTE 才會真正 useradd；控制面不會假裝成功",
      "n1547": "需 root 先可 journalctl --vacuum",
      "n1548": "需 root 先可改 UFW",
      "n1549": "需主機已安装 cargo／rustc",
      "n1550": "需主機有 Python 與外網 pip",
      "n1551": "需主機有 Python 與外網 pip（否則安装依賴會失败）",
      "n1552": "需安装 bind9-dnsutils 並开启系統变更权限，才可真正执行 dnssec-keygen。",
      "n1553": "需确认字串 EMERGENCY；防鎖死自己",
      "n1554": "需系統 sshd Match/User 设置才會真正生效",
      "n1555": "需要 --target 或可 resume 的 --job",
      "n1556": "需要 MySQL／MariaDB 管理员权限",
      "n1557": "需要 YSK_EXECUTE",
      "n1558": "需要 YSK_EXECUTE 下载 Adminer",
      "n1559": "需要 admin",
      "n1560": "需要 aws CLI（或改用 restic s3 repo）",
      "n1561": "需要 id 或 all",
      "n1562": "需要 ip",
      "n1563": "需要 jobId",
      "n1564": "需要 linuxUser 或 projectId",
      "n1565": "需要 master 节点",
      "n1566": "需要 nginx geoip2 模組（libnginx-mod-http-geoip2）先會喺 HTTP 層生效",
      "n1567": "需要 primary 节点",
      "n1568": "需要 privateKey",
      "n1569": "需要 projectId",
      "n1570": "需要 root",
      "n1571": "需要 source",
      "n1572": "需要 sshpass、YSK 身份密钥（identityId），或本機默认 SSH key",
      "n1573": "需要 target（root@host）或 jobId 以 resume",
      "n1574": "需要 target，或含 target 的 jobId",
      "n1575": "需要 username 與 ssh- 開頭公鑰",
      "n1576": "需要 zone 域名",
      "n1577": "需要密码",
      "n1578": "需要有效 email",
      "n1579": "需要有效 email 與 domain",
      "n1580": "需要目前版本與最新版本",
      "n1581": "需要真實 candidateVersion（不可等於 current 或缺省）",
      "n1582": "需要系統管理员权限才能完成安装",
      "n1583": "需要系統管理员权限才能变更服务",
      "n1584": "需要系統变更权限才能同步/重载",
      "n1585": "需要系統变更权限才能同步到系統並重载 Nginx",
      "n1586": "需要系統变更权限才能掛 check_policy_service",
      "n1587": "需要系統变更权限才能复制 nginx conf 並 reload",
      "n1588": "同步已封锁：需管理员权限",
      "n1589": "需要至少一個 primary 节点",
      "n1590": "靜態網站",
      "n1591": "非 root — useradd／systemd／nginx 系統路径受限",
      "n1592": "非受限 seccomp 需要明確指定 runAsUser",
      "n1593": "公开请求／分钟",
      "n1594": "面板连接即將中斷；可用「取消排程」撤回（若仍在線）",
      "n1595": "面板非 root",
      "n1596": "預覽可用 apply:false",
      "n1597": "預覽模式 — 未写入任何文件",
      "n1598": "默认 uvicorn workers",
      "n1599": "默认以 Redis 邏輯 DB 編號隔離",
      "n1600": "默认字符集",
      "n1601": "默认验证外掛",
      "n1602": "額外日志路径无效",
      "n1603": "显示启动错误",
      "n1604": "显示错误、记录與報告等級",
      "n1605": "显示错误（畫面）",
      "n1606": "首次 build 可能數分鐘；失败時見 notes／日志",
      "n1607": "验证",
      "n1608": "验证碼无效",
      "n1609": "验证通过",
      "n1610": "未刷新套件索引（未开 YSK_EXECUTE）— 仅显示 apt list；开启 EXECUTE 才运行 apt-get update",
      "n1611": "UFW 已關閉：user.rules 有 {{n}} 條永久拒規則，但核心未強制執行。",
      "n1612": "UFW 已關閉。拒絕規則只會寫入 user.rules，核心不會丟棄封包。請先啟用 UFW。不會自動開啟。",
      "t0001": "listenPort 无效：{{v0}}",
      "t0002": "已還原版本 {{v0}}",
      "t0003": "文件過大（>{{v0}} bytes）",
      "t0004": "已存在：{{v0}}",
      "t0005": "目標已存在：{{v0}}",
      "t0006": "找不到：{{v0}}",
      "t0007": "壓縮失败： {{v0}}",
      "t0008": "已壓縮 {{v0}} 項 → {{v1}}",
      "t0009": "找不到：{{v0}}",
      "t0010": "un壓縮失败： {{v0}}",
      "t0011": "已解壓 {{v0}} → {{v1}}",
      "t0012": "无法從状态 {{v0}} 標記為已执行",
      "t0013": "此操作需要人工審批：{{v0}}",
      "t0014": "審批状态无效：{{v0}}",
      "t0015": "審批已是 {{v0}}",
      "t0016": "未知角色：{{v0}}",
      "t0017": "角色 {{v0}} 无法执行 {{v1}}（上限 {{v2}}）",
      "t0018": "{{v0}} 範圍的非读取操作需要指定 id",
      "t0019": "工具無主機执行器：{{v0}}",
      "t0020": "工具不在允許清單：{{v0}}",
      "t0021": "工具已明確拒絕：{{v0}}",
      "t0022": "找不到 Playbook：{{v0}}",
      "t0023": "ip -j addr 失败：{{v0}}",
      "t0024": "ip -j route 失败：{{v0}}",
      "t0025": "nmcli 写入地址失败：{{v0}}",
      "t0026": "已保存 {{v0}} → 连接「{{v1}}」",
      "t0027": "connection up 警告：{{v0}}",
      "t0028": "已重新啟用连接（重開仍在）",
      "t0029": "已新增 {{v0}} → {{v1}}（即時；重開可能消失）",
      "t0030": "已從连接「{{v0}}」移除 {{v1}}",
      "t0031": "NM 移除地址：{{v0}}",
      "t0032": "已删除即時 {{v0}} ← {{v1}}",
      "t0033": "link down 失败：{{v0}}",
      "t0034": "已 down {{v0}}",
      "t0035": "link up 失败：{{v0}}",
      "t0036": "已 up {{v0}}",
      "t0037": "設 MTU 失败：{{v0}}",
      "t0038": "nmcli 写入 gateway 失败：{{v0}}",
      "t0039": "已保存 default gateway {{v0}} → 连接「{{v1}}」（重開仍在）",
      "t0040": "nmcli 写入 routes 失败：{{v0}}",
      "t0041": "已保存靜態路由 {{v0}} →「{{v1}}」（重開仍在）",
      "t0042": "ip route add 失败：{{v0}}",
      "t0043": "已加即時路由 {{v0}}${gw ? ",
      "t0044": " : ''}（重開可能消失；要持久請用「保存」）",
      "t0045": "已從连接「{{v0}}」清除 ipv4.gateway",
      "t0046": "NM 清除 gateway：{{v0}}",
      "t0047": "已從「{{v0}}」移除路由 {{v1}}",
      "t0048": "NM 移除 routes：{{v0}}",
      "t0049": "ip route del 失败：{{v0}}",
      "t0050": "已刪即時路由 {{v0}}",
      "t0051": "已刪路由 {{v0}}",
      "t0052": "DNS 无效：{{v0}}",
      "t0053": "DNS 不是合法 IP：{{v0}}",
      "t0054": "nmcli modify 失败：{{v0}}",
      "t0055": "已還原 {{v0}} 使用 DHCP DNS（ignore-auto-dns=no）",
      "t0056": "nmcli modify 失败：{{v0}}",
      "t0057": "已写入 {{v0}}：DNS {{v1}}${search.length ? ",
      "t0058": "解析失败：{{v0}}",
      "t0059": "{{v0}} → {{v1}} 筆",
      "t0060": "{{v0}} 無結果",
      "t0061": "已簽發一次性 SSO token（{{v0}} 分鐘）",
      "t0062": "Webmail 下載安装失败：{{v0}}",
      "t0063": "已部署至 {{v0}}",
      "t0064": "系統部署失败：{{v0}}",
      "t0065": "已複製 vacation 到 {{v0}} 個郵箱 sieve 目录（written）",
      "t0066": "已部署 sieve + .dovecot.sieve → {{v0}}@{{v1}}",
      "t0067": "已停用 active sieve link → {{v0}}@{{v1}}",
      "t0068": "{{v0}}@{{v1}} sieve 部署失败: {{v2}}",
      "t0069": "已寫 per-sender policy daemon（{{v0}} domains）",
      "t0070": "{{v0}} 失败 (exit {{v1}}): {{v2}}",
      "t0071": "已写入 plugin 骨架 {{v0}}",
      "t0072": "symlink 失败: {{v0}}",
      "t0073": "已 symlink {{v0}} → {{v1}}",
      "t0074": "改 config 失败: {{v0}}",
      "t0075": "config 已包含 plugin {{v0}}: {{v1}}",
      "t0076": "已写入 {{v0}}: {{v1}}",
      "t0077": "將 {{v0}} 與 www.{{v1}} 指到服务器公開 IP。CDN（Cloudflare）可灰雲或橙雲。",
      "t0078": "PTR 須由 VPS／雲端 IP 擁有者设置，並與 HELO/EHLO（{{v0}}）一致。請於供應商控制台申請（AWS/GCP 常需工單）。",
      "t0079": "佇列 {{v0}} 封",
      "t0080": "postsuper 失败: {{v0}}",
      "t0081": "域名已登記：{{v0}}",
      "t0082": "郵箱已存在：{{v0}}",
      "t0083": "已创建 Maildir：{{v0}}",
      "t0084": "已创建系統用户 {{v0}}",
      "t0085": "创建系統用户失败：{{v0}}",
      "t0086": "虛擬郵箱對應：{{v0}}",
      "t0087": "写入 passdb 失败：{{v0}}",
      "t0088": "來源已存在: {{v0}}",
      "t0089": "已创建 {{v0}}: {{v1}} → {{v2}}",
      "t0090": "找不到邮件域名：{{v0}}",
      "t0091": "已寫 vacation 草稿 {{v0}}",
      "t0092": "已寫停用標記 {{v0}}",
      "t0093": "virtual_alias: {{v0}} ({{v1}} 條)",
      "t0094": "Postfix anvil: smtpd_client_message_rate_limit={{v0}} / 3600s（全域；取各域名 rate 最小值）",
      "t0095": "postconf 確認: {{v0}}",
      "t0096": "已寫 rspamd ratelimit.conf（~{{v0}}/h）",
      "t0097": "已重建聚合 map（{{v0}} domains）",
      "t0098": "保護模式 {{v0}}：已封鎖遠端模型（僅允許本機 LLM）",
      "t0099": "LLM 請求失败：{{v0}}",
      "t0100": "在 {{v0}}–{{v1}} 範圍內找不到可用埠",
      "t0101": "請在 confirm 欄位輸入正確字串：{{v0}}",
      "t0102": "延遲 {{v0}}s 會以最少 1 分鐘排程（shutdown +N 以分鐘計）",
      "t0103": "已排程重啟（約 {{v0}} 分鐘後）",
      "t0104": "已排程關機（約 {{v0}} 分鐘後）",
      "t0105": "读取失败：{{v0}}",
      "t0106": "列出失败：{{v0}}",
      "t0107": "服務名稱无效：{{v0}}",
      "t0108": "路径不在允許写入範圍：{{v0}}",
      "t0109": "purge／reload 失败：{{v0}}",
      "t0110": "DB {{v0}}：{{v1}} 個 key",
      "t0111": "(type {{v0}} — 僅顯示類型)",
      "t0112": "已写入 {{v0}}",
      "t0113": "写入失败：{{v0}}",
      "t0114": "key 不存在或未删除",
      "t0115": "home 不存在: {{v0}}",
      "t0116": "无法解析 snapshots JSON: {{v0}}",
      "t0117": "共 {{v0}} 個 restic 快照",
      "t0118": "覆寫 home 需 confirmPhrase=\"{{v0}}\"（雙重確認）",
      "t0119": "dry-run：snapshot {{v0}} 含 {{v1}} 條路径（最多顯示 100）",
      "t0120": "dry-run 失败: {{v0}}",
      "t0121": "已還原 snapshot {{v0}} → {{v1}}",
      "t0122": "restore 失败 exit={{v0}}",
      "t0123": "已写入管理片段：{{v0}}",
      "t0124": "项目 Linux 用户約 {{v0}} 個（Match User ysks_*,ysk_*）",
      "t0125": "請手動：cp {{v0}} /etc/ssh/sshd_config.d/ && systemctl reload sshd",
      "t0126": "sshd -t 失败，未 reload：{{v0}}",
      "t0127": "已安装 {{v0}} 並 reload sshd",
      "t0128": "已安装片段但 reload 失败：{{v0}}",
      "t0129": "已写入控制面摘要 {{v0}}（{{v1}} bytes）",
      "t0130": "托管 Nginx 配置：{{v0}} 个（面板数据目录 nginx/conf.d）",
      "t0131": "未知範本：{{v0}}",
      "t0132": "範本 {{v0}}：{{v1}}",
      "t0133": "{{v0}} 已存在 — 已略過（force 可覆寫）",
      "t0134": "WordPress 安装說明 — {{v0}}",
      "t0135": "域名：{{v0}}",
      "t0136": "進程 entry 默认 {{v0}}.wsgi:application（gunicorn）",
      "t0137": "部署會 cargo build --release；二進位默认 ./target/release/{{v0}}",
      "t0138": "Axum 範本：cargo build --release 需外網 crates.io",
      "t0139": "二進位 ./target/release/{{v0}}",
      "t0140": "已创建 {{v0}}、略過 {{v1}}、错误 {{v2}}",
      "t0141": "{{v0}}前必須完成项目 Linux 用户隔離（資源分頁 → 创建系統用户）。",
      "t0142": " 預期 home：/home/ysk-server-{{v0}} · user：{{v1}}",
      "t0143": "已 chown {{v0}}:{{v1}} → {{v2}}",
      "t0144": "以项目用户 {{v0}} 执行指令",
      "t0145": "pidfile 以 runuser -u {{v0}} 启动",
      "t0146": "已写入 FPM pool：{{v0}}",
      "t0147": "已啟用 pool：{{v0}}",
      "t0148": "/etc/php/{{v0}}/fpm 找不到 — install php{{v1}}-fpm",
      "t0149": "{{v0}} 已安装",
      "t0150": "安装 {{v0}}",
      "t0151": "未能安装 {{v0}}",
      "t0152": "SSH probe 失败：{{v0}}",
      "t0153": "nameserver 活躍：{{v0}}",
      "t0154": "zone 目录存在（{{v0}} 個 .zone）",
      "t0155": "zone 目录不存在：{{v0}}",
      "t0156": "remote reload 失败：{{v0}}",
      "t0157": "{{v0}}: scp 失败 {{v1}}",
      "t0158": "scp {{v0}} 檔 OK → {{v1}}",
      "t0159": "scp 部分/全部失败（ok={{v0}} fail={{v1}}）",
      "t0160": "enable 失败：{{v0}}",
      "t0161": "disable 失败：{{v0}}",
      "t0162": "UFW DENY from {{v0}}（永久規則，直至手動刪）",
      "t0163": "deny 失败：{{v0}}",
      "t0164": "已刪 UFW DENY {{v0}}",
      "t0165": "delete 失败：{{v0}}",
      "t0166": "已刪規則 #{{v0}}",
      "t0167": "刪 #{{v0}} 失败：{{v1}}",
      "t0168": "已允許 {{v0}}/{{v1}}",
      "t0169": "allow 失败：{{v0}}",
      "t0170": "reload 嘗試失败 ({{v0}}): {{v1}}",
      "t0171": "隔離模式：以项目用户 {{v0}} 運作",
      "t0172": "使用 Node 执行檔：{{v0}}",
      "t0173": "目標埠：{{v0}}",
      "t0174": "已应用面板 Node 調校（{{v0}}）",
      "t0175": "应用後找不到進入點：{{v0}}",
      "t0176": "以 systemd unit 部署：{{v0}}",
      "t0177": "以 PM2 部署：{{v0}}",
      "t0178": "启动行程失败：{{v0}}",
      "t0179": "已启动 pid={{v0}}，pidfile={{v1}}",
      "t0180": "已發布 Nginx 设置（管理檔）：{{v0}}",
      "t0181": "已创建佔位頁：{{v0}}",
      "t0182": "使用既有：{{v0}}",
      "t0183": "靜態 Nginx 设置：{{v0}}",
      "t0184": "文件根目录：{{v0}}",
      "t0185": "HTTP 基本認證：{{v0}}（{{v1}}）",
      "t0186": "類型：{{v0}}",
      "t0187": "整站重新導向 → {{v0}}",
      "t0188": "使用已上傳证书：{{v0}}",
      "t0189": "已啟用 SSL（默认 Let’s Encrypt 路径；或於 SSL 頁上傳 {{v0}} 证书）",
      "t0190": "重载 Nginx 失败：{{v0}}",
      "t0191": "已写入暫停用虛擬主機：{{v0}}",
      "t0192": "Runtime {{v0}} — 只同步 Git，不重啟行程",
      "t0193": "已写入環境變數 {{v0}}（{{v1}} 項）",
      "t0194": "PHP-FPM pool 用户：{{v0}}（项目隔離）",
      "t0195": "runtime 版本 → {{v0}}",
      "t0196": "已合併面板 php.ini（{{v0}} 條 php_admin_*）",
      "t0197": "PHP-FPM 生產 Nginx 设置：{{v0}}",
      "t0198": "Nginx reload 結束碼={{v0}}: {{v1}}",
      "t0199": "PHP 內建服务器 pid={{v0}} @ 127.0.0.1:{{v1}}",
      "t0200": "已送 SIGTERM 至 {{v0}}",
      "t0201": "已送 SIGKILL 至 {{v0}}",
      "t0202": "pid {{v0}} 已結束",
      "t0203": "deployProcess 不適用於 runtime「{{v0}}」",
      "t0204": "隔離模式：以项目用户 {{v0}} 建置與启动",
      "t0205": "Runtime：{{v0}} · 埠 {{v1}} · entry {{v2}}",
      "t0206": "建置：{{v0}}",
      "t0207": "建置失败：{{v0}}",
      "t0208": "已应用面板 {{v0}} 調校（{{v1}}）",
      "t0209": "已写入 systemd 範本：{{v0}}",
      "t0210": "已 enable --now 项目 unit（User={{v0}}）",
      "t0211": "systemctl 启动失败：{{v0}}",
      "t0212": "写入系統 unit 失败：{{v0}}",
      "t0213": "pidfile 启动 pid={{v0}}${mode === 'isolated' ? ",
      "t0214": "pidfile 启动失败：{{v0}}",
      "t0215": "健康檢查未通過（{{v0}}ms）：{{v1}}",
      "t0216": "健康檢查通過（{{v0}}ms）",
      "t0217": "已写入 Nginx 反代：{{v0}}",
      "t0218": "共 {{v0}} 個 banned IP",
      "t0219": "已 unban {{v0}} @ {{v1}}",
      "t0220": "unban 失败: {{v0}}",
      "t0221": "管理白名單: {{v0}} ({{v1}} 項)",
      "t0222": "sshd ignoreip {{v0}} {{v1}} · 状态：applied",
      "t0223": "fail2ban-client ignoreip 失败：{{v0}}（管理檔已寫；唔假 applied）",
      "t0224": "建議 fail2ban jails: {{v0}}",
      "t0225": "已写入 unit 範本 {{v0}}",
      "t0226": "尚未 applied（{{v0}}）",
      "t0227": "状态 {{v0}}",
      "t0228": "数据库數量：{{v0}}（索引 0–{{v1}}）",
      "t0229": "已複製到 {{v0}}",
      "t0230": "无法複製到系統 conf 目录：{{v0}}",
      "t0231": "複製 conf 失败：{{v0}}",
      "t0232": "已重啟 {{v0}}",
      "t0233": "複製到 {{v0}} 失败：{{v1}}",
      "t0234": "拒絕額外目录：{{v0}}",
      "t0235": "目录名不合法：{{v0}}",
      "t0236": "略過默认目录（已掃描）：{{v0}}",
      "t0237": "{{v0}}（未產生）",
      "t0238": "journal php{{v0}}-fpm（pool log 未見）",
      "t0239": "grep「{{v0}}」：{{v1}} 行命中（尾端掃描 {{v2}} bytes）",
      "t0240": "顯示尾端 {{v0}} 行（文件 {{v1}} bytes，已截斷）",
      "t0241": "顯示尾端 {{v0}} 行（文件 {{v1}} bytes）",
      "t0242": "找到 {{v0}} 個日誌檔（未指定內容關鍵字）",
      "t0243": "无法读取：{{v0}}",
      "t0244": "內容搜尋「{{v0}}」：掃 {{v1}} 檔、{{v2}} 檔有命中（只掃各檔尾端）",
      "t0245": "{{v0}} 服务器尚未安装",
      "t0246": "{{v0}} 服務未運行",
      "t0247": "{{v0}} 客戶端尚未安装",
      "t0248": "客戶端：{{v0}}",
      "t0249": "服务器：{{v0}}",
      "t0250": "{{v0}} 已就緒",
      "t0251": "{{v0}} 安装未完成",
      "t0252": "{{v0}} 服務已启动",
      "t0253": "启动失败：{{v0}}",
      "t0254": "支持 Node.js 版本 {{v0}}；可用版本：{{v1}}",
      "t0255": "不支援的 PHP 版本 {{v0}}；可用：{{v1}}",
      "t0256": "不支援的 Python 版本 {{v0}}；可用：{{v1}}",
      "t0257": "不支援的 Go 版本 {{v0}}；可用：{{v1}}",
      "t0258": "未知 runtime：{{v0}}",
      "t0259": "dig 無答案（NXDOMAIN 或空）",
      "t0260": "已解析最近 {{v0}} 行",
      "t0261": "PostgreSQL 失败: {{v0}}",
      "t0262": "MySQL 失败: {{v0}}",
      "t0263": "{{v0}}: 无法 DROP — 需 EXECUTE+root（已標記 expired）",
      "t0264": "{{v0}}: DROP 失败 {{v1}}",
      "t0265": "{{v0}}: DROP 失败 {{v1}}",
      "t0266": "{{v0}}: 已標記 expired（未 DROP 系統帳號）",
      "t0267": "FTP 用户已存在: {{v0}}",
      "t0268": "已创建 FTP 帳戶 {{v0}}",
      "t0269": "Jail 路径: {{v0}}",
      "t0270": "密码已以 crypt 雜湊保存（唔存明文）",
      "t0271": "上傳檔將以项目 Linux 用户擁有：{{v0}}（应用 vsftpd 後生效）",
      "t0272": "略過无效用户名",
      "t0273": "帳戶 {{v0}}：已遷移明文密码 → crypt 雜湊",
      "t0274": "帳戶 {{v0}} 雜湊格式非 crypt（openssl 不可用）— 登入可能失败",
      "t0275": "帳戶 {{v0}} 無密码雜湊，无法登入直至重設",
      "t0276": "帳戶 {{v0}} 綁项目但無 linuxUser — 暫用全域 guest「{{v1}}」（請重建 FTP 帳戶）",
      "t0277": "已写入 {{v0}} 個帳戶设置",
      "t0278": "{{v0}} 個帳戶",
      "t0279": "帳戶 {{v0}} 已应用，vsftpd 運行中",
      "t0280": "略過 chown {{v0}}：系統用户「{{v1}}」不存在（請先创建项目系統用户）",
      "t0281": "chown 失败 {{v0}}：{{v1}}",
      "t0282": "FTP 專用家目录（{{v0}}）",
      "t0283": "项目 {{v0}} 根目录",
      "t0284": "项目 {{v0}} public",
      "t0285": "邮件 {{v0}}",
      "t0286": "尚未创建系統用户（需要系統管理员权限）。意圖 home：{{v0}}；目前使用控制面陰影目录。",
      "t0287": "{{v0}}；已改用陰影 home {{v1}}",
      "t0288": "已嘗試停止 {{v0}}",
      "t0289": "已移除舊 home：{{v0}}",
      "t0290": "舊 home 未刪（可手動）：{{v0}} — {{v1}}",
      "t0291": "拒絕删除不安全 home 路径：{{v0}}",
      "t0292": "未刪 OS home（需 root）：{{v0}}；系統用户 {{v1}} 可能仍存在",
      "t0293": "pdnsutil load-zone 失败：{{v0}}",
      "t0294": "已透過 pdnsutil 載入 zone {{v0}}",
      "t0295": "systemctl {{v0}} fail2ban 成功",
      "t0296": "{{v0}} 失败：{{v1}}",
      "t0297": "fail2ban ban {{v0}} @ {{v1}}（臨時，受 bantime 限制）",
      "t0298": "banip 失败：{{v0}}",
      "t0299": "监狱：{{v0}}",
      "t0300": "ignoreip 來源：dataDir/fail2ban/ignoreip.txt",
      "t0301": "安装檢查：{{v0}}",
      "t0302": "已達方案项目上限 {{v0}}（package: {{v1}}）",
      "t0303": "已達方案信箱上限 {{v0}}（package: {{v1}}）",
      "t0304": "已達方案数据库上限 {{v0}}（package: {{v1}}）",
      "t0305": "已写入 {{v0}}（DB 默认 {{v1}}@{{v2}}；可用環境變數覆寫）",
      "t0306": "pm2 start 失败：{{v0}}",
      "t0307": "pm2 已启动 {{v0}}",
      "t0308": "{{v0}} 尚未安装",
      "t0309": "已执行 {{v0}}",
      "t0310": "已应用 {{v0}} 項",
      "t0311": "以下項目可能需重啟：{{v0}}",
      "t0312": "即時应用 {{v0}} 項",
      "t0313": "需重啟項（請用生命週期重啟）：{{v0}}",
      "t0314": "已 ALTER SYSTEM {{v0}} 項並 reload",
      "t0315": "部分參數需重啟後生效：{{v0}}",
      "t0316": "已 {{v0}} {{v1}}",
      "t0317": "管理 ini：{{v0}}",
      "t0318": "/etc/php/{{v0}}/fpm 不存在 — 請先安装 php{{v1}}-fpm",
      "t0319": "已应用 {{v0}} 並 reload php{{v1}}-fpm",
      "t0320": "已複製 ini；reload 失败：{{v0}}",
      "t0321": "DNS zone draft {{v0}}（需到 DNS 頁写入/应用）",
      "t0322": "已含 IPv6 {{v0}}",
      "t0323": "邮件域名 {{v0}} 已登記",
      "t0324": "MySQL DB draft {{v0}}（需到数据库頁应用）",
      "t0325": "略過：家目录不存在 {{v0}}",
      "t0326": "已备份 {{v0}}/{{v1}} 个项目",
      "t0327": "（略过 {{v0}} 个无 home）",
      "t0328": "项目目录不存在：{{v0}}",
      "t0329": "tar 失败：{{v0}}",
      "t0330": "已写入备份 {{v0}}",
      "t0331": "dry-run：文件 {{v0}}+ 個（顯示前 {{v1}}）",
      "t0332": "无法列出: {{v0}}",
      "t0333": "已選擇性還原 (web) 到 {{v0}}",
      "t0334": "web 還原失败: {{v0}}",
      "t0335": "還原失败: {{v0}}",
      "t0336": "已從 {{v0}} 完整還原到项目目录",
      "t0337": "已 chown {{v0}}:{{v1}} → {{v2}}",
      "t0338": "执行: {{v0}}",
      "t0339": "管理 crontab 檔：{{v0}}",
      "t0340": "crontab 失败: {{v0}}",
      "t0341": "pg_dump 失败: {{v0}}",
      "t0342": "dump 失败: {{v0}}",
      "t0343": "psql 失败: {{v0}}",
      "t0344": "import 失败: {{v0}}",
      "t0345": "目標 {{v0}} 非空且非 git 倉庫 — 拒絕 clone 以免覆寫資料（僅清除帶 .ysk-scaffold 的佔位範本）",
      "t0346": "已 clone {{v0}} → {{v1}}",
      "t0347": "已 pull 更新：{{v0}}",
      "t0348": "linuxUser 无效：{{v0}}",
      "t0349": "已应用 {{v0}}：{{v1}} + www-data/nginx；home 750、public g+rX",
      "t0350": "ysk-web 应用部分失败：{{v0}}",
      "t0351": "管理路径 {{v0}}",
      "t0352": "nginx 管理 conf: {{v0}}",
      "t0353": "下載失败: {{v0}}",
      "t0354": "已下載 Adminer → {{v0}}",
      "t0355": "已有 {{v0}}",
      "t0356": "nginx 管理 conf: {{v0}}",
      "t0357": "已複製 → {{v0}}",
      "t0358": "埠號无效：{{v0}}",
      "t0359": "以用户 {{v0}} 安装 crontab",
      "t0360": "沿用已有密钥 {{v0}} 個",
      "t0361": "已簽署 zone → {{v0}}（需 reload 權威 DNS；DS 仍要人手上 registrar）",
      "t0362": "未找到 managed zone 檔（試過 dns/zones/{{v0}}.zone）— 跳過簽署",
      "t0363": "{{v0}} 個文件 under {{v1}}",
      "t0364": "TCP {{v0}}:{{v1}} 正常（{{v2}}ms）",
      "t0365": "TCP {{v0}}:{{v1}} 失败：{{v2}}",
      "t0366": "PING 失败：{{v0}}",
      "t0367": "超出配額：{{v0}}MB > {{v1}}MB",
      "t0368": "磁碟配額已超限（{{v0}} / {{v1}} MiB），无法{{v2}}",
      "t0369": "home 非意圖路径（目前 {{v0}} → 應為 {{v1}}）",
      "t0370": "Linux 用户名為舊式「{{v0}}」（新建會用 {{v1}}）；遷移會保留現有用户名並改 home",
      "t0371": "就緒 {{v0}} / 降級 {{v1}} / 未隔離 {{v2}}（共 {{v3}}）",
      "t0372": "；待处理：{{v0}}{{v1}}",
      "t0373": "项目「{{v0}}」隔離",
      "t0374": "已複製到本機路径 {{v0}}",
      "t0375": "身份 {{v0}}：{{v1}}",
      "t0376": "sftp（身份密钥）连到 {{v0}} 成功",
      "t0377": "sftp（身份密钥）失败：{{v0}}",
      "t0378": "sftp 连到 {{v0}} 成功",
      "t0379": "sftp 失败：{{v0}}",
      "t0380": "sftp 连到 {{v0}} 成功",
      "t0381": "sftp 失败：{{v0}}（可设置备份 remote identityId）",
      "t0382": "已上傳 S3 {{v0}}",
      "t0383": "S3 失败: {{v0}}",
      "t0384": "政策已開：{{v0}}/{{v1}} admin 已啟用 2FA",
      "t0385": "政策未強制：{{v0}}/{{v1}} admin 已啟用 2FA",
      "t0386": "{{v0}} 在 PATH",
      "t0387": "{{v0}} 找不到",
      "t0388": "請於系統安装 {{v0}}，或於面板软件／runtime 安装",
      "t0389": "可用版本：{{v0}}",
      "t0390": "使用率約 {{v0}}%（總 {{v1}} MB）",
      "t0391": "使用率約 {{v0}}%（{{v1}}）",
      "t0392": "於服務矩陣启动 {{v0}}",
      "t0393": "模式：{{v0}}",
      "t0394": "就緒 {{v0}} / 降級 {{v1}} / 缺少 {{v2}}（共 {{v3}} 項）",
      "t0395": "找不到（預期 {{v0}}）",
      "t0396": "主機 node：{{v0}}",
      "t0397": "主機 php：{{v0}}",
      "t0398": "主機 python：{{v0}}",
      "t0399": "主機 go：{{v0}}",
      "t0400": "主機 cargo：{{v0}}",
      "t0401": "Node 可用：{{v0}}",
      "t0402": "PHP 可用：{{v0}}",
      "t0403": "Python 可用：{{v0}}",
      "t0404": "Go 可用：{{v0}}",
      "t0405": "Rust 可用：{{v0}}",
      "t0406": "準備安装 Node {{v0}}",
      "t0407": "準備安装 PHP {{v0}}",
      "t0408": "準備安装 Python {{v0}}",
      "t0409": "準備安装 Go {{v0}} 到 /usr/local/ysk/go",
      "t0410": "準備安装 Rust（{{v0}}）到 /usr/local/ysk/rust",
      "t0411": "安装失败：{{v0}}",
      "t0412": "已准备 OpenJDK {{v0}} 安装脚本",
      "t0413": "已准备 Kotlin {{v0}} 安装脚本（需 JDK）",
      "t0414": "已准备 Bun（{{v0}}）安装脚本",
      "t0415": "项目 home 公鑰：{{v0}}",
      "t0416": "登入目標用户 {{v0}}（项目隔離 home）；請對 .ssh 执行 chown（API 會嘗試）",
      "t0417": "已 chown {{v0}} → {{v1}}",
      "t0418": "chown .ssh 失败：{{v0}}",
      "t0419": "已删除 key · 重寫 authorized_keys",
      "t0420": "不支援的類型：{{v0}}",
      "t0421": "TTL {{v0}} 建議介於 30–604800",
      "t0422": "名稱 {{v0}} 同時有 CNAME 與其他類型（禁止）",
      "t0423": "名稱 {{v0}} 有多個不同 CNAME 目標",
      "t0424": "移除设置失败：{{v0}}",
      "t0425": "帳戶 {{v0}} 已写入管理设置",
      "t0426": "无法移除文件：{{v0}}",
      "t0427": "已複製 {{v0}} 個设置檔到系統目录",
      "t0428": "欄位 {{v0}} 无效",
      "t0429": "目前 home 非意圖路径（意圖 {{v0}}）",
      "t0430": "usermod -s 失败：{{v0}}",
      "t0431": "鎖定失败：{{v0}}",
      "t0432": "解鎖失败：{{v0}}",
      "t0433": "set-property 失败：{{v0}}（下次 deploy 會写入 unit）",
      "t0434": "unit {{v0}} 未 active — 限制已存 DB，下次 deploy 写入 unit",
      "t0435": "setquota 未成功（文件系統可能未啟 user_xattr/quota）：{{v0}}",
      "t0436": "home 不存在：{{v0}}",
      "t0437": "已 chown {{v0}} → {{v1}}",
      "t0438": "top header 失败：{{v0}}",
      "t0439": "ps 完整欄位失败：{{v0}}",
      "t0440": "目前 NI={{v0}}",
      "t0441": "PID {{v0}} 是本控制面進程（process.pid）",
      "t0442": "進程不存在或無權探测（kill -0 exit {{v0}}）",
      "t0443": "kill -s {{v0}} 失败：${err || ",
      "t0444": "已送 {{v0}} → PID {{v1}}",
      "t0445": "{{v0}} 个项目已暂停",
      "t0446": "{{v0}} 个项目未创建系统用户",
      "t0447": "{{v0}} 项待审批",
      "t0448": "证书已过期：{{v0}}",
      "t0449": "证书 {{v0}} 日内到期：{{v1}}",
      "t0450": "时间 {{v0}}",
      "t0451": "DNSBL 上榜：{{v0}}",
      "t0452": "{{v0}} 项应用失败／blocked",
      "t0453": "{{v0}} 项仍为 written／draft",
      "t0454": "自动防护档：{{v0}}",
      "t0455": "操作失败：{{v0}}",
      "t0456": "Journal 磁盘偏高：≈{{v0}} MB",
      "t0457": "阈值 {{v0}} MB — 可到日志中心 vacuum 或调整保留",
      "t0458": "df 失败：{{v0}}",
      "t0459": "僅量測前 {{v0}} 個项目（共 {{v1}}）",
      "t0460": "目標版本 {{v0}} → {{v1}}",
      "t0461": "已嘗試升級 {{v0}}",
      "t0462": "升級失败 exit={{v0}}",
      "t0463": "apt list --upgradable: {{v0}} 可升級",
      "t0464": "apt list --upgradable 不可用（exit {{v0}}）；改用 apt-cache policy",
      "t0465": "dpkg+apt-cache policy: {{v0}} 套件",
      "t0466": "dpkg/apt-cache policy 失败或空白（exit {{v0}}）— 可能無 apt 或权限不足",
      "t0467": "Node 進程 {{v0}}（非 apt nodejs 套件則不列入可升級清單）",
      "t0468": "真實可升級（candidate ≠ current）: {{v0}}",
      "t0469": "npm registry 回應 HTTP {{v0}}",
      "t0470": "GitHub releases 回應 HTTP {{v0}}",
      "t0471": "GitHub package.json 回應 HTTP {{v0}}",
      "t0472": "npm 頻道：{{v0}}@{{v1}}",
      "t0473": "npm {{v0}} 不可用：{{v1}}",
      "t0474": "GitHub releases 不可用：{{v0}}",
      "t0475": "GitHub 源碼 package.json（{{v0}}）：{{v1}}",
      "t0476": "GitHub package.json 不可用：{{v0}}",
      "t0477": "有更新：{{v0}} → {{v1}}",
      "t0478": "來源目录 {{v0}} 不是 git repo — 可設 YSK_SOURCE_ROOT，或改用 npm 頻道（YSK_NPM_PACKAGE）",
      "t0479": "GitHub tarball 下載失败：{{v0}}",
      "t0480": "已下載原始碼到 {{v0}}（staging only）— 未替換運行中安装；請用部署腳本／git 工作目录完成切換",
      "t0481": "使用 git 來源：{{v0}}",
      "t0482": "git apply 步驟 {{v0}} 失败 (exit {{v1}}): {{v2}}",
      "t0483": "已更新來源樹至目標 {{v0}} 並 build — 請重啟 ysk-server 程序令新版本生效",
      "t0484": "已安装 {{v0}}",
      "t0485": "npm 更新失败：{{v0}}",
      "t0486": "已用 YSK_NPM_PACKAGE 安装 {{v0}}",
      "t0487": "YSK_NPM_PACKAGE 安装失败：{{v0}}",
      "t0488": "可升級 {{v0}} → {{v1}}（CRITICAL CVE，需確認）",
      "t0489": "可升級 {{v0}} → {{v1}}（HIGH CVE，需確認）",
      "t0490": "可升級 {{v0}} → {{v1}}（可能不相容，需確認）",
      "t0491": "可升級 {{v0}} → {{v1}}（安全修補）",
      "t0492": "可升級 {{v0}} → {{v1}}（apt Candidate）",
      "t0493": "無可用升級，但 OSV 標註已裝版有 {{v0}} 項漏洞信號",
      "t0494": "服務状态：{{v0}}",
      "t0495": "已偵測到可执行檔：{{v0}}",
      "t0496": "未知 Agent 運行時：{{v0}}",
      "t0497": "不支援的 Agent 類型：{{v0}}",
      "t0498": "安装指令失败（唔會假裝成功）：{{v0}}",
      "t0499": "Agent 找不到 session：{{v0}}",
      "t0500": "找不到任務：{{v0}}",
      "t0501": "用户已存在: {{v0}}",
      "t0502": "救援用户排除：{{v0}}",
      "t0503": "已排除项目 SFTP 風格用户（ysks_/ysk_，internal-sftp 不適合 kbd-interactive）：{{v0}}",
      "t0504": "已從 strict 列表移除救援用户：{{v0}}",
      "t0505": "{{v0}} 個用户將要求 publickey+TOTP、关闭 password",
      "t0506": "管理檔：{{v0}}",
      "t0507": "已安装 {{v0}} 並嘗試 reload sshd",
      "t0508": "安装／sshd -t 失败：{{v0}}",
      "t0509": "PAM 預覽會寫管理檔：{{v0}}",
      "t0510": "chown 可能失败：{{v0}}",
      "t0511": "警告：期望 mode 400（stat: {{v0}}）",
      "t0512": "PAM 片段（管理檔）：{{v0}}",
      "t0513": "sshd 提示（管理檔）：{{v0}}",
      "t0514": "scratch（只此一次回應）：{{v0}} — 請離線保存",
      "t0515": "pam.d/sshd 已引用：{{v0}}",
      "t0516": "用户 {{v0}} 已有 SSH 2FA（{{v1}}）。先 disable/retire。",
      "t0517": "已產生 secrets master key：{{v0}}",
      "t0518": "chown 可能失败：{{v0}}",
      "t0519": "ssh 失败：{{v0}}",
      "t0520": "已產生 master key：{{v0}}（請一併备份）",
      "t0521": "已產生 master key：{{v0}}",
      "t0522": "已有相同 fingerprint：{{v0}} ({{v1}})",
      "t0523": "已寫 CF-only UFW 腳本：{{v0}}",
      "t0524": "保留埠：{{v0}}",
      "t0525": "CF IPv4 段：{{v0}} 個",
      "t0526": "CF IPv6 段：{{v0}} 個",
      "t0527": "ufw 腳本失败：{{v0}}",
      "t0528": "auth 失败 IP：{{v0}}",
      "t0529": "Top IP 樣本 {{v0}} 個",
      "t0530": "威脅分 {{v0}} · {{v1}}",
      "t0531": "自動防護檔 → {{v0}}{{v1}}",
      "t0532": "自動切換防護檔：{{v0}}",
      "t0533": "SSH 失败×{{v0}}",
      "t0534": "auth 失败來源 {{v0}} IP",
      "t0535": "請求×{{v0}}",
      "t0536": "掃描×{{v0}}",
      "t0537": "批量封禁 {{v0}}/{{v1}}",
      "t0538": "完成 {{v0}} 個 IP：成功 {{v1}}",
      "t0539": "熔斷：本小時已 auto-ban {{v0}} 次",
      "t0540": "熔斷：本小時已達上限 {{v0}}",
      "t0541": "自動 ban {{v0}} 個 IP",
      "t0542": "无法解析 zone {{v0}}（HTTP {{v1}}）",
      "t0543": "計劃：將 {{v0}} security_level → {{v1}}",
      "t0544": "模擬：{{v0}} → security_level={{v1}}",
      "t0545": "本小時已達上限（{{v0}}）",
      "t0546": "本小時 {{v0}} 次",
      "t0547": "緊急檔需 confirm=\"{{v0}}\"",
      "t0548": "已寫 Nginx 限速：{{v0}}",
      "t0549": "已注入 {{v0}} 個 vhost 限速標記",
      "t0550": "作用中防護檔 → {{v0}}",
      "t0551": "自動 ban → {{v0}}（{{v1}} / {{v2}}）",
      "t0552": "应用防護檔：{{v0}}",
      "t0553": "fail2ban 失败：{{v0}}",
      "t0554": "ufw 失败：{{v0}}",
      "t0555": "封禁 {{v0}}",
      "t0556": "ufw delete 失败：{{v0}}",
      "t0557": "解封 {{v0}}",
      "t0558": "略過 {{v0}}：{{v1}}",
      "t0559": "已注入限速到 {{v0}} 個 vhost",
      "t0560": "cluster_size={{v0}} < 登記节点 {{v1}}",
      "t0561": "只有 {{v0}} 個节点在 cluster",
      "t0562": "probe 不支援 {{v0}}",
      "t0563": "mysql/mariadb 查詢失败：{{v0}}",
      "t0564": "SHOW REPLICA/SLAVE 失败：{{v0}}",
      "t0565": "SHOW MASTER 失败：{{v0}}",
      "t0566": "replica 應為 recovery，實際={{v0}}",
      "t0567": "primary 不應 recovery，實際={{v0}}",
      "t0568": "replica 異常 role={{v0}}",
      "t0569": "期望 master，實際 role={{v0}}",
      "t0570": "{{v0}} 個產物檔 · {{v1}}",
      "t0571": "tar 失败：{{v0}}",
      "t0572": "已打包 {{v0}}（{{v1}} bytes）",
      "t0573": "{{v0}} 個 peer 目標",
      "t0574": "{{v0}}: identity {{v1}} 不可用 — 改用默认 key",
      "t0575": "{{v0}}: ssh mkdir 失败 {{v1}}",
      "t0576": "{{v0}}: 本地缺 {{v1}}",
      "t0577": "{{v0}}/{{v1}}: scp 失败 {{v2}}",
      "t0578": "{{v0}} 個 agent · op={{v1}}",
      "t0579": "{{v0}}: enqueue 失败 {{v1}}",
      "t0580": "未知拓撲 {{v0}}",
      "t0581": "本機 Galera conf（{{v0}}）",
      "t0582": "在 {{v0}} 安装 conf 並 join（手動 / SSH / fleet）",
      "t0583": "install conf → systemctl restart mariadb（非 bootstrap 节点）",
      "t0584": "找不到 conf 產物：{{v0}}",
      "t0585": "本機 apply 不支援 {{v0}}",
      "t0586": "已安装系統 drop-in：{{v0}}",
      "t0587": "写入系統 conf 失败：{{v0}}",
      "t0588": "galera_new_cluster 失败：{{v0}}",
      "t0589": "已 systemctl restart {{v0}}（從庫/slot/sentinel 後續步驟見 scripts/）",
      "t0590": "已 systemctl restart {{v0}}",
      "t0591": "ssh probe 失败：{{v0}}",
      "t0592": "replica probe 失败：{{v0}}",
      "t0593": "primary probe 失败：{{v0}}",
      "t0594": "全部 {{v0}} 节点 probe OK · size={{v1}}",
      "t0595": "全部 {{v0}} 节点 probe OK",
      "t0596": "會安装到 {{v0}} 並 {{v1}}",
      "t0597": "scp 失败 {{v0}}",
      "t0598": "install conf 失败：{{v0}}",
      "t0599": "conf 已寫但 restart {{v0}} 失败",
      "t0600": "已寫 {{v0}}${restart ? ",
      "t0601": "不支援的引擎：{{v0}}",
      "t0602": "不支援的集群類型：{{v0}}",
      "t0603": "已嘗試停止 {{v0}} 個项目 unit（ok-ish {{v1}}）",
      "t0604": "部分 stop 非零 exit（共 {{v0}}）— 仍繼續 dump",
      "t0605": "與 {{v0}} 共用同一 RDB（略過重複 dump）",
      "t0606": "打包完成 → {{v0}}",
      "t0607": "已创建用户 {{v0}} uid={{v1}}",
      "t0608": "用户已存在 {{v0}}",
      "t0609": "useradd 失败: {{v0}}",
      "t0610": "chown 失败: {{v0}}",
      "t0611": "home 不存在，略過 chown: {{v0}}",
      "t0612": "dump 檔不存在或空: {{v0}}",
      "t0613": "RDB 不存在: {{v0}}",
      "t0614": "已還原 RDB → {{v0}}",
      "t0615": "複製 RDB 失败: {{v0}}",
      "t0616": "redis 启动/ping: {{v0}}",
      "t0617": "提示：{{v0}} 不存在 — dump 應在 dataDir 隨 rsync 到達（dumpRelPath）",
      "t0618": "无法解析目標 sha256: {{v0}}",
      "t0619": "ysk.json sha256 一致 {{v0}}…",
      "t0620": "ysk.json 不一致 local={{v0}} remote={{v1}}",
      "t0621": "本機 dataDir 不存在: {{v0}}",
      "t0622": "dataDir 不存在: {{v0}}",
      "t0623": "略過不存在的 home: {{v0}}",
      "t0624": "home 已在 dataDir 內，隨 dataDir 傳輸: {{v0}}",
      "t0625": "rsync home 失败 {{v0}}",
      "t0626": "transfer 中止：home rsync 失败 {{v0}}",
      "t0627": "略過不存在: {{v0}}",
      "t0628": "transfer 完成 → {{v0}}:{{v1}}",
      "t0629": "项目 {{v0}} home 不存在: {{v1}}",
      "t0630": "项目 {{v0}} 綁定 bind_ip={{v1}} — 遷移後可能需清空（新機 IP 不同）",
      "t0631": "项目 {{v0}} home 非標準路径: {{v1}}",
      "t0632": "磁碟有孤立 home（store 無對應）: {{v0}}",
      "t0633": "Maildir 不存在: {{v0}}",
      "t0634": "來源缺 {{v0}} — 无法傳輸到目標機",
      "t0635": "无法探测 {{v0}}",
      "t0636": "來源 {{v0}} · {{v1}}",
      "t0637": "项目 {{v0}} · 信箱 {{v1}} · DB {{v2}} · Redis {{v3}}",
      "t0638": "需安装软件 {{v0}} 项 · homes {{v1}}",
      "t0639": "cutover 主機名 {{v0}}",
      "t0640": "警告 {{v0}} 則（請審閱）",
      "t0641": "已產生臨時密钥 {{v0}}",
      "t0642": "无法產生臨時密钥: {{v0}}",
      "t0643": "目標未確認写入 authorized_keys: {{v0}}",
      "t0644": "已在 {{v0}} 安装臨時公鑰（後續改用 key 登入）",
      "t0645": "删除臨時密钥失败: {{v0}}",
      "t0646": "{{v0}} 可用",
      "t0647": "dataDir 不存在: {{v0}}",
      "t0648": "預估傳輸量 ~{{v0}}",
      "t0649": "來源可用 {{v0}}（dump 緩衝充足）",
      "t0650": "來源磁碟不足：可用 {{v0}}，建議 ≥ {{v1}}",
      "t0651": "盤點警告 {{v0}} 則（非全部阻塞）",
      "t0652": "SSH 连接 {{v0}}",
      "t0653": "目標用户 {{v0}} 非 root（MVP 需要 root）",
      "t0654": "不支援的 OS（{{v0}}）；需要 Debian/Ubuntu",
      "t0655": "目標可用 {{v0}} ≥ 需求 {{v1}}",
      "t0656": "目標磁碟不足：可用 {{v0}}，需要約 {{v1}}",
      "t0657": "目標已有 {{v0}}/ysk.json — 拒絕覆蓋（需 forceWipeTarget）",
      "t0658": "目標目录存在但無 ysk.json: {{v0}}",
      "t0659": "目標目录將创建: {{v0}}",
      "t0660": "時鐘偏差 {{v0}}s",
      "t0661": "時鐘偏差 {{v0}}s ≥ 120s（影響 TLS/TOTP）",
      "t0662": "项目 {{v0}} 來源 bind_ip={{v1}} — 新機應改為空（全接口）",
      "t0663": "已清空 {{v0}} 個 project.bind_ip",
      "t0664": "无法 persist bind_ip 修正: {{v0}}",
      "t0665": "nginx sync 例外: {{v0}}",
      "t0666": "私鑰不存在: {{v0}}",
      "t0667": "identity {{v0}} 不可用",
      "t0668": "SSH 失败 exit={{v0}}: {{v1}}",
      "t0669": "本地路径不存在: {{v0}}",
      "t0670": "rsync 失败 exit={{v0}}: {{v1}}",
      "t0671": "Redis RDB 已写入 {{v0}}（--rdb）",
      "t0672": "--rdb 失败: {{v0}}",
      "t0673": "BGSAVE 失败: {{v0}}",
      "t0674": "Redis RDB 已複製 {{v0}} → {{v1}}（BGSAVE）",
      "t0675": "无法取得 Redis RDB（src={{v0}}）",
      "t0676": "{{v0}} 期望 {{v1}} 實際 {{v2}}",
      "t0677": "來源 home 本就不存在，略過: {{v0}}",
      "t0678": "home 缺失 {{v0}}",
      "t0679": "來源 Maildir 本就不存在: {{v0}}",
      "t0680": "maildir 缺失 {{v0}}",
      "t0681": "ysk.json fingerprint 已變（可能 reapply 寫回）local≠source",
      "t0682": "readiness 错误: {{v0}}",
      "t0683": "DNS cutover：將以下 A/AAAA 指向新 IP → {{v0}}{{v1}}",
      "t0684": "verify 失败：{{v0}} 項 mismatch",
      "t0685": "verify 通過（mismatches={{v0}}）",
      "t0686": "无效 target: {{v0}}（需要 root@host 或 host）",
      "t0687": "找不到 job {{v0}}",
      "t0688": "手動：在目標执行 YSK_EXECUTE=1 ysk-server migrate post --job {{v0}} --data-dir {{v1}}",
      "t0689": "整機遷移完成 → {{v0}}",
      "t0690": "cutover 主機名: {{v0}}",
      "t0691": "遠端 post 完成 @ {{v0}}",
      "t0692": "找不到 job {{v0}}（確認 dataDir 已 rsync）",
      "t0693": "遠端未回報成功標記 ({{v0}})",
      "t0694": "bootstrap 完成 → {{v0}}",
      "t0695": "非關鍵失败: {{v0}}",
      "t0696": "不支援的 mode：{{v0}}",
      "t0697": "找不到 edge 节点：{{v0}}",
      "t0698": "节点 {{v0}} 需有 edge（或 origin）角色",
      "t0699": "不支援的 DNS 策略：{{v0}}",
      "t0700": "不支援的 SSL mode：{{v0}}",
      "t0701": "CDN 站點上限 {{v0}}",
      "t0702": "origin shield 节点不存在：{{v0}}",
      "t0703": "edges: {{v0}} 個",
      "t0704": "origin URL（回源）: {{v0}}",
      "t0705": "已更新既有 CDN 站點 {{v0}}",
      "t0706": "已创建 CDN 站點 {{v0}}",
      "t0707": "origin shield：本 edge 回源經 shield {{v0}} → {{v1}}",
      "t0708": "origin.kind=project 但未提供 projectOriginUrl — 使用佔位 {{v0}}",
      "t0709": "edge {{v0}} ({{v1}}): planned（未 fan-out — PR-C3）",
      "t0710": "edge {{v0}}: 节点缺失",
      "t0711": "已写入 managed nginx：{{v0}}",
      "t0712": "已写入 edge 模板：{{v0}}",
      "t0713": "本機 nginx -t 失败（proxy_cache_path 可能需在 http{}）：{{v0}}",
      "t0714": "使用 certId={{v0}} domain={{v1}}",
      "t0715": "certId={{v0}} 文件不存在：{{v1}}",
      "t0716": "找不到 certId={{v0}}",
      "t0717": "使用 dataDir 证书 {{v0}}",
      "t0718": "使用本機 Let’s Encrypt {{v0}}",
      "t0719": "scp 失败 {{v0}}",
      "t0720": "mkdir 失败 {{v0}}",
      "t0721": "certbot 失败：{{v0}}",
      "t0722": "originShieldNodeId={{v0}} 不存在 — 忽略 shield",
      "t0723": "{{v0}}: 有 SSH 目標 — 使用 SSH 同步应用（略過 fleet 佇列）",
      "t0724": "fleet 无法入佇列（blocked={{v0}}）— 提供 enqueue 或改用 SSH",
      "t0725": "fleet 已入队列 {{v0}} edge — queued ≠ agent 已 nginx reload；查看 Agents 指令纪录",
      "t0726": "fleetAgentId={{v0}} — 需要控制面 fleet enqueue（API 會注入）；或改填 SSH 做同步应用",
      "t0727": "找不到 conf：{{v0}}",
      "t0728": "讀 conf 失败：{{v0}}",
      "t0729": "fleet enqueue 失败：{{v0}}",
      "t0730": "nginx -t 失败：{{v0}}",
      "t0731": "SSH mkdir 失败：{{v0}}",
      "t0732": "scp 失败：{{v0}}",
      "t0733": "remote reload 失败：{{v0}}",
      "t0734": "fleetAgentId={{v0}} — purge 需 fleet enqueue 或 SSH",
      "t0735": "enqueue 失败：{{v0}}",
      "t0736": "purge 失败：{{v0}}",
      "t0737": "remote purge 失败：{{v0}}",
      "t0738": "fleet purge 已入佇列 {{v0}} — queued ≠ edge 已 purge",
      "t0739": "geo {{v0}}: 未知节点 {{v1}}",
      "t0740": "weighted 縮放至 maxRr={{v0}}（總副本 {{v1}}）",
      "t0741": "minHealthyEdges={{v0}} 但僅 {{v1}} 個健康 edge — 防全滅：改用全部有 IP 的 edge（含 offline）",
      "t0742": "edge {{v0}} 不存在 — 略過",
      "t0743": "probe {{v0}} 例外：{{v1}}",
      "t0744": "已綁定 zoneId={{v0}} ({{v1}})",
      "t0745": "名稱 {{v0}} 已有 user 管理記錄 {{v1}} 筆 — CDN 仍写入 managedBy=cdn（可能並存；請檢查 zone）",
      "t0746": "geo subdomain {{v0}}: 無 IP — 略過",
      "t0747": "access_log 抽樣 {{v0}}（{{v1}} 個 cache status token）",
      "t0748": "读取本地 log {{v0}}",
      "t0749": "cache 目录 {{v0}} ≈ {{v1}} bytes（非命中率）",
      "t0750": "cache 抽樣僅前 {{v0}}/{{v1}} 個站點",
      "t0751": "IPv4 无效：{{v0}}",
      "t0752": "IPv6 无效：{{v0}}",
      "t0753": "CDN 节点上限 {{v0}}",
      "t0754": "HTTP {{v0}}（視為不健康）{{v1}}",
      "t0755": "HTTP 探活失败：{{v0}}",
      "t0756": "TCP {{v0}}:443/80 皆无法连接",
      "t0757": "探活 {{v0}}/{{v1}} 健康",
      "t0758": "list-units 失败：{{v0}}",
      "t0759": "共 {{v0}} 個 service units",
      "t0760": "已改用 unit {{v0}}",
      "t0761": "輸出截斷至 {{v0}} bytes",
      "t0762": "journalctl · {{v0}} 行",
      "t0763": "已 vacuum：{{v0}}",
      "t0764": "vacuum 失败：{{v0}}",
      "t0765": "應用層 filter：{{v0}} 行匹配",
      "t0766": "文件 {{v0}} · {{v1}} bytes · 顯示 {{v2}} 行",
      "t0767": "路径不在 allowlist：{{v0}}",
      "t0768": "Journal 磁碟偏高：≈{{v0}} MB（閾值 {{v1}} MB）",
      "t0769": "项目 {{v0}} · {{v1}} 個 log 檔（含子目录）",
      "t0770": "已匯出 {{v0}} 行（{{v1}}）",
      "t0771": "未到時間窗 {{v0}}",
      "t0772": "每月（DB-IP City Lite {{v0}}；失败試上月）",
      "t0773": "每月 fallback {{v0}}",
      "t0774": "政策：{{v0}} · 國 {{v1}} · 省 {{v2}} · 市 {{v3}}{{v4}} · ASN {{v5}}",
      "t0775": "文件過細（{{v0}} B），可能下載失败",
      "t0776": "略過 {{v0}} fallback（已成功）",
      "t0777": "已更新 {{v0}}（{{v1}} B）",
      "t0778": "更新失败 {{v0}}：{{v1}}{{v2}}",
      "t0779": "找不到设置檔：{{v0}}",
      "t0780": "无法解析设置檔：{{v0}}",
      "t0781": "找不到证书：{{v0}}",
      "t0782": "dry-run：未 systemctl {{v0}}。加 --execute 且 YSK_EXECUTE=1 + root 先真正执行",
      "t0783": "找不到 job {{v0}}",
      "t0784": "Web UI:  找不到 (build apps/web or set YSK_WEB_ROOT)\\n",
      "t0785": "DNS zone 已创建（draft）: {{v0}}",
      "t0786": "DNS zone 创建失败: {{v0}}",
      "t0787": "邮件域名已登記: {{v0}}",
      "t0788": "邮件域名创建失败: {{v0}}",
      "t0789": "找到 {{v0}} 個可能相關嘅續期 cron",
      "t0790": "restic {{v0}}/{{v1}} 成功",
      "t0791": "已確保排程：{{v0}} {{v1}}",
      "t0792": "设置已存在於 {{v0}}。使用 --force 覆寫。",
      "t0793": "设置已存在於 {{v0}}",
      "t0794": "找不到接口 {{v0}}",
      "t0795": "hostname 失败: {{v0}}",
      "t0796": "pretty hostname 失败: {{v0}}",
      "t0797": "timezone 失败: {{v0}}",
      "tScoreFrom": "分数={{score}} · 由 {{from}} 切换",
      "appliedTag": "（已应用）",
      "writtenTag": "（只写文件）",
      "selfDestMissing": "找不到运行中安装目录（systemd ExecStart 或运行中 cli.js）",
      "selfDestUnwritable": "无法写入运行中安装目录 {{v0}}",
      "selfApplied": "已将 {{v0}} 应用到 {{v1}}",
      "selfVerifyFail": "应用后版本文件未包含 {{v0}}",
      "selfDownloadFail": "无法下载或解压官方套件 {{v0}}：{{v1}}",
      "selfOverlayFail": "官方套件未能应用到运行中目录：{{v0}}",
      "selfUpgradeHint": "面板套用失败。请以 root 执行：curl -fsSL https://raw.githubusercontent.com/yanshekki/ysk-server/main/install.sh | bash -s -- --upgrade"
    },
    "tpl": {
      "deleted": "已删除 {{name}}",
      "removed": "已移除 {{name}}",
      "failedDetail": "失败：{{detail}}",
      "failedColon": "失败: {{detail}}",
      "actionFailed": "{{action}} 失败: {{detail}}",
      "restartFailed": "重启失败：{{detail}}",
      "chownFailed": "chown 失败：{{detail}}",
      "available": "可用：{{detail}}",
      "supportedNotProbed": "支持 {{name}} — 尚未探测到",
      "wrote": "已写 {{path}}",
      "wroteSettings": "已写入设置 {{path}}",
      "wroteManaged": "已写入管理文件 {{path}}",
      "copyFailed": "复制失败：{{detail}}",
      "copyFailed2": "复制失败: {{detail}}",
      "reloadFailed": "reload 失败：{{detail}}",
      "reloadFailed2": "reload 失败: {{detail}}",
      "nginxReloadFailed": "nginx reload 失败：{{detail}}",
      "nginxTestFailed": "nginx -t 失败: {{detail}}",
      "nginxConfigFailed": "Nginx 配置检查失败：{{detail}}",
      "psqlFailed": "psql 失败：{{detail}}",
      "redisCliFailed": "redis-cli 失败：{{detail}}",
      "restartFailed2": "restart 失败：{{detail}}",
      "missing": "缺少 {{name}}",
      "project": "项目 {{name}}",
      "logNotFound": "找不到日志：{{path}}",
      "clusterNotFound": "找不到集群：{{id}}",
      "domainInvalid": "域名无效：{{domain}}",
      "exported": "已导出 {{path}}",
      "reenabledLink": "已重新启用连接 {{name}}",
      "installed": "已安装",
      "missingDataDir": "缺少 dataDir",
      "installIncomplete": "安装未完成",
      "noPackages": "无软件包",
      "recentlyUpdated": "最近已更新",
      "needRootRead": "需 root 读取",
      "reenabledPersist": "已重新启用连接（重启仍在）",
      "runtimeOnlyHint": "（重启可能消失；要持久请用「保存」）",
      "statusWrittenPartial": "状态：written/partial",
      "keyMissingOrNotDeleted": "key 不存在或未删除",
      "passwordCryptStored": "密码已以 crypt 哈希存储（不存明文）",
      "skipInvalidUsername": "跳过无效用户名",
      "digNoAnswer": "dig 无答案（NXDOMAIN 或空）",
      "ipAddrAddFailed": "ip addr add 失败：{{detail}}",
      "ipAddrDelFailed": "ip addr del 失败：{{detail}}",
      "connUpWarn": "connection up 警告：{{detail}}",
      "ntpEnableFailed": "启用 NTP 失败: {{detail}}",
      "cancelFailed": "取消失败: {{detail}}",
      "powerCmdFailed": "电源指令失败: {{detail}}",
      "reniceFailed": "renice 失败：{{detail}}",
      "pgIncludeHint": "请将此文件 include 到 postgresql.conf 或在应用时复制",
      "none": "无",
      "success": "成功",
      "on": "开",
      "off": "关",
      "continueOp": "继续操作",
      "unavailable": "不可用",
      "unknownError": "未知错误",
      "noParen": "(无)",
      "keepOldDb": "（保留旧库）",
      "ufwNotDetected": "系统未检测到 UFW",
      "fail2banStartHint": "可到 fail2ban 页启动",
      "hasExecuteNotRoot": "有 EXECUTE 但非 root",
      "notRootTarget": "非 root（目标 useradd/apt 会 blocked）",
      "reapplyDone": "reapply 关键步骤完成",
      "someFailed": "有失败 — 请查看 results",
      "securityDesc": "密码、TLS、本机限制",
      "yskControlPlane": "YSK 控制面",
      "sslDistributeNote": "SSL distribute：edge 上的 cert ≠ 浏览器信任链完整；请 dig / curl -vI https:// 验证",
      "autoNever": "永不自动",
      "autoManualEmergency": "只人手 EMERGENCY",
      "probeMech": "外网 TCP、面板 req/min、TCP inuse、fail2ban、UFW",
      "probeTunable": "升／降档门槛",
      "priorityBlockers": "优先处理 {{count}} 项阻挡：{{list}}",
      "readinessNotProduction": "readiness 未达 production：{{list}}",
      "noRestart": "不 restart",
      "cityPolicyOff": "（市政策关）",
      "pidStarted": "进程已启动 pid={{pid}} {{extra}}",
      "pidUser": "（user={{user}}）",
      "pidDegraded": "（degraded）",
      "killFailed": "kill -s {{sig}} 失败：{{detail}}",
      "routeAdded": "已加入路由 {{dst}}{{via}}{{dev}}",
      "dnsWritten": "已写入 {{conn}}：DNS {{dns}}{{search}}",
      "peerInstalled": "已安装到 {{dest}}{{restart}}"
    },
    "installedTool": "已安装（工具）",
    "cron": {
      "preserveHostLines": "已保留主机 crontab 中 {{count}} 行非 YSK 任务（不会整份覆盖）。",
      "noHostLinesOrEmpty": "主机 crontab 无额外非 YSK 行（或空白）。",
      "installReplacesYskOnly": "安装只更新带 YSK 标记的任务；其他主机任务已合并保留。",
      "hostScanNeedRoot": "读取其他用户 crontab 需要控制面以 root 运行；目前只能列出控制面自身 crontab。",
      "hostScanSkipUser": "跳过用户 {{user}}（无权读取）",
      "hostUserInvalid": "crontab 用户无效。",
      "hostScheduleInvalid": "主机 cron 排程无效。",
      "hostLineNotJob": "该 crontab 行不是工作。",
      "hostLineMissing": "找不到对应的 crontab 行（主机 crontab 可能已变更）。",
      "hostLineDuplicate": "该工作行出现 {{count}} 次；请先改成唯一的一行。",
      "hostReadFailed": "无法读取 crontab：{{detail}}",
      "hostWriteFailed": "写入 crontab 失败：{{detail}}",
      "hostRewriteNeedExecute": "写入主机 crontab 需要 root 与 YSK_EXECUTE=1。目前只是预览。",
      "hostRewriteNeedRoot": "修改其他用户的 crontab 需要控制面以 root 执行。",
      "hostPreview": "下一行：{{line}}",
      "hostPreviewDelete": "下一步：移除该行。",
      "hostRewritten": "已写入 {{user}} 的 crontab。",
      "hostRunNeedExecute": "试跑主机 cron 指令需要 YSK_EXECUTE=1。",
      "hostRan": "已用 {{user}} 试跑主机 cron 指令。",
      "hostAdoptNeedExecute": "把主机行纳入面板需要 YSK_EXECUTE=1（否则安装时会重复）。",
      "hostAdopted": "主机行已标 # ysk:{{id}} 并登记到面板。",
      "hostConfirmMismatch": "确认内容必须与指令相同。",
      "hostAdoptOnlyInstallUser": "只能纳入“安装到系统”会写入的 crontab（root／本进程用户）。其他用户安装时会重复。",
      "hostAdoptEnableFirst": "请先启用该主机行，再纳入面板。",
      "hostPercentNewline": "crontab 把未跳脱的 % 当成换行。日期格式请写 \\%Y（或不要用 %）。"
    },
    "dbBrowser": {
      "pmaInstalled": "已安装 phpMyAdmin → {{path}}",
      "pmaConfigWritten": "已写入 phpMyAdmin 配置与临时目录（Cookie 登录；上 HTTPS 更稳）",
      "pmaExtractFailed": "phpMyAdmin 下载或解压失败：{{detail}}",
      "projectCreated": "已创建项目 {{id}}（{{name}}）"
    },
    "firewallAllow": {
      "already": "{{port}}/{{proto}}{{from}}：规则已存在",
      "partial": "部分成功：{{ok}} 成功、{{fail}} 失败",
      "fromLabel": "（来源 {{from}}）"
    },
    "firewallDeleteByComment": {
      "removed": "已移除 {{n}} 条符合 {{prefix}} 的防火墙规则",
      "none": "没有符合 {{prefix}} 的防火墙规则"
    },
    "serviceExposure": {
      "needsDecision": "{{service}}：请确认是否对外暴露此服务",
      "private": "{{service}}：保持仅本机（未开放公网端口）",
      "restrictedEmpty": "受限模式需要至少一个允许的 IP／网段",
      "badCountry": "无效国家代码：{{cc}}",
      "zoneDownloadFail": "下载 {{cc}} 国家网段失败：{{detail}}",
      "zoneEmpty": "{{cc}} 国家网段文件为空",
      "zoneDownloaded": "已下载 {{cc}} 共 {{n}} 个 CIDR",
      "zoneMissing": "缺少 {{cc}} 网段文件 — 请放到 geoip/country-zones 或允许下载",
      "zoneCidrCap": "国家 CIDR 已上限至 {{n}} 条",
      "geoNeedExecute": "国家允许列表需要 YSK_EXECUTE",
      "geoNeedRoot": "国家允许列表需要 root",
      "geoNoCidrs": "未加载任何国家 CIDR — 无法应用地区限制",
      "ipsetMissing": "未安装 ipset — 已跳过国家允许列表",
      "ipsetApplyFail": "ipset／iptables 应用失败：{{detail}}",
      "ipsetApplied": "已应用国家允许集合 {{set}}（{{countries}}，{{n}} 个 CIDR）",
      "ipsetCleared": "已清除国家 ipset {{set}}",
      "geoBestEffort": "国家过滤为 best-effort（ipset）；云安全组须另行设置"
    },
    "goLive": {
      "deployIncomplete": "上线：部署未完成",
      "deployFailed": "上线部署失败：{{detail}}",
      "publishIncomplete": "上线：发布 Nginx 未完成",
      "publishFailed": "上线发布失败：{{detail}}"
    },
    "ops": {
      "projectNameExists": "项目名称已存在：{{name}}",
      "sslNotReady": "SSL 未就绪：域名 {{domain}} 尚无可用证书。",
      "sslNotReadyDetail": "SSL 未就绪：域名 {{domain}} 尚无可用证书（面板申请／上传或 Let’s Encrypt live 路径）。",
      "sslGoToPage": "请先到「SSL 证书」申请或上传，再发布 + SSL。",
      "sslRejectWrite": "已拒绝写入 SSL nginx conf，避免 nginx -t 因缺文件失败。",
      "installAborted": "安装已中止（客户端断线或取消）",
      "phpPackagesPartialFail": "部分 PHP 软件包安装失败：{{list}}（核心 CLI 可能仍可用）",
      "pdnsBindConflict": "PowerDNS 无法绑定 0.0.0.0:53（端口被占用），多与 systemd-resolved 冲突。请改绑公网 IP（面板：修复 PowerDNS）。"
    },
    "webmail": {
      "notInstalled": "尚未安装网页邮件；请勾选下载后再执行",
      "needExecute": "下载网页邮件需要系统变更权限（YSK_EXECUTE）及外网",
      "needExecuteBeforeCreate": "未开系统变更权限前不会建立半成品项目",
      "notRoundcubeTree": "文档根目录不是完整 Roundcube（仍可能是 php-hello）",
      "notSnappyTree": "文档根目录不是完整 SnappyMail",
      "installIncompleteHint": "项目已存在但网页邮件未装好 — 请开 EXECUTE 后按「重新安装／升级」",
      "extractFailed": "{{tool}} 下载或解压失败：{{detail}}",
      "roundcubeInstalled": "已安装 Roundcube {{version}} → {{path}}",
      "roundcubeReuse": "沿用已安装 Roundcube → {{path}}",
      "roundcubeConfigWritten": "已写入 Roundcube 配置（SQLite、IMAP 993、SMTP 587）",
      "snappyInstalled": "已安装 SnappyMail {{version}} → {{path}}",
      "snappyReuse": "沿用已安装 SnappyMail → {{path}}",
      "snappyAdminHint": "首次打开请完成 SnappyMail 管理员初始化，并添加本机 IMAP 域名",
      "imapSmtpHint": "IMAP {{imap}}:993 · SMTP {{smtp}}:587（登录用邮箱完整地址与密码）",
      "projectCreated": "已创建 PHP 项目 {{name}}（{{tool}}，{{id}}）",
      "domainRequired": "需要网页邮件主机名",
      "openHint": "以邮箱地址与密码登录；上线后请到项目页或本页打开网址",
      "sslHint": "建议为 {{domain}} 申请 Let’s Encrypt（SSL 页）",
      "bootstrapLegacyHint": "Bootstrap 未注入项目服务，已写 dataDir 骨架；面板请用「创建并上线」走 PHP 项目路径",
      "ssoPluginInstalled": "已安装 SSO 插件 → {{path}}",
      "forceHttpsOn": "Roundcube force_https 已开启（需已有 HTTPS）",
      "forceHttpsOff": "force_https 关闭 — 请在 SSL 页签发后重装并勾选强制 HTTPS",
      "reinstallHint": "项目已存在：请用「重新安装／升级」或传 reinstall:true",
      "reinstalling": "重新安装网页邮件到项目 {{name}}（{{id}}）",
      "reinstallStart": "开始升级／重装（目标版本相关：{{version}}，项目 {{id}}）",
      "projectNotFound": "找不到网页邮件项目",
      "snappyAdminOnce": "SnappyMail 管理员账号 {{user}} — 密码只显示一次（见结果／ONCE 文件）",
      "snappyAdminPassword": "SnappyMail 管理员密码（请立即复制）：{{password}}",
      "publicHtmlStub": "文档根目录仍是 SnappyMail／RainLoop 外层 stub。HTTP 必须指向 public_html 应用树 — 请应用此修复后重新安装网页邮件。",
      "goLiveFailed": "网页邮件文件已安装，但项目上线／部署健康检查失败 — 请展开详情。",
      "forceHttpsNeedsSsl": "已开启 Roundcube 强制 HTTPS：请先为此主机名绑定 SSL，否则公网跳转可能失败；未绑证前可取消勾选。",
      "roundcubePublicHtmlDocRoot": "HTTP 文档根已设为 Roundcube public_html（{{path}}）",
      "docRootUpdated": "项目文档根已更新为 {{path}}",
      "docRootUpdateFailed": "无法更新项目文档根：{{detail}}",
      "sqliteSchemaReady": "已初始化 Roundcube SQLite schema",
      "sqliteSchemaFailed": "Roundcube SQLite schema 初始化失败：{{detail}}",
      "snappyFullEmailLogin": "邮箱登录须用完整电邮（user@domain），不要只用 local-part",
      "removedBogusPublicHtml": "已删除残留 public_html（php-hello），避免 webmail 指错目录",
      "snappyDocRoot": "SnappyMail HTTP 文档根：{{path}}",
      "phpHelloStillPresent": "安装后站点根仍是 php-hello（YSK PHP OK）— webmail 未成功替换"
    },
    "vpn": {
      "needInstall": "请安装 {{engine}}",
      "openvpnComing": "OpenVPN 完整流程將於後續版本提供。",
      "outlineComing": "Outline／Shadowsocks 將於後續版本提供。",
      "needExecuteServer": "VPN 伺服器設定需 root 與 YSK_EXECUTE=1。",
      "serverStopped": "已停止 {{engine}} 伺服器。",
      "serverStopFailed": "無法停止 {{engine}} 伺服器：{{detail}}",
      "needExecuteClient": "VPN 客戶端連線需 root 與 YSK_EXECUTE=1。",
      "keygenFailed": "WireGuard 金鑰產生失敗（是否已安裝 wg？）。",
      "serverKeysCreated": "已建立 WireGuard 伺服器金鑰。",
      "applyFailed": "套用 WireGuard 設定失敗：{{detail}}",
      "serverActive": "已套用 WireGuard 伺服器（UDP {{port}}）。",
      "serverMissing": "尚未初始化 WireGuard 伺服器 — 請先啟動伺服器。",
      "peerCreated": "已建立客戶端「{{name}}」。",
      "peerNotFound": "找不到客戶端。",
      "peerRemoved": "已移除 {{name}}。",
      "peersSynced": "已在运行中的 WireGuard 界面重新载入对等端，未重启服务器。",
      "setEndpointHint": "請設定公開端點（host:port），手機客戶端才能連上。",
      "invalidConf": "此文件不是有效的 VPN 客户端配置。请使用 WireGuard 或 OpenVPN 客户端配置文件。",
      "clientImported": "已匯入設定檔「{{name}}」。",
      "profileNotFound": "找不到客戶端設定檔。",
      "clientUpFailed": "連線失敗：{{detail}}",
      "clientUp": "已連線：{{name}}",
      "clientDown": "已斷線：{{name}}",
      "clientDeleted": "已刪除設定檔：{{name}}",
      "autostartOn": "已開機自動連：{{name}}",
      "autostartOff": "已關閉開機自動連：{{name}}",
      "ovpnPkiStart": "正在生成 OpenVPN PKI（DH 参数可能需一分钟）…",
      "ovpnPkiDone": "OpenVPN PKI 已就绪。",
      "ovpnServerActive": "已套用 OpenVPN 服务器（{{proto}} {{port}}）。",
      "invalidOvpn": "OpenVPN 配置应包含 client／remote。",
      "ssHonest": "使用 shadowsocks-libev ss-server — 非完整 Outline Manager。",
      "ssKeysCreated": "已生成 Shadowsocks 服务器密码。",
      "ssServerActive": "已套用 Shadowsocks 服务器（端口 {{port}}）。",
      "ssSharedPassword": "所有 ss:// 标签共用同一服务器密码（重新启动服务器可轮换）。",
      "ssPackageYielded": "已停用并屏蔽 Debian 默认 shadowsocks-libev（仅本机），以便 YSK 在本机绑定公开 {{port}}。",
      "ssEndpointAutofilled": "公开端点已设为 {{endpoint}}。",
      "ssClientsRewritten": "已按当前端点/密码重写 {{n}} 个客户端 ss://。",
      "ssUfwOpened": "已开放 UFW {{port}}/tcp+udp（若已安装 ufw）。",
      "endpointAutofilled": "公开端点已设为 {{endpoint}}。",
      "ovpnClientsRewritten": "已更新 {{n}} 个 OpenVPN 客户端配置的 remote（下载/QR 会用新地址）。",
      "accessFullNat": "已开全网上网（IP 转发 + NAT）",
      "accessLanOnly": "已设只连区域（无外网 NAT）",
      "accessReconnectHint": "已连接的客户端请断开再连，才会使用新路由",
      "ovpnNatDurable": "安装 OpenVPN NAT/转发以便重新启动 (systemd ExecStartPost)。",
      "clientFullTunnelProtect": "检测到全隧道客户端 (AllowedIPs 0.0.0.0/0)。应用主机保护，以便面板/SSH 回复保留在 LAN NIC 上。",
      "clientFullTunnelHint": "提示：仅对于分割访问，请在conf中将AllowedIPs设置为VPN/LAN CIDR（而不是0.0.0.0/0），然后重新连接。"
    },
    "vnc": {
      "needInstall": "请安装 {{stack}}",
      "needExecute": "未启用 YSK_EXECUTE — 无法安装软件包或创建 Linux 用户。",
      "needRoot": "非 root — 无法 useradd 或应用 vncserver。",
      "hostnameResolves": "主机名 {{hostname}} 可解析。",
      "hostnameUnresolvable": "此主机无法解析自己的主机名（{{hostname}}）。修好 /etc/hosts 之前，VNC 工作阶段会启动失败。",
      "hostnameAlreadyResolves": "主机名 {{hostname}} 已可解析 — 未改 /etc/hosts。",
      "hostnameWouldAppend": "将会附加到 /etc/hosts：{{line}}",
      "hostnameAppended": "已附加到 /etc/hosts：{{line}}",
      "hostnameAppendFailed": "无法写入 /etc/hosts：{{detail}}",
      "hostnameAliasPresent": "主机名 {{hostname}} 已在 /etc/hosts 列为完整别名 — 未再附加。",
      "hostnameStillUnresolvable": "已写入 /etc/hosts，但 {{hostname}} 仍无法解析。请确认 nsswitch 的 hosts 包含 files。",
      "skipStartHostname": "未启动 display — 请先修好主机名解析。",
      "novncAssetsOnly": "已找到 noVNC 网页资源；仍缺 websockify 可执行文件。",
      "viewerNeedExecute": "要在浏览器打开本机 VNC 桌面，需要 root 并启用 YSK_EXECUTE",
      "browserSessionReady": "浏览器 VNC 会话已就绪：{{name}}",
      "clientPathUserReachable": "路径：经用户可达端点 — {{name}} → {{target}}（浏览器经面板转发）",
      "clientPathServerProxy": "路径：经服务器代理 — {{name}} → {{target}}（经本机服务器网络转发）",
      "clientOpenInBrowserHint": "请在客户端列表点击「在浏览器打开」以使用内嵌 VNC",
      "probeOk": "可达性正常：控制面可对 {{target}} 打开 TCP",
      "probeRefused": "{{target}} 拒绝连接（无服务监听）。目标主机的 VNC 是否已启动？",
      "probeTimeout": "从此服务器连接 {{target}} 超时。请检查防火墙／路由。",
      "probeDns": "无法解析主机名「{{host}}」。",
      "probeNet": "从此服务器无法到达 {{target}} 的网络。",
      "probeFailed": "无法连接 {{target}}：{{detail}}",
      "probeInvalid": "无效的 VNC 目标 {{host}}:{{port}}",
      "probeHintUserReachable": "路径为「经用户可达端点」：面板仍须对该公网主机打开 TCP（浏览器本身不能直接使用 RFB）。",
      "probeHintServerProxy": "路径为「经服务器代理」：目标必须可从此控制面服务器的网络连上。",
      "connectHostOverride": "服务器代理：显示主机 {{display}}，实际 TCP 连至 {{connect}}",
      "probeConnectHostHint": "显示目标为 {{display}}，探测／连接地址为 {{connect}}（连接主机覆盖）。",
      "accountNotFound": "找不到 VNC 账号",
      "accountExists": "此名稱或 Linux 用戶的 VNC 账号已存在",
      "accountCreated": "已创建 VNC 账号 {{name}}（{{user}}，display :{{display}}）",
      "accountUpdated": "已更新 VNC 账号 {{name}}",
      "accountDeleted": "已删除 VNC 账号 {{name}}",
      "invalidName": "账号名稱无效",
      "invalidGeometry": "分辨率无效（例如 1920x1080）",
      "displayBusy": "Display 编号无效或已被使用",
      "displayExhausted": "可用 VNC display 编号已用尽",
      "userWrittenOnly": "Linux 用戶 {{user}} 只記在控制面（需 root + YSK_EXECUTE 才useradd）",
      "userExists": "Linux 用戶 {{user}} 已存在",
      "userCreated": "已创建 Linux 用戶 {{user}}",
      "useraddFailed": "useradd {{user}} 失败：{{detail}}",
      "userdelBlocked": "无权限刪除 Linux 用戶 {{user}}（需 root + YSK_EXECUTE）",
      "userAlreadyGone": "Linux 用戶 {{user}} 已不存在",
      "userdelFailed": "userdel {{user}} 失败：{{detail}}",
      "userdelLeftover": "面板账号已删，但 Linux 用户 {{user}} 仍在主机。请到用户页或主机再清。",
      "userDeleted": "已删除 Linux 用戶 {{user}}",
      "passwordTooShort": "VNC 密碼至少 6 個字符",
      "passwordWrittenOnly": "密碼只記在控制面（需 root + YSK_EXECUTE 才vncpasswd）",
      "passwordFailed": "写入 VNC 密碼失败：{{detail}}",
      "passwordNeedTiger": "找不到 vncpasswd。请先安装 TigerVNC（tigervnc-standalone-server）再设定密码。",
      "passwordSet": "已為 {{user}} 設定 VNC 密碼",
      "passwordUpdated": "已更新 {{name}} 的密碼",
      "passwordMetaOnly": "密碼暂只记元資料，待系统应用",
      "xstartupWrittenOnly": "未写入 xstartup 到 home（需 root + YSK_EXECUTE）",
      "xstartupWriteFailed": "无法写入 ~/.vnc/xstartup ({{detail}})。需要 root + YSK_EXECUTE。",
      "xstartupFailed": "VNC xstartup/桌面启动失败（display :{{display}}，{{detail}}）。可改用 XFCE 配置，或安装 xfce4-terminal/xterm。",
      "xstartupWritten": "已写入 {{path}}",
      "sessionStartBlocked": "无权限启动 VNC session（需 root + YSK_EXECUTE）",
      "sessionStartFailed": "启动 display :{{display}} 失败：{{detail}}",
      "sessionStartHostname": "启动 display :{{display}} 失败：此主机无法解析自己的主机名。请把主机名写入 /etc/hosts（或修正 DNS）后再启动工作阶段。",
      "sessionStarted": "已为 {{user}} 启动 :{{display}}（端口 {{port}}）",
      "sessionStartUnverified": "启动命令成功但 RFB 端口尚未监听",
      "sessionAlreadyRunning": "{{user}} 的 VNC 已在运行（:{{display}} / 端口 {{port}}）",
      "vncserverMissing": "未安装 TigerVNC 启动程序（tigervncserver／vncserver）— 请到「安装」页安装",
      "vncserverWrapperMissing": "检测到 {{found}}，但缺少 tigervncserver／vncserver 包装脚本 — 请重装 tigervnc-standalone-server",
      "vncPackageWithoutBin": "软件包 tigervnc-standalone-server 已装但找不到启动脚本 — 请重装该包",
      "needPasswordBeforeStart": "请先设置 VNC 密码（至少 6 个字符）再启动",
      "displayPortBusy": "Display :{{display}} → 端口 {{port}} 已被占用 — 请先停止其他 session 或改用其他 display",
      "sessionStartPermission": "启动 display :{{display}} 权限被拒",
      "staleLockCleared": "已清除 display :{{display}} 残留 lock，重试中",
      "sessionStopBlocked": "无权限停止 VNC session（需 root + YSK_EXECUTE）",
      "sessionStopped": "已停止 {{user}} 的 display :{{display}}",
      "linuxUserKept": "已保留系統上的 Linux 用戶 {{user}}",
      "novncStartBlocked": "无权限启动 noVNC（需 root + YSK_EXECUTE）",
      "novncAlreadyRunning": "noVNC 已在端口 {{port}} 运行",
      "novncStartFailed": "启动 websockify 失败：{{detail}}",
      "novncStarted": "noVNC 监听 127.0.0.1:{{httpPort}} → RFB {{rfbPort}}",
      "novncNotRunning": "noVNC 未在运行",
      "novncStopBlocked": "无权限停止 noVNC（需 root + YSK_EXECUTE）",
      "novncStopped": "已停止 noVNC 端口 {{httpPort}}",
      "directNeedsAllBind": "RFB 仅监听 localhost — 外网直连需改 bind 或用隧道",
      "directOpenFirewall": "直连客户端请放行 TCP {{port}}",
      "viaServerReady": "noVNC 已就绪 — 打开本机 URL 或用 SSH 隧道",
      "viaServerStartFirst": "请先启动 noVNC 以经 server 用浏览器连入",
      "viewTicketIssued": "已发出短期观看 ticket",
      "invalidPort": "端口号无效",
      "firewallNeedExecute": "开 UFW 端口需 YSK_EXECUTE",
      "firewallNeedRoot": "开 UFW 端口需 root",
      "firewallFailed": "ufw allow 失败：{{detail}}",
      "firewallOpened": "UFW 已放行 TCP {{port}}",
      "clientInvalid": "客户端名称与主机必填",
      "clientNotFound": "找不到客户端配置",
      "clientUpBlocked": "无权限连接 VNC client（需 root + YSK_EXECUTE）",
      "clientUpFailed": "客户端连接失败：{{detail}}",
      "clientViaServerUp": "客户端 {{name}} 已可在浏览器经面板使用 VNC（旧版 websockify 说明已退役）。请点「在浏览器打开」。",
      "clientDirectUp": "客户端 {{name}} 仅使用浏览器内 VNC（已移除主机 vncviewer 路径）。请在浏览器打开 → {{target}}。",
      "clientNeedViewer": "桌面版 vncviewer 为可选。请使用「在浏览器打开」的内嵌 VNC 客户端。",
      "clientDownBlocked": "无权限断开（需 root + YSK_EXECUTE）",
      "clientDown": "已断开客户端 {{name}}",
      "clientDeleted": "已删除客户端配置",
      "sessionStartCwd": "VNC 启动失败：工作目录会话用户无权访问（display :{{display}}）。已改为从 HOME 启动。",
      "desktopRestarted": "应用桌面配置文件并重新启动会话 ({{desktop}})。重新连接 VNC/noVNC。",
      "desktopNeedsStart": "桌面配置文件 {{desktop}} 写入 xstartup。启动会话以进行申请。",
      "linuxUserRolledBack": "VNC 密码失败后已删除遗留 Linux 用户 {{user}}。",
      "linuxUserOrphan": "VNC 密码失败后无法删除遗留 Linux 用户 {{user}}。"
    },
    "apache": {
      "needServerName": "需要域名",
      "siteExists": "站点已存在",
      "siteNotFound": "找不到站点",
      "wroteConf": "已写入 {{path}}",
      "needExecute": "需 YSK_EXECUTE",
      "settingsWritten": "已写入 Apache 默认",
      "managedDir": "管理目录 {{path}}",
      "dryRun": "预演",
      "copyFailed": "复制失败：{{file}}",
      "configOk": "configtest 通过",
      "configFailed": "configtest 失败：{{detail}}",
      "reloaded": "Apache 已 reload",
      "reloadFailed": "reload 失败",
      "skippedOrphans": "已跳过 {{count}} 个未认领 conf",
      "artifactInvalid": "无效的残留 conf 名称",
      "artifactOwned": "conf {{file}} 归项目或独立站所有",
      "artifactNotFound": "找不到残留 conf：{{file}}",
      "artifactRemoveFailed": "无法删除 {{file}}：{{detail}}",
      "artifactRemoved": "已删除残留 conf {{file}}",
      "artifactSystemPending": "已清理 dataDir；系统 Apache 副本需 YSK_EXECUTE/root 才能停用",
      "artifactSystemDisabled": "已停用系统站点 {{site}}",
      "artifactSystemFailed": "系统停用失败：{{detail}}",
      "conflictProjectsOnly": "域名 {{name}} 被多个项目占用 — 请修改其中一个项目域名",
      "cleanupNothing": "没有可清理的冲突残留 conf",
      "conflictOwnedKeep": "保留已拥有 conf {{file}}（同域名 {{domain}}）",
      "retiredOrphan": "已退役残留 conf {{file}}（与 {{domain}} 域名冲突）"
    },
    "btTracker": {
      "needExecute": "未启用 YSK_EXECUTE — 启动 Tracker 与对外开放端口需要系统变更权限。",
      "startWithoutExecute": "在未启用 YSK_EXECUTE 下启动 Tracker — 进程可能可监听，但不会自动开放防火墙。",
      "alreadyRunning": "BitTorrent Tracker 已在本进程运行。",
      "notRunning": "BitTorrent Tracker 未运行。",
      "started": "BitTorrent Tracker 正在端口 {{port}} 监听。",
      "startFailed": "启动 Tracker 失败：{{detail}}",
      "stopped": "BitTorrent Tracker 已停止。",
      "maxSeeds": "已达同时做种上限（{{n}}）。",
      "seedStarted": "已开始为分享 {{id}} 做种。",
      "seedStopped": "已停止做种。",
      "seedPending": "做种尚未就绪 — 请启动 Tracker，并在需要时启用 YSK_EXECUTE。",
      "notSeeding": "控制平面当前未为该分享做种。",
      "btNeedsTracker": "BT 分享需要运行中的 Tracker。请打开「文件 → BT Tracker」并启动。",
      "restoreTrackerFailed": "开机还原时未能启动 BT Tracker",
      "restoreDone": "BT 还原：已做种 {{seeded}}／{{attempted}}（失败 {{failed}}）",
      "workerMissing": "找不到 detached worker；已改进程内启动（随本进程结束）",
      "startedDetached": "BT Tracker detached worker 已启动（pid {{pid}}，端口 {{port}}）",
      "runningDetached": "Tracker 以 detached worker 运行中（pid {{pid}}）",
      "jobQueued": "BT torrent 创建已排入队列（大型分享）",
      "jobRunning": "正在创建 BT torrent",
      "libraryAdded": "已将 {{name}} 加入 WebTorrent 资料库",
      "libraryInspectFailed": "无法读取此 .torrent 或 magnet",
      "libraryDup": "资料库已有此 Torrent",
      "libraryDestBad": "保存位置不是有效的文件路径",
      "libraryTorrentTooBig": ".torrent 文件大于 8 MiB",
      "libraryNotFound": "找不到此资料库项目",
      "libraryPaused": "已暂停",
      "libraryResumed": "已继续",
      "libraryRemoved": "已从资料库移除",
      "libraryFilesRemoved": "已删除下载的文件",
      "libraryRestoreDone": "资料库还原：已启动 {{started}}/{{attempted}}（失败 {{failed}}）",
      "applyTrackersDone": "已向 {{n}} 个现有 announce 套用常用 Tracker",
      "libraryNeedServe": "已保存。请在面板启动 ysk-server serve，WebTorrent 才会下载／做种。",
      "libraryDestIsFile": "无法建立名为 {{name}} 的文件夹——该处已有同名文件。",
      "librarySeedMissing": "此文件夹没有可做种的对应文件。",
      "libraryWaitingPeers": "正在等待 peers。若文件已在此主机，请重新加入并选使用现有文件做种。"
    },
    "migrate": {
      "orphanConfirm": "请输入完整孤立主目录路径以确认删除。",
      "orphanStillInStore": "该主目录仍属于 store 内的项目。",
      "orphanMissing": "磁盘没有此路径：{{path}}",
      "orphanNeedExecute": "将删除孤立主目录 {{path}}。需 YSK_EXECUTE=1。",
      "orphanRmFailed": "无法删除孤立主目录：{{detail}}",
      "orphanRemoved": "已删除孤立项目主目录 {{path}}。"
    },
    "publicFiles": {
      "liveConf": "生效 Nginx 配置文件：{{path}}",
      "publicRoot": "公开根目录：{{path}}",
      "confNameStale": "配置文件 {{file}} 与当前 server_name {{serverName}} 不一致。请再套用公用文件以改名。"
    },
    "leftover": {
      "staleCliTitle": "遗留旧版 CLI",
      "staleCli": "仍有旧 CLI：{{path}}（产品版本 {{version}}）。PATH 可能优先使用它。移除：rm -f {{path}}",
      "apacheDefaultTitle": "Apache 遗留默认站",
      "apacheDefault": "Apache 000-default 仍占 :80。产品 overlay 不会停用。请在面板套用 Apache，或 hosting apache apply --execute。",
      "nginxCatchAllTitle": "Nginx 缺 catch-all",
      "nginxCatchAll": "/etc/nginx/conf.d 没有 ysk-000-default.conf。未知 SNI 可能落到其他站。请执行 projects nginx-sync --execute。",
      "vsftpdTitle": "vsftpd 单元失败",
      "vsftpd": "vsftpd 失败。overlay 不会重写 listen／listen_ipv6。请在面板套用 FTP。",
      "dovecotTitle": "Dovecot TLS 指向不存在的证书",
      "dovecot": "Dovecot ssl_cert 指向不存在的 {{path}}。overlay 不会改成 ssl=no。签发邮件证书后套用邮件 TLS。",
      "overlayDoesNotHeal": "产品 overlay 不会改写 nginx、Apache、vsftpd 或 Dovecot。请用列出的套用命令（root + YSK_EXECUTE=1）。",
      "executeStaleCli": "请加 --execute（root + YSK_EXECUTE=1）以移除残留 CLI。",
      "executeMissingTls": "请加 --execute（root + YSK_EXECUTE=1）以关闭缺证 TLS，让 vsftpd／Dovecot 可以启动。",
      "executeGeneric": "请加 --execute（root + YSK_EXECUTE=1）以套用上述遗留清理。",
      "staleCliRemoved": "已移除残留 CLI {{path}}。",
      "staleCliRemoveFailed": "无法移除残留 CLI {{path}}：{{detail}}",
      "vsftpdSslOff": "因 FTPS 证书文件不存在，已将 vsftpd 设为 ssl_enable=NO 并重新启动。",
      "dovecotSslOff": "因 {{path}} 不存在，已将 Dovecot 设为 ssl=no 并重新启动。",
      "readinessTitle": "overlay 后主机遗留",
      "readinessClean": "未检测到 Apache 默认站、缺 nginx catch-all、vsftpd 失败或旧 CLI。",
      "nginxRemoved": "已移除残留 nginx 设定 {{path}}。",
      "nginxNotLeftover": "不是残留 public-files 设定 — 拒绝删除。",
      "nginxUnusedKeep": "000-default 是未使用，不当残留 — 未删除。",
      "nginxSystemCopy": "系统副本仍在：{{path}}。需要 YSK_EXECUTE + root 先可以移除。",
      "nginxReloadFailed": "移除 {{path}} 后 nginx -t 或 reload 失败。"
    },
    "defense": {
      "panelReqLabel": "面板请求数/分钟",
      "panelReqExcluded": "经过身份验证的面板流量 - 此处显示，不计入威胁评分",
      "tcpOk": "TCP {{target}} 可达",
      "tcpFail": "TCP {{target}} 失败",
      "dnsDegraded": "DNS 路径降级",
      "reqRateHigh": "公开请求率 {{reqs}}/min ≥ {{threshold}}",
      "ddosHeuristic": "高公共请求率加上边缘探测失败"
    }
  },
  "ops": {
    "blocked": {
      "needExecute": "服务器未开启系统变更权限，无法在管理面板完成此操作",
      "needExecuteShort": "未开启系统变更权限",
      "needExecuteBlocked": "已封锁：未开启系统变更",
      "needRoot": "需要系统管理员权限（root）",
      "needExecuteRoot": "需要 YSK_EXECUTE=1 与 root",
      "needExecuteYsk": "需要 YSK_EXECUTE=1",
      "writeOutsideDataDir": "写入被阻止：未开启系统变更权限，且路径在管理数据目录外",
      "nginxReload": "无法重载 Nginx：需要系统变更权限",
      "signal": "无法发送信号：需要系统变更权限（YSK_EXECUTE）",
      "signalNote": "需要 YSK_EXECUTE=1 才会真正 kill",
      "renice": "无法 renice：需要系统变更权限（YSK_EXECUTE）",
      "install": "服务器未开启系统变更权限，无法在管理面板完成安装",
      "update": "服务器未开启系统变更权限，无法在管理面板完成更新",
      "panel": "无法在管理面板完成此操作"
    },
    "honesty": {
      "blockedNotOk": "诚实校正：blocked 时不可 ok=true",
      "blockedNotApplied": "诚实校正：blocked 时不可 apply_status=applied",
      "okFalseNotApplied": "诚实校正：ok=false 时不可 apply_status=applied"
    },
    "status": {
      "applied": "状态：applied",
      "failed": "状态：failed",
      "written": "状态：written",
      "blocked": "状态：blocked"
    },
    "notes": {
      "writtenSettings": "已写入设置",
      "completed": "完成",
      "partialSuccess": "操作未完全成功",
      "notInstalled": "未安装",
      "running": "运行中",
      "stopped": "已停止",
      "unknown": "未知"
    }
  },
  "opsResult": {
    "title": "操作结果",
    "status": "状态",
    "port": "端口",
    "url": "网址",
    "pid": "PID",
    "blocked": "无法执行",
    "success": "成功",
    "failed": "失败",
    "retry": "重试",
    "showDetails": "详细（{{count}}）",
    "hideDetails": "隐藏详细",
    "stepBuildOk": "构建完成",
    "stepHealthOk": "健康检查通过",
    "stepProcessStarted": "进程已启动",
    "stepSystemdFallback": "systemd 未就绪 — 已用进程方式启动",
    "stepNginxWritten": "已写入 Nginx 配置",
    "stepConfigsSynced": "配置已同步至系统",
    "stepStoppedOld": "已停止旧进程",
    "stepTuningApplied": "已应用运行时调校",
    "stepUnitWritten": "已写入 systemd 服务",
    "stepSystemdStartFailed": "systemd 启动失败 — 已降级为进程启动",
    "portListening": "埠 {{port}} 正在监听",
    "portNotListening": "埠 {{port}} 未在监听",
    "httpOk": "HTTP 正常 {{status}}",
    "httpFail": "HTTP 失败：{{detail}}"
  },
  "pageGuide": {
    "missing": "此页尚未提供说明内容。",
    "missingTitle": "暂无说明",
    "eyebrow": "说明",
    "canDoTitle": "可以做什么",
    "workflowTitle": "建议流程",
    "notesTitle": "注意事项",
    "cliTitle": "CLI 速查",
    "cliFoot": "完整参数请执行 ysk-server <command> --help 或参阅文档。",
    "relatedTitle": "相关功能"
  },
  "playbooks": {
    "discover-host": {
      "name": "主机探索",
      "description": "只读主机清单"
    },
    "nginx-health": {
      "name": "Nginx 健康检查",
      "description": "检查 nginx 服务状态"
    },
    "nginx-restart": {
      "name": "Nginx 重启（高风险）",
      "description": "审批后重启 nginx"
    },
    "local-llm-ops-only": {
      "name": "仅本机 LLM 操作",
      "description": "防护模式下紧急探索"
    },
    "disk-pressure": {
      "name": "磁盘压力检查",
      "description": "只读磁盘用量（df）"
    },
    "mail-stack-status": {
      "name": "邮件堆栈状态",
      "description": "检查 postfix + dovecot unit"
    },
    "security-units": {
      "name": "安全 unit",
      "description": "fail2ban + sshd 状态（只读）"
    },
    "web-stack-status": {
      "name": "Web 堆栈状态",
      "description": "nginx + php-fpm 探测"
    },
    "emergency-read-only": {
      "name": "紧急只读扫视",
      "description": "仅防护安全事实"
    },
    "backup-health": {
      "name": "备份就绪",
      "description": "备份就绪检查"
    },
    "db-stack-status": {
      "name": "数据库堆栈状态",
      "description": "数据库服务状态"
    },
    "ssl-nginx-check": {
      "name": "SSL + Nginx 检查",
      "description": "SSL 与 Nginx 检查"
    }
  },
  "presetChips": {
    "customPlaceholder": "自定义…"
  },
  "projects": {
    "title": "项目",
    "subtitle": "",
    "create": "创建项目",
    "createHint": "创建后到详情部署",
    "empty": "尚未创建项目",
    "emptyHint": "按「创建项目」开始",
    "emptyFilter": "没有符合的项目",
    "emptyFilterHint": "清除搜索或筛选",
    "name": "名称",
    "domain": "域名（选填）",
    "detail": "项目详情",
    "deploy": "部署",
    "deployPhp": "部署 PHP",
    "stop": "停止",
    "health": "健康检查",
    "publishNginx": "发布 Nginx",
    "publishNginxSsl": "发布 Nginx + SSL",
    "opsResult": "操作结果",
    "runtime": "运行时",
    "template": "範本（选填）",
    "templateNone": "— 无 —",
    "searchPlaceholder": "搜索名称、域名或 ID…",
    "listDesc": "管理该主机上的站点。",
    "filterAll": "全部 runtime",
    "statTotal": "全部",
    "statRunning": "运行中",
    "statDegraded": "降级",
    "statUnhealthy": "異常",
    "statStopped": "停止 / 就緒",
    "statStoppedOnly": "已停止",
    "statReadyOnly": "准备好",
    "statPendingOs": "待 OS",
    "status": {
      "failed": "失败",
      "failedHint": "部署或健康检查失败 — 请查看日志",
      "unhealthy": "異常",
      "unhealthyHint": "行程仍在但健康检查失败",
      "pendingOs": "待创建系统用户",
      "pendingOsHint": "系统用户尚未创建",
      "degraded": "运行中（降级）",
      "degradedHint": "行程已启动，但非完整生产模式（例如非 root / pidfile）",
      "deploying": "部署中",
      "published": "已发布",
      "publishedHint": "Nginx 设置已写入；行程状态可能另计",
      "running": "运行中",
      "stopped": "已停止",
      "ready": "已就绪",
      "readyHint": "已创建 — 请部署以启动",
      "unknown": "未知"
    },
    "checklist": {
      "title": "上线路径",
      "desc": "完成以下步骤即可对外提供服务",
      "created": "已创建",
      "os": "OS 用户",
      "deploy": "部署",
      "nginx": "Nginx",
      "health": "健康"
    },
    "next": {
      "pendingOsTitle": "系统用户尚未创建",
      "provisionOsAction": "建立系统用户",
      "pendingOsBody": "此项目尚未创建獨立系统用户。",
      "pendingOsActions": "可繼續部署；完整隔離需以系统管理员权限执行。",
      "deployTitle": "下一步：部署",
      "deployBody": "按上方「部署 PHP／部署」启动 runtime，或到「部署」分页用 Git。",
      "nginxTitle": "下一步：发布 Nginx",
      "nginxBody": "到「网絡」分页或总览快捷操作发布 Nginx（可选 SSL）。"
    },
    "healthDetail": {
      "none": "尚未执行健康检查",
      "overall": "结果",
      "nginxStatus": "Nginx 状态",
      "nginxReloaded": "Nginx 重载",
      "httpStatus": "HTTP",
      "latency": "延遲",
      "error": "错误",
      "at": "检查时间",
      "deployMode": "部署模式",
      "edgeKind": "边缘",
      "goLiveOk": "上线",
      "goLiveAt": "上线时间",
      "degraded": "降级"
    },
    "railPhp": "PHP / 站点",
    "railStatic": "静态站",
    "sectionPhpDeploy": "PHP 部署",
    "sectionPhpDeployDesc": "写入 PHP 站点／pool，并依权限应用到系统",
    "sectionStaticDeploy": "静态内容",
    "sectionStaticDeployDesc": "静态站以文件 + Nginx 为主，无 Node 行程",
    "staticDeployHint": "请用 Git 拉取内容，再到「网絡」发布 Nginx。",
    "noDomain": "未设置域名",
    "lastDeploy": "上次部署",
    "neverDeployed": "尚未部署",
    "created": "已创建 {{name}}",
    "backToList": "返回项目列表",
    "openUrl": "开启网站",
    "openUrlNeedDomain": "首先设置一个域名 - 不要在浏览器中打开 127.0.0.1",
    "needOsUser": "首先在“隔离”选项卡上创建系统用户",
    "goIsolation": "前往隔离分页",
    "homeMissing": "主目录不存在",
    "homeMissingHint": "与迁移盘点同一探测 — 请到隔离分页建立系统用户",
    "stopTitle": "停止该项目（systemd 单元和公共站点）",
    "deployTitle": "部署此项目",
    "httpStatsHint": "来自该项目的访问日志（最后一个示例）",
    "httpStatsNone": "尚无项目访问日志",
    "notFound": "找不到此项目",
    "home": "Home 目录",
    "env": "环境",
    "backup": "备份",
    "resources": "资源",
    "quotaUnlimited": "无配额限制",
    "lastHealth": "最近健康检查",
    "tabOverview": "总览",
    "tabDeploy": "部署",
    "tabApp": "应用",
    "tabNetwork": "网络",
    "tabResources": "资源",
    "tabIsolation": "隔离",
    "tabLogs": "日志",
    "tabAdvanced": "高级",
    "tabMore": "更多",
    "createGoLive": "创建后立即部署并发布 Nginx",
    "createPreferredPort": "固定端口（可选）",
    "goLiveOk": "已部署并发布",
    "goLivePartial": "已创建；部署／发布未完成",
    "nginxLive": "已加载",
    "nginxWritten": "已写入",
    "nginxNeedsDeploy": "需先部署",
    "nginxFailed": "发布失败",
    "netEdgeStatus": "站点状态",
    "netUpstream": "上游",
    "netPortTitle": "进程端口",
    "netCurrentPort": "当前端口",
    "netPublishTitle": "发布",
    "netConfPreview": "配置",
    "savePublishSsl": "保存并发布 + SSL",
    "retryLiveTitle": "上线未完成",
    "retryLiveBody": "部署或 Nginx 发布未成功，可重试。",
    "retryDeploy": "重试部署",
    "retryPublish": "重试发布 Nginx",
    "preferredPortRedeployHint": "保存后需重新部署才会改进程端口",
    "railProcess": "行程",
    "railNginx": "Nginx",
    "railOs": "OS 用户",
    "railHealth": "健康",
    "nginxPublished": "已发布设置",
    "nginxNone": "尚未发布",
    "osProvisioned": "已创建系统用户",
    "osPending": "尚未完成 OS 隔離",
    "healthOk": "正常",
    "healthBad": "失败",
    "healthUnknown": "尚未检查",
    "sectionRuntimeDeploy": "Runtime 部署",
    "sectionRuntimeDeployDesc": "依项目 runtime 启动行程（Node / PHP）",
    "sectionGit": "Git 部署",
    "sectionGitDesc": "从 Git 拉取程式码并重新部署",
    "sectionEnv": "环境变数",
    "sectionEnvDesc": "以 KEY=value 写入项目 .env",
    "gitUrl": "git 网址",
    "gitDeploy": "Git 部署",
    "envFile": "环境档（.env）",
    "saveEnv": "保存环境变数",
    "sectionNginx": "Nginx 与 SSL",
    "sectionNginxDesc": "写入并应用网站设置",
    "domainHint": "建议先在创建时填域名，方便 Publish",
    "sectionQuota": "磁碟配额",
    "sectionQuotaDesc": "限制项目 home 可用空间（MiB）",
    "sectionLimits": "CPU / 内存",
    "sectionLimitsDesc": "systemd 资源限制；需重新 Deploy 才应用 unit",
    "quotaMb": "配额（MiB）",
    "memoryMax": "最大内存",
    "cpuQuota": "CPU 配额 %",
    "setQuota": "设置配额",
    "setResources": "保存资源限制",
    "sectionLogs": "应用日志",
    "sectionLogsDesc": "读取项目目录下最近 log 档",
    "viewLogs": "加载日志",
    "logsEmpty": "尚未加载日志",
    "logsNoFiles": "（尚无 log 档 — 请先 Deploy）",
    "sectionAdvanced": "其他操作",
    "sectionAdvancedDesc": "备份与範本内容下载",
    "downloadWp": "下载 WordPress",
    "dangerZone": "危险区域",
    "dangerZoneDesc": "删除项目会移除管理记录与相关资源",
    "delete": "删除项目",
    "confirmStopTitle": "停止此项目？",
    "confirmStopDesc": "将停止「{{name}}」的运行行程。",
    "confirmDeleteTitle": "删除此项目？",
    "confirmDeleteDesc": "确定删除「{{name}}」？此操作无法从介面复原。",
    "close": "关闭",
    "statProjects": "{{count}} 项目",
    "noProjectsShort": "尚无项目",
    "runtimeStatic": "静态",
    "logsLoadFailed": "读取日志失败",
    "deleteFailed": "删除失败",
    "tabAbout": "说明",
    "statusLabel": "状态",
    "userLabel": "用户",
    "nginxValuePublished": "已发布",
    "nginxValueNone": "未发布",
    "osValueReady": "已建",
    "osValuePending": "待建",
    "openFiles": "文件",
    "enableCdn": "启用 CDN",
    "openLogs": "日志",
    "osUserReadyMsg": "系统用户已就绪。{{detail}}",
    "osUserNeedRoot": "无法创建系统用户：需要 YSK_EXECUTE + root。{{detail}}",
    "osUserIncomplete": "系统用户创建未完成",
    "saveLogDirsFailed": "保存 log 目录失败",
    "createName": "项目名称",
    "noPathSepHint": "名稱不可包含 / 或 \\。",
    "createRuntime": "执行环境",
    "createRuntimeHint": "之后可在详情調整部署方式",
    "createVersion": "版本",
    "createVersionHint": "写入项目 runtime_version；部署／FPM 会參考此版本",
    "createVersionAria": "执行环境版本",
    "createPrimaryDomain": "主要域名",
    "createPrimaryDomainHint": "可稍后再填",
    "createAliases": "别名",
    "createAliasesHint": "逗号或換行分隔",
    "createTemplate": "範本",
    "createTemplateHint": "每个执行环境只有一个 Hello World! demo；选范本会带入对应 runtime",
    "createTemplateNote": "範本只写入项目目录骨架；需再「部署」才会 build／启动。",
    "createRuntimeNow": "目前执行环境：",
    "createTemplateFooter": "。可选範本加速起步，或不选直接空白项目。",
    "createDraftResources": "与域名一并创建草稿资源",
    "createNeedDomainFirst": "请先填「主要域名」，以下选项才会一并创建草稿。",
    "createDnsZone": "同时创建 DNS zone",
    "createDnsZoneDesc": "只写管理文件（draft），不等于权威 DNS 已上线",
    "createMailDomain": "同时登记邮件域名",
    "createMailDomainDesc": "之后可到邮件页完成邮箱与应用",
    "createServerIpv4": "服务器 IPv4",
    "createServerIpv4Hint": "DNS／邮件範本用",
    "createServerIpv4Ph": "此主机公网 IPv4",
    "createServerIpv6": "服务器 IPv6（可选）",
    "createServerIpv6Ph": "公网 IPv6（可留空）",
    "sshCardDesc": "登录公钥决定誰能进来；出站身份决定这用户出去用哪把匙。",
    "sshLoginKeys": "允许登录的公钥",
    "sshKeyCount": "{{count}} 把",
    "sshOutbound": "出站身份",
    "sshOutboundNone": "尚未创建",
    "sshOutboundCreated": "已创建出站身份（私钥已加密保存）",
    "sshCreateFailed": "创建失败",
    "sshWriteTried": "已嘗試写入磁碟",
    "sshOutboundHint": "创建出站身份后，此项目用户可用于 git／脚本连外。",
    "sshCreateOutbound": "一键创建出站身份",
    "sshWriteHome": "写入 home/.ssh",
    "sshOpenWorkspace": "开启 SSH 工作台",
    "sshManageLoginKeys": "管理登录公钥",
    "logsSectionDesc": "扫描 logs/、log/ 与额外目录；可按档名／内容关键字搜索",
    "logsNameSearch": "档名搜索",
    "logsNameSearchHint": "匹配相对路径，例如 error、app.out",
    "logsContentKw": "内容关键字",
    "logsContentKwHint": "在各档尾端搜索（不系全档全文）",
    "logsSearch": "搜索",
    "logsRescan": "重新扫描",
    "logsRefreshFile": "刷新此档",
    "logsCopy": "复制内容",
    "logsDownloadTail": "下载尾端",
    "logsCenter": "日志中心",
    "logsHitsTitle": "内容命中 {{count}} 个档 — 点档名可开尾端（含关键字过滤）",
    "logsLinesHit": "{{count}} 行命中",
    "logsFileCount": "日志档 {{count}}",
    "logsNameFilter": "（档名含「{{q}}」）",
    "logsScanning": "正在扫描 logs…",
    "logsNoneYet": "尚无日志档 — 部署或跑过服务后会出现；亦可设置额外目录。",
    "logsNoContent": "尚无内容",
    "logsRelated": "相关来源",
    "logsRelatedDesc": "journal / nginx / PHP-FPM（详见日志中心）",
    "logsAvailable": "可用",
    "logsMissing": "未见",
    "logsOpenInCenter": "在日志中心开启",
    "logsExtraDirs": "额外 log 目录",
    "logsExtraDirsDesc": "相对项目 home 的路径（除默认 logs/、log/ 外）",
    "logsDirList": "目录列表",
    "logsDirListHint": "一行一个；只允许 home 内相对路径",
    "logsReset": "重设",
    "logsSaveScan": "保存并扫描",
    "logsDefaultNote": "默认永远扫描 logs/ 与 log/。额外目录只收入档名像 *.log / *.out / *.err 的档。",
    "resOsTitle": "系统用户隔離",
    "resOsDesc": "每个项目獨立 Linux 用户；意图 home：/home/ysk-server-{项目 id}",
    "resLinuxUser": "Linux 用户",
    "resOsIsolation": "OS 隔離",
    "resOsReady": "已就绪",
    "resOsNotCreated": "未创建（需系统管理员）",
    "resHomeDir": "Home 目录",
    "resCanonical": "意图路径",
    "resUserMissing": "用户不存在",
    "resShellLive": "实时 shell / 锁定",
    "resLocked": "已锁定",
    "resUnlocked": "未锁定",
    "resHomeMode": "home 模式",
    "resHomeExists": "存在 · mode {{mode}}",
    "resHomeMissing": "不存在",
    "resIsolationOn": "隔離中",
    "resIsolationPending": "待隔離",
    "resOsHint": "行程以项目用户执行。创建系统用户需 YSK_EXECUTE + root；否則为 degraded。",
    "resProvisionUser": "创建／修复系统用户",
    "resRefreshStatus": "刷新状态",
    "resFixHome": "修复 home 擁有权",
    "resMigrateHome": "迁移到 /home/ysk-server-…",
    "resQuotaDesc": "软配额（deploy 前 du 擋）+ 有 setquota 时可硬强制",
    "resQuotaHint": "例如 1024 = 1 GiB",
    "resSetSoftQuota": "保存软配额",
    "resLimitsTitle": "行程与账号限制",
    "resLimitsDesc": "systemd MemoryMax / CPUQuota / TasksMax / NOFILE + shell／锁定",
    "resLimitsDescSystemd": "systemd cgroup：MemoryMax / CPUQuota / TasksMax / NOFILE + shell／锁定",
    "resLimitsDescPm2": "PM2：内存对应 max_memory_restart；其余限额见 systemd。",
    "resRunnerSystemd": "进程管理：systemd",
    "resRunnerPm2": "进程管理：PM2",
    "resMemMax": "内存上限",
    "resMemHint": "例如 512M 或 1G",
    "resMemHintSystemd": "systemd MemoryMax（cgroup 硬顶，例如 512M 或 1G）",
    "resMemHintPm2": "写入 ecosystem max_memory_restart（到额重启，非 cgroup 硬杀）；例如 512M 或 1G",
    "resFieldSystemdOnly": "仅 systemd cgroup 有效；仍会存 DB，改回 systemd 部署后生效",
    "resCpuHint": "100 = 一顆 CPU",
    "resCustomPct": "自定义 %",
    "resTasksHint": "行程数上限",
    "resNofileHint": "开档上限",
    "resShellHint": "默认 nologin",
    "resShellBashRisk": "bash · 风险",
    "resLockAccount": "锁定 Linux 账号",
    "resLockDesc": "usermod -L；解锁时取消勾选",
    "resLimitsHint": "「保存并应用」会写 DB 并嘗試 usermod / setquota / systemctl set-property。无权限时只写控制面。",
    "resLimitsHintSystemd": "「保存并应用」会写入控制面，并在有权限时应用 OS／systemd 限额。",
    "resLimitsHintPm2": "「保存并应用」会写入控制面并更新 PM2 内存上限。",
    "resSaveApply": "保存并应用限制到 OS",
    "resSaveControlOnly": "仅存 Mem/CPU 到控制面",
    "resReapply": "再应用一次（不改表单）",
    "resMigrateDone": "迁移完成",
    "resMigrateIncomplete": "迁移未完成",
    "resMigrateTitle": "迁移系统用户 home？",
    "resMigrateDesc": "将迁移到 /home/ysk-server-{id} 并创建／修复系统用户。需 root。",
    "resMigrate": "迁移",
    "resWrittenOnly": "已写入控制面；OS 未应用（需 root）。{{notes}}",
    "resAppliedOs": "限制已应用到 OS。{{notes}}",
    "resSaved": "已保存",
    "resIncomplete": "未完成",
    "resApplyLimitsFailed": "应用限制失败",
    "resApplied": "已应用",
    "resApplyFailed": "应用失败",
    "resChownOk": "chown 完成",
    "resChownFailed": "chown 失败",
    "netSavedPublished": "网絡已保存并发布 Nginx",
    "netSavedOnly": "网絡设置已保存（未发布）",
    "netSaveFailed": "保存失败",
    "netSuspended": "项目已暂停 — 訪客会收到 503。恢复后再发布站点。",
    "netDomainTitle": "域名",
    "netDomainDesc": "主要域名与别名；保存后可一并写入 Nginx 管理设置",
    "netPrimaryDomain": "主要域名",
    "netPrimaryHint": "訪客用来开启网站的域名，例如 app.example.com",
    "netAliases": "别名",
    "netAliasesHint": "每行一个，例如 www 或 blog 子域名",
    "netNeedPrimary": "请先填写主要域名",
    "netHttpsTitle": "HTTPS 与整站重新导向",
    "netHttpsDesc": "保存后请发布 Nginx。整站 301 会蓋过 proxy／PHP／static 内容",
    "netForceHttps": "强制使用 HTTPS",
    "netForceHttpsDesc": "HTTP → HTTPS（301）；需已有 SSL 证书并用 SSL 发布",
    "netForceHttpsOn": "发布边缘后，HTTP 将重定向到 HTTPS。",
    "netForceHttpsOff": "不存储强制重定向。",
    "netBoundCert": "已绑定证书",
    "netBoundCertExpiry": "到期 {{at}}",
    "netNoBoundCert": "此主机名磁盘上没有证书",
    "netForceHttpsNeedCert": "强制 HTTPS 前，请先在 /ssl 为此域名签发证书。",
    "netHttpsLiveNotForced": "存在边缘文件； HTTPS 可能已经可以工作。此框仅强制 HTTP→HTTPS。",
    "netHsts": "启用 HSTS",
    "netHstsDesc": "浏览器记住只走 HTTPS（建议在强制 HTTPS 后开启）",
    "netHstsNeedHttps": "请先启用强制 HTTPS",
    "netRedirectUrl": "整站重新导向网址",
    "netRedirectHint": "可留空。填写后整站 301 到此网址（例如搬站／apex→www）",
    "netBasicAuthTitle": "HTTP 基本认证（浏览器登录保护）",
    "netBasicAuthDesc": "发布时写入 htpasswd；用户名留空 = 关闭。密码留空 = 沿用已存密码",
    "netAuthUserHint": "留空关闭认证",
    "netAuthPassHint": "首次设置必填；之后不改可留空",
    "netAuthPassSet": "设置或更新密码",
    "netCacheNote": "静态／PHP 静态资源默认 Cache-Control 7d；purge 清主机 nginx cache 目录（需 YSK_EXECUTE）",
    "netPurgeOk": "已嘗試 purge cache",
    "netPurgeFailed": "purge 失败",
    "netDocrootTitle": "网站目录（docroot）",
    "netDocrootDesc": "相对项目 home；发布 Nginx 时会用此路径作为 root（默认 app/public）",
    "netDocrootLabel": "文件根目录",
    "netDocrootFull": "完整路径：{{path}}",
    "netDocrootCustom": "自定义相对路径…",
    "netAdvancedTitle": "高级与发布",
    "netAdvancedDesc": "绑定 IP、发布到系统 Nginx",
    "netCollapseBind": "收起绑定 IP",
    "netExpandBind": "展开绑定 IP",
    "netBindIp": "绑定 IP",
    "netBindHint": "留空 = 聽全部网卡",
    "netBindPh": "留空 = 聽全部；可填绑定 IP",
    "netNeedDomainSave": "请先填写并保存主要域名",
    "ovUsed": "已用",
    "ovQuota": "配额",
    "ovQuotaUnset": "未设",
    "ovQuotaStatus": "配额状态",
    "ovOverQuota": "超额",
    "ovQuotaOk": "正常",
    "ovDocroot": "文件根目录",
    "ovAccessSample": "Access 樣本",
    "ovLines": "{{count}} 行",
    "ovDailyDays": "日统计天数",
    "ovDailyTitle": "訪问日统计（最多 60 日）",
    "ovDailyDesc": "由 access log 樣本滚动记录",
    "ovQuickTitle": "站点快捷操作",
    "ovQuickDesc": "发布与备份（主部署请用页頂按鈕或「部署」分页）",
    "ovNeedNetworkDomain": "请先到「网絡」分页设置域名",
    "ovPublishNginx": "发布 Nginx",
    "ovPublishSsl": "发布 Nginx + SSL",
    "ovBackupProject": "备份本项目",
    "ovOpenFiles": "开启项目文件",
    "ovNoDomainHint": "未设置域名 — 请到「网絡」分页设置后再发布站点。",
    "ovPublishNote": "发布会写入管理设置；真正 reload 系统 Nginx 需系统变更权限。",
    "ovStatic": "静态",
    "ovAliases": "别名",
    "ovForceOn": "强制",
    "ovForceOff": "不强制",
    "advFtpCreated": "FTP {{user}} 已创建（草稿，需到 FTPS 页应用）",
    "advCreateFailed": "创建失败",
    "advFtpFailed": "FTP 创建失败",
    "advMaintTitle": "维护操作",
    "advMaintDesc": "备份、暂停／恢复、选用工具",
    "advBackupProject": "备份本项目",
    "advOneClickWp": "一键 WordPress（下载+设置）",
    "advSuspendedHint": "暂停中：进程已停、訪客会收到 503。",
    "advSuspendHint": "暂停会停止进程并将站点改为 503 维护页。",
    "advFtpTitle": "项目 FTP（路径 Jail）",
    "advFtpDesc": "账户限制在项目 app 目录；创建后请到 FTPS 服务页应用",
    "advFtpUserHint": "可留空，系统自动生成",
    "advFtpPassHint": "至少 8 个字符",
    "advDangerTitle": "危险区域",
    "advDangerDesc": "删除项目无法从介面复原，请确认已备份。",
    "advDelete": "删除项目",
    "deployPyHint": "默认 venv + pip；ASGI 用 uvicorn，Django 用 gunicorn。",
    "deployGoHint": "默认：go build -o app . 后启动 ./app；可跳过建置若二进位已存在。",
    "deployRustHint": "默认：cargo build --release 后启动 target/release/{crate}；可跳过建置。",
    "deployNodeHint": "依 Node 启动行程（entry 默认 server.js）；生产环境建议 systemd。",
    "deployDefaultHint": "依 runtime 启动；应用后才对外。",
    "deployOsStep": "獨立 Linux 用户 + /home/ysk-server-{项目 id}（资源分页可创建）",
    "deployPyReady": "Python 执行环境已就绪",
    "deployPipNet": "有 requirements.txt 时需外网 pip",
    "deployCheckPort": "部署后检查埠与 /health",
    "deployPublishProxy": "发布 Nginx 反代",
    "deployToolchainReady": "{{runtime}} toolchain 已就绪",
    "deployFirstBuild": "首次部署会 build（可能較久）",
    "deployNeedBinary": "build 成功后才有可执行档",
    "deployPhpFpmOk": "PHP-FPM 版本正确",
    "deployPhpPool": "部署 PHP／应用 pool",
    "deployNginxSsl": "发布 Nginx + 可选 SSL",
    "deployPublicContent": "确认 public/ 有内容",
    "deployNetPublish": "到「网絡」发布 Nginx",
    "deployConfirmToolchain": "确认执行环境页已安装对应 toolchain（或主机已有）",
    "deployConfirmCode": "确认 app/ 内有程式码（範本或 Git）",
    "deployPressDeploy": "按「部署」启动；成功后到「网絡」发布 Nginx",
    "deployVersionSaved": "已保存 {{runtime}} 版本 {{version}}（部署时会用此版本）",
    "deployVersionSaveFailed": "保存 runtime 版本失败",
    "deployInstallingToolchain": "正在安装／确认 toolchain…",
    "deployToolchainIncomplete": "Toolchain 安装未完成（权限或网路）；可改手动到执行环境页",
    "deployToolchainDone": "Toolchain 步骤完成，开始部署…",
    "deployToolchainFailed": "安装 toolchain 失败",
    "deployChecklistTitle": "创建完成 — 部署检查列表",
    "deployChecklistDesc": "{{runtime}} 项目骨架已就绪；完成下列步骤才会对外服务",
    "deploySectionTitle": "{{runtime}} 部署",
    "deploySectionDesc": "依 {{runtime}} 启动行程（埠／systemd 或 pidfile）",
    "deployPhpVersion": "PHP 版本",
    "deployPhpVersionHint": "本站使用的 PHP 版本（需主机已安装对应 FPM）",
    "deployRuntimeVersion": "{{runtime}} 版本",
    "deployRuntimeVersionHint": "写入项目后部署会用此版本；安装请到执行环境页",
    "deployRuntimeVersionCreateHint": "创建时写入；部署时參考",
    "deployRuntimeVersionGeneric": "Runtime 版本",
    "deployEntry": "启动 entry",
    "deployEntryHint": "可留空用默认（{{hint}}）；会同步到服务器",
    "deploySkipBuild": "跳过建置",
    "deploySkipBuildHint": "已有 venv／二进位时可勾选，加快重启（会记住本机偏好）",
    "deployPort": "· 埠 {{port}}",
    "deployFpmApplied": "已应用 PHP-FPM pool",
    "deployFpmIncomplete": "FPM 未完成",
    "deployFpmNote": "会写入站点／pool 设置；真正 reload 需系统变更权限。",
    "deployBuildNote": "建置／启动失败会在操作结果显示原因，不会假装成功。entry 会写入服务器；跳过建置另存本机偏好。",
    "deployPhpIniTitle": "项目 php.ini 覆盖",
    "deployPhpIniDesc": "只填要改的鍵；空白＝沿用全局（执行环境 → PHP → php.ini）。部署／应用 FPM 时写入 php_admin_*",
    "deployPhpIniExample": "例如 256M；留空用全局",
    "deployGlobal": "全局",
    "deployCustom": "自定义",
    "deployOff": "关",
    "deployOnCareful": "开 · 慎",
    "deployPhpIniSaved": "已保存项目 php.ini 覆盖；请再部署或应用 FPM",
    "deployHistory": "部署历史（{{count}}）",
    "deployHistoryDesc": "来自操作稽核；newest first",
    "deployGitUrlHint": "HTTPS 或 SSH 倉庫位址；同步后会依 runtime 自动 redeploy",
    "deployEnvHint": "每行 KEY=value；# 开头为註解",
    "resume": "恢复项目",
    "suspend": "暂停项目",
    "goFtpsApply": "前往 FTPS 服务应用",
    "toolchainNote": "安装 toolchain ≠ 项目已上线；部署成功 ≠ Nginx 已对外（需在「网络」发布）。",
    "installToolchainDeploy": "安装 toolchain 并部署",
    "deployOnly": "僅部署",
    "openRuntime": "开启 {{runtime}} 执行环境",
    "later": "稍后再说",
    "installToolchainDeployShort": "装 toolchain 并部署",
    "runtimeEnv": "{{runtime}} 环境",
    "applyFpmPool": "应用 FPM pool",
    "staticNginxHint": "静态站以「发布 Nginx」为主 — 请到「网络」或总览快捷操作。",
    "fullIniLink": "完整目录与 opcache／session 等请到",
    "phpIniLink": "PHP 执行环境 → php.ini",
    "savePhpIniOverride": "保存 php.ini 覆写",
    "scaffoldNote": "若 app/ 为 YSK 范本佔位（含 .ysk-scaffold），会先清除再 clone；已有自定义内容会拒绝覆写。",
    "saveOnly": "只保存",
    "savePublishNginx": "保存并发布 Nginx",
    "needDomainToPublish": "填写主要域名后才可发布站点。",
    "savePublish": "保存并发布",
    "saveAuth": "保存认证",
    "cacheZoneNote": "完整 FastCGI／proxy_cache zone 需主机 nginx.conf 先定義 keys_zone；面板提供 best-effort 清除。",
    "purgeNginxCache": "清除 Nginx cache",
    "nginxManageFile": "Nginx 管理档：",
    "publishRuntimeNote": "发布会依 runtime 生成 proxy／PHP-FPM／static conf（含认证、导向与 docroot）",
    "publishStored": "用已存设置发布",
    "publishStoredSsl": "用已存设置 + SSL",
    "publishNote": "「发布」写入管理 conf；同步到 /etc/nginx 并 reload 需系统变更权限。",
    "hitsFiles": "内容命中 {{count}} 个档 — 点档名可开尾端（含关鍵字过滤）",
    "logFilesCount": "日志档 {{count}}",
    "defaultScanNote": "预设永远扫描 logs/ 与 log/。额外目录只收入档名像 *.log / *.out / *.err 的档。",
    "opsOk": "{{label}}完成{{url}}",
    "opsOkWithNote": "{{label}}完成：{{note}}{{url}}",
    "opsFail": "{{label}}失败：{{reason}}",
    "railPython": "Python 进程",
    "railGo": "Go 进程",
    "railRust": "Rust 进程",
    "railNode": "Node 进程",
    "runtimeName": {
      "php": "PHP",
      "node": "Node.js",
      "static": "静态",
      "python": "Python",
      "go": "去",
      "rust": "锈",
      "java": "爪哇",
      "kotlin": "科特林",
      "bun": "包子"
    },
    "netCacheTitle": "缓存",
    "logsDeepAccess": "日志中心 · access",
    "logsDeepError": "日志中心 · error",
    "logsDeepNginxUnit": "Nginx 服务日志",
    "logsPresetAccess": "筛选 access.log",
    "logsPresetError": "筛选 error.log",
    "railJava": "Java 进程",
    "railKotlin": "Kotlin 进程",
    "railBun": "Bun 进程",
    "deployProcessManager": "进程管理",
    "deployProcessManagerSystemd": "systemd（推荐）",
    "deployProcessManagerPm2": "PM2",
    "proc_restart": "重启",
    "proc_stop": "停止",
    "proc_reload": "重新加载",
    "procControlsHint": "进程控制（{{manager}}）",
    "procActionOk": "{{action}} 成功 · {{notes}}",
    "procActionFail": "{{action}} 失败 · {{notes}}",
    "procActionFailShort": "进程操作失败",
    "procMissingUser": "项目无 Linux 用户，无法操作 PM2",
    "deploySystemdHint": "生产默认：unit ysk-project-*.service、开机自启、cgroup 限额跟项目资源。",
    "deployPm2Hint": "用 pm2 start ecosystem（需已装 PM2 plugin）。进程见「运行环境 → 进程」PM2 表。部署前会停旧 runner，避免抢端口。",
    "deleteDialogTitle": "永久删除项目",
    "deletePermanent": "永久删除",
    "deleteRemoveFiles": "删除磁盘 home 与 Linux 用户",
    "deleteTypeName": "输入项目名称以确认",
    "deletedOk": "项目已删除",
    "sslRequiredFirst": "此域名尚无 SSL 证书。请先到「SSL 证书」申请/上传，再点发布 + SSL。",
    "sslGateHint": "SSL 相关按钮已锁定：请先到",
    "sslGateHint2": "为域名申请/上传证书后再发布 + SSL。",
    "netPublishPrimary": "基本",
    "netPublishSsl": "HTTPS/SSL",
    "netPublishMaint": "维护",
    "sslNeedDomain": "请先填写域名，才能发布 Nginx / SSL。",
    "createTemplateMissing": "未載入 {{v0}} 範本；請重新整理或選「— 無 —」空白專案。",
    "deleteDialogDesc": "將銷毀「{{name}}」。此操作無法還原。",
    "deleteWillStop": "停止 systemd / PM2 / 本機進程",
    "deleteWillWeb": "移除 Nginx conf、PHP-FPM pool、Apache vhost（如有）",
    "deleteWillOs": "刪除 Linux 用戶與 home 目錄（安全路徑）",
    "deleteKeepOs": "保留 home 與 Linux 用戶（僅面板移除）",
    "deleteWillDb": "從控制面資料庫移除專案",
    "deleteRemoveFilesDesc": "取消勾選則只從面板移除，檔案與系統用戶保留",
    "deleteTypeNameHint": "請輸入「{{name}}」",
    "deleteDnsWarn": "共享 DNS zone / 郵箱 domain 不會自動刪除。",
    "manageInNginx": "在 Nginx 管理",
    "advFtpHomeApp": "站点 app 目录",
    "advFtpHomeRoot": "项目家目录（全部）",
    "advFtpManage": "打开 FTP 页",
    "resShell": "登录 shell",
    "resSaveHint": "「储存并套用」会改主机。「仅存控制面」只记表单。「再套用」用已存值再写入系统。",
    "resBashConfirmTitle": "允许互动式 bash？",
    "resBashConfirmDesc": "这会让专案用户有互动登录 shell。只在需要以该用户 SSH 或终端机时才确认。",
    "createGitHint": "可选。会记在专案；到部署分页再 clone（建立时不会 clone）。",
    "gitTokenLaterHint": "HTTPS 令牌和克隆深度在创建后在项目“部署”选项卡上设置。",
    "gitBranch": "分支",
    "gitBranchHint": "分支或 tag。留空则用远端默认分支。首次 clone 为浅层（depth 1）。",
    "gitBranchAfterUrl": "请先填写 Git 网址。留空则使用远端默认分支。",
    "gitLastRef": "上次同步：{{branch}} @ {{commit}}",
    "gitConfirmTitle": "要 clone 到此专案？",
    "gitConfirmBody": "若 app/ 仍是 Hello World 占位会先清除再 clone。非 YSK 模板的自定义文件会拒绝覆盖。",
    "gitConfirmRemoteBody": "会把 origin 改为新网址再 pull。历史无关则失败；不会清除自定义文件。",
    "runtimeActual": "实际 binary {{path}}",
    "runtimeFallback": "所选 {{version}} 并未安装。进程实际使用 {{path}}。",
    "gitSync": "同步",
    "gitFetch": "拿来",
    "gitCheckout": "查看",
    "gitReset": "重置为远程",
    "gitResetNeedConfirm": "需确认 — 会丢弃本机提交",
    "gitDeepen": "获取完整历史记录",
    "gitLogTitle": "最近的提交",
    "gitDirtyTitle": "本地更改阻止拉动",
    "gitDirtyBody": "{{count}} 个文件与 Git（文件编辑或应用程序）不同。丢弃它们或中止。",
    "gitSyncBlockedDirty": "同步将被禁用，直到本地更改被丢弃（重置）或文件与 Git 匹配为止。",
    "gitViewDiff": "查看差异",
    "gitDiscard": "丢弃本地文件",
    "gitOpenFiles": "在文件中打开",
    "gitNotCloned": "未克隆",
    "gitClean": "干净的",
    "gitDirty": "肮脏的",
    "gitBehind": "落后于 {{count}}",
    "gitAhead": "领先 {{count}}",
    "gitDetached": "已固定",
    "gitShallow": "浅的",
    "gitMissing": "git 丢失",
    "gitResetConfirmTitle": "重置很难远程？",
    "gitResetConfirmBody": "这将丢弃本地 Git 历史记录和除 .env 之外的未跟踪文件，然后从控制平面恢复 .env。",
    "gitHeads": "远程分支机构",
    "gitToken": "HTTPS 令牌",
    "gitTokenHint": "Personal access token. Stored encrypted; never written into the remote URL.",
    "gitTokenPlaceholder": "ghp_... 或 glpat-...",
    "gitTokenSet": "令牌集",
    "gitSaveToken": "保存令牌",
    "gitClearToken": "清除令牌",
    "gitDeployKey": "部署公钥",
    "gitDeployKeyHint": "将其添加为 Git 主机上的只读部署密钥。",
    "gitDeployKeyOn": "部署密钥",
    "gitMakeKey": "创建部署密钥",
    "gitCopyPub": "复制公钥",
    "gitClearKey": "清除部署密钥",
    "gitKeyCopied": "公钥已复制",
    "gitPinHost": "固定主机密钥",
    "gitPinHostBody": "{{host}} 未固定。确认指纹，然后在 SSH 克隆之前进行固定。",
    "gitHostUnpinned": "主机密钥未固定",
    "gitHookTitle": "Inbound hook",
    "gitHookHint": "请自行把上方完整 POST URL 贴到 GitHub／Gitea／GitLab（只接收 push）。不是 Slack。密钥用 HMAC 或 X-YSK-Git-Hook。只会同步本项目已选定的 ref。",
    "gitHookOn": "Hook 已开",
    "gitHookOff": "Hook 已关",
    "gitHookEnable": "开启 hook",
    "gitHookRotate": "更换 secret",
    "gitHookDisable": "关闭 hook",
    "gitHookSecretOnce": "请立即复制此 secret——离开页面后不会再显示。",
    "gitHookCopyUrl": "复制 URL",
    "gitHookCopySecret": "复制 secret",
    "gitHookCopied": "已复制",
    "gitHookSetup": "请在 Git 平台自行新增 webhook：Payload URL 用上方完整网址；Content type 用 application/json；事件只选 push；Secret 用启用时显示的值。",
    "gitHookGithub": "GitHub：Settings → Webhooks → Add webhook。Content type 选 application/json。Events 选 Just the push event。GitHub.com 需要 HTTPS。",
    "gitHookGitea": "Gitea：Settings → Webhooks → Add Webhook → Gitea。方法 POST。事件选 Push。",
    "gitHookGitlab": "GitLab：Settings → Webhooks。Trigger 选 Push events。Secret token 填 hook secret（以 X-Gitlab-Token 传送）。",
    "gitHookHonesty": "主机 systemd 必须设 YSK_EXECUTE=1，hook 才会真正 clone／部署。否则只回计划结果。",
    "gitHookSkipOther": "其他分支的 push 会被忽略，只同步本项目的 ref。",
    "gitAuthHttps": "HTTPS 令牌",
    "gitAuthSsh": "SSH 部署密钥",
    "gitLoadRefs": "加载分支",
    "gitRefDefault": "远程默认",
    "gitRefBranches": "分支机构",
    "gitRefTags": "标签",
    "gitRefOther": "其他参考…",
    "gitRefCustom": "提交或参考",
    "gitRefsNeedUrl": "首先输入一个网址。",
    "gitRefsNeedAuth": "保存令牌或部署密钥，然后加载分支。",
    "gitRefsHint": "从远程加载。选择一个 — 不要打字。",
    "gitHookSetupToggle": "这个怎么粘贴",
    "gitHookOneLiner": "HMAC 或 X-YSK-Git-Hook。仅此项目的参考。",
    "gitHookExecuteHint": "需要 YSK_EXECUTE=1 才能克隆或部署。",
    "gitShowKey": "显示密钥",
    "gitHideKey": "隐藏",
    "gitBehindShort": "↓{{计数}}",
    "gitAheadShort": "↑{{计数}}",
    "gitDirtyShort": "肮脏 · {{count}}",
    "gitFilesLink": "文件",
    "nameInvalid": "请用小写名称：以英文字母开头，其后可为字母、数字或连字号（最长 31 字）。",
    "deployVersionMissing": "此主机未安装 Node {{version}}。请改选已安装的版本，或先安装此版本。",
    "deployUsedBinary": "本次部署使用 {{path}}"
  },
  "protection": {
    "levels": {
      "low": {
        "label": "正常",
        "verb": "系统平稳",
        "hint": "维持日常防护即可"
      },
      "elevated": {
        "label": "偏高",
        "verb": "有异常迹象",
        "hint": "建议切到「加固」并留意可疑 IP"
      },
      "under_attack": {
        "label": "受攻击",
        "verb": "疑似正在受攻击",
        "hint": "立即套用「受攻击」檔 + 批量封禁"
      },
      "critical": {
        "label": "危急",
        "verb": "威胁严重",
        "hint": "考虑紧急档；确认白名单有你"
      }
    },
    "presetsWhen": {
      "daily": "日常运营",
      "hardened": "扫描／暴力",
      "under_attack": "L7 爆量",
      "emergency": "最后手段"
    },
    "note": {
      "notApplied": "未套用到系统（需 root + YSK_EXECUTE=1）— 已记到管理设置",
      "nginxWritten": "已写入 Nginx 限速管理檔",
      "f2bWritten": "已写入 fail2ban 管理設定",
      "hintDropped": "已略过内部防护提示",
      "nginxLimits": "将写入 Nginx 限速片段"
    },
    "rel": {
      "justNow": "刚刚",
      "minutesAgo": "{{n}} 分钟前",
      "hoursAgo": "{{n}} 小时前"
    },
    "apiUnreachable": "无法连线 API（Web proxy／后端可能未启动）",
    "geoipLoadFailed": "加载 GeoIP 失敗",
    "loadFailed": "加载失敗",
    "previewDone": "预览完成（未写入）",
    "presetApplied": "已套用防护档",
    "manualBan": "手动封禁",
    "banSent": "已送出封禁 {{ip}}",
    "quickSelectBan": "快速选取封禁",
    "bulkBan": "批量封禁 {{count}} 個",
    "autoBanStatus": "自動 ban：{{onOff}} · {{mode}} · {{method}}",
    "autoBanUpdated": "已更新自動 ban",
    "automationMaster": "自动化主开关：{{onOff}}",
    "autoPresetStatus": "自動防护档：{{onOff}}",
    "autoBanAutomation": "自動 ban：{{onOff}}（{{mode}}）",
    "automationSaved": "已保存自动化设置",
    "statFirewall": "防火墙",
    "statSuspects": "可疑IP",
    "statSuspectsSplit": "可操作 {{actionable}}／全部 {{total}}",
    "suspectActionableCount": "可操作 IP {{count}}",
    "scoreBasisHint": "威胁评分使用防火墙、fail2ban 禁止量和请求率信号——与英特尔嫌疑人列表的计数不同。",
    "statAutoBan": "自動 ban",
    "statApply": "系统套用",
    "statActiveBans": "活跃封禁",
    "statPreset": "防护档",
    "threatPill": "威胁 {{label}} · {{score}} 分",
    "reprobed": "已重新探测",
    "loadingStatus": "加载防護狀態…",
    "tabs": {
      "command": "应变",
      "automation": "自动化",
      "bans": "封禁",
      "geo": "IP 准入",
      "stack": "底层",
      "intel": "情报",
      "about": "说明"
    },
    "reapply": "重新套用",
    "nginxLimits": "Nginx 限速",
    "notWritten": "未写",
    "modeValue": {
      "normal": "正常",
      "degraded": "降级",
      "ddos-protection": "DDoS 防护",
      "offline": "离线"
    },
    "mode": "模式",
    "controlPlane": "控制面",
    "canApply": "可套用",
    "needRoot": "需 root",
    "writeOnly": "只写文件",
    "autoRunning": "运行中 · 间隔 {{sec}}s · 本小时 ban {{n}}",
    "autoOffManual": "关闭 — 只人手操作",
    "lastTick": "· 上次 {{t}}",
    "nextTick": "· 下轮 {{t}}",
    "on": "开",
    "off": "关",
    "open": "开啟",
    "ranAutomationTick": "已跑一輪自动化",
    "escalateHardened": "加固 ≥ 分数",
    "escalateAttack": "受攻击 ≥ 分数",
    "deescalateDaily": "回落日常 < 分数",
    "zeroOff": "0 关",
    "holdAfterEscalate": "升档后最少维持",
    "min5": "5 分",
    "min15": "15 分",
    "min30": "30 分",
    "hour1": "1 时",
    "hour2": "2 时",
    "hour6": "6 时",
    "presetOrCustom": "预设档 / 自定义",
    "autoBanMode": "自动封禁模式",
    "soft": "宽松",
    "normal": "标准",
    "aggressive": "积极",
    "custom": "自定义",
    "method": "方式",
    "banMethod": "封禁方式",
    "both": "两者",
    "scoreGte": "分数 ≥",
    "hitsGte": "请求 hits ≥",
    "hits429Gte": "429 相关 hits ≥",
    "scanHitsGte": "扫描路径 hits ≥",
    "cooldown": "冷却",
    "maxPerHour": "每小时上限",
    "scanInterval": "掃描间隔",
    "schedulerDefault": "scheduler 默认 120s",
    "collapse": "收起",
    "expand": "展开",
    "step": "步骤",
    "mechanism": "机制",
    "youCanTune": "你可调",
    "probe": "探测",
    "probeSignals": "外網／请求率／TCP／f2b／UFW",
    "escalateThreshold": "升档门槛",
    "emergency": "紧急",
    "neverAuto": "永不自动",
    "manualEmergency": "人手 EMERGENCY",
    "signalNetworkDown": "外网断",
    "signalHighReq": "高请求率",
    "signalDdos": "DDoS 啟發式",
    "signalTcp": "TCP 连接",
    "signalUfwOff": "UFW 关閉",
    "signalF2bBans": "fail2ban 封禁数",
    "weightHint": "{{label}} 权重 0–3",
    "detected": "（已检测）",
    "notSet": "（未设置）",
    "zonesComma": "Zones（逗号分隔）",
    "underAttackRequested": "已请求 Under Attack",
    "underAttackCleared": "已请求解除 UA",
    "autoBanOpen": "已开 · {{mode}} · 本小时 {{n}}/{{max}}",
    "autoBanClosed": "关閉 — 只靠手动／列表",
    "pausedNoExecute": "· 暂停（無 EXECUTE）",
    "circuitOpen": "· 已熔断",
    "autoBanModeLabel": "自動 ban 模式",
    "scanned": "已扫描",
    "bulkOps": "批量操作",
    "fromAccessLog": "来自 access log · 一键或批量封禁",
    "noSuspectIps": "暫时無可疑 IP",
    "noSuspectDesc": "有扫描／429 流量时会自动出现。亦可展开手动封禁。",
    "whitelistPlus": "白名单 + {{ip}}",
    "whitelistAdded": "已加入白名单",
    "activeBansTitle": "活跃封禁 ({{count}})",
    "activeBansDesc": "防護中心汇总 · 解封经 defense API（同 fail2ban-client）",
    "source": "来源",
    "unbanned": "已解封",
    "noBans": "未有封禁",
    "noBansDesc": "封禁后显示于此",
    "collapseQuickAdd": "收起快加",
    "quickAddOne": "快加一条",
    "removeItem": "移除 {{w}}",
    "updated": "已更新",
    "ipOrCidr": "IPv4／IPv6 或 CIDR",
    "autoBanWhitelistAdded": "已加入 auto-ban 白名单",
    "added": "已加入",
    "banIpPlaceholder": "要封禁的 IPv4 或 IPv6",
    "reason": "原因",
    "scanBrute": "扫描 / 暴力",
    "noSignals": "尚无信号",
    "pressReprobe": "按重新探测",
    "points": "分",
    "noTopIps": "暂无 Top IP",
    "topIpsAfterLog": "有 log 后会显示",
    "noManagedVhost": "无 managed vhost",
    "afterPresetMarker": "套用防护档後会注入 marker",
    "injected": "已注入 YSK_DEFENSE",
    "notInjected": "未注入",
    "noEvents": "暂无事件",
    "eventsAfterOps": "套用／封禁后出现",
    "geoipUpdated": "GeoIP 库已更新",
    "dbReady": "库就绪",
    "stale": "过旧",
    "older7d": ">7 日",
    "freshnessNa": "不适用",
    "freshnessMissing": "无库",
    "freshnessStale": "过旧",
    "freshnessFresh": "最新",
    "lastSuccess": "上次成功",
    "downloaded": "已下载",
    "missing": "缺失",
    "geoMode": "Geo 准入模式",
    "denyList": "封锁名单",
    "allowListHighRisk": "允许名单 · 高危",
    "autoUpdateDb": "自动更新库",
    "countriesSelected": "国家（已选 {{n}}）",
    "searchCountry": "搜索中文名或 ISO",
    "countryPlaceholder": "中国 / CN",
    "regionsSelected": "省／州（已选 {{n}}）",
    "regionsHint": "依已选国家顯示；可自定义 CN-GD",
    "pickCountryFirst": "建議先選国家以收窄列表",
    "customRegion": "自定义，例 CN-GD",
    "regionPlaceholder": "广东 / CA / 东京",
    "continentsSelected": "大陆（已选 {{n}}）",
    "continentsHint": "洲际（可选）",
    "continentPlaceholder": "亚洲 / EU",
    "asnsSelected": "供应商 ASN（已选 {{n}}）",
    "asnsHint": "雲／ISP；可自定义 ASN",
    "customAsn": "自定义 ASN，例 13335",
    "asnPlaceholder": "Cloudflare / 电信",
    "cityExample": "例：CN|Shenzhen 或 US|Ashburn",
    "policySaved": "政策已保存 · 国 {{c}} · 省 {{r}} · ASN {{a}}",
    "ipPolicySaved": "IP 准入政策已保存",
    "nginxGeoWritten": "已写入 nginx geo 片段",
    "ipAddress": "IP 地址",
    "lookupPlaceholder": "要查询的 IPv4 或 IPv6",
    "wouldBlock": "会拦截 · {{reason}} · {{matched}}",
    "wouldAllow": "放行 · {{reason}}",
    "lookupDone": "Lookup 完成",
    "item": "项目",
    "value": "值",
    "country": "国家",
    "region": "省／州",
    "city": "城市",
    "continent": "大陆",
    "coords": "坐标",
    "provider": "供应商",
    "policy": "政策",
    "block": "拦截",
    "allow": "放行",
    "matched": "命中",
    "applyStricterTitle": "套用較嚴防护档？",
    "applyStricterDesc": "可能开啟自動 ban。請確認白名单有你的 IP。",
    "confirmEmergencyTitle": "確認紧急防护档",
    "confirmEmergencyDesc": "紧急檔會極度限速。請確認白名单有你的 IP，並輸入 EMERGENCY。",
    "confirmString": "确认字符串",
    "applyEmergency": "套用紧急檔",
    "sectionPreset": "防护档",
    "sectionAutoPreset": "① 自動防护档",
    "sectionAutoBan": "② 自動封禁",
    "unban": "解封",
    "ban": "封禁",
    "banConfirmTitle": "封禁 {{ip}}？",
    "banConfirmMethod": "方法：{{method}}",
    "banConfirmUntilUnban": "会一直维持，直至你解除封禁（或 fail2ban 到期）。",
    "banConfirmDesc": "此 IP 会在主机上被封锁。请确认不是目前面板或工作阶段来源。",
    "wlRemovedUndo": "已从白名单移除 {{ip}}。5 秒内可复原。",
    "undo": "复原",
    "banSelectedConfirmTitle": "封禁已选 {{count}} 个 IP？",
    "banSelectedConfirmDesc": "以下地址会在主机上被封锁：{{ips}}",
    "save": "保存",
    "yes": "是",
    "no": "否",
    "oneClickSuggested": "一键套用建议档",
    "stackApply": "套用防護組合（UFW、fail2ban、建議檔）",
    "stackApplyDone": "已要求套用防護組合",
    "stackApplyHint": "會啟用 UFW 並套用 fail2ban 與建議防護檔。遠端面板請先確認不會把自己鎖在外面。",
    "viewPresets": "检视防护档",
    "suspectIpsCount": "可疑 IP {{count}}",
    "goBans": "去封禁",
    "singleEntryPrefix": "单一入口：",
    "singleEntryBody": " ",
    "emergencyNeverAuto": "紧急档永不自动",
    "writeOnlyBanner": "只写模式：系统套用需 EXECUTE=1 与 root。",
    "readiness": "就绪探测",
    "goTo": "前往",
    "presetGuide": "",
    "active": "作用中",
    "recommended": "建议",
    "useCarefully": "慎用",
    "preview": "预览",
    "stackToolsSee": "底层工具见「底層」分页 ·",
    "readinessCheck": "就绪检查",
    "automationMasterLabel": "自动化主开关",
    "runOneTick": "立即执行一轮",
    "suggestEmergencyBanner": "分数极高 — 系統建议緊急檔，但不会自动套用。请到应变人手确认。",
    "autoPresetDesc": "依威胁分自动切 日常／加固／受攻擊。紧急档永不自动。",
    "allowDeescalate": "允许自动回落（降档）",
    "autoBanThresholdHint": "選 soft/normal/aggressive 会自动填阈值；選「自定义」先可改分数／hits。無 YSK_EXECUTE 時只会记录，不会真 ban。",
    "sectionMechanism": "③ 机制说明",
    "lastNotes": "上次：{{notes}}",
    "sectionWeights": "④ 信号权重（0–3）",
    "weightsDesc": "默认 1；加大会令该类信号更容易推高威胁分。细范围用单选，不用手填数字。",
    "needCfToken": "需环境变量 CF_API_TOKEN",
    "cfOnEscalate": "。升至「受攻擊」或人手套用該檔時可打 API。",
    "ufwOnlyCf": "受攻击时 UFW 只放 CF 网段（+SSH）",
    "ufwOnlyCfHint": "会重置 UFW 并只允许 Cloudflare IP；需系统变更权限。",
    "saveZones": "保存 zones",
    "uaNow": "立即 Under Attack",
    "uaClear": "解除（→ high）",
    "stackRoleNote": "UFW 與 fail2ban 是防护中心底下的工具页（不再占侧栏一级）。侧栏只保留本页。",
    "fwUfwTitle": "防火墙 UFW",
    "fwStats": "端口策略 · 永久 DENY · 允许 {{allow}} · 拒绝 {{deny}}",
    "fwRulesProfiles": "UFW 规则与配置档",
    "f2bStats": "日志临时 ban · {{jails}} jails · 封锁中 {{banned}}",
    "jailsWhitelistPolicy": "Jail · 白名单 · 策略",
    "divisionTitle": "分工一览",
    "divisionUfw": "UFW = 开哪个端口、永久拒哪个 IP",
    "divisionF2b": "fail2ban = 扫 log 之后临时 ban",
    "divisionDefense": "本页应变／自動化 = 攻击时总控（限速档 + 自動 ban + 可疑列表）",
    "autoBanLabel": "自動 ban",
    "scanOnce": "扫一次",
    "selectedIps": "已选 {{count}} 個 IP",
    "banSelected": "封禁已选",
    "suspectIps": "可疑 IP",
    "selectAll": "全选",
    "alreadyBanned": "已封",
    "whitelist": "白名单",
    "bansWorkflow": "攻击应变：可疑列表 → 封禁／解封。Jail 策略、ignoreip、服務生命周期见",
    "f2bTool": "fail2ban 工具",
    "noSecondJail": "（不在这里再做第二套 jail 編輯）。",
    "autoBanWhitelistTitle": "自動 ban 白名单",
    "autoBanWhitelistDesc": "防護中心 auto-ban 豁免（会同步 fail2ban ignoreip.txt）。完整 ignoreip 在 fail2ban 工具 → 白名单。",
    "ufwOff": "UFW（未启用）",
    "ufwOffHint": "UFW 未运行 — 可用目标是 fail2ban。",
    "whitelistSyncHint": "面板 {{n}} 条 · fail2ban ignoreip 同步：{{sync}}",
    "whitelistSyncOn": "开",
    "whitelistSyncOff": "关（两边清单可能不一致）",
    "ignoreipWhitelist": "ignoreip 白名单",
    "notSetSuggestAdmin": "未设置（建议加入你的管理 IP）",
    "moreItems": "… 还有 {{n}} 项 · 見 fail2ban 白名单",
    "add": "加入",
    "manualBanTitle": "手动封禁",
    "methodFollows": "方式沿用上方选择（fail2ban / UFW）",
    "preferSuspectList": "多数情况用可疑列表即可。",
    "threatSignals": "威胁信号",
    "scoreSource": "分数來源 · 權重可調",
    "accessAuthSample": "access + auth 样本",
    "fullLogsAt": "完整 nginx／auth log 请到",
    "logCenter": "日志中心",
    "colScore": "分",
    "colHits": "次数",
    "col429": "429",
    "topIpsTitle": "热点 IP",
    "hitsCount": "{{n}} 次",
    "sampleWindowHint": "计数来自当前 access 与 auth 样本窗口，不是完整日志文件。",
    "banShort": "封",
    "vhostLimits": "Vhost 限速",
    "eventStream": "事件流",
    "eventKind": {
      "preset": "防护档",
      "auto_preset": "自动切档",
      "cloudflare_ua": "Cloudflare",
      "ban": "封禁",
      "unban": "解封"
    },
    "hours48": "48 小时",
    "geoipDb": "GeoIP 数据库",
    "refreshStatus": "刷新状态",
    "updateDbNow": "立即更新库",
    "geoipSourceHint": "默认本机 GeoIP 数据库；可选 IPinfo token。",
    "retry": "重试",
    "loadingGeoip": "加载 GeoIP 状态…",
    "nextScheduledUpdate": "调度下次更新：{{at}}",
    "statusNotLoaded": "尚未加载状态",
    "load": "加载",
    "accessPolicy": "准入政策",
    "enable": "启用",
    "freeGranularity": "免费最高细分：国家 + 省／州 + ASN；城市可选政策（默认关，准确率较低）。供應商 = ASN。Whitelist 永远豁免。点 chip 移除。",
    "allowListDanger": "允许名單模式高危：不在名單的公網 IP（含未知 geo）會被擋。請確認管理端 IP 已加入封禁頁 whitelist。",
    "dailySchedule": "每日调度",
    "cityPolicy": "城市政策（低置信 · 可选）",
    "useCityAccess": "用城市做准入",
    "cityPolicyHint": "免费库城市准确率有限。格式 CN|Guangzhou；未勾选时城市只作查询展示。",
    "noCitiesYet": "尚未加入城市",
    "savePolicy": "保存政策",
    "applyNginxSnippet": "套用 Nginx 片段",
    "nginxSnippetHint": "需 nginx geoip2 模块才可在 HTTP 层拦截。",
    "testIp": "测试 IP",
    "lookup": "查询",
    "plusCountry": "+ 国家 {{v}}",
    "plusRegion": "+ 省 {{v}}",
    "plusCity": "+ 城市 {{v}}",
    "lastTickPrefix": "· 上次 {{t}}",
    "nextTickPrefix": "· 下轮 {{t}}",
    "cannotBanSelf": "不可封锁 {{ip}} — 这是本机、你的登录 IP 或 ignoreip",
    "selfIp": "本主机",
    "selfHostIp": "主机IP",
    "selfLoginIp": "您的登录IP",
    "showZeroScore": "显示 0 分",
    "hideZeroScore": "隐藏 0 分",
    "geoDraftOnly": "政策未启用 — 保存只写草稿，Nginx 不会执行，直到你勾选启用。",
    "geoNeedDb": "GeoIP 数据库丢失 - 首先更新 MMDB 文件",
    "uaNeedZones": "请先设定 Cloudflare zone",
    "selectAllCountriesWarn": "封锁名单模式下全选全部国家？这可能把本机与你的登录所在地一并封锁。",
    "badgeRecommendPreset": "以目前威胁水平，建议改用更强预设",
    "badgeAutomationOn": "自动化已开启",
    "badgeBanCount": "目前封锁数",
    "badgeGeoOn": "Geo 准入政策已启用",
    "badgeGeoNotReady": "GeoIP 数据库尚未就绪",
    "badgeIntelSignals": "目前计分的信号数",
    "signalActive": "运行中",
    "signalInactive": "未启用",
    "signalJails": "{{n}} 个 jail",
    "dbReadyHint": "已有 MMDB 文件",
    "dbNotReadyHint": "请先下载 GeoIP 数据库",
    "staleHint": "上次成功更新是否已超过 7 日",
    "draftBadge": "草稿",
    "banIsSelf": "此 IP 是目前面板来源或本机。",
    "banNotSelf": "此 IP 不是目前面板来源。",
    "geoSourceLocal": "本机 GeoIP 库（sapics + DB-IP）",
    "nginxPreviewHint": "此预设会写入的 Nginx 片段（仅预览）："
  },
  "publicFiles": {
    "notSet": "未设置",
    "quota": "配额",
    "reloadOnApply": "套用时",
    "path": "路径",
    "fileManager": "文件管理",
    "overview": "概览",
    "overviewDesc": "即将套用的设置（只读摘要）",
    "serverName": "服务器名称",
    "reloadNginx": "重载 Nginx",
    "reloadTry": "套用时尝试",
    "siteSettings": "站点设置",
    "siteSettingsDesc": "写入管理 conf；套用时可尝试 reload Nginx（套用后才可连）",
    "serverNameHint": "Nginx server_name，例如 files.example.com",
    "notes": {
      "noManagedConf": "尚无托管 Nginx 配置 — 单击“应用”",
      "notSynced": "托管conf存在，但不在/etc/nginx/conf.d下——使用YSK_EXECUTE再次以root身份申请"
    },
    "quotaMiB": "配额（MiB）",
    "quotaHint": "可选；限制公开目录总量",
    "unlimited": "不限",
    "quotaInvalid": "请输入正整数 MiB，或选“不限”。",
    "serverNameRequired": "请填写服务器名称。",
    "serverNameInvalid": "请用主机名、万用字元或 IP，不可含空白或标点。",
    "applyHint": "套用成功只代表设置已写入；DNS、SSL 与防火墙需另行就绪才会对外服务。",
    "appliedOk": "已套用公开文件站点",
    "applyReload": "套用并重载 Nginx",
    "statusLive": "Nginx 已生效",
    "statusDraft": "草稿／待套用",
    "statusManagedOnly": "仅管理档",
    "statusNotApplied": "未套用",
    "nginxLive": "已在 conf.d",
    "nginxNotLive": "未进 conf.d",
    "openSite": "打开网站",
    "notLiveHint": "域名 404 多数是 conf 只写在 dataDir、未复制到 /etc/nginx/conf.d，或未 reload。请用 root + YSK_EXECUTE 再套用。未签发 SSL 前请用 http:// 打开。",
    "diskRoot": "磁盘根目录",
    "executeFlag": "执行",
    "asRoot": "根目录",
    "filesInRoot": "条目数",
    "managedConf": "管理 conf",
    "systemConf": "系统 conf.d",
    "autoindex": "目录列表（autoindex）",
    "liveSystemConf": "现行系统配置：{{path}}",
    "publicRootNote": "公开根目录：{{path}}",
    "applyConfirmTitle": "套用公开文件站点？",
    "applyConfirmDesc": "写入 Nginx server_name {{name}} 并重载 Nginx。",
    "serverNameMismatch": "现行配置为 {{live}}；表单为 {{draft}}。套用后会覆盖。",
    "liveName": "生效名称",
    "draftName": "草稿名称",
    "draftUnapplied": "此草稿尚未套用。Nginx 仍以生效名称对外。",
    "discardDraft": "舍弃草稿"
  },
  "rbac": {
    "permissions": "权限",
    "permissionsDesc": "按角色加减能力；系统提供默认，可一键还原。",
    "rolePolicy": "角色策略",
    "dirty": "已自定义",
    "factory": "系统默认",
    "maxLevel": "最高等级",
    "save": "保存策略",
    "saved": "已保存 {{role}} 权限策略",
    "restoreRole": "还原此角色默认",
    "restoreAll": "还原全部角色",
    "restoreRoleTitle": "将 {{role}} 还原为系统默认？",
    "restoreRoleDesc": "将清除此角色的自定义能力，恢复出厂设置。",
    "restoreAllTitle": "将全部角色还原为系统默认？",
    "restoreAllDesc": "所有角色的自定义策略都会被清除。",
    "restoredRole": "已还原 {{role}}",
    "restoredAll": "已还原全部角色默认",
    "bandAllOn": "全开",
    "bandAllOff": "全关",
    "diffFromFactory": "与默认不同",
    "effectivePreview": "有效能力预览",
    "userOverrides": "个人加减",
    "extraGrants": "额外授予",
    "extraRevokes": "额外撤销",
    "restoreUserOverrides": "还原此用户覆盖",
    "restoreUserOverridesTitle": "清除 {{name}} 的个人权限覆盖？",
    "restoreUserOverridesDesc": "只清除额外授予/撤销，角色策略不变。",
    "overridesBadge": "有覆盖",
    "promoteAdminTitle": "提升为 Admin？",
    "promoteAdminDesc": "Admin 默认可管理用户、改权限、模拟登录、还原备份等。请确认。",
    "level": {
      "read": "读取",
      "write-low": "低危写入",
      "write-high": "高危写入",
      "destructive": "破坏性",
      "privilege": "特权"
    },
    "cap": {
      "dashboardRead": "总览",
      "logsRead": "日志",
      "metricsRead": "监控指标",
      "projectsRead": "项目（读）",
      "mailRead": "邮件（读）",
      "dnsRead": "DNS（读）",
      "sslRead": "SSL（读）",
      "backupsRead": "备份（读）",
      "updatesRead": "更新（读）",
      "servicesRead": "服务（读）",
      "firewallRead": "防火墙（读）",
      "approvalsView": "审批（看）",
      "usersSelf": "个人设置/2FA",
      "projectsWrite": "项目创建改",
      "mailWrite": "邮箱/别名",
      "dbWrite": "数据库创建",
      "sslUpload": "上传证书",
      "filesProject": "项目文件",
      "approvalsRespond": "审批处理",
      "cronManage": "Cron 管理",
      "servicesControl": "服务控制",
      "updatesApply": "套件更新执行",
      "dnsApply": "DNS 应用",
      "sslIssue": "签发 SSL",
      "publishApply": "发布/Nginx",
      "firewallEdit": "防火墙编辑",
      "mailApply": "邮件应用",
      "runtimeTuning": "运行时调参",
      "mysqlConsoleWrite": "MySQL 写入",
      "projectsDelete": "删除项目",
      "dbDrop": "删除数据库",
      "backupsRun": "执行备份",
      "backupsRestore": "备份还原",
      "firewallFlush": "清空防火墙",
      "logsPurge": "清除日志",
      "usersManage": "用户管理",
      "packagesManage": "方案管理",
      "usersImpersonate": "模拟登录",
      "securityPolicy": "安全策略",
      "rbacPolicy": "权限策略",
      "settingsSystem": "系统设置",
      "auditExport": "审计导出",
      "securityApiKeysAdmin": "API 密钥管理",
      "networkBrowse": "主機代瀏覽",
      "networkVnc": "VNC 远程桌面管理",
      "validatorsRead": "验证者节点（读取）",
      "validatorsManage": "验证者节点管理",
      "validatorsWipe": "验证者节点清空数据",
      "dockerRead": "Docker（读取）",
      "dockerManage": "Docker 管理",
      "dockerWipe": "Docker 删除／清理"
    },
    "aboutRoles": "角色说明（出厂默认）",
    "aboutRolesBody": "角色决定默认权限；用户可再覆盖个别能力。",
    "aboutQuota": "配额说明",
    "aboutQuotaBody": "方案配额目前以面板/主机总量为主闸，并非完整多租户硬隔离。用量条若显示 host totals，即表示全机统计。",
    "dangerPolicyTitle": "授予破坏性/特权能力？",
    "dangerPolicyDesc": "你正在为该角色加入 destructive 或 privilege 能力，或提高 maxLevel。请确认风险后再保存。",
    "needRbacPolicy": "需要 rbac.policy 才能编辑角色策略。",
    "adminLockedFull": "Admin 全开（锁定）",
    "adminLockedHint": "Admin 系统角色永远功能全开，不可削减。请改 Operator/Viewer/Agent，或对非 admin 用户做个人加减。",
    "maxLevelHint": "高于此等级的能力组会自动锁定，无法开启。",
    "capabilities": "能力清单",
    "capabilitiesHint": "勾选此角色可用的功能。橙点表示与系统默认不同。",
    "enabledCount": "已开 {{enabled}}／{{total}}",
    "bandAboveMax": "高于最高等级",
    "roleUnavailable": "此角色不可用",
    "dirtyHint": "已自定义（与系统默认不同）",
    "unsaved": "未储存",
    "unsavedHint": "此角色有未储存变更",
    "nothingToSave": "没有要储存的变更",
    "saveRole": "储存「{{role}}」政策",
    "discardTitle": "舍弃变更？",
    "discardDesc": "未保存的权限变更将会舍弃。"
  },
  "readiness": {
    "cat": {
      "core": "控制面",
      "security": "权限与安全",
      "binaries": "系统软件",
      "hosting": "运行环境",
      "dns": "域名系统",
      "email": "邮件",
      "isolation": "项目隔离",
      "ops": "运维"
    },
    "level": {
      "ready": "就绪",
      "degraded": "降级",
      "missing": "缺少",
      "unknown": "未知"
    },
    "severity": {
      "critical": "关键",
      "recommended": "建议",
      "optional": "可选"
    },
    "fix": "修复",
    "passed": "通过",
    "checkFailed": "就绪检查失败",
    "gatePass": "门槛通过 · {{pct}}%",
    "gateFail": "尚未达标 · {{pct}}%",
    "gateBlocked": "未通过／有阻挡 {{n}}",
    "executeOn": "已开",
    "executeOff": "未开",
    "blockers": "阻挡",
    "blockersHint": "「阻挡」是「缺少」中的关键项，不是额外检查。",
    "requireAdminTotp": "要求管理员双重验证政策",
    "listenBind": "监听位址",
    "item": {
      "admin2fa": "管理员双重验证"
    },
    "dataDirPerms": "面板资料目录权限",
    "mode750": "权限 750",
    "totalChecks": "全部检查",
    "totalChecksHint": "就绪＋降级＋缺少＝此总数。阻挡是缺少项里的关键子集。",
    "probing": "探测中…",
    "reprobe": "重新探测",
    "exportReport": "导出报告",
    "exportStarted": "正在下載 {{name}}",
    "firstBlocker": "处理首个阻挡",
    "viewRecommended": "查看建议项",
    "loadingProbe": "正在探测主机能力…",
    "priorityTab": "优先修复",
    "checklistTab": "完整清单",
    "summaryTab": "摘要与快捷",
    "priorityTitle": "优先修复",
    "prioritySub": "按建议顺序处理；修好阻挡后再重新探测",
    "nItems": "{{count}} 项",
    "noHardBlockers": "无硬阻挡",
    "noHardBlockersTitle": "没有硬阻挡项",
    "prodGate": "生产门槛",
    "gatePassed": "已通过",
    "gateMaybePerm": "仍可能因权限未达标",
    "viewDegradedHint": "可查看「降级」建议项（邮件、DNS、可选 runtime）。",
    "viewDegraded": "查看降级项",
    "fullChecklist": "完整检查清单",
    "showing": "显示 {{shown}} / {{total}} 项",
    "filterAria": "状态筛选",
    "all": "全部",
    "category": "类别",
    "allCategories": "全部类别",
    "searchPh": "标题、说明、id、修复提示…",
    "quickCatAria": "快速类别",
    "noMatchTitle": "没有符合的项目",
    "noMatchDesc": "请清除搜索或更改筛选条件。",
    "resetFilters": "重置筛选",
    "summary": "摘要",
    "shortcuts": "快捷入口",
    "opsShortcutsAria": "运维捷径",
    "scHost": "主机设置",
    "scHostD": "hostname · 电源 · NTP",
    "scUnit": "控制面 unit",
    "scUnitD": "systemd 安装／启用",
    "scServices": "服务矩阵",
    "scServicesD": "nginx · DB · 生命周期",
    "scMetrics": "主机指标",
    "scMetricsD": "负载 · 内存 · 告警",
    "scProtection": "防护中心",
    "scProtectionD": "应变 · UFW · fail2ban",
    "policyNote": "政策：邮件 PTR／Port 25／域名商 DNS 永不自动宣称完成。HTTP 503 = 未达标但仍有完整报告（非假成功）。",
    "notProbedTitle": "尚未探测",
    "notProbedDesc": "按「重新探测」开始只读就绪检查。",
    "runCheck": "执行就绪检查",
    "reportFormatError": "就绪报告格式错误",
    "checkFailedHttp": "就绪检查失败（{{status}}）",
    "itemAdminPassword": "管理员密码强度",
    "itemAdminPasswordWeak": "{{count}} 个管理员仍标记 must_change_password／不安全 bootstrap — 上线前请更改",
    "itemAdminPasswordOk": "管理员账户无 bootstrap／弱密码标记",
    "itemAdminPasswordFix": "请到账号安全或用户页更改管理员密码",
    "itemListenBind": "控制平面监听绑定",
    "itemListenBindPublic": "可能对外监听（0.0.0.0/::）。建议 127.0.0.1 + 反向代理／防火墙",
    "itemListenBindLoopback": "建议 loopback 绑定（默认 127.0.0.1）",
    "itemDataDirPerms": "dataDir 权限",
    "itemDataDirWorldW": "请将 dataDir chmod 750（或 700），并 chown 给面板用户",
    "itemDataDirOtherR": "建议 dataDir chmod 750，避免其他用户读取控制平面 JSON",
    "itemRustToolchain": "Rust 工具链",
    "itemWebBuildFix": "按「立即修复」构建 Web 界面（本机需有 monorepo），或执行：pnpm --filter ysk-server-web build",
    "itemWebBuildManual": "本机无 monorepo／无已打包 SPA，无法一键修复。请在有源码的机器执行 pnpm --filter ysk-server-web build，再将 apps/web/dist/* 复制到 dataDir/web（例如 /var/lib/ysk-server/web），或设置 YSK_WEB_ROOT 后重启控制面。",
    "itemStateStore": "控制平面状态存储",
    "itemStateStoreSqliteHint": "可选：YSK_STORE=sqlite 使用 WAL document store",
    "itemBackupFreshness": "最近完整备份",
    "itemBackupNone": "未记录 last_backup_run — 请执行 backup all 或设置排程",
    "itemBackupFix": "ysk-server 全部备份 · 备份计划 --install",
    "itemFleetSessions": "Fleet agent 会话",
    "itemFleetNone": "单机可选；多边缘需 agent run + heartbeat",
    "itemFleetNoHb": "已注册但无 heartbeat — 请启动边缘 agent",
    "itemPdnsutil": "pdnsutil（PowerDNS）",
    "apachePort80Title": "Apache 与公开 80 端口",
    "apachePort80Detail": "Apache 正在监听 :80，Nginx 未占用公开 HTTP — 与「Nginx 作边缘」拓扑冲突。",
    "apachePort80Both": "Apache 与 Nginx 同时出现在 :80 — 请将 Apache 改绑 127.0.0.1:8080。",
    "apachePort80Ok": "Apache 运行中但未独占公开 :80（拓扑可接受）。",
    "apachePort80Fix": "安装脚本已有 rebind；可停用占用 80 的 Apache vhost，或 reload 后用 ss -lntp 确认。",
    "fixNow": "立即修复",
    "fixFailed": "修复失败",
    "fixDone": "已修复 dataDir 权限（chmod 750）",
    "fixDoneWebUi": "已构建／安装 Web 界面",
    "rootLabel": "超级用户",
    "techDetails": "技术细节",
    "missingOwner": "未分配面板所有者（包配额归属）",
    "notOsProvisioned": "操作系统用户/主目录尚未配置",
    "isolationPendingOs": "与专案状态相同：待建立系统用户。请到隔离分页建立系统用户与主目录。",
    "ondrejNone": "未检测到 ondrej Launchpad PHP 源",
    "ondrejFound": "发现旧版 ondrej/php 源与packages.sury.org 冲突：{{paths}}",
    "ondrejTitle": "PHP apt源（ondrej残差）",
    "systemctlActive": "服务正在运行",
    "systemctlStatus": "服务状态：{{status}}",
    "binInPath": "路径中的 {{bin}}",
    "leftoverApache": "Apache 剩余的默认站点",
    "leftoverVsftpd": "vsftpd 单元失败",
    "leftoverCli": "过时的剩余 CLI",
    "leftoverNginx": "Nginx 包罗万象缺失",
    "leftoverDovecot": "Dovecot TLS 指出缺少证书",
    "leftoverOther": "主机剩余物",
    "leftoverApply": "剩余的适用",
    "isolationOwnerDegrades": "缺少owner_user_id会影响程序包配额属性 - 状态已降级，未就绪。"
  },
  "redis": {
    "neverExpire": "永不过期",
    "ttlSeconds": "{{ttl}} 秒",
    "ttlMinutes": "{{n}} 分钟",
    "ttlHours": "{{n}} 小时",
    "ttlDays": "{{n}} 天",
    "typeString": "字符串",
    "typeHash": "哈希",
    "typeList": "列表",
    "typeSet": "集合",
    "typeZset": "有序集合",
    "keysLoadFailed": "无法加载鍵列表",
    "writeFailed": "写入失败",
    "saved": "已保存",
    "deleted": "已删除",
    "offline": "离线",
    "connections": "连接数",
    "totalKeys": "总键数",
    "writable": "写入",
    "connected": "已连接",
    "notConnected": "未连接",
    "keys": "鍵",
    "selected": "选中",
    "softwareMissing": "Redis 所需软件尚未安装",
    "notConnectedTitle": "尚未连上 Redis",
    "installThenStart": "请先使用上方横幅一键安装 Redis，再启动服务。",
    "installedNotConnected": "服务已安装但未连上，请启动服务后即可浏览鍵与内容。",
    "keysCountSuffix": " · {{n}} 个鍵",
    "searchPlaceholder": "搜索鍵名，例如 user:* 或 *",
    "searchKeys": "搜索鍵",
    "scanHint": "使用 SCAN，不是 KEYS。最多回传 {{n}} 个键 — 大型库勿用 *。",
    "scanCapped": "只显示首 {{n}} 个符合项。",
    "rows": "{{n}} 筆",
    "content": "内容",
    "noMatchingKeys": "沒有符合的鍵",
    "dbEmpty": "数据库 {{db}} 目前是空的。",
    "noMatchPattern": "沒有符合「{{pattern}}」的鍵。",
    "opsResult": "操作结果",
    "addStringKey": "新增字符串鍵",
    "writeToDb": "写入 Redis 数据库 {{db}}（实时生效，请謹慎）",
    "keyName": "鍵名",
    "keyNameHint": "建议用冒号分层，例如 session:user:1",
    "ttlLabel": "过期时间（秒）",
    "ttlHint": "可留空表示永不过期",
    "m1": "1 分",
    "m5": "5 分",
    "h1": "1 时",
    "d1": "1 日",
    "d7": "7 日",
    "customSeconds": "自定义秒数",
    "stringValue": "字符串值，会以 SET 写入",
    "stringContent": "字符串内容",
    "deleteKeyTitle": "删除此鍵？",
    "deleteKeyDesc": "确定从数据库 {{db}} 删除「{{key}}」？此操作无法复原。",
    "installedOk": "Redis 已安装",
    "startedOk": "Redis 已启动",
    "memory": "内存",
    "addKey": "新增鍵",
    "dbLabel": "数据库 {{i}}",
    "keysInDb": " · {{n}} 个鍵",
    "dbOptionKeys": "数据库 {{i}} · {{n}} 个键",
    "dbOptionEmpty": "数据库 {{i}} · 空",
    "dbRange": "共 {{n}} 个庫（0–{{max}}）。",
    "serviceLink": "在服务设置加減数量",
    "dbsWithData": "有资料的庫（快捷）",
    "keysShort": "{{k}} 鍵",
    "keyList": "鍵列表",
    "pickKey": "从左側选擇一个鍵，即可查看内容。",
    "ttlPrefix": "过期：{{ttl}}",
    "writeLiveHint": "此操作直接写入执行中的 Redis，无法从面板一鍵还原。",
    "refPath": "参考：{{path}}",
    "dbEmptyMark": " · 空",
    "noRequirepass": "保护模式已开，但 requirepass 为空或未读到 — 实际无密码。",
    "insecureShort": "不安全（无密码）",
    "setRequirepass": "设定密码",
    "generateRequirepass": "产生并套用密码",
    "generateRequirepassTitle": "产生 Redis 密码？",
    "generateRequirepassDesc": "会写入 requirepass 并重启 Redis。密码只显示一次。主机变更需要 EXECUTE。",
    "generateRequirepassDone": "已套用 Redis 密码",
    "generatedOnce": "已产生密码（只显示一次）：{{password}}",
    "rdbOnlyLossHint": "AOF 关闭且 RDB 开启。重启或崩溃可能丢失最近写入。",
    "dirDataContainer": "/data（容器）",
    "dirHostDefault": "/var/lib/redis",
    "dirDefaultInstance": "/var/lib/redis/default",
    "dirDataWarn": "/data 多用于容器；面板无法确认此主机是否存在该路径。",
    "saveOff": "禁用快照（不推荐）",
    "saveOffWarn": "空保存字符串会关闭 RDB 快照。如果 AOF 也关闭，则崩溃可能会丢失所有数据。",
    "dirMoveWarn": "更改目录不会移动 dump.rdb / AOF。下次启动将按原样使用新路径。",
    "passwordUnset": "未在服务上设置",
    "passwordSetHidden": "设置（未显示）"
  },
  "resources": {
    "created": "已创建",
    "updated": "已更新",
    "deleted": "已删除",
    "applyDone": "应用完成",
    "applyIncomplete": "应用未完成"
  },
  "roles": {
    "admin": "管理员",
    "operator": "操作员",
    "viewer": "检视者",
    "agent": "代理人"
  },
  "runtime": {
    "probed": "已探测",
    "notProbed": "未探测",
    "probe": "探测",
    "read": "已读取",
    "targetVersion": "目标版本",
    "nodeMissing": "Node.js 尚未安装",
    "probeResult": "探测结果",
    "readonly": "只读",
    "installNode": "安装 Node.js",
    "needExecuteAdmin": "需系统变更权限与管理员",
    "nodeMajor": "Node 主版本",
    "nodeMajorHint": "LTS 建议 20 或 22；与项目运行时对齐",
    "installedNode": "已安装 Node {{version}}",
    "installPm2": "安装 PM2",
    "installPm2Desc": "一键 npm install -g pm2（项目进程管理）。需先有 Node.js。",
    "installPm2Btn": "一键安装 PM2",
    "reinstallPm2": "重新安装 PM2",
    "installedPm2": "已安装 PM2",
    "pm2Status": "PM2 状态",
    "pm2Ready": "已就绪",
    "pm2MissingShort": "未安装",
    "pm2NeedNodeFirst": "请先安装 Node.js，再安装 PM2。",
    "pm2InstallHint": "以 root／系统变更权限执行 npm -g 安装；安装后项目可选 PM2 部署。",
    "pm2ReadyHint": "PM2 已在 PATH；项目部署可使用 PM2 进程模式。",
    "opsResult": "操作结果",
    "unlimited": "无限",
    "zeroUnlimited": "0 无限",
    "m24": "24 分",
    "h1": "1 时",
    "d1": "1 日",
    "d7": "7 日",
    "phpIniLoadFailed": "加载 php.ini 失败",
    "loaded": "已加载",
    "default": "预设",
    "phpMissing": "PHP 尚未安装",
    "overview": "总览",
    "fpmSites": "FPM / 站点",
    "tools": "工具",
    "about": "说明",
    "installPhp": "安装 PHP",
    "versionAlreadyInstalled": "版本 {{version}} 已在主机上，无需再安装",
    "installedVersionBtn": "已安装 {{version}}",
    "newerVersionAvailable": "当前 {{current}}；面板支持更新版本：{{newer}}（可选后安装）",
    "switchToNewer": "改选 {{version}}",
    "installedVersionsHint": "已检测：{{list}}",
    "phpInstallHint": "需系统变更权限与管理员；可勾选常用扩展（包名随版本变：php8.2-mysql、php8.3-gd…）",
    "phpVersion": "PHP 版本",
    "phpExtHint": "选择要一并安装的扩展。不同 PHP 版本对应不同 apt 包名（例：php8.2-mysql ≠ php8.3-mysql）。GD 即旧称 gd2。",
    "phpExtSelect": "PHP 扩展 / 插件",
    "phpExtSelectHint": "软件包会装成 php{{version}}-…；核心 FPM/CLI 必装；已装项不出现在勾选清单",
    "phpExtRequired": "必装（核心）",
    "phpExtRecommended": "常用默认",
    "phpExtSelectAll": "全选扩展",
    "phpExtCoreOnly": "只装核心",
    "phpExtSearch": "搜索扩展（mysql、gd、redis…）",
    "phpExtEmpty": "无匹配的扩展",
    "pluginsSelect": "常用工具 / 插件",
    "pluginsSelectHint": "勾选后与运行时一并安装（例如 Node 的 PM2、Python 的 Poetry）",
    "pluginsSearch": "搜索工具（pm2、poetry、maven…）",
    "pluginsEmpty": "无匹配的工具",
    "pluginsRecommended": "常用默认",
    "pluginsSelectAll": "全选可安装",
    "pluginsNone": "不安装工具",
    "pluginsInstallNote": "勾选后点「安装选定工具」。首次装 runtime 时可连工具一起装；已装 runtime 请只点上方按钮。",
    "installPluginsOnly": "安装选定工具（{{version}} 已有）",
    "installExtOnly": "安装选定扩展（PHP {{version}} 已有）",
    "pluginAlreadyOnHost": "主机已有",
    "installAddonsOnly": "安装选定插件／扩展（{{version}} 已有）",
    "remoteNewerHint": "已装 {{current}} · 上游最新 {{remote}}{{source}}",
    "installedPhp": "已安装 PHP {{version}}",
    "nextSteps": "下一步",
    "suggestedFlow": "建议流程",
    "globalPhpIni": "全局 php.ini",
    "globalPhpIniDesc": "每一列一个设置值（表单）。写入管理档后可「应用到系统」或于项目部署注入 pool",
    "managePath": "管理档路径",
    "loading": "加载中",
    "probing": "探测中",
    "noBinaryPath": "没有二进制路径",
    "hostDefaultError": "主机预设不可用",
    "pm2Tick": "{{at}} · 专案 {{projects}} · PM2 {{pm2}} · 运行 {{run}}",
    "cannotLoadSettings": "无法加载设置表",
    "reloadFailed": "重新加载失败",
    "sensitive": "敏感设置，请小心",
    "on": "开启",
    "off": "关闭",
    "customNumber": "自定义数字",
    "customExample": "自定义，例 768M",
    "advancedExtra": "高级：额外鍵与 raw",
    "advancedExtraDesc": "catalog 未列的指令；每行 key=value；raw 直接附加到 ini 尾",
    "extraDirectives": "额外指令",
    "extraDirectivesHint": "每行一个 key=value（非上方表单已有的鍵）",
    "rawAppend": "直接附加到 ini 档末尾",
    "phpIniSaved": "已保存 php.ini",
    "appliedSystem": "已应用到系统",
    "demoVhost": "系统工具：示范 vhost / Pool",
    "demoVhostDesc": "高级／调试用；日常开站请到 项目 → 部署",
    "domain": "网域",
    "domainRequired": "套用 vhost 前请填写有效网域。",
    "vhostServerName": "虚拟主机 server_name",
    "poolName": "Pool 名称",
    "poolNameHint": "手填识别名（示范）；项目路径会用 ysks_* 用户",
    "enableReload": "启用并重载服务",
    "enableReloadHint": "需要系统变更权限；关闭則只写管理档",
    "applyFailed": "应用失败",
    "phpVhostApplied": "已应用 PHP vhost / pool",
    "composerTools": "Composer / WP-CLI / 模块",
    "composerToolsDesc": "即时探测 PATH 上工具与 php -m（只读）",
    "toolsProbed": "已探测工具",
    "notFound": "未找到",
    "available": "可用",
    "moduleCount": "模块数",
    "installNodeV": "安装 Node {{v}}",
    "installPhpV": "安装 PHP {{v}}",
    "installPythonV": "安装 Python {{v}}",
    "installGoV": "安装 Go {{v}}",
    "installRustV": "安装 Rust {{v}}",
    "pythonMissing": "Python 尚未安装",
    "goMissing": "Go 尚未安装",
    "rustMissing": "Rust／cargo 尚未安装",
    "tuneLoadFailed": "加载调校失败",
    "availableCount": "{{n}} 可用",
    "notDetected": "未探测到",
    "binaryPath": "二进制路径",
    "targetMissing": "目标版本未安装",
    "targetMissingHint": "目标 {{version}} 不在本机。请改绑已安装的版本，或先安装此版本。",
    "target": "目标",
    "tune": "调校",
    "loadedShort": "已载",
    "host": "主机",
    "tabOverviewInstall": "总览",
    "tabTune": "执行调校",
    "probeReadonlyInstall": "只读 · 安装成功后请再探测确认",
    "hostDefault": "主机预设",
    "panelSupport": "面板支援",
    "ready": "已就绪",
    "notDetectedYet": "尚未偵测到",
    "install": "安装",
    "installHint": "需系统变更权限与管理员；安装 toolchain ≠ 项目已对外",
    "panelTune": "面板调校",
    "panelTuneDesc": "写入管理档；部署时注入 env",
    "bindVersion": "绑定版本",
    "onePerRow": "每行一项设置",
    "zeroAll": "0 全",
    "custom": "自定义",
    "extraEnv": "额外环境变量",
    "extraEnvHint": "一行 KEY=value",
    "customEnv": "自定义 env",
    "envPreview": "Env 预览",
    "envPreviewDesc": "保存后／上次加载的合併结果",
    "unsupported": "不支持",
    "tuneSaved": "已保存调校",
    "nodeDetectedHint": "主机上已检测到 Node；重装会按权限执行，可能覆盖现有安装。",
    "nodeProbeAfter": "安装完成后请再「重新探测」确认路径与版本。",
    "installNodeVBtn": "安装 Node {{version}}",
    "installPhpVBtn": "安装 PHP {{version}}",
    "phpIniSteps1": "在 php.ini 分页设计全局数值并保存",
    "phpIniSteps2": "可选：应用到系统（写入 /etc/php/…/conf.d，需 root）",
    "phpIniSteps3": "项目部署时会把合併后 ini 写入 FPM pool 的 php_admin_*",
    "phpIniSteps4": "项目可再覆写个别鍵（项目 → 部署）",
    "phpIniNote": "变更会先存到面板 dataDir；「应用到系统」才复制到 /etc/php 并 reload FPM。项目 pool 会在部署时注入 php_admin_value。",
    "phpIniLoading": "正在读取 php.ini 设置表单…",
    "phpIniEmpty": "catalog 为空 — 请重新加载或确认 API 已启动。",
    "reloadForm": "重新加载表单",
    "savePhpIni": "保存 php.ini",
    "prodUseProjects": "生产站请用「项目」路径",
    "prodPathDesc": "：创建 PHP 项目 → 部署／应用 FPM（pool = 项目 Linux 用户 + 隔離 home）。本页系 ",
    "systemDemo": "系统级 demo／工具",
    "demoNotBind": "（手填 pool 名），不会自动绑项目隔離。php.ini 全局预设请用「php.ini」分页。",
    "applyOkWritten": "应用成功 = 文件已写入（written）。生产请优先用项目部署，确保 User=项目 Linux 用户。",
    "applyPhpVhost": "应用 PHP vhost / pool",
    "applyPhpVhostTitle": "需要确认 - 写入池/虚拟主机文件",
    "applyPhpVhostDesc": "将写入 {{pool}} 池和 {{domain}} 虚拟主机。重新加载服务：{{reload}}。",
    "reprobeTools": "重新探测工具",
    "pressReprobe": "按「重新探测工具」加载",
    "installNodeLabel": "安装 Node {{v}}",
    "installPhpLabel": "安装 PHP {{v}}",
    "installPythonLabel": "安装 Python {{v}}",
    "installGoLabel": "安装 Go {{v}}",
    "installRustLabel": "安装 Rust {{v}}",
    "readShort": "已读",
    "pressReprobeHost": "按「重新探测」加载主机版本矩阵",
    "installScriptNote": "写入安装脚本后，有权限才会真正执行。调校在「执行调校」分页；重新部署项目后才进进程。",
    "envNote": "Node：max-old-space-size 等会合成 NODE_OPTIONS。Go／Python／Rust 对应官方环境变量。",
    "saveTune": "保存调校",
    "pressReprobeLoad": "按「重新探测工具」加载",
    "installJavaLabel": "安装／更新 OpenJDK",
    "installKotlinLabel": "安装／更新 Kotlin",
    "installBunLabel": "安装／更新 Bun",
    "javaMissing": "未检测到 Java（OpenJDK）",
    "kotlinMissing": "未检测到 Kotlin 编译器",
    "bunMissing": "未检测到 Bun",
    "phpIniCatalog": {
      "groups": {
        "resource": {
          "title": "资源限制",
          "description": "内存、执行时间与输入限制"
        },
        "upload": {
          "title": "上传与 POST",
          "description": "文件上传与 POST 体积"
        },
        "session": {
          "title": "会话",
          "description": "会话存储与 cookie"
        },
        "error": {
          "title": "错误与日志",
          "description": "显示错误、记录与报告等级"
        },
        "opcache": {
          "title": "OP缓存",
          "description": "字节码缓存"
        },
        "security": {
          "title": "安全与路径",
          "description": "远程文件、暴露信息、函数禁用"
        },
        "locale": {
          "title": "时区与字符"
        },
        "misc": {
          "title": "其他常用"
        }
      },
      "fields": {
        "memory_limit": {
          "label": "内存上限",
          "hint": "例如 128M、256M、512M、-1（无限）"
        },
        "max_execution_time": {
          "label": "最长执行时间",
          "hint": "秒；0 = 无限（命令行）"
        },
        "max_input_time": {
          "label": "最长输入时间",
          "hint": "秒；解析请求的最长时间"
        },
        "max_input_vars": {
          "label": "最多输入变量",
          "hint": "$_GET / $_POST / $_COOKIE 变量上限"
        },
        "max_input_nesting_level": {
          "label": "输入嵌套层级"
        },
        "file_uploads": {
          "label": "允许上传文件"
        },
        "upload_max_filesize": {
          "label": "单文件上限"
        },
        "post_max_size": {
          "label": "POST 体积上限",
          "hint": "应 ≥ 单文件上限"
        },
        "max_file_uploads": {
          "label": "单次最多文件数"
        },
        "session_save_handler": {
          "label": "会话存储方式"
        },
        "session_gc_maxlifetime": {
          "label": "会话存活秒数",
          "hint": "秒"
        },
        "session_cookie_httponly": {
          "label": "Cookie 仅 HTTP（HttpOnly）"
        },
        "session_cookie_secure": {
          "label": "Cookie 仅 HTTPS（Secure）",
          "hint": "HTTPS 站点建议开启"
        },
        "session_use_strict_mode": {
          "label": "会话严格模式"
        },
        "display_errors": {
          "label": "显示错误（页面）",
          "hint": "生产环境请关闭"
        },
        "display_startup_errors": {
          "label": "显示启动错误"
        },
        "log_errors": {
          "label": "记录错误到日志"
        },
        "error_reporting": {
          "label": "错误报告等级",
          "hint": "或整数如 32767"
        },
        "error_log": {
          "label": "错误日志路径",
          "hint": "留空用系统默认；可填绝对路径"
        },
        "opcache_enable": {
          "label": "启用 OPcache"
        },
        "opcache_enable_cli": {
          "label": "命令行启用 OPcache"
        },
        "opcache_memory_consumption": {
          "label": "OPcache 内存（MB）",
          "hint": "单位：MB"
        },
        "opcache_interned_strings_buffer": {
          "label": "字符串 intern 缓冲（MB）"
        },
        "opcache_max_accelerated_files": {
          "label": "最多缓存文件数"
        },
        "opcache_validate_timestamps": {
          "label": "检查文件变更",
          "hint": "生产可关并手动重载"
        },
        "opcache_revalidate_freq": {
          "label": "检查间隔（秒）"
        },
        "allow_url_fopen": {
          "label": "允许 URL 当文件打开"
        },
        "allow_url_include": {
          "label": "允许 URL include"
        },
        "expose_php": {
          "label": "暴露 PHP 版本头"
        },
        "open_basedir": {
          "label": "open_basedir 路径限制",
          "hint": "留空不限制；多路径用 : 分隔"
        },
        "disable_functions": {
          "label": "禁用函数列表",
          "hint": "逗号分隔；过严可能弄坏软件包"
        },
        "date_timezone": {
          "label": "时区"
        },
        "default_charset": {
          "label": "默认字符集"
        },
        "short_open_tag": {
          "label": "允许短开标签（<?）"
        },
        "realpath_cache_size": {
          "label": "真实路径缓存大小"
        },
        "realpath_cache_ttl": {
          "label": "真实路径缓存秒数"
        },
        "cgi_fix_redirect": {
          "label": "CGI 路径修正重定向"
        }
      },
      "options": {
        "sessionFiles": "文件",
        "sessionRedis": "Redis",
        "sessionMemcached": "内存缓存",
        "errorReportingProd": "生产建议（E_ALL 除 deprecated/strict）",
        "errorReportingAll": "全部（E_ALL）",
        "errorReportingQuiet": "较安静（除 NOTICE/DEPRECATED）",
        "errorReportingMinimal": "仅错误／警告／解析",
        "errorReportingOff": "关闭（0）",
        "openBasedirNone": "不限制（空）",
        "openBasedirVarWww": "/var/www",
        "openBasedirHome": "/home",
        "openBasedirWwwTmp": "/var/www 与 /tmp",
        "errorLogDefault": "系统默认（空）",
        "errorLogPhp": "/var/log/php/error.log",
        "errorLogFpm": "FPM 日志路径",
        "errorLogSyslog": "系统日志"
      },
      "disableFn": {
        "groups": {
          "process": "进程执行",
          "dynamic": "动态加载",
          "info": "信息泄露",
          "filesystem": "文件系统",
          "network": "网络／其他"
        },
        "extraHint": "清单外（主机既有）",
        "customPlaceholder": "其他函数名…",
        "searchPlaceholder": "搜索函数…",
        "emptyText": "无匹配项"
      }
    },
    "pluginsAvailableTitle": "可安装工具",
    "pluginsInstalledTitle": "主机已安装",
    "pluginsInstalledHint": "已在 PATH 检测到；不再出现在安装勾选。可卸载（best-effort）。",
    "pluginsAllInstalled": "目录内工具均已在主机；如需新工具请先卸载或等待目录更新。",
    "pluginStatusInstalled": "已安装",
    "pluginUninstall": "卸载",
    "pluginUninstallConfirmTitle": "卸载工具？",
    "pluginUninstallConfirm": "将从主机移除「{{name}}」（npm/apt/pip 等对应方式）。如有依赖此工具的服务，请先停用。",
    "pluginUninstalled": "已卸载 {{name}}",
    "pluginUninstallFailed": "卸载 {{name}} 失败",
    "pluginUninstallBlocked": "面板无权执行卸载（需要 root 与 EXECUTE）",
    "phpExtAlreadyOnHost": "已安装扩展",
    "pluginsInstallSelected": "安装选定工具 ({{n}})",
    "pluginInstallOk": "已安装 {{n}} 个工具",
    "pluginInstallFailed": "工具安装失败",
    "phpExtUninstallHint": "可卸载非核心扩展（apt remove；不会卸 FPM/CLI）",
    "phpExtUninstallConfirmTitle": "卸载 PHP 扩展？",
    "phpExtUninstallConfirm": "将 apt remove「{{pkg}}」（{{name}}）。核心 FPM/CLI 不会卸载。",
    "phpExtOpsTitle": "扩展操作结果",
    "pluginsOpsTitle": "工具操作结果",
    "pluginBatchUninstall": "卸载选定 ({{n}})",
    "pluginBatchUninstallConfirm": "将卸载 {{n}} 个已选工具。",
    "pluginBatchUninstalled": "已卸载 {{n}} 个工具",
    "pluginBatchLabel": "选定工具",
    "addonsInstallAbove": "配套／扩展请用上方「安装选定…」；此按钮只负责装／确认 runtime 版本。",
    "phpExtInstallSelected": "安装选定扩展 ({{n}})",
    "phpExtInstallNote": "勾选后点「安装选定扩展」。首次装 PHP 用下方「安装 PHP」一并装核心+扩展；已装则只显示扩展按钮。",
    "phpExtInstallNoteInstalled": "勾选扩展后点「安装选定扩展」。此版本已在主机上，无需再装 runtime。",
    "phpExtInstallNoteFirst": "尚未安装 PHP {{version}}：勾选扩展后点下方「安装 PHP {{version}}」一并装核心+扩展（只有一个安装按钮）。",
    "installPhpWithExt": "安装 PHP {{version}}（含选定扩展）",
    "installLogTitle": "安装日志（实时）",
    "installLogStreaming": "串流中…",
    "installLogDone": "已结束",
    "installLogWaiting": "等待 server 输出…",
    "activeDefault": "默认",
    "switchDefaultBtn": "设为主机默认 {{version}}",
    "switchDefaultHint": "此版本已安装但不是当前默认。可切换而无需重装；其他版本会保留。",
    "installedNotActive": "{{version}} 已安装（非默认）",
    "multiVersionHint": "Go／Rust 可同时保留多个版本：先安装缺少的，再切换默认决定 PATH。",
    "tabProcesses": "进程",
    "pm2": {
      "title": "PM2 进程列表",
      "desc": "只读 pm2 jlist（面板用户的 PM2_HOME）。实时 SSE 每 2 秒刷新。",
      "glossary": "PM2＝进程管理器；SSE＝即时日志／清单串流。",
      "live": "实时",
      "installed": "PM2 已装",
      "version": "pm2 版本",
      "path": "pm2 路径",
      "counts": "进程",
      "countsValue": "共 {{n}} · 运行 {{run}} · 停止 {{stop}} · 错误 {{err}}",
      "updatedAt": "上次刷新",
      "notInstalled": "PATH 上未找到 PM2。",
      "installHint": "在「总览 / 安装」安装 companion plugin",
      "tableTitle": "进程列表",
      "yskOnly": "仅 YSK（ysk-*）",
      "filterPh": "筛选名称 / 脚本 / pid…",
      "emptyTitle": "PM2 不可用",
      "emptyDesc": "请先为 Node 安装 pm2 plugin，再刷新。",
      "noApps": "没有进程",
      "noAppsDesc": "panel 用户下没有 PM2 进程。项目多数用 systemd（见上方 YSK 列表）。",
      "streamLog": "实时 tick 日志",
      "streamLogDesc": "每个 SSE tick 一行（不是进程 stdout）。",
      "col": {
        "name": "名称",
        "status": "状态",
        "mem": "内存",
        "restarts": "重启",
        "uptime": "运行时间",
        "mode": "模式",
        "script": "脚本",
        "interpreter": "解释器",
        "user": "用户",
        "unit": "单元",
        "runtime": "运行时",
        "pid": "PID"
      },
      "projectsTitle": "YSK 项目进程",
      "projectsDesc": "面板项目对应的 systemd unit（默认部署路径，不是 PM2）。",
      "projectsCount": "YSK 项目数",
      "noProjects": "没有项目",
      "noProjectsDesc": "面板没有 node/bun 项目，或未建 OS 用户。",
      "pm2OnlyDesc": "仅显示 panel 用户用 PM2 启动的进程。systemd 部署见上方项目表。",
      "startupTitle": "开机启动",
      "startupDesc": "注册 PM2，以便进程在重新启动后恢复。",
      "systemdActionsHint": "systemd 操作需要 root 和 YSK_EXECUTE。",
      "startupOk": "已登记开机启动。{{notes}}",
      "startupFail": "无法登记开机启动。{{notes}}",
      "actionOk": "{{action}} {{name}} — {{notes}}",
      "actionFail": "无法 {{action}} {{name}}。{{notes}}",
      "startupReady": "就绪",
      "startupReadyYes": "是",
      "startupReadyNo": "否",
      "startupUnit": "单元",
      "startupDump": "转储",
      "startupInstall": "安装开机启动",
      "startupSave": "保存进程列表",
      "actRestart": "重启",
      "actStop": "停止",
      "actReload": "重新加载",
      "pm2ActionsHint": "PM2 操作只作用于面板用户的进程列表。",
      "noteUnparsed": "无法解析 PM2 list（输出空白或格式不符）。",
      "notePanelUserOnly": "PM2 list 只显示面板行程用户的程序。",
      "noteProjectUnits": "列出 {{n}} 个 YSK 专案单元"
    },
    "recordedInstalled": "记录已装 {{v}}",
    "remoteSourceSuffix": "（{{source}}）",
    "nodePathYskMissingTitle": "受管 Node 路径未就绪",
    "nodePathYskMissing": "版本 {{version}} 的 YSK 受管 Node 尚未就绪。请重新探测或重新安装。",
    "managedPathMissingTitle": "受管 {{name}} 路徑未就緒",
    "managedPathMissing": "版本 {{version}} 的 YSK 受管 {{name}} 尚未就緒。請重新探測或重新安裝。",
    "nodePathUnsafeTitle": "Node 路径不安全",
    "nodePathUnsafe": "当前路径 {{path}} 不在受管目录；项目部署可能失败。",
    "recordedButProbeEmpty": "控制面曾记录安装 {{v}}，但主机探测未见可执行文件。不算已安装——请「重新探测」或重新安装。",
    "installedLabel": "已安装",
    "installedHint": "以主机探测为准，不是控制面纪录",
    "targetHint": "此页将安装或钉选的版本",
    "panelDefaultHint": "新建项目会优先使用面板默认 {{version}}（主机 CLI 可能不同）。",
    "rebuildFromHost": "以主机为准重建记录",
    "rebuiltFromHost": "已按主机探测更新记录",
    "tabTuning": "调校",
    "versionPlaceholder": "載入最新版本中，或手動輸入",
    "pluginsBundleWithRuntime": "選定工具會隨下方「安裝 runtime」一併安裝（只有一個安裝按鈕）。",
    "tabSoftware": "软件",
    "overviewSoftwareHint": "安装版本、设置主机默认与卸载请到",
    "versionReadyTitle": "{{name}} {{version}} 已就绪",
    "versionReadyHint": "可在此分页设为主机默认或卸载。",
    "softwareVersionTitle": "版本 {{version}}",
    "setHostDefault": "设为主机默认",
    "alreadyHostDefault": "{{version}} 已是主机默认",
    "setHostDefaultConfirmTitle": "将主机默认设为 {{version}}？",
    "setHostDefaultConfirm": "系统 CLI（node／go…）将指向 {{version}}。已指定版本的项目不受影响。",
    "hostDefaultUnsupported": "此运行时暂不支持在面板切换主机默认。请使用安装或项目级版本钉选。",
    "versionInventory": "版本库",
    "versionInventoryDesc": "面板支持的全部版本。点选行可安装或设为默认。",
    "selectToInstall": "选取",
    "advancedFeatureUninstall": "高级：移除整个 {{name}} 堆栈…",
    "advancedFeatureUninstallHint": "将卸载面板管理的全部 {{name}} 版本（Node 会连同 PM2 等配套），有影响预览与双重确认。可先用上方按版本卸载。",
    "probeReadonly": "主机探测（只读）",
    "uninstallVersion": "卸载 {{version}}",
    "uninstallVersionTitle": "卸载 {{version}}？",
    "uninstallVersionConfirm": "将移除此主机上面板管理的 {{name}} {{version}}（YSK 安装目录或 rustup toolchain）。若为主机默认，会清除对应 CLI 符号链接。已钉其他版本的项目不受影响。",
    "uninstallVersionDone": "已卸载 {{version}}",
    "uninstallVersionUnsupported": "此运行时暂不支持按版本卸载。",
    "setPanelDefault": "设为面板默认",
    "alreadyPanelDefault": "面板默认 · {{version}}",
    "panelDefaultSaved": "已将面板默认设为 {{version}}",
    "panelDefaultExplain": "面板默认 = 新建站点／项目首选版本。主机默认 = 系统 CLI（php／python／node…）。",
    "stackReadyTitle": "{{name}} 堆栈已就绪",
    "softwareIntro": "管理已安装版本、主机 CLI 默认，以及新建项目优先使用的版本。",
    "panelDefaultLabel": "面板默认",
    "panelDefaultNone": "未设置",
    "versionsTitle": "版本",
    "versionsDesc": "点选版本。行上可安装、设主机 CLI 或设面板默认。",
    "roleHost": "主机",
    "rolePanel": "面板",
    "rowUninstall": "移除此版本",
    "moreActions": "更多操作",
    "selectedVersion": "已选 · {{version}}",
    "selectedInstalledDesc": "下方可管理配套工具。不再需要此版本时再移除。",
    "selectedMissingDesc": "将此版本安装到主机。安装后可再加配套工具。",
    "path": "路径",
    "fullVersion": "完整版本",
    "useListForDefaults": "要改主机／面板默认或移除此版本，请用上方列表。",
    "alreadyHostDefaultShort": "主机默认",
    "installRecordedCta": "前往软件分页安装 {{v}}",
    "needsInstall": "需安装",
    "needsInstallHint": "此版本未在本机。请先安装，或改选已安装的版本。",
    "unitBytes": "字节",
    "headerSizeKb": "{{n}}KB",
    "phpIniChipEmpty": "未载入 — 请打开 php.ini 分页",
    "phpFpmService": "PHP-FPM",
    "phpFpmServiceDesc": "启动、停止、重载或重启 PHP-FPM 单元",
    "rustupDefaultMissingTitle": "未设 rustup 默认工具链",
    "rustupDefaultMissing": "rustup 未设默认工具链。请到「软件」分页设为 stable。",
    "rustupDefaultMissingShort": "没有默认工具链",
    "rustupSetDefaultHint": "设置默认工具链",
    "uninstalledCountHint": "{{n}} 个版本未在本机"
  },
  "search": {
    "placeholder": "搜索页面与资源…",
    "aria": "全局搜索",
    "results": "搜尋結果",
    "loading": "搜索中…",
    "noResults": "没有匹配项",
    "kinds": {
      "page": "页面",
      "project": "项目",
      "email": "邮件",
      "mailbox": "邮箱",
      "ssl": "SSL",
      "dns": "域名系统",
      "nginx": "Nginx",
      "share": "分享",
      "ftp": "FTP",
      "mysql": "MySQL",
      "postgres": "PostgreSQL",
      "redis": "Redis",
      "cron": "Cron",
      "user": "用户",
      "other": "其他"
    },
    "alias": {
      "ssl": "证书 cert certificate certs",
      "projects": "项目 专案 project sites"
    }
  },
  "security": {
    "title": "安全与审批",
    "allowlist": "工具 Allowlist（默认只读，高风险需人工批准）",
    "llmUntrusted": "LLM 输出一律视为不可信，不可直接执行",
    "pending": "待审批",
    "runSysInfo": "执行 sys.info",
    "none": "当前没有待审批项",
    "pillPending": "{{count}} 待批",
    "pillReady": "就绪",
    "pill2faOff": "2FA 未启用",
    "stat2fa": "2FA",
    "statApi": "API",
    "statApiSessions": "API 会话",
    "revokeOtherTitle": "退出 {{n}} 个其他会话",
    "statSsh": "SSH",
    "statSshValue": "金钥 {{keys}} · 已授权 {{auth}}",
    "statSshHint": "出站身份／已授权登入金钥",
    "statPending": "待批",
    "on": "开",
    "off": "关",
    "output": "输出",
    "tabAccount": "我的安全",
    "tabApiKeys": "API 密钥",
    "tabSsh": "SSH",
    "tabApprovals": "审批",
    "tabAllowlist": "工具权限",
    "apiTokenOnce": "API token（只显示一次）：",
    "copiedToken": "已复制 token",
    "totpTitle": "双重验证 (TOTP)",
    "totpStatus": "状态：",
    "totpEnabled": "已启用",
    "totpEnrolledUnconfirmed": "进行中 — 请扫码并确认",
    "totpNotSet": "未设置",
    "totpLead": "登录时需 App 6 位动态码。",
    "totpWhy1": "即使密码泄露，没有手机／App 动态码也无法登录",
    "totpWhy2": "高危操作可再要求一次 TOTP 确认（step-up）",
    "totpWhy3": "支持 Google Authenticator、Authy、NordPass、1Password 等",
    "totpAppsHint": "建议 App：Google Authenticator、Authy、Microsoft Authenticator、NordPass、1Password。",
    "totpStepsLabel": "设置步骤",
    "totpStepReauth": "验证密码",
    "totpStepScan": "扫 QR／输入密钥",
    "totpStepConfirm": "确认 6 位码",
    "totpStepBackup": "保存恢复码",
    "totpScanTitle": "扫描 QR Code",
    "totpScanHint": "打开验证器 App → 添加账户 → 扫描此 QR。",
    "totpManualTitle": "或手动输入密钥",
    "totpManualHint": "无法扫码时，在 App 选择「手动输入」并粘贴以下 Base32 密钥。",
    "totpShowOtpauth": "显示 otpauth:// 链接（高级）",
    "totpQrAlt": "TOTP 设置 QR Code",
    "totpQrFailed": "无法生成 QR，请用下方密钥手动添加",
    "totpSecretCopied": "已复制密钥",
    "hideSecret": "隐藏密钥",
    "showSecret": "显示密钥",
    "totpEnabledDesc": "已启用。",
    "totpRecoveryRemaining": "恢复码剩余 {{n}}",
    "totpResetSummary": "重设或关闭 2FA…",
    "totpResetHint": "重设会生成新 QR／密钥（旧 App 条目失效）。关闭需输入当前 App 码或恢复码。",
    "totpDisableCodeHint": "App 6 位码或恢复码",
    "disable2fa": "关闭 2FA",
    "totpDisabledOk": "已关闭双重验证",
    "reauthPassword": "重新验证密码",
    "reauthPasswordHint": "开始／重置 2FA 需要再输入密码（防 session 被盗）",
    "reauthPasswordRequired": "请先输入登录密码",
    "needCurrentPassword": "请先输入目前密码",
    "passwordMin8": "新密码至少 8 个字元",
    "totpSecretGenerated": "已生成密钥 — 请扫 QR 或复制密钥，再输入 App 6 位码确认",
    "reset2fa": "重新设置 2FA",
    "start2fa": "开始设置 2FA",
    "secretLabel": "密钥：",
    "confirmCode": "App 显示的 6 位码",
    "confirmCodeHint": "扫码后，输入验证器 App 当前显示的 6 位数字以确认绑定。",
    "confirmCodeInvalid": "请输入 6 位数字验证码",
    "totpEnabledSaveCodes": "2FA 已启用 — 请立即保存下方恢复码（只显示一次）",
    "confirmEnable": "确认启用",
    "recoveryCodesHint": "恢复码只显示一次！请离线保存。每个码只能用一次；手机丢失时可用恢复码登录。",
    "copiedRecoveryCodes": "已复制恢复码",
    "downloadRecovery": "下载 .txt",
    "recoveryDownloaded": "已下载恢复码文件",
    "copyAll": "复制全部",
    "savedClose": "我已保存，完成",
    "sessionsTitle": "工作会话",
    "sessionsDesc": "",
    "revokeOtherSessions": "登出其他设备",
    "revokedOtherSessions": "已登出 {{count}} 个其他会话",
    "noSessions": "没有使用中的会话",
    "currentSession": "本机",
    "revoke": "登出",
    "passkeyTitle": "密钥/WebAuthn",
    "passkeyDesc": "",
    "passkeyRegistered": "Passkey 已登记",
    "webauthnFailed": "WebAuthn 失败",
    "webauthnUnsupported": "浏览器未暴露 WebAuthn API。Brave／Chrome／Firefox 请确认非特殊模式；仍可用 NordPass 等 manager，并用「域名 + HTTPS」打开面板。",
    "webauthnInsecureContext": "当前页面不是安全连接（{{origin}}）。浏览器规格要求 HTTPS 或 localhost 才可用 Passkey——与是否 Brave／NordPass 无关。请改用 https://你的域名 再开。",
    "webauthnIpHost": "当前用 IP 打开面板（{{origin}}）。WebAuthn 规格不接受 IP 作为 RP ID，Brave／NordPass 都会失败。请绑定域名 + HTTPS（例如 https://panel.example.com）再试。",
    "webauthnEnvOk": "Passkey 可用（{{origin}}）",
    "webauthnEnvCurrent": "当前页面：{{origin}}",
    "webauthnCancelled": "已取消或超时。请再试一次。",
    "webauthnUnavailableHint": "Passkey 需 HTTPS + 域名。",
    "registerPasskey": "登记 Passkey",
    "noPasskey": "无 passkey",
    "passkeyVerifyOk": "Passkey 验证成功（已 step-up）",
    "verifyFailed": "验证失败",
    "verifyWithPasskey": "用 Passkey 验证 (step-up)",
    "passkeyHint": "高危 step-up 用；需 HTTPS + 域名。",
    "devicesTitle": "设备／备份",
    "devicesDesc": "",
    "viewTrustedDevices": "查看信任设备",
    "trustedDevicesCount": "信任设备：{{count}} 个",
    "revokeAllDevices": "撤销全部设备",
    "revokedAllDevices": "已撤销全部信任设备",
    "export2faBackup": "导出 2FA 加密备份",
    "fail2banSnippetMsg": "fail2ban 片段：{{written}} — {{notes}}",
    "generatefail2ban": "生成 fail2ban 片段",
    "generateFail2ban": "产生 fail2ban 片段",
    "adminPolicyTitle": "管理员 2FA 政策",
    "adminPolicyDesc": "",
    "requireAdmin2fa": "要求管理员启用 2FA",
    "strictAdmin2fa": "Strict：未开 2FA 拒绝登录",
    "confirmTotpPolicy": "确认 TOTP（改策略时）",
    "confirmTotpPolicyHint": "开启策略需 step-up",
    "totp6digitPlaceholder": "6 位码",
    "policyUpdated": "安全策略已更新",
    "savePolicy": "保存策略",
    "recentProbe": "最近探测",
    "apiKeysTitle": "API 访问密钥",
    "apiKeysDesc": "",
    "createKey": "+ 创建密钥",
    "colName": "名称",
    "colPrefix": "前缀",
    "colCreated": "创建",
    "apiKeysEmpty": "尚未有 API 密钥",
    "apiKeysEmptyHint": "用列表右上角创建；创建后可用 Bearer token 调用 API",
    "approve": "批准",
    "allowlistTitle": "工具权限（{{count}}）",
    "allowlistEmpty": "尚无工具目录项目",
    "totpStatusLoadFailed": "无法载入双重验证状态",
    "createApiKeyTitle": "创建 API 密钥",
    "createApiKeyDesc": "创建后完整 token 只显示一次",
    "createKeyBtn": "创建密钥",
    "apiKeyNameHint": "方便辨识，例如 CI／备份脚本",
    "apiKeyScope": "范围",
    "apiKeyScopeHint": "read = 只读（no full mutate）",
    "scopeFull": "full（完整 API）",
    "scopeRead": "read（只读）",
    "apiKey2faHint": "若已开 2FA，创建密钥会要求再输入验证码（step-up）。",
    "apiKeyCreated": "API 密钥已创建",
    "export2faBackupTitle": "导出 2FA 备份",
    "createApiKeyStepUp": "创建 API 密钥 · step-up",
    "enterTotpCode": "请输入当前 TOTP 验证码",
    "export": "导出",
    "backupCopied": "加密备份已复制到剪贴板（离线保存）",
    "digit6Placeholder": "6 位数字",
    "ssh": {
      "workspaceTitle": "SSH 工作台",
      "workspaceDesc": "先选你要完成的事。登录公钥 ≠ 出站私钥，两边分开管理更安全。",
      "subOutbound": "出站身份",
      "subOutboundHint": "面板／项目出去用的私钥",
      "subLogin": "登录授权",
      "subLoginHint": "谁可以 SFTP／SSH 进来",
      "sub2fa": "登录 2FA",
      "sub2faHint": "SSH TOTP（≠ panel 2FA）",
      "subSshd": "系统 sshd",
      "subSshdHint": "项目用户 SFTP 设置",
      "jobOutboundTitle": "我要连出去",
      "jobOutboundDesc": "创建出站身份密钥 · 面板 peer／项目 git",
      "jobLoginTitle": "我要让人登录",
      "jobLoginDesc": "登记公钥到项目 home · authorized_keys",
      "job2faTitle": "SSH 登录要 2FA",
      "job2faDesc": "Linux 用户 TOTP（与 panel 2FA 分开）",
      "jobSshdTitle": "系统要能 SFTP",
      "jobSshdDesc": "安装 sshd Match 片段（项目用户）",
      "purposePanel": "面板连其他机",
      "purposeUser": "项目用户出站",
      "purposeUnbound": "尚未指定用途",
      "purposePanelHint": "Cluster peer、备份 scp、远程探测",
      "purposeUserHint": "项目 Linux 用户 git / scp / 脚本",
      "purposeDefaultHint": "稍后再绑定",
      "statusStored": "已入库",
      "statusInstalled": "已写入磁盘",
      "statusVerified": "连接通过",
      "statusMissing": "磁盘文件丢失",
      "statusRetired": "已退役",
      "statusError": "异常",
      "actionInstall": "写入磁盘",
      "actionTest": "测试连接",
      "actionCopyPub": "复制公钥",
      "pipelineStored": "已入库",
      "pipelineInstalled": "已写磁盘",
      "pipelineVerified": "连接通过",
      "progressAria": "进度",
      "loginTitle": "登录授权（公钥）",
      "loginDesc": "决定「谁可以进来」。只存公钥，写入项目 home 的 authorized_keys。与出站私钥无关。",
      "loginAdd": "新增登录公钥",
      "loginEmpty": "还没有允许登录的公钥",
      "loginEmptyHint": "把笔记本或 CI 的公钥贴上来，绑到项目用户后即可 SFTP／SSH（需 sshd 片段）。",
      "loginAddFirst": "新增第一把登录公钥",
      "boundProject": "项目",
      "unboundProject": "未绑项目",
      "loginRemoved": "已移除公钥",
      "remove": "移除",
      "loginModalTitle": "允许一把公钥登录",
      "loginModalDesc": "选择项目后，公钥会写入该 Linux 用户 home/.ssh/authorized_keys",
      "addAuth": "加入授权",
      "selectOption": "— 选择 —",
      "publicKey": "公钥",
      "publicKeyHint": "整行粘贴，例如 ssh-ed25519 AAAA… comment",
      "commentOptional": "备注（可选）",
      "commentPlaceholder": "笔记本 / CI",
      "loginNeedProject": "请先创建项目。系统用户就绪后再绑公钥效果最佳。",
      "loginNeedPub": "请选择项目并粘贴以 ssh- 开头的公钥",
      "loginNoProjects": "没有项目。在下面授权现有的 Linux 用户（root / tester）。写入/root/.ssh需要YSK_EXECUTE=1。",
      "loginLinuxHint": "没有项目时使用。示例：root 或 tester。",
      "loginAdded": "已加入",
      "sshdTitle": "项目用户 SFTP（sshd）",
      "sshdDesc": "让 ysks_* / ysk_* 项目用户可用公钥 SFTP。未安装时，登录授权可能无效。",
      "sshdStep1": "在「登录授权」为项目加入公钥",
      "sshdStep2": "在此预览并安装系统 Match 片段",
      "sshdStep3": "安装需要系统执行权限；会尝试 reload sshd",
      "sshdPreview": "设置预览",
      "loadingSnippet": "（加载中…）",
      "reloadedCopied": "已重新加载；片段已复制到剪贴板",
      "reloadAndCopy": "重新加载并复制",
      "installedOk": "已安装",
      "installToSystem": "安装到系统",
      "sshdManualHint": "若提示无法执行，请以具备权限的方式运行控制面，或手动将片段放入",
      "outboundTitle": "出站身份密钥",
      "outboundDesc": "私钥加密保存在控制面。列表永不显示私钥。写入磁盘 ≠ 对方已授权你登录。",
      "outboundAdd": "新增出站身份",
      "filterActive": "使用中",
      "filterPanel": "面板",
      "filterUser": "项目用户",
      "filterRetired": "已退役",
      "filterAll": "全部",
      "searchIdentity": "搜索名称或 fingerprint…",
      "searchIdentityAria": "搜索身份",
      "identityCount": "{{count}} 个身份",
      "identityList": "身份列表",
      "outboundEmpty": "还没有出站身份",
      "outboundEmptyFilter": "没有符合条件的项目",
      "outboundEmptyHint": "30 秒创建一把密钥：选用途 → 命名 → 完成。之后可用于 peer / 备份 / git。",
      "outboundEmptyFilterHint": "试着改筛选或清空搜索",
      "outboundAddFirst": "新增第一个出站身份",
      "userPrefix": "用户 {{user}}",
      "createFailed": "创建失败",
      "identityCreatedOnce": "身份已创建（私钥只显示一次）",
      "writtenToDisk": "已写入磁盘",
      "cannotWriteNeedExecute": "无法写入系统：需开启执行权限（YSK_EXECUTE）",
      "notDone": "未完成",
      "installFailed": "安装失败",
      "testPassed": "连接通过",
      "testFailed": "连接失败",
      "testError": "测试失败",
      "copiedPubPaste": "已复制公钥 — 贴到对方 authorized_keys 或 Git 部署密钥",
      "deletedNamed": "已删除「{{name}}」",
      "rotated": "已轮替：旧密钥退役，新密钥已创建",
      "detailStatus": "状态",
      "detailPurpose": "用途",
      "detailLinuxUser": "Linux 用户",
      "detailDiskPath": "磁盘路径",
      "detailLastTest": "最近测试",
      "suggestFlow": "建议流程：入库 → 写入磁盘 → 把公钥放到对方 → 测试连接",
      "suggestFlowPrefix": "建议流程：入库 → 写入磁盘 → 把",
      "suggestFlowSuffix": "放到对方 → 测试连接",
      "publicKeyStrong": "公钥",
      "copiedPub": "已复制公钥",
      "allowLocalLogin": "允许本机用此钥登录",
      "localLoginOk": "已把公钥加入本机登录授权",
      "testingConnection": "测试连接…",
      "rotateKey": "轮替密钥",
      "wizStepPurpose": "这把密钥用来做什么？",
      "wizStepProject": "绑定哪个项目？",
      "wizStepPanelConfirm": "确认面板出站",
      "wizStepName": "命名与选项",
      "wizStepPurposeDesc": "选对用途，之后列表与安装路径会自动对齐",
      "wizStepProjectDesc": "密钥会绑定该项目的 Linux 用户与 home",
      "wizStepPanelDesc": "私钥只放在控制面 secrets，用于 scp／ssh 到其他主机",
      "wizStepNameDesc": "名称方便你辨识；高级选项可稍后再改",
      "prevStep": "上一步",
      "nextStep": "下一步",
      "createIdentity": "创建身份",
      "purposePanelTitle": "面板连其他机",
      "purposePanelSub": "Cluster peer、远程备份、探测",
      "purposePanelRec": "推荐大多数管理操作",
      "purposeUserTitle": "项目用户出站",
      "purposeUserSub": "git pull、项目脚本 scp",
      "purposeUserPath": "写入项目 home/.ssh",
      "selectProject": "— 选择项目 —",
      "noProjectsHint": "尚未有项目 — 请先创建项目与系统用户",
      "afterCreatePub": "创建后请把",
      "afterCreatePubMid": "放到目标机的",
      "afterCreatePubEnd": "，再用「测试连接」确认。",
      "privKeyStayLocal": "私钥只留在本机控制面；不会出现在列表或日志。",
      "displayName": "显示名称",
      "displayNameHint": "例如 peer-prod、myapp-git",
      "algorithm": "算法",
      "algoSuggested": "建议",
      "algoLegacy": "旧系统",
      "installImmediately": "创建后立即写入磁盘",
      "installImmediatelyHint": "（需系统执行权限；否则会提示无法套用）",
      "savePrivTitle": "请立即保存私钥",
      "savePrivDesc": "关闭后面板不会再显示私钥全文。公钥可随时复制。",
      "copiedPriv": "已复制私钥",
      "copyPriv": "复制私钥",
      "nextInstallDisk": "下一步：写入磁盘",
      "savedCloseBtn": "我已保存，关闭",
      "privKeyOnce": "Private key（仅此一次）",
      "privSavedConfirm": "我已把私钥存到安全位置（密码管理器／离线备份）",
      "testConnTitle": "测试连接",
      "testConnDesc": "用此身份尝试 ssh … true。成功只代表这个目标可登录。",
      "startTest": "开始测试",
      "testTarget": "目标",
      "testTargetHint": "格式 user@host 或 user@host:port",
      "deleteIdentityTitle": "删除身份？",
      "rotateKeyTitle": "轮替密钥？",
      "deleteIdentityDesc": "将删除「{{name}}」并尝试清除磁盘上的私钥文件。此操作无法复原。",
      "rotateKeyDesc": "「{{name}}」会标记为已退役，并生成一把新密钥。请更新对方 authorized_keys。",
      "rotate": "轮替",
      "enrollStatusSecret": "已生成密钥",
      "enrollStatusConfirmed": "已确认 App",
      "enrollStatusWritten": "已写入 home",
      "enrollStatusRetired": "已退役",
      "needProjectOrUser": "请选项目或填 Linux 用户名",
      "enrollFailed": "登记失败",
      "totpGenerated": "已生成 SSH 专用 TOTP（与 panel 2FA 分开，除非勾选同步）",
      "confirmed": "已确认",
      "codeWrong": "码错误",
      "gaWritten": "已写入 .google_authenticator",
      "needExecute": "需开启系统执行权限",
      "ssh2faTitle": "SSH 登录第二因素",
      "ssh2faDesc": "保护 ssh 登录 Linux 用户。与「我的安全」的 panel 2FA 分开；默认独立 secret。",
      "ssh2faStep1": "为 Linux 用户登记 TOTP（扫码）",
      "ssh2faStep2": "确认 App 6 位码",
      "ssh2faStep3": "写入 home",
      "ssh2faStep4": "系统安装 PAM 模块并合并片段（下方）",
      "pkgLabel": "软件包 {{name}}",
      "pkgStatus": "套件 {{status}}",
      "pamStatus": "帕姆{{status}}",
      "kbdStatus": "sshd 键盘交互 {{status}}",
      "light": {
        "green": "正常",
        "yellow": "需检查",
        "red": "未就绪"
      },
      "enrollForUser": "为用户登记 SSH 2FA",
      "ssh2faEmpty": "尚未为任何 Linux 用户开启 SSH 2FA",
      "ssh2faEmptyHint": "建议先用密钥登录；2FA 作第二道门。项目 SFTP-only 用户通常不需要 keyboard-interactive。",
      "startEnroll": "开始登记",
      "fromPanelBadge": "与 panel 同源",
      "enterCode": "输入验证码",
      "rewriteHome": "重写 home 文件",
      "writeHome": "写入 home",
      "retiredOk": "已退役",
      "retire": "退役",
      "pamTitle": "系统：PAM / sshd（手动或有权限时套用）",
      "pamDesc": "nullok 避免未写文件用户被锁死。写文件 ≠ 已要求 TOTP。",
      "pamSnippet": "PAM 片段（建议并入 /etc/pam.d/sshd）",
      "sshdHint": "sshd 提示",
      "rescueUsers": "救援用户（逗号分隔，永不进 strict Match）",
      "strictPreview": "Strict Match 预览（publickey+TOTP、关 password）",
      "copiedPam": "已复制 PAM 片段",
      "copyPam": "复制 PAM",
      "applyStrict": "套用 Strict 到系统",
      "pamPkgHint": "软件包：",
      "pamRescueHint": "。保留至少一名未写 2FA 文件的救援管理员（默认 root）。",
      "enrollModalTitle": "登记 SSH 2FA",
      "enrollModalDesc": "默认生成独立 secret（不共用 panel）。高级才可同步 panel TOTP。",
      "generateShowSecret": "生成并显示密钥",
      "projectSuggested": "项目（建议）",
      "orManualUser": "— 或手动填用户 —",
      "linuxUser": "Linux 用户",
      "advancedSharePanel": "高级：使用当前 panel 操作员的 TOTP secret（需输入 SHARED 确认）",
      "setupAuthTitle": "设置 Authenticator",
      "setupAuthDesc": "扫码或输入密钥后，用 App 的 6 位码确认。确认后才写 home 文件。",
      "later": "稍后",
      "confirmCodeBtn": "确认验证码",
      "secretBase32": "密钥（base32）",
      "copiedSecret": "已复制 secret",
      "copySecret": "复制 secret",
      "scanThenCode": "若已扫码，直接输入当前 6 位码即可。",
      "verifyCode": "验证码",
      "applyStrictStepUp": "套用 Strict · step-up",
      "enterPanelTotp": "输入当前 panel TOTP 验证码",
      "applyBtn": "套用",
      "appliedOk": "已套用",
      "sharePanelTitle": "共用 panel TOTP secret？",
      "sharePanelDesc": "风险高。请输入 SHARED 确认。",
      "confirmString": "确认字符串",
      "enableShare": "启用共用",
      "invalidPub": "请贴上完整 OpenSSH 公钥行（ssh-ed25519／ssh-rsa／ecdsa…）。",
      "dryRunOk": "预览试行完成。请查看下方预览。",
      "strictDryRun": "严格模式预览",
      "errorNoDetail": "测试失败（无详情）",
      "strictBlocked": "套件或 PAM 未就绪，已停用套用 Strict。",
      "privCloseWithoutAck": "已关闭。私钥不会再显示；若尚未保存，请立即重新生成。"
    },
    "sessionsActive": "使用中",
    "sessionsOther": "其他设备",
    "sessionsHint": "",
    "noSessionsHint": "再次登录后，此设备会显示于此。",
    "sessionOtherBadge": "其他",
    "sessionThisDevice": "你在这里",
    "sessionDeviceOn": "{{browser}} · {{os}}",
    "sessionIpUnknown": "IP 未知",
    "sessionLastActive": "最近活动 {{when}}",
    "sessionStarted": "登录于 {{when}}",
    "sessionIdShort": "ID {{id}}...",
    "sessionJustNow": "刚刚",
    "sessionMinAgo": "{{n}} 分钟前",
    "sessionHourAgo": "{{n}} 小时前",
    "sessionDayAgo": "{{n}} 日前",
    "revokeSessionTitle": "登出此设备？",
    "revokeSessionDesc": "结束 {{device}}（{{ip}}）的会话，该设备需重新登录。",
    "revokeOthersTitle": "登出所有其他设备？",
    "revokeOthersDesc": "将结束 {{count}} 个其他会话。当前浏览器保持登录。",
    "sessionRevoked": "已登出该会话",
    "mySecurityHint": "",
    "policyTotpHint": "全站政策：要求 admin 角色各自启用 2FA（每人自己扫码），不是共用同一组验证码。",
    "requireUser2fa": "要求所有面板用户启用 2FA",
    "changePasswordTitle": "变更登录密码",
    "currentPassword": "目前密码",
    "newPassword": "新密码",
    "confirmNewPassword": "确认新密码",
    "passwordMismatch": "两次新密码不一致。",
    "changePassword": "变更密码",
    "passwordChanged": "已更新密码。",
    "strictNeedsEnrolled": "至少一名管理员已开 2FA，才可开启 Strict。",
    "policyTotpNeedSelf": "请先在本帐号启用 2FA，否则确认码无法填写。",
    "policyNoTotpHint": "This account has no 2FA yet — saving policy does not need a TOTP. Set up 2FA above if you want to require it for others.",
    "policyNeedSelf2fa": "首先在此帐户上启用 2FA，然后使用 TOTP 代码进行确认",
    "revokeAllDevicesTitle": "撤销每个记住的设备 - 您和其他管理员必须再次验证 2FA",
    "sessionCli": "CLI",
    "sessionApi": "API",
    "fail2banSnippetTitle": "fail2ban 片段",
    "fail2banSnippetEmpty": "没有写入片段。",
    "trustedDevicesTitle": "信任装置",
    "noTrustedDevices": "尚未有信任装置。",
    "strictConfirmTitle": "开启 Strict 2FA？",
    "strictConfirmDesc": "未开 2FA 的用户会被拒绝登录。请确认你已有可用的 TOTP 或通行密钥。",
    "revokeDevicesTitle": "撤销信任装置？",
    "revokeDevicesDesc": "已记住的浏览器要再做 2FA。",
    "approvalsHint": "高风险工具需要第二人批准时会出现在此。权限在「用户 → 权限」设定。",
    "allowlistReadonly": "代理工具目录（只读）。能力授权在「用户 → 权限」设定。",
    "colTool": "工具",
    "colAllowed": "允许",
    "colRisk": "风险",
    "colApproval": "审批",
    "risk": {
      "low": "低",
      "medium": "中",
      "high": "高",
      "critical": "严重"
    },
    "confirmDeleteApiKey": "删除此 API 密钥？",
    "confirmDeleteApiKeyDesc": "删除后「{{name}}」无法再验证。此操作无法复原。"
  },
  "serviceExposure": {
    "title": "网络访问",
    "manage": "管理访问",
    "manageTitle": "服务网络访问",
    "manageDesc": "控制 {{service}} 在主机防火墙的可达性。",
    "mode": "访问模式",
    "modePrivate": "仅本机",
    "modePublic": "公网",
    "modeRestricted": "受限",
    "modeUndecided": "尚未設定",
    "modePublicLive": "公网（实际监听）",
    "summaryPublicLive": "正在听 {{bind}} — 全部界面可达。请确认存取模式；这不是仅本机。",
    "modeLoading": "載入中",
    "summaryPrivate": "未对外开放防火墙端口。",
    "summaryPublic": "公网开放 · {{ports}}",
    "summaryUndecided": "尚未確認存取模式（目錄建議：{{suggested}}）。",
    "summaryNotEnforced": "防火牆未啟用，面板未強制開放或封鎖此埠。",
    "roleSmtp": "SMTP 提交",
    "roleImap": "IMAP／POP3 收件",
    "summaryRestricted": "受限 · {{count}} 个来源",
    "summaryFirewallOff": "主机防火墙：{{detail}} — UFW 未启用时规则不会生效。",
    "summaryFirewallOffOnly": "主机防火墙未启用，埠规则不生效。",
    "outOfSync": "未同步",
    "openButStopped": "端口打开 — 服务未运行",
    "openNoTenants": "没有租户的公共港口",
    "firewallOff": "防火墙关闭",
    "ufwMissing": "未安装 UFW",
    "ufwInactive": "已关闭",
    "firewallLink": "防火墙",
    "portsLabel": "端口",
    "allowFrom": "允许来源（IP／网段）",
    "allowCountries": "允许国家（ISO）",
    "hintPrivate": "服务仍可本机监听；不会写入公网 UFW 允许规则。",
    "hintPublic": "警告：对整个互联网开放此端口。数据库请优先用受限模式。",
    "hintRestricted": "逗号分隔 IP 或 CIDR；仅允许这些来源连接。",
    "hintCountries": "L2 best-effort：ipset + 国家网段。需 root、EXECUTE、ipset。云安全组须另行设置。",
    "restrictedNeedIp": "受限模式请至少加入一个 IP 或网段。",
    "restrictedNeedSource": "受限模式请至少加入 IP／网段或国家代码。",
    "privateStartTitle": "要对外开放 {{service}} 吗？",
    "confirmAndStart": "确认并启动",
    "cloudSgNote": "仅主机防火墙 — 不会改云安全组（AWS／GCP／Azure）。",
    "serviceNotInstalled": "此服務尚未安裝，防火牆規則不會生效。"
  },
  "services": {
    "enabledBoot": "自启",
    "unitNotFound": "Unit not installed",
    "bootNa": "不适用",
    "unitNa": "不适用",
    "permLabel": "权限",
    "permCanChange": "可执行系统变更（超级用户）",
    "permBlocked": "无法变更系统",
    "permHint": "系统变更 {{exec}} · 超级用户 {{root}}",
    "clusterLegend": "已计划＝只写在面板，尚未套用到主机。",
    "active": {
      "active": "运行中",
      "inactive": "未运行",
      "not-found": "未安装",
      "failed": "失败",
      "tool": "工具",
      "activating": "启动中"
    },
    "unitStatic": "静止的",
    "unitIndirect": "间接",
    "action": {
      "start": "启动",
      "stop": "停止",
      "restart": "重启",
      "reload": "重载",
      "enable": "开机启用",
      "disable": "取消开机启用"
    },
    "enabledOk": "已设置 {{label}} 开机启动",
    "bootDisabledWarn": "{{label}} 正在运行，但重启后不会自动启动。请启用开机启动。",
    "bootDisabledShort": "未开机启动",
    "sshdBootOffWarn": "sshd 未开机自启。重开机后将无法以 SSH 登入（单机面板的救援通道）。",
    "mariadbNotInstalled": "尚未安装 MariaDB",
    "mariadbNotInstalledMysqlOk": "尚未安装：MariaDB（MySQL 已安装）",
    "lifecycleTitle": "{{label}} 服務控制",
    "startedOk": "已啟動 {{label}}",
    "stoppedOk": "已停止 {{label}}",
    "needRunning": "{{label}} 未运行",
    "restartedOk": "已重啟 {{label}}",
    "reloadedOk": "已重載 {{label}}",
    "reloadTitle": "重载 {{label}} 设定（不完全重启）",
    "stopNeedConfirm": "需确认",
    "stopNeedConfirmPhrase": "需输入确认短语",
    "stopNeedConfirmImpact": "停止 {{label}}？连到此服务的连线会中断。",
    "stopConfirmTitle": "停止 {{label}}？",
    "stopConfirmDesc": "{{label}} 將停止接聽。需要時可在本頁再啟動。",
    "stopConfirmEdgeDesc": "停止 {{label}} 會令站點與反向代理離線，直至再次啟動。",
    "stopConfirmEdgeConsequence": "{{label}} 停止期間，本機不會提供 HTTP／HTTPS。",
    "stopConfirmSshdTitle": "停止 sshd？",
    "stopConfirmSshdDesc": "停止 sshd 會中斷遠端 SSH。請確認你仍有主機控制台或其他登入途徑。",
    "stopConfirmSshdToken": "停止 sshd",
    "stopConfirmSshdConsequence": "新的 SSH 連線會失敗，直至在主機控制台再啟動 sshd。",
    "stopConfirmPanelTitle": "停止 YSK Server？",
    "stopConfirmPanelDesc": "面板與 API 會離線，直至在主機上再啟動該服務單元。",
    "stopConfirmPanelSshdOffDesc": "面板与 API 会离线。sshd 未开机自启，重开机后可能没有 SSH 救援通道。",
    "stopConfirmPanelSshdOffConsequence": "sshd 未开机自启。重开机后可能无法以 SSH 登入。",
    "ufwNoLifecycle": "此矩阵不启动或停止 UFW。",
    "restartConfirmPanelTitle": "重启 YSK Server？",
    "restartConfirmPanelDesc": "重启期间面板与 API 会短暂离线。",
    "restartConfirmTitle": "重启 {{label}}？",
    "restartConfirmDesc": "立即重启 {{label}}。现有连线可能会中断。",
    "restartConfirmConsequence": "{{label}} 会短暂中断连线，然后继续提供 HTTP／HTTPS。",
    "reloadConfirmTitle": "重载 {{label}}？",
    "reloadConfirmDesc": "重载 {{label}} 设定。现有连线应会保持。",
    "enableConfirmTitle": "开机启用 {{label}}？",
    "enableConfirmDesc": "启用 {{label}}，开机时自动启动。",
    "startVerifyFailed": "{{label}} 启动后未保持健康。",
    "stopConfirmPanelToken": "停止 ysk 服务器",
    "stopConfirmPanelConsequence": "此瀏覽器工作階段會中斷。請從 SSH 或主機控制台啟動服務單元。",
    "stopConfirmFail2banTitle": "停止 fail2ban？",
    "stopConfirmFail2banDesc": "停止 fail2ban 後不會再自動封鎖 IP。網站與 SSH 會繼續運作。",
    "stopConfirmFail2banConsequence": "在再次啟動 fail2ban 之前，新的攻擊來源不會被自動封鎖。",
    "actionDone": "已{{action}}",
    "runningOf": "{{running}}/{{total}} 运行中",
    "statusFilter": {
      "all": "所有州",
      "running": "跑步",
      "failed": "失败的",
      "missing": "未安装"
    },
    "canMutate": "可变更",
    "locked": "锁定",
    "controlUnit": "控制面 unit",
    "logs": "日志",
    "dbHa": "数据库 HA",
    "clusterCount": "{{count}} 个集群",
    "mariadbCluster": "MariaDB 集群",
    "probing": "探测服务矩阵…",
    "lifecycleLocked": "生命周期操作已锁定：需 root + YSK_EXECUTE。探测仍可用。见",
    "hostSettings": "主机设置",
    "matrixTab": "服务矩阵 ({{count}})",
    "stackTab": "软件套餐",
    "stackTitle": "主机软件套餐",
    "stackHint": "按方案一键安装或移除主机组件；SQL 服务器互斥。",
    "protectionTab": "保护探测",
    "knownServices": "已知服务",
    "showing": "显示 {{shown}} / {{total}}",
    "all": "全部",
    "searchPh": "名称 / unit / 类别",
    "noMatch": "没有符合的服务",
    "bootPrefix": "开机 {{state}}",
    "controlPage": "控制页",
    "manageRuntime": "安装／更新",
    "installOrOpen": "安裝／開啟",
    "protectionTitle": "保护探测",
    "protectionSub": "只读；不改防火墙／fail2ban",
    "protectionDoneNote": "保护探测完成",
    "probeDone": "探测完成",
    "runProtection": "执行保护探测",
    "notProbedYet": "尚未探测",
    "cat": {
      "web": "网站",
      "db": "数据库",
      "mail": "邮件",
      "dns": "DNS",
      "ftp": "FTP",
      "cache": "快取",
      "panel": "控制面",
      "ssh": "SSH",
      "other": "其他",
      "runtime": "执行环境"
    }
  },
  "software": {
    "title": "软件中心",
    "desc": "全部可管理软件一览：安装状态、服务健康、新版本提示；可进入管理页或用于项目。",
    "tabs": {
      "overview": "总览",
      "runtimes": "运行环境",
      "databases": "数据库",
      "edge": "域名与边缘",
      "mailFiles": "邮件与文件",
      "host": "主机服务"
    },
    "stat": {
      "catalog": "目录项目",
      "runtimesInstalled": "运行环境已装",
      "updates": "有新版本／可扩充",
      "attention": "需关注"
    },
    "quickTitle": "快捷",
    "quickDesc": "常用分区与主机服务入口",
    "updatesTitle": "可更新／可安装版本",
    "updatesDesc": "上游或面板支持较新版本。安装后可在项目选择对应 runtime。",
    "allSoftware": "全部软件",
    "status": {
      "unknown": "—",
      "installed": "已安装",
      "notInstalled": "未安装",
      "running": "运行中",
      "missing": "未检测",
      "failed": "失败",
      "stopped": "已停止"
    },
    "badge": {
      "update": "有新版本",
      "upToDate": "已是最新"
    },
    "meta": {
      "installed": "已装：{{list}}",
      "default": "默认 {{v}}",
      "remote": "上游约 {{v}}",
      "openManage": "打开管理页安装或配置",
      "aptCurrentLatest": "已装 {{v}} · 已是仓库最新",
      "aptVersion": "已装 {{v}}",
      "aptUpgrade": "{{from}} → {{to}} 可升级",
      "aptUpgradeMulti": "{{n}} 个软件包可升级：{{list}}",
      "aptNotInstalled": "系统未安装此软件包（可到管理页安装）",
      "hostUpgradable": "主机约 {{n}} 个可升级软件包",
      "checking": "正在检查版本…或打开管理页配置"
    },
    "action": {
      "manage": "管理",
      "useInProject": "用到项目",
      "useInProjectTitle": "到项目页设置此 runtime",
      "update": "更新",
      "updateTitle": "前往安装／切换至 {{v}}",
      "updateTo": "更新至 {{v}}",
      "installVersion": "安装 {{v}}",
      "applyAptTitle": "确认后更新 {{pkg}}",
      "updateN": "更新 {{n}} 项",
      "installTitle": "安装 {{list}}",
      "install": "安装",
      "updateAptTitle": "前往更新中心处理 {{pkg}}"
    },
    "apply": {
      "blockedShort": "被阻挡",
      "failedShort": "失败",
      "failed": "更新失败",
      "blocked": "被阻挡",
      "confirm": "确认更新",
      "confirmTitle": "确认更新软件？",
      "confirmBody": "将更新 {{pkg}}：{{from}} → {{to}}。需系统变更权限。",
      "ok": "已应用 {{pkg}}",
      "progress": "更新中 {{n}}/{{total}}：{{pkg}}",
      "okMulti": "已更新：{{list}}",
      "okMultiTitle": "{{label}} 更新完成",
      "partial": "部分成功",
      "partialTitle": "部分更新失败",
      "failedTitle": "{{label}} 更新失败",
      "progressDetail": "{{从}} → {{到}}",
      "confirmBodyMulti": "将更新 {{label}}：{{list}}"
    },
    "version": {
      "loading": "加载版本中…",
      "installed": "已装",
      "latest": "最新",
      "upToDate": "已是最新／仓库最新",
      "refresh": "重新检查最新",
      "refreshHasUpdate": "有较新版本",
      "refreshLatest": "已是纪录中的最新版本",
      "pick": "选择版本",
      "noTarget": "没有可更新版本",
      "needRuntimePage": "请在运行环境页安装此版本",
      "noAptCandidate": "没有可用的 apt 候选版本",
      "sourceLabel": "来源"
    },
    "install": {
      "progress": "正在安装：{{list}}…",
      "progressHint": "可能需要一两分钟",
      "blockedTitle": "{{label}} 未能安装",
      "ok": "已提交安装：{{list}}",
      "okTitle": "{{label}} 安装完成／已提交",
      "failedTitle": "{{label}} 安装失败",
      "confirmTitle": "确认安装软件？",
      "confirmBody": "将安装 {{label}}：{{list}}。需系统变更权限。",
      "confirm": "确认安装"
    },
    "runtime": {
      "installing": "正在安装／更新 {{kind}} {{v}}…",
      "installingHint": "可能需要一两分钟",
      "blockedTitle": "{{kind}} {{v}} 未能安装",
      "installed": "已安装／更新 {{kind}} {{v}}",
      "installedDetail": "可在项目选择此版本",
      "failedTitle": "{{kind}} {{v}} 安装失败",
      "installingShort": "安装中…"
    },
    "aptSummaryTitle": "系统仓库可升级",
    "aptSummaryDesc": "目录与主机套件分开统计；可在更新中心或卡片确认应用。",
    "aptSummary": {
      "catalog": "目录软件 {{n}}",
      "host": "主机套件 {{n}}",
      "openUpdates": "打开更新中心"
    },
    "navBadgeTitle": "目录软件可升级：{{n}}",
    "projectHint": "已预填 runtime {{runtime}}，可创建项目",
    "projectHintWithVersion": "已预填 runtime {{runtime}} {{version}}，可创建项目"
  },
  "softwareBanner": {
    "titleDefault": "尚未安装所需软件",
    "missing": "缺少：{{names}}",
    "nameSep": "、",
    "installOneClick": "一键安装",
    "installing": "安装中…",
    "reprobe": "重新探测",
    "close": "关闭",
    "resultTitle": "安装结果",
    "probeFailed": "探测失败",
    "installIncomplete": "安装未完成",
    "installedOne": "已安装 {{name}}",
    "allInstalled": "所需软件已安装"
  },
  "softwareLifecycle": {
    "kindInstall": "安装",
    "kindUninstall": "卸载",
    "dockBusy": "{{种类}} · {{标题}}",
    "dockFail": "失败 · {{title}}",
    "dockDone": "完成 · {{title}}",
    "minimize": "最小化",
    "maximize": "放大",
    "restore": "还原",
    "liveLog": "实时日志",
    "uninstall": "卸载…",
    "uninstallTitle": "卸载「{{name}}」",
    "impactIntro": "以下组件与服务将受影响。请仔细阅读后再继续。",
    "nothingInstalled": "此功能没有已安装项目。",
    "packagesList": "软件包：{{list}}",
    "noPackages": "未列出 apt 软件包",
    "unitsList": "服务：{{list}}",
    "dataPolicy": "数据策略",
    "policyKeep": "保留配置与数据",
    "policyPurge": "彻底清除配置与数据（危险）",
    "purgeWarning": "彻底清除会永久删除配置与数据目录，难以还原。",
    "keepHint": "将移除软件包；配置与数据目录会保留在磁盘。",
    "summaryLine": "将处理 {{packages}} 个软件包、{{units}} 个服务单元。",
    "doubleConfirmIntro": "卸载需要双重确认。",
    "ackLabel": "我已阅读影响说明，明白服务可能中断。",
    "typePhrase": "请输入 {{phrase}} 以确认",
    "confirmUninstall": "确认卸载",
    "protected": "受保护",
    "readyHint": "所需软件已安装。如有需要可在此卸载。",
    "readyTitle": "所需软件已就绪",
    "jobInProgress": "已有安装／卸载进行中",
    "uninstallDone": "卸载完成",
    "uninstallFailed": "卸载失败",
    "impact": {
      "sitesDown": "公开站點可能無法访问",
      "reverseProxy": "反向代理将停止",
      "phpBackend": "PHP 后端可能停止",
      "mailOutbound": "外发郵件将中断",
      "mailInbound": "收信将中断",
      "mailQueue": "郵件队列工具不可用",
      "mailDkim": "DKIM 签署将停止",
      "database": "資料库服务将停止",
      "dataLossPurge": "徹底清除會删除資料目錄",
      "cache": "快取服务将停止",
      "firewall": "主機防火墙将被移除",
      "intrusion": "入侵攔截将停止",
      "ftp": "FTPS 服务将停止",
      "dns": "DNS 伺服器将停止",
      "vpn": "VPN 服务将停止",
      "vnc": "VNC 服务将停止",
      "controlPlane": "控制面 runtime（受保护）",
      "generic": "相關服务可能停止",
      "containers": "正在运行的容器将停止",
      "validators": "使用 Docker Compose 的验证者节点堆栈将停止",
      "purgeData": "将删除資料路径",
      "protectedSkipped": "受保护元件會跳过",
      "runtimeStack": "将移除此运行时面板管理的全部版本"
    },
    "requestCancel": "请求取消",
    "cancelling": "取消中…",
    "dockCancelling": "取消中 · {{title}}",
    "dockCancelled": "已取消 · {{title}}",
    "cancelHint": "已请求取消。浏览器已停止接收日志；主机可能仍会完成当前的 apt／步骤。请稍后重新探测状态。",
    "cancelledToast": "已取消操作（客户端已停止串流）",
    "kindApply": "套用",
    "kindScan": "扫描",
    "kindDeploy": "部署",
    "kindRuntime": "运行时",
    "jobDone": "完成 · {{title}}",
    "jobFailed": "失败 · {{title}}",
    "uninstallUfwWarn": "卸载 UFW 后，主机将失去面板管理的端口防火墙。",
    "uninstallFail2banWarn": "卸载 fail2ban 会停止 jail 并解除现有封锁。若要保留服务，请先把登录 IP 加入 ignoreip。"
  },
  "sqlEngineHealth": {
    "finding": {
      "package_missing": "尚未安装 {{flavor}} 服务器软件包。",
      "client_missing": "尚未安装 SQL 客户端工具。",
      "frozen_marker": "存在 Debian 冻结标记（模式：{{mode}}）。解除前守护进程无法启动。",
      "datadir_uninitialized": "数据目录没有系统目录，需要初始化。",
      "config_flavor_mismatch": "my.cnf 指向与 {{flavor}} 不符的引擎（{{path}}）。",
      "residual_foreign_plugins": "另一引擎的残留配置或插件可能导致本守护进程崩溃。",
      "unit_failed": "服务单元 {{unit}} 状态为 failed。",
      "unit_not_active": "服务单元 {{unit}} 状态为 {{active}}（未运行）。",
      "port_conflict": "本引擎未运行但 3306 端口已被占用（可能冲突）。"
    },
    "action": {
      "stop_unit": "停止服务单元",
      "clear_frozen": "清除冻结标记",
      "sanitize_config": "对齐 my.cnf 并停用外来引擎插件",
      "init_datadir": "初始化空白数据目录",
      "reset_failed": "重置失败的服务状态",
      "enable_unit": "设置开机启动",
      "start_unit": "启动服务",
      "verify_active": "确认服务已运行"
    },
    "note": {
      "alreadyHealthy": "SQL 引擎状态正常，无需修复。",
      "needsConfirm": "修复需要确认（共 {{count}} 步：{{findings}}）。",
      "installPackageFirst": "请先安装 {{flavor}} 服务器软件包，再执行修复。",
      "stepFailed": "修复步骤 {{action}} 失败：{{detail}}",
      "repairOk": "修复完成 — {{unit}} 已运行。",
      "repairIncomplete": "修复已执行，但服务状态仍为 {{active}}。"
    }
  },
  "sqlEngineSwitch": {
    "title": "切换至 {{target}}",
    "subtitle": "将以 {{to}} 取代 {{from}}。同一主机只能运行一个 SQL 服务器。",
    "confirm": "确认切换并迁移数据",
    "success": "已完成 SQL 引擎切换及数据迁移",
    "bannerHint": "若主机已安装另一种引擎，必须先确认「互斥切换」（卸载对方并迁移数据库），不可同时安装两种服务器。",
    "flowAria": "SQL 引擎切换方向",
    "from": "当前",
    "to": "目标",
    "calloutTitle": "若无备份则难以回退",
    "calloutBody": "成功导出后才会卸载 {{from}} 软件包。若后续步骤失败，逻辑备份仍保留在面板数据目录。",
    "sectionImpact": "将会执行的操作",
    "sectionLimits": "限制与风险",
    "dbListTitle": "将迁移的数据库（{{count}}）",
    "dbMigrateBadge": "{{count}} 个用户数据库",
    "dbEmptyBadge": "无用户数据库",
    "noUserDbs": "未检测到用户数据库（仅有系统库）。仍会更换服务器引擎。",
    "tableCount": "{{count}} 个数据表",
    "ackLabel": "本人明白二者互斥，同意卸载 {{from}}，并将数据迁移至 {{to}}。",
    "phraseLabel": "请输入 {{phrase}} 以确认",
    "phraseMismatch": "确认字元不符，请完整输入 SWITCH。",
    "warn": {
      "replace_engine": "卸载 {{from}}，并安装 {{to}}。",
      "exclusive": "MySQL 与 MariaDB 不可在同一主机同时作为服务器运行（互斥）。",
      "uninstall_packages": "将从系统移除当前的 SQL 服务器软件包。",
      "logical_dump": "用户数据库会以逻辑方式导出再导入；系统库不会以文件方式复制。",
      "dialect_risk": "MariaDB 或 MySQL 专有语法在导入时可能失败。",
      "no_replication": "复制设置、插件及二进制日志不会迁移。",
      "root_auth": "切换后可能需要重新设置 root 的本机套接字或密码认证。",
      "no_user_dbs": "未检测到用户数据库 — 只会更换引擎软件包。",
      "has_user_dbs": "将导出并导入 {{count}} 个用户数据库。"
    },
    "note": {
      "needsSwitch": "此主机已运行 {{other}}。MySQL 与 MariaDB 互斥 — 请确认切换（导出 → 卸载对方 → 安装 → 导入）。",
      "invalidTarget": "目标无效（只可为 mysql 或 mariadb）。",
      "badConfirmPhrase": "确认字元必须为 SWITCH。",
      "needAck": "必须勾选同意互斥切换（MySQL 与 MariaDB 二者择一）。",
      "switchNotNeeded": "无须切换 — 请使用一般安装。",
      "migrateDataRequired": "存在用户数据库时必须启用数据迁移。",
      "dumpFailed": "导出失败 — 来源引擎 {{source}} 仍在运行。{{detail}}",
      "datadirBackupFailed": "数据目录备份失败 — 已在卸载前中止。请尝试手动启动来源服务。",
      "waitFailed": "目标服务未就绪。备份路径：{{dumpPath}}。旧数据目录：{{datadir}}。需要人工处理。",
      "incomplete": "切换未完成。导出文件保留于 {{dumpPath}}，旧数据目录位于 {{datadir}}。请勿盲目再次清除。",
      "switched": "已由 {{from}} 切换至 {{to}}。已导入 {{imported}}／{{total}} 个数据库。",
      "dumpPath": "逻辑导出路径：{{path}}",
      "datadirBackup": "旧数据目录备份：{{path}}（确认无误后可删除：rm -rf {{path}}）",
      "grantsExported": "已导出权限（{{detail}}）",
      "frozenDetected": "MySQL／MariaDB 处于 FROZEN 状态（不是软件包安装失败）。路径：{{path}}（模式：{{mode}}）。软件包可能已安装，但引擎切换或降级后守护进程拒绝启动。请解除冻结；若数据目录为空可安全重新初始化。摘要：{{snippet}}",
      "frozenCleared": "已移除冻结标记 {{path}}。",
      "frozenClearFailed": "无法移除冻结标记 {{path}} — 请以管理员手动删除。",
      "datadirNotEmptySkipInit": "数据目录已有系统表 — 跳过重新初始化。",
      "datadirInitialized": "已为 {{flavor}} 初始化空白数据目录。",
      "datadirInitFailed": "初始化数据目录失败：{{detail}}",
      "unitNotActive": "服务单元 {{unit}} 状态为 {{active}}（预期为运行中）。",
      "nginxPortConflict": "Nginx 未运行 — Apache 可能仍占用公开 80 端口；请将 Apache 改绑 127.0.0.1:8080 后再重新启动 Nginx。",
      "nginxConfigFailed": "Nginx 配置检查失败：{{detail}}",
      "frozenShort": "FROZEN（{{mode}}）— 守护进程被封锁；需要解除冻结并修复。",
      "unfreezeNeedsConfirm": "解除冻结需要确认（冻结={{frozen}}，数据目录为空={{empty}}）。请以 confirm:true 提交。",
      "unfreezeOk": "解除冻结后服务 {{unit}} 已运行。",
      "unfreezeStartFailed": "解除冻结后仍未运行：{{detail}}",
      "unfreezePrompt": "请按「解除冻结并修复」以清除 FROZEN，并在数据目录为空时重新初始化。",
      "configSanitized": "已将 SQL 配置对齐为 {{flavor}}（my.cnf → {{target}}）。若目标为 MySQL，已停用 MariaDB 插件残留配置。",
      "configSanitizeFailed": "清理 SQL 配置失败：{{detail}}"
    },
    "step": {
      "dump": "导出 {{db}}",
      "exportGrants": "导出权限",
      "stop": "停止 {{unit}}",
      "backupDatadir": "备份数据目录",
      "purge": "卸载 {{pkg}}",
      "wait": "等待 {{unit}}",
      "importDb": "导入 {{db}}",
      "importGrants": "导入权限",
      "verify": "校验",
      "preflight": "预检",
      "confirm": "确认",
      "clearFrozen": "解除 MySQL 冻结",
      "initDatadir": "初始化空白数据目录",
      "startUnit": "启动 {{unit}}",
      "sanitizeConfig": "清理 my.cnf 与残留插件"
    }
  },
  "ssl": {
    "status": {
      "uploaded": "已上传",
      "issued": "已签发",
      "planned": "处理中",
      "failed": "失败",
      "missing": "文件缺失",
      "ready": "已就绪",
      "processing": "处理中"
    },
    "step": {
      "ok": "完成",
      "blocked": "无法执行",
      "failed": "失败",
      "skipped": "跳过"
    },
    "pillCount": "{{count}} 张",
    "statCerts": "证书",
    "panelCertHint": "面板 HTTPS 使用 {{path}}（到期 {{exp}}）。此凭证不在站点清单内。",
    "openPanelTls": "开启面板 HTTPS",
    "statWithFiles": "有文件",
    "statBindings": "绑定",
    "statFailed": "失败",
    "requestLe": "申请 Let’s Encrypt",
    "openLetsEncryptLog": "在日志中心打开 letsencrypt.log",
    "uploadCert": "+ 上传证书",
    "certbotNotInstalled": "Certbot 尚未安装",
    "leFailNxdomain": "DNS 找不到 {{domain}}（NXDOMAIN）— 公网没有 A／AAAA 记录，Let's Encrypt 无法验证。",
    "leFailNxdomainHint": "请到 DNS 为 {{domain}} 新增 A 记录指向本机公网 IP，写入区域文件；用 dig {{domain}} 确认有结果后再申请。",
    "leFailDns": "DNS 异常，无法解析 {{domain}}（SERVFAIL 或其他 DNS 问题）。",
    "leFailDnsHint": "检查 NS 是否正确、区域是否已写入并对公网生效。",
    "leFailHttp01": "域名 {{domain}} 可解析，但 HTTP-01 验证失败（80 端口连不上或回复不正确）。",
    "leFailHttp01Hint": "确认防火墙放行 80、nginx 在监听 80，且 {{domain}} 指向这台机器。",
    "leFailRateLimit": "Let's Encrypt 配额／频率限制（rate limit）。",
    "leFailRateLimitHint": "请稍后再试，或检查是否重复申请同一域名。",
    "leFailCaa": "CAA 记录禁止 Let's Encrypt 为 {{domain}} 签发。",
    "leFailCaaHint": "在 DNS 添加允许 letsencrypt.org 的 CAA，或移除阻碍签发的 CAA。",
    "leFailChallenge": "Let's Encrypt 域名验证失败（{{domain}}）。",
    "leFailChallengeHint": "先确认 DNS 有 A 记录、80 端口可达，再重试；详见 letsencrypt.log。",
    "leFailUnknown": "申请 Let's Encrypt 失败（{{domain}}）。",
    "leFailUnknownHint": "请打开 letsencrypt.log 查看详细错误。",
    "leFailRawTail": "技术详情（摘要）：{{snippet}}",
    "requestFailedWhy": "为什么不行",
    "requestFailedNext": "下一步",
    "retryRequest": "重试申请",
    "retryRequestFor": "重试申请 {{domain}}",
    "retryInTableHint": "可在下方证书列表该域名行重试",
    "bindingsTitle": "绑定与续期",
    "autoRenewLabel": "自动续期",
    "autoRenewYes": "已启用",
    "autoRenewNo": "未启用／未确认",
    "autoRenewYesDetail": "检测到续期机制：{{source}}。Let's Encrypt 证书到期前会由系统自动续签（需 certbot 正常）。",
    "autoRenewNoDetail": "未检测到已启用的 certbot.timer 或续期 cron。请在系统启用 certbot.timer，否则到期后需手动重签。",
    "renewSourceCron": "面板／系统 cron",
    "renewTimerEnabled": "已启用 systemd timer：{{unit}}",
    "renewTimerDisabled": "找到 {{unit}} 但未启用（systemctl enable --now {{unit}}）",
    "renewTimerInstalledUnknown": "主机有 {{unit}} 单元文件；请确认已 systemctl enable --now",
    "renewTimerActive": "{{unit}} 目前 active",
    "renewViaCron": "检测到 {{count}} 个含 certbot／续期的 cron 任务",
    "renewNone": "未登记 certbot.timer 或 LE 续期 cron",
    "expiresUnknown": "未知",
    "expiresUnknownHint": "读不到证书文件（权限或路径）；LE 通常在 /etc/letsencrypt/live/域名/",
    "expiresInDays": "{{n}} 天后",
    "expiresAt": " · 到期 {{date}}",
    "projectsAt": " · 项目: {{names}}",
    "mailAt": " · 邮件: {{domains}}",
    "noBindings": "尚未检测到项目／邮件绑定",
    "certsTitle": "证书 ({{count}})",
    "colDomain": "域名",
    "colProvider": "来源",
    "providerUpload": "上传",
    "colLocalFiles": "本地文件",
    "filesYes": "有",
    "filesNo": "无",
    "colExpires": "到期",
    "renew": "更新",
    "renewFor": "为 {{domain}} 续订 Let's Encrypt",
    "deleteDomain": "删除 {{domain}}",
    "colStatus": "状态",
    "emptyTitle": "尚未有证书",
    "emptyDesc": "用右上角「上传证书」或「申请 Let’s Encrypt」",
    "uploadTitle": "上传证书",
    "uploadDesc": "粘贴 PEM 内容，由管理面板写入服务器",
    "domainHint": "证书对应的主域名，例如 example.com",
    "fullchainLabel": "证书链（fullchain）",
    "fullchainHint": "含服务器证书与中继 CA 的 PEM",
    "privkeyLabel": "私钥（privkey）",
    "privkeyHint": "与证书配对的私钥 PEM，请妥善保管",
    "uploadHint": "上传成功只代表文件已写入；请到对应项目／邮件域名绑定后才会生效。",
    "leTitle": "申请 Let’s Encrypt",
    "leDesc": "由管理面板在服务器上申请，无需手动执行 certbot",
    "requestCert": "申请证书",
    "domainLeHint": "一般域名或 *.example.com 通配符",
    "domainLePlaceholder": "example.com 或 *.example.com",
    "emailLabel": "联系邮箱",
    "emailHint": "Let’s Encrypt 到期通知用；可留空则用 admin@域名",
    "leDns01Hint": "通配符使用 dns-01：面板会启动 certbot manual challenge，需于 DNS 提供商完成 TXT 验证。执行完成 ≠ 证书已上线。",
    "leHttp01Hint": "一般域名使用 http-01（nginx 插件）。申请成功后请确认项目／邮件已绑定此域名。",
    "deleteTitle": "删除证书？",
    "deleteDesc": "将删除 {{domain}} 的证书文件与登记。",
    "deleteNeedDomain": "删除此证书 — 输入域名进行确认",
    "savedCert": "已保存 {{domain}} 的证书",
    "uploadFailed": "上传失败",
    "requestBlocked": "无法在管理面板完成证书申请",
    "requestDone": "证书申请已完成",
    "requestFailed": "证书申请未成功",
    "applyFailed": "申请失败",
    "deletedCert": "已删除 {{domain}}",
    "uninstallCertbotWarn": "解除安装 certbot 会使现有 Let's Encrypt 证书无法自动续期。",
    "uninstallCertbot": "解除安装 certbot（会失去自动续期）",
    "domainRequired": "请填写域名。",
    "domainInvalid": "域名格式无效。",
    "domainKnownHint": "可从已知项目、DNS 或邮件域名选择，或自行输入。"
  },
  "stackWizard": {
    "purgeConfirm": "确认清除？将删除已登记的数据目录（数据库／邮件等），此操作无法复原。",
    "installedCount": "已安装 {{installed}} · 未安装 {{missing}}",
    "countHint": "此处计的是软件方案里的操作系统套件，不是另一分页的服务单元。",
    "executeRoot": "系统变更 {{execute}} · 管理员 {{root}}",
    "manifestPlan": "方案 {{plan}}（{{bundles}}）",
    "manifestHint": "上次选用的软件方案与套件组",
    "needRootExecute": "实际安装或移除需要管理员权限，并开启系统变更权限。仍可先做预览试行。",
    "modeInstall": "安装套餐",
    "modeUninstall": "移除套餐",
    "plan": "方案",
    "customBundles": "自定义套餐",
    "sqlExclusive": "SQL 服务器（互斥）",
    "clamavOptional": "可选，体积较大",
    "componentsTitle": "将安装的组件",
    "dryRun": "预览试行",
    "installNow": "立即安装",
    "uninstallHint": "勾选要移除的套餐。未勾选时无法移除。默认保留数据。",
    "dataPolicy": "数据策略",
    "keepData": "保留数据",
    "purgeData": "清除数据",
    "uninstallNow": "立即移除",
    "uninstallNeedSelect": "至少选择一个捆绑包。空选择不再意味着全部删除。",
    "uninstallConfirmTitle": "删除选定的捆绑包？",
    "uninstallConfirmDesc": "{{count}} 个捆绑包将被删除。键入 REMOVE 进行确认。",
    "bundle": {
      "control-plane": "控制面",
      "web": "网站寄存",
      "database": "数据库",
      "email": "邮件套件",
      "dns": "DNS",
      "ftp": "FTP/FTPS",
      "defense": "主机防护",
      "runtimes": "语言执行环境"
    },
    "planTitle": {
      "minimal": "仅控制面",
      "recommended": "建议寄存组合",
      "full": "全部软件"
    }
  },
  "support": {
    "title": "支持",
    "sub": "Creator、赞助与 YSK Limited — 免费产品，实在支持",
    "creatorTitle": "创作者",
    "creatorBody": "YSK Server 是免费、诚实的单机控制平面，给想自己掌控服务器的人。项目开源维护；你的反馈和 bug 报告很重要。",
    "donateTitle": "支持／赞助",
    "donateBody": "如果 YSK Server 帮你省时间，欢迎赞助开发。每一份支持都帮产品继续免费给所有人用。",
    "donateGithub": "GitHub 赞助商",
    "donateOther": "其他贊助方式",
    "yskTitle": "YSK Limited",
    "yskIntro": "需要超出免费面板的协助？YSK Limited 可以提供：",
    "yskSvc1": "服务器安装、加固与日常运维",
    "yskSvc2": "主机栈设计（网站、邮件、DNS、数据库）",
    "yskSvc3": "迁移、自动化与定制集成",
    "yskSvc4": "事故处理与上线就绪检查",
    "yskNoPrice": "此处不标价 — 请来信，按你的环境谈方案。",
    "yskWebsite": "ysk.hk",
    "helpTitle": "遇到问题？",
    "helpBody": "请来信说明操作系统、安装 log 路径、预期与实际结果。每封信都会看。",
    "docsHint": "完整文档在仓库",
    "donateLinktree": "Linktree",
    "cryptoTitle": "加密货币／Web3 地址",
    "cryptoHint": "请只在对应网络转账，转账前请再次核对地址。",
    "cryptoNetwork": "网络",
    "cryptoAddress": "地址",
    "copy": "复制",
    "copied": "已复制",
    "copyTitle": "复制 {{address}}",
    "docsLink": "说明文件",
    "diagTitle": "诊断总结",
    "diagBody": "复制版本、执行并托管事实以粘贴到电子邮件中。这不是完整的日志包。",
    "diagCopy": "复制诊断摘要",
    "diagCopied": "已复制诊断摘要",
    "diagCopyTitle": "复制版本、EXECUTE 与主机资料",
    "diagPreview": "预览将复制的内容",
    "diagLoading": "正在加载诊断...",
    "diagLoadFailed": "无法加载诊断",
    "copiedAddr": "已复制 {{addr}}",
    "diagStatus": "状态",
    "diagMode": "模式",
    "diagProtection": "防护",
    "diagHostname": "主机",
    "diagOs": "系统"
  },
  "system": {
    "exportLoadFailed": "加载导出数据失败",
    "dryRunDone": "模拟完成（未改系统）",
    "rebuildDone": "重建请求已完成 — 见操作结果",
    "exportWritten": "已写入导出，并列出托管配置文件",
    "rebuildFailed": "重建失败",
    "hostFallback": "主机",
    "mem": "内存",
    "diskPeak": "磁盘峰值",
    "exportRebuild": "导出／重建",
    "dnsCerts": "DNS／证书",
    "editIdentity": "编辑身份",
    "power": "电源",
    "metrics": "指标",
    "writeExports": "写入导出目录",
    "dryRunSync": "预览试运行同步",
    "hostConsole": "主机控制台",
    "loadingHost": "加载主机概况…",
    "identity": "身份",
    "identityReadonly": "只读 — 需系统变更权限与管理员权限才能套用",
    "identityTools": "通过系统工具设置主机名与时区",
    "hostnameHint": "系统主机名",
    "writable": "可写入",
    "locked": "锁定",
    "hostname": "主机名",
    "prettyName": "显示名称",
    "optional": "可选",
    "prettyPh": "友好显示名称",
    "timezone": "时区",
    "timezoneHint": "从清单选择时区（例如 Asia/Hong_Kong）",
    "timezoneNow": "主机现在时间：{{time}}（{{tz}}）",
    "timezoneBrowserDiff": "此主机时区是 {{host}}；你的浏览器是 {{browser}}。这里改的是主机时钟，不是浏览器。",
    "timezoneSelect": "请选择时区",
    "notExported": "尚未汇出",
    "dns": "域名系统",
    "updated": "已更新",
    "applyIdentity": "套用身份",
    "identitySetHostname": "主机名已设为 {{name}}",
    "identitySetPretty": "显示名称已设为 {{name}}",
    "identityClearPretty": "已清除显示名称",
    "identitySetTimezone": "时区已设为 {{tz}}",
    "panelSsl": "面板 SSL",
    "panelTls": {
      "title": "面板 HTTPS",
      "sub": "控制面（ysk-server）以 TLS 监听 listenPort；WebAuthn／Passkey 需要 HTTPS",
      "domain": "面板域名",
      "domainHint": "用于申请／绑定证书，例如 demo.ysk.hk",
      "email": "Let’s Encrypt 邮箱",
      "status": "状态",
      "enabled": "配置已开 TLS",
      "disabled": "未开 TLS（HTTP）",
      "serving": "当前连接：HTTPS",
      "servingHttp": "当前连接：HTTP",
      "expires": "证书到期",
      "certPath": "证书路径",
      "issueEnable": "申请证书并启用 HTTPS",
      "enableExisting": "用现有证书启用",
      "disable": "关闭面板 HTTPS",
      "disableNeedConfirm": "需确认 — 请输入 DISABLE-HTTPS",
      "needDomain": "请先填写主机名／域名",
      "needFqdn": "需要 FQDN（example.com），不要用裸主机名",
      "urlHint": "启用并重启后请用 {{url}} 打开",
      "certMissing": "配置已开 TLS，但证书或私钥文件不存在",
      "restartToApply": "需重启 ysk-server 服务才会改用 HTTPS",
      "noConfig": "找不到 config.json（请用 --config 启动）",
      "usingExisting": "已使用本机现有证书",
      "usingLe": "已使用 Let’s Encrypt 路径",
      "needCertFirst": "找不到 {{domain}} 的证书；请先申请或上传",
      "configWritten": "已写入面板 TLS 配置",
      "disabledNote": "已关闭面板 TLS",
      "certAlreadyPresent": "本机已有证书，跳过重新申请",
      "restartManual": "请手动：systemctl restart ysk-server",
      "restarted": "已重启 ysk-server",
      "restartFailed": "重启失败：{{detail}}",
      "firewallHint": "若从外网连接，请在防火墙放行面板端口（默认 9287/tcp）",
      "restartNow": "完成后立即重启 ysk-server",
      "restartNowHint": "会中断当前连接；未勾选则只写配置，需手动 systemctl restart",
      "restartConfirm": "确定立即重启面板服务？此连接可能断开，请改用 HTTPS 重新打开。",
      "manualRestart": "请手动重启后用 {{url}} 打开",
      "reconnectHttps": "服务可能已重启。请用 {{url}} 重新连接。",
      "leStrategies": "面板证书：依次尝试 webroot → nginx certonly → standalone（无需 --redirect）",
      "leOk": "已取得 {{domain}} 的 Let’s Encrypt 证书",
      "leFailed": "申请证书失败：{{detail}}",
      "leHint": "请确认域名 A 记录指向本机，且 80 端口可从外网到达（或 nginx 已服务该域名）",
      "openFirewall": "若外网连接：防火墙请允许面板端口 {{port}}/tcp（防火墙 → 开埠 → 9287 Panel）",
      "disableConfirmTitle": "禁用面板 HTTPS？",
      "disableConfirmDesc": "该面板将提供 HTTP 服务。 WebAuthn / Passkey 将停止工作，直到 HTTPS 再次打开。",
      "disablePasskeyWarn": "注册的密钥需要 HTTPS — 它们在 HTTP 上会失败。",
      "listenPublic": "小组正在监听公共地址 (0.0.0.0/::)。使用防火墙限制或绑定到 127.0.0.1。",
      "bootstrapCert": "这是自签名引导证书——浏览器会发出警告。为面板域颁发受信任的证书。",
      "cliNoSocket": "CLI 没有实时 HTTP 套接字； servingHttps 是从配置和监听套接字 (ss) 推断出来的。",
      "listenHost": "收听地址",
      "currentHost": "本次会议",
      "replaceCert": "替换为受信任的证书"
    },
    "timeNtp": "时间与 NTP",
    "clockStatus": "系统时钟状态",
    "local": "本机",
    "utc": "世界标准时间",
    "source": "来源",
    "ntpService": "NTP 服务",
    "ntpServiceActive": "运行中",
    "ntpServiceInactive": "未运行",
    "ntpServiceNa": "不适用",
    "ntpSync": "时钟同步",
    "ntpSyncedYes": "已同步",
    "ntpSyncedNo": "未同步",
    "ntpSyncedUnknown": "未知",
    "ntpRequested": "已请求启用 NTP 同步",
    "ntpFailed": "启用 NTP 失败",
    "enableNtp": "启用 NTP 同步",
    "network": "网络",
    "networkSub": "只读 · 完整网络设置不在此页",
    "noIp": "无法读取 IP",
    "storage": "存储",
    "metricsDetail": "指标详情",
    "noDisk": "无法读取磁盘",
    "avail": "可用 {{v}}",
    "shortcuts": "运维捷径",
    "shortcutsAria": "运维捷径",
    "scServices": "服务矩阵",
    "scServicesD": "服务单元生命周期",
    "scUnit": "控制面服务单元",
    "scUnitD": "面板服务单元",
    "scReadiness": "就绪探测",
    "scReadinessD": "生产闸门",
    "scUpdates": "系统更新",
    "scUpdatesD": "软件包与安全更新",
    "scMetrics": "主机指标",
    "scMetricsD": "负载告警",
    "scLogs": "日志中心",
    "scLogsD": "系统日志与文件",
    "powerTitle": "电源（危险区）",
    "powerWarn": "重启／关机将中断所有服务与面板。面板无法开机 — 需实体或 hypervisor。",
    "unlocked": "已解锁",
    "powerUnlock": "解锁危险区域",
    "powerLock": "锁定危险区域",
    "noScheduledPower": "未安排重新启动或关机",
    "powerCaps": "需 YSK_EXECUTE=1 与 root。目前 EXECUTE={{exec}}，root={{root}}。",
    "scheduledPower": "检测到计划关机／重启",
    "cancelScheduleHint": "。请用「取消计划」撤回。",
    "rebootHost": "重启主机…",
    "poweroffHost": "关机…",
    "cancelled": "已取消",
    "cancelFailed": "取消失败",
    "cancelSchedule": "取消计划",
    "confirmStrings": "确认字符串 REBOOT / POWEROFF。关机默认延迟约 1 分钟、重启约 1 分钟（shutdown +N）。写入 audit。",
    "confirmReboot": "确认重启主机？",
    "confirmPoweroff": "确认关机？",
    "confirmRebootDesc": "所有服务与面板连接将中断。请输入 REBOOT 确认。",
    "confirmPoweroffDesc": "主机将断电；面板无法远程再开机。请输入 POWEROFF 确认。",
    "typeToUnlock": "输入 {{need}} 以解锁",
    "confirmRebootBtn": "确认重启",
    "confirmPoweroffBtn": "确认关机",
    "sentDisconnect": "已送出 — 连接即将中断",
    "powerFailed": "电源操作失败",
    "exportExplain": "导出：面板数据库摘要（JSON）。重建：将托管配置写入 /etc/nginx/conf.d 并重新加载。同步需要管理员权限与系统变更权限。",
    "controlSummary": "控制面摘要",
    "controlSummarySub": "即时数据库快照 · 预览／下载／写入服务器",
    "snapshotLoaded": "已加载摘要 · {{at}}",
    "previewSummary": "预览摘要",
    "downloadedJson": "已下载 JSON 至浏览器",
    "downloadJson": "下载 JSON",
    "snapshotMeta": "产生 {{at}} · 用户 {{users}} · 套餐 {{packages}}",
    "previewHint": "按「预览摘要」加载控制面快照。",
    "managedNotEtc": "数据目录内 nginx/conf.d — 不等于已套用至 /etc",
    "nFiles": "{{count}} 个文件",
    "noManaged": "尚无托管配置",
    "noManagedDesc": "发布项目 Nginx 后会出现在此",
    "readFailed": "读取失败",
    "preview": "预览",
    "previewModalDesc": "受管 conf 内容（dataDir）",
    "prevPage": "上一页",
    "nextPage": "下一页",
    "pageOf": "第 {{page}} / {{total}} 页 · 共 {{count}} 个文件",
    "managedPager": "受管 conf 分页",
    "syncToSystem": "同步到系统",
    "syncSub": "复制到 /etc/nginx/conf.d 并重新加载 — 需管理员与系统变更权限",
    "syncReload": "同步并重新加载",
    "syncReloadNeedConfirm": "需确认 — 会写入 /etc/nginx/conf.d 并重新载入 Nginx",
    "exportOnly": "仅导出并列出配置",
    "dryRun": "预览试运行",
    "dryRunNote": "预览试运行不会修改系统。",
    "exportHistory": "服务器导出历史",
    "exportHistorySub": "数据目录 exports · 需登录下载",
    "noExports": "尚未有服务器导出文件",
    "noExportsDesc": "按「写入导出目录」生成",
    "downloaded": "已下载 {{name}}",
    "download": "下载",
    "syncConfirmTitle": "同步 Nginx 到系统？",
    "syncConfirmDesc": "将托管 Nginx 配置同步到 /etc/nginx/conf.d 并重新加载。需管理员权限与系统变更权限。",
    "uptime": "运行时间",
    "load1m": "负载 1 分钟",
    "executeLabel": "系统变更",
    "rootLabel": "管理员",
    "managedLabel": "托管",
    "managedCount": "托管配置",
    "exportsCount": "导出文件",
    "managedNginxTitle": "托管 Nginx",
    "exportPath": "导出路径",
    "mode": "模式",
    "managedConf": "托管配置",
    "dryRunFlag": "预览试运行",
    "timezoneSearch": "筛选时区…",
    "resyncNtp": "重新同步 NTP",
    "storageSub": "磁盘用量",
    "nginxLeftover": "残留",
    "nginxUnused": "未使用",
    "nginxLeftoverHint": "旧 public-files 或其他残留配置。同步仍会一并写入，除非操作员另行处理。",
    "nginxUnusedHint": "默认／catch-all 配置（000-default）。同步仍会一并写入，除非操作员另行处理。",
    "nginxRemoveLeftover": "移除残留",
    "nginxRemoveLeftoverTitle": "移除残留 nginx 设定？",
    "nginxRemoveLeftoverDesc": "将从面板清单删除 {{name}}。本机 /etc/nginx 副本只在 YSK_EXECUTE + root 时一并删除。000-default 不当残留，不可以在此删除。",
    "needExecuteRoot": "需要 YSK_EXECUTE 与 root"
  },
  "systemd": {
    "enabled": "已启用",
    "disabled": "未启用",
    "notInstalled": "未安装",
    "running": "运行中",
    "notRunning": "未运行",
    "failed": "失败",
    "activating": "启动中",
    "unitMissing": "单元不存在",
    "loadFailed": "加载失败",
    "opFailed": "操作失败",
    "installedEnabled": "已安装并嘗试启用",
    "unitTemplateWritten": "已写入 unit 范本",
    "writeTemplate": "写入管理目录范本",
    "writeTemplateDesc": "于 dataDir/systemd 产生 ysk-server.service（不会改 /etc）",
    "templateExists": "管理目录范本已存在",
    "installEnable": "安装到 /etc/systemd 并启用",
    "installEnableDesc": "复制 unit → daemon-reload → enable --now",
    "needExecuteRoot": "需 YSK_EXECUTE 与 root",
    "serviceNotRunning": "服务未运行",
    "serviceNotRunningHint": "unit 可能已安装但 inactive — 可再「安装并启用」或于服务矩陣操作",
    "controlRunning": "控制面服务运行中",
    "unlockApply": "解锁系统应用能力",
    "startAsRoot": "以 root 启动并设置 YSK_EXECUTE=1",
    "status": "状态",
    "bootEnabled": "开机自启",
    "on": "开",
    "off": "关",
    "yes": "是",
    "no": "否",
    "canInstall": "可安装",
    "copyEnable": "复制到 /etc/systemd 并 enable --now",
    "needExecuteRootShort": "需要 EXECUTE + root",
    "probing": "探测 systemd 状态…",
    "suggestedSteps": "建议步骤",
    "install": "安装",
    "policy": "政策",
    "about": "说明",
    "exists": "存在",
    "missing": "不存在",
    "notWritten": "尚未写入",
    "related": "相关",
    "opsResult": "操作结果",
    "writeTemplateOnly": "僅写入范本",
    "installAndEnable": "安装并启用",
    "stepReport": "按步回报",
    "installEnableShort": "安装启用",
    "cannotInstall": "目前无法真正安装到系统：需要 ",
    "andRoot": " 与 root。「僅写入范本」仍可生成管理目录文件。见 ",
    "probeDetail": "探测详情",
    "probeDetailSub": "真实 systemd 状态与磁盘上的 unit 文件",
    "unit": "单元",
    "manageTemplate": "管理范本",
    "installOps": "安装操作",
    "twoModes": "两种模式用途不同 — 请按环境选擇",
    "writeOnlyTitle": "僅写入范本",
    "writeOnlyBody": "生成管理目录 unit 档。适合先检视内容、或无 root 时预先准备。",
    "willNotEnable": "不会 enable 服务。",
    "writeTemplateBtn": "写入范本",
    "installEnableTitle": "安装并启用",
    "installEnableBody": "复制到 /etc/systemd/system、daemon-reload、enable --now。需 root + EXECUTE。",
    "policyWrite": "僅写入范本 — 只写 dataDir，不动 /etc",
    "policyInstall": "安装并启用 — cp + daemon-reload + enable",
    "policyBlocked": "未开 EXECUTE 或非 root → 明确 blocked，不假成功",
    "policyNotEqual": "写入范本 ≠ 服务已启用 ≠ 已在监听端口",
    "shortcutPower": "EXECUTE / 电源",
    "shortcutOther": "其他 unit",
    "cannotInstallFull": "目前无法真正安装到系统：需要 YSK_EXECUTE=1 与 root。「僅写入范本」仍可生成管理目录文件。见 ",
    "policyWriteFull": "僅写入范本 — 只写 dataDir，不动 /etc",
    "policyNotEqualFull": "写入范本 ≠ 服务已启用 ≠ 已在监听端口",
    "controlPlaneUnit": "控制面服务单元",
    "kpiRuntime": "运行状态",
    "rawStateHint": "原始 unit 状态见提示",
    "bootHint": "是否开机自启",
    "kpiBoot": "开机自启",
    "kpiCaps": "套用能力",
    "capsReady": "可安装到系统",
    "capsBlocked": "无法套用",
    "unitFiles": "单元文件",
    "unitFilesSub": "系统路径与面板管理模板（用途不同）",
    "systemUnitFile": "系统单元（/etc）",
    "systemUnitHint": "systemd 实际加载的 unit；安装并启用后会出现在此。",
    "managedUnitFile": "管理模板（dataDir）",
    "managedUnitHint": "面板写入的模板，不等于已安装到系统。",
    "managedPathHint": "dataDir/systemd/ysk-server.service",
    "fragmentPath": "systemd 片段路径",
    "fromSystemd": "systemd 回报",
    "pid": "PID{{pid}}",
    "nextAction": "建议下一步",
    "controlRunningHint": "systemctl is-active = 活动",
    "aboutPolicyTitle": "套用政策",
    "aboutPolicySub": "写模板与安装到系统是两步；装完仍可重跑，不代表未完成。",
    "policyInstallFull": "安装并启用：复制到 /etc/systemd/system、daemon-reload、enable --now。需 root + EXECUTE。",
    "policyBlockedTitle": "无权限时封锁",
    "policyNotEqualTitle": "状态不等同"
  },
  "tabs": {
    "scrollLeft": "向左滚动分页",
    "scrollRight": "向右滚动分页",
    "about": "说明",
    "main": "操作",
    "stack": "软件",
    "unknown": "无此分页",
    "unknownHint": "此页没有名为 {{tab}} 的分页。"
  },
  "terminal": {
    "tabSession": "连接",
    "target": "登录身份",
    "connect": "连接",
    "disconnect": "断开",
    "user": "用户",
    "size": "尺寸",
    "stateConnected": "已连接",
    "stateConnecting": "连接中",
    "stateIdle": "未连接",
    "connecting": "正在建立会话…",
    "connectedAs": "已以 {{user}} 登录",
    "disconnected": "已断开",
    "error": "终端错误",
    "wsError": "WebSocket 连接失败",
    "exitCode": "退出码 {{code}}",
    "needRootExecute": "需要 root 与 YSK_EXECUTE=1 才能打开系统 shell。",
    "groupSystem": "系统",
    "groupProject": "专案",
    "unavailable": "不可用",
    "copyAll": "全部复制",
    "copyAllNeedConn": "首先连接——断开连接时缓冲区为空",
    "placeholder": "选择身份后按「连接」",
    "aboutTitle": "终端说明",
    "aboutSub": "浏览器交互 shell（本机 OS 用户），不是任意远程 SSH 客户端。",
    "aboutWhat": "是什么",
    "aboutWhatBody": "真实 PTY 登录 shell（bash -l）。项目用户用 runuser；root 用 root shell。",
    "aboutReq": "需求",
    "aboutReqBody": "控制面须以 root 运行，并开启 YSK_EXECUTE。",
    "aboutUsers": "身份",
    "aboutUsersBody": "可选 root，或已 OS 布建的项目 Linux 用户。",
    "stepUpRequired": "Root shell 需要 TOTP／救援码",
    "stepUpHint": "账户已启用 2FA 时，root 登录需再验证。",
    "stepUpTitle": "确认 root shell",
    "stepUpDesc": "输入验证器代码或救援码。",
    "totpLabel": "TOTP／救援码",
    "sessionStillOpen": "说明分页开启期间，工作阶段仍保持连线。",
    "rootConfirmTitle": "打开 root shell？",
    "rootConfirmDesc": "此会话是主机上不受限制的 root PTY。命令会写入审计记录。",
    "rootConfirmBody": "仅在你打算执行具权限的主机命令时继续。"
  },
  "uiInline": {
    "s27d9daa5": "已預填 runtime {{v0}} {{v1}}，可建立專案",
    "sb8eaefa3": "已預填 runtime {{v0}}，可建立專案",
    "s7d540128": "· {{v0}}",
    "s814bcc7c": "· {{v0}}",
    "s3f7c3eae": "建議更新",
    "s92e48065": "略過",
    "sdff0f697": "觀察",
    "s012f2d7e": "緊急更新",
    "s20455064": "目前篩選結果沒有可升級套件",
    "s9b34f8c3": "請先勾選可升級套件",
    "s8e3824cb": "批量更新 0/{{v0}}：準備中…",
    "sc2570ff7": "批量更新 {{v0}}/{{v1}}：{{v2}}",
    "s0bd0c471": "批量完成：成功 {{v0}}，失敗 {{v1}}",
    "s2980553a": "已重新掃描主機套件狀態",
    "s303ee0f7": "正在取消…（目前套件完成後停止）",
    "s21858fe5": "取消批量",
    "sddc05404": "關閉",
    "saf251c2a": "套件更新日誌（即時）",
    "s5929623c": "全選可升級",
    "s18b08919": "清除選擇",
    "se2b088fc": "更新已選 ({{v0}})",
    "sb2848bc7": "確認批量更新套件？",
    "sc1910cf2": "將依序升級 {{v0}} 個套件。需 root 且已開啟 EXECUTE。",
    "sc13bb38c": "所選包含高風險／需審批套件；確認即表示已審閱並同意套用。",
    "sea4ba90a": "已載入",
    "sdd78429a": "已寫入",
    "s9b6c1b03": "說明",
    "s858f4eca": "專案已刪除",
    "s090aa1a7": "此頁只管理獨立站點資源。專案的 Nginx 請到 Projects → 專案 → 網絡。",
    "sac96ec39": "控制面曾记录安装 {{v0}}，但主机探测未见可执行文件。不算已安装——请「重新探测」或重新安装。",
    "sf7f7807b": "預設",
    "sc9530028": "載入最新版本中，或手動輸入",
    "s9602769e": "已装 {{v0}} · 上游最新 {{v1}}",
    "sb8b5a353": "Go／Rust 可同時保留多個版本：先「安裝」缺少的版本，再「切換為預設」決定 PATH 用邊個。",
    "sac155c20": "可卸載非核心擴充（apt remove；不會卸 FPM/CLI）",
    "s23379974": "勾選擴充後按「安裝選定擴充」。此版本已在主機上，無需再裝 runtime。",
    "s7b6d4414": "尚未安裝 PHP {{v0}}：勾選擴充後按下方「安裝 PHP {{v0}}」一併裝核心+擴充（只有一個安裝按鈕）。",
    "s2e9a1b03": "安裝 PHP {{v0}}（含選定擴充）",
    "s62b73dd7": "擴充操作結果",
    "se23513e5": "卸載 PHP 擴充？",
    "sf8c8ff4b": "將 apt remove「{{v0}}」。核心 FPM/CLI 不會卸載。",
    "s7aa09150": "已安装",
    "sbcbdbc49": "未安装",
    "sae7738d0": "运行中",
    "sf3af7c5e": "未检测",
    "sa1d77833": "失败",
    "s75dddf52": "已停止",
    "s4e7f6152": "更新中 {{v0}}/{{v1}}：{{v2}}",
    "s72cac69e": "{{v0}}：{{v1}}",
    "sd1c15b6d": "{{v0}}：{{v1}}",
    "s7a90f74c": "已更新：{{v0}}",
    "s0aa24093": "{{v0}} 更新完成",
    "s5d92ffc3": "部分成功：{{v0}}；失敗：{{v1}}",
    "sa15a291f": "部分套件更新失敗",
    "sbb823c06": "失败",
    "s68db1348": "{{v0}} 更新失敗",
    "s84a4e7c6": "正在安裝：{{v0}}…",
    "s2ca8a4f5": "需 root + EXECUTE；可能需要一兩分鐘。",
    "sd9419dc9": "安裝被阻擋（需 root+EXECUTE）",
    "s3ec3d449": "{{v0}} 未能安裝",
    "sbb8dfdeb": "已提交安裝：{{v0}}",
    "s18bb4b62": "{{v0}} 安裝完成／已提交",
    "se9a47def": "安裝未完成",
    "sdc0528a2": "{{v0}} 安裝失敗",
    "s69e60fb5": "没有可更新版本",
    "s3f50fa6e": "正在安裝／更新 {{v0}} {{v1}}…（可能需要一兩分鐘）",
    "s1f5eef17": "下方會即時顯示 server 輸出，請勿關閉頁面。",
    "s2bf6b642": "更新被阻擋（需 root 且 YSK_EXECUTE=1）",
    "s9b4a58e8": "{{v0}} {{v1}} 未能安裝",
    "s6dc82720": "已安裝／更新 {{v0}} {{v1}}",
    "s94a1f025": "狀態已重新整理。若仍顯示有新版本，可再檢查或到執行環境頁確認。",
    "s73cae5a0": "{{v0}} {{v1}} 安裝失敗",
    "se1050a28": "總覽",
    "s8c29cb38": "執行環境",
    "s583f0654": "資料庫",
    "s4344c486": "域名與邊緣",
    "sed2550e1": "郵件與檔案",
    "scb435db5": "主機服務",
    "s97bbc1b7": "軟件中心",
    "s60a23151": "全部可管理軟件一覽：安裝狀態、服務健康、新版本提示；可進入管理頁或用於專案。",
    "s5387b55b": "重新整理",
    "s0b582c70": "目錄項目",
    "s4be2a3a4": "執行環境已裝",
    "s259e6f0e": "有新版本／可擴充",
    "s13b3f970": "需關注",
    "sdd33adf9": "系統倉庫可升級",
    "sdfaaf946": "目錄軟件與主機套件清單分開統計；實際套用可在更新中心或卡片一鍵確認。",
    "s78f03e20": "目錄軟件 {{v0}}",
    "sbf368054": "主機套件 {{v0}}",
    "s235a7426": "開啟更新中心",
    "s14249f75": "快捷",
    "saff76d0a": "常用分區與主機服務入口",
    "s24f12f4f": "可更新／可安裝版本",
    "s43a9fd7a": "執行環境：上游／面板新版本；服務：系統倉庫可升級。可一鍵套用套件或前往更新中心。",
    "sc45743bd": "全部軟件",
    "s00338fde": "確認套用系統套件更新？",
    "s0e05f4b7": "確認更新",
    "s4d0b4688": "取消",
    "s92b8bf67": "確認安裝軟件？",
    "s9af27043": "將安裝 {{v0}}：{{v1}}。需 root 且 YSK_EXECUTE=1。",
    "s28263d85": "確認安裝",
    "s2e37cbfa": "已裝：{{v0}}",
    "s7d52bb0c": "預設 {{v0}}",
    "s9f898b85": "上游約 {{v0}}",
    "s93dde991": "系統倉庫 {{v0}} → {{v1}}",
    "s9071dcb7": "已装 {{v0}} · 已是仓库最新",
    "s0b09f444": "版本 {{v0}}",
    "sf6cc774f": "系統未安裝此套件（可到管理頁安裝）",
    "s42f9c88b": "主機約 {{v0}} 個套件可升級",
    "sb72e8ebc": "正在检查版本…或打开管理页配置",
    "sabac942e": "打开管理页安装或配置",
    "sbd26894e": "有新版本",
    "s5985ee9a": "已是最新",
    "s090e6a43": "选择版本",
    "s8253535d": "安裝／更新到 {{v0}}",
    "s1723f1d7": "安裝中…",
    "sd9db02d0": "更新",
    "sba60558e": "確認後更新 {{v0}}",
    "s706de938": "更新 {{v0}} 項",
    "s0f9ddc70": "安裝 {{v0}}",
    "sef864639": "安裝",
    "s59f613d5": "前往安裝／切換至 {{v0}}",
    "s78b1688f": "前往更新中心處理 {{v0}}",
    "s4989b5cf": "管理",
    "s72203f17": "服務",
    "s75817a35": "到專案頁，可將此 runtime 用於應用",
    "s6d449473": "用到專案",
    "s777e90e0": "建立資料庫管理專案",
    "sd8bc8ab3": "專案名稱已存在：{{name}}",
    "s09877be5": "資料庫管理專案已建立",
    "sd95910ce": "建立專案並部署",
    "sa72ef18d": "工具",
    "s4b2bec80": "專案名稱",
    "sd00c0d39": "會建立一個 PHP 專案；名稱不可重複",
    "sd7c669ac": "下載 phpMyAdmin（需要系統變更權限及外網）",
    "s9e5d3a97": "批量完成：成功 {{v0}}，失敗 {{v1}}",
    "s1f0a4bf9": "已取消（其餘未執行）",
    "s7193f51b": "批量完成：成功 {{v0}}，失敗 0",
    "sd93b8620": "已卸載 {{v0}} 個工具",
    "sd0ef129c": "卸載選定 ({{v0}})",
    "se6d47d0b": "工具操作結果",
    "se6436711": "安裝選定工具 ({{v0}})",
    "s1a27a3c4": "選定工具會隨下方「安裝 runtime」一併安裝（只有一個安裝按鈕）。",
    "s32add03e": "將卸載 {{v0}} 個已選工具。",
    "s3bca33b2": "選定工具",
    "s8072fa0d": "{{v0}} 已安裝（非預設）",
    "s2bf2b4c4": "此版本已安裝但不是目前預設。可「切換為預設」而無需重裝；亦可安裝其他版本並存。",
    "s42f3d613": "切換為預設 {{v0}}",
    "sdcdc5029": "上線未完成",
    "s55cc91e0": "部署或 Nginx 發佈未成功，可重試。",
    "s303f6113": "重試部署",
    "s3265f9ed": "重試發佈 Nginx",
    "s99cc48c1": "未載入 {{v0}} 範本；請重新整理或選「— 無 —」空白專案。",
    "sa87ceeff": "建立後立即部署並發佈 Nginx",
    "s38a63bcb": "固定埠（可選）",
    "s5ac95c29": "未發佈",
    "sc8f34a0d": "已寫入（未 reload）",
    "s07fb5671": "需先部署",
    "sa5f994e3": "發佈失敗",
    "s32dd17d9": "尚未有此網域的 SSL 證書。請先到「SSL 證書」申請／上載，再按發佈 + SSL。",
    "s5516cb5b": "站點狀態",
    "sed38f4ea": "上游",
    "sadb6ef47": "進程埠",
    "se7a422dd": "固定埠",
    "s2eff57b7": "儲存後需重新部署才會改進程埠",
    "s110671e6": "目前埠",
    "s549ea65e": "發佈",
    "s9dc5c003": "基本",
    "s04a32a1e": "SSL 相關按鈕已鎖定：請先到",
    "s564d50b7": "為網域申請／上載證書後再發佈 + SSL。",
    "sbb6c72f1": "({{v0}})",
    "sd9b695a5": "請先填寫網域，才能發佈 Nginx / SSL。",
    "scb85cfff": "請先為網域建立 SSL 證書",
    "s18c1af46": "儲存並發佈 + SSL",
    "s6a284cb0": "發佈 Nginx + SSL",
    "s85483ffb": "維護",
    "s6993c6ba": "隱藏",
    "s15671929": "顯示",
    "s56f99a6b": "永久刪除專案",
    "sa0f2f5c6": "將銷毀「{{v0}}」。此操作無法還原。",
    "sa6710b42": "永久刪除",
    "s06569331": "停止 systemd / PM2 / 本機進程",
    "sd20a5b0c": "移除 Nginx conf、PHP-FPM pool、Apache vhost（如有）",
    "s4ff53acc": "刪除 Linux 用戶與 home 目錄（安全路徑）",
    "s50dda2df": "保留 home 與 Linux 用戶（僅面板移除）",
    "sa7f90a4a": "從控制面資料庫移除專案",
    "se0d24557": "名稱",
    "s9a9e4e32": "刪除磁碟 home 與 Linux 用戶",
    "s1cf2a97b": "取消勾選則只從面板移除，檔案與系統用戶保留",
    "s51af87fd": "輸入專案名稱以確認",
    "s8b04d62f": "請輸入「{{v0}}」",
    "s49d55c8f": "共享 DNS zone / 郵箱 domain 不會自動刪除。",
    "s239f6551": "目錄軟件系統倉庫可升級：{{v0}}",
    "sa00380bd": "主機可升級套件：{{v0}}",
    "sb4e3bb0b": "請在執行環境頁安裝此版本",
    "sae926193": "無可用倉庫候選版本",
    "s52573ef8": "更新被阻擋（需 root+EXECUTE）",
    "s872d2fe0": "已套用 {{v0}} 更新",
    "s6a93c0ec": "加载版本中…",
    "s378e49b6": "已装",
    "s7e805a12": "最新",
    "s74b39712": "已是最新／仓库最新",
    "s03a87d5d": "重新检查最新",
    "s53c07a48": "更新到 {{v0}}",
    "s425e8381": "安裝 {{v0}}",
    "s5bd1242f": "將升級 {{v0}}：{{v1}} → {{v2}}。需 root 且已開啟 EXECUTE。",
    "s296817b1": "安裝日誌（即時）",
    "s3568a3da": "串流中…",
    "s28256229": "已結束",
    "s3971290f": "等待 server 輸出…"
  },
  "updates": {
    "title": "智能更新",
    "body": "每日盘点、CVE 查询、结构化风险建议，以及可审批的更新执行。",
    "risk": {
      "critical": "严重",
      "high": "高",
      "medium": "中",
      "low": "低"
    },
    "justNow": "刚刚",
    "secAgo": "{{n}} 秒前",
    "minAgo": "{{n}} 分钟前",
    "hourAgo": "{{n}} 小时前",
    "highRiskN": "{{count}} 项高风险",
    "panelUpdate": "面板有更新",
    "footerNewVersion": "有新版本 {{version}}",
    "riskOk": "风险可控",
    "riskUnevaluated": "未评估 — 请先扫描 + OSV",
    "pendingScan": "待扫描",
    "packages": "软件包",
    "highRisk": "高风险",
    "needApproval": "需审批",
    "hasCve": "有 CVE",
    "panel": "面板",
    "schedule": "计划",
    "reload": "重新加载",
    "osvTitle": "对前 12 个建议软件包查 OSV（需外网）",
    "scanOsv": "扫描 + OSV",
    "cveNotChecked": "未检查",
    "scanPkgs": "扫描软件包",
    "tabInventory": "软件包清点",
    "tabSelf": "面板自身",
    "badgeUpdate": "更新",
    "tabSchedule": "计划",
    "tabPolicy": "政策",
    "scanning": "扫描中…",
    "inventoryTitle": "软件包清点",
    "inventoryDesc": "显示 {{shown}} / {{total}} · 清点 {{when}}",
    "riskFilterAria": "风险筛选",
    "all": "全部",
    "upgradable": "可升级",
    "mediumFilter": "中",
    "lowUnmarked": "低／未标",
    "searchPh": "软件包名 / 建议 / CVE…",
    "searchAria": "搜索软件包",
    "colPackage": "软件包",
    "colVersion": "版本（已装 → apt Candidate）",
    "installedTitle": "已安装",
    "noUpgrade": "（无可用升级）",
    "colAdvice": "建议",
    "upgradeTo": "升级至 {{v}}",
    "sameVersion": "apt Candidate 与已装版本相同",
    "noNeedUpgrade": "无需升级",
    "emptyInventory": "尚无软件包数据",
    "emptyInventoryDesc": "按页面右上「扫描软件包」由管理面板扫描主机",
    "emptyFilter": "没有符合筛选的软件包",
    "emptyFilterDesc": "请改风险筛选或清搜索",
    "resetFilters": "重置筛选",
    "selfLoading": "加载自身更新状态…",
    "selfTitle": "面板自身更新",
    "selfCheckFailed": "检查失败",
    "selfUpToDate": "已是最新",
    "selfAvailable": "有可用更新",
    "selfCurrent": "当前版本",
    "selfLatest": "最新版本",
    "selfChannel": "通道",
    "checkSelf": "检查更新",
    "applySelf": "套用自身更新",
    "scheduleTitle": "自动扫描计划",
    "scheduleDesc": "定时清点软件包；不自动升级",
    "enabled": "已启用",
    "disabled": "已停用",
    "cron": "Cron 表达式",
    "saveSchedule": "保存计划",
    "policyTitle": "更新政策",
    "policyBody": "高风险与有 CVE 的软件包默认需审批后才可套用。面板自身更新与系统 apt 升级分开处理。",
    "applyPkg": "套用软件包升级",
    "rebootNeeded": "重新启动",
    "kernelRebootHint": "内核包应用后需要重新启动",
    "applyPkgConfirm": "确认升级 {{name}}？",
    "applyPkgDesc": "将对此主机执行 apt 升级。需 root + YSK_EXECUTE。",
    "lastScan": "上次扫描",
    "never": "从未",
    "cve": "CVE",
    "riskCol": "风险",
    "selfUpdatable": "可更新",
    "selfCurrentShort": "当前",
    "selfLatestShort": "最新",
    "applyPanelUpdate": "套用面板更新",
    "applySelfConfirmTitle": "套用面板更新？",
    "applySelfConfirmDesc": "将面板由 {{from}} 升到 {{to}} 并重启服务。没有试行。",
    "applyPanelAlreadyLatest": "已经是最新的面板版本了",
    "recheck": "重新检查",
    "aboutScope": "范围",
    "aboutScopeV": "ysk-server 控制面 + catalog 服務 + runtime + 其餘 apt 套件",
    "aboutChannel": "频道",
    "aboutChannelV": "npm 套件 ysk-server → GitHub release → apps/server/package.json；套用：npm i -g ysk-server@版本 或 git（YSK_SOURCE_ROOT）",
    "aboutFail": "失败",
    "aboutFailV": "频道不可用不会假装已是最新；套用需 EXECUTE；git 后需重启服务",
    "jobsTitle": "计划任务",
    "jobsSub": "控制面 scheduler（只读）· {{count}} 项",
    "noJobs": "尚无可见计划",
    "noJobsDesc": "未启用或目前无 scheduler 任务",
    "lastRun": " · 上次 {{when}}",
    "scanPolicy": "扫描",
    "scanPolicyV": "扫描 ≠ 已升级；套用才会改系统",
    "highRiskPolicy": "高风险",
    "highRiskPolicyV": "需审批：二次确认后才送出",
    "needApprovalHint": "打开“可用”并筛选需要批准的软件包",
    "applyNeedConfirm": "申请前打开确认对话框",
    "probeFailed": "探测失败",
    "notViaApt": "不由 apt 管理 — 没有候选人",
    "noCandidate": "无候选版本",
    "cveLabel": "CVE",
    "jobOpenGeo": "地理IP页面",
    "job": {
      "protection_probe": {
        "name": "保护探头",
        "hint": "周期性防御信号"
      },
      "updates_scan": {
        "name": "更新扫描",
        "hint": "刷新包裹库存"
      },
      "daily_backup": {
        "name": "每日备份",
        "hint": "计划备份全部"
      },
      "db_temp_expire": {
        "name": "使临时数据库用户过期",
        "hint": "删除过期的临时数据库用户"
      },
      "defense_auto_ban": {
        "name": "国防自动禁令",
        "hint": "应用自动禁止勾选"
      },
      "defense_geoip_update": {
        "name": "地理IP更新",
        "hint": "下载 GeoIP 数据库"
      },
      "log_auto_vacuum": {
        "name": "原木真空",
        "hint": "日记保留"
      },
      "email_dnsbl": {
        "name": "电子邮件 DNSBL",
        "hint": "邮件 DNSBL 检查"
      },
      "validators_upgrade_scan": {
        "name": "验证者升级扫描",
        "hint": "检查验证者映像／二进制更新"
      }
    },
    "permPolicy": "权限",
    "permPolicyV": "无 EXECUTE／root → blocked，不假成功",
    "osvPolicyV": "需外网，只补强前 12 项建议",
    "relatedAria": "相关",
    "scHost": "主机设置",
    "scReadiness": "就绪探测",
    "scReadinessD": "生产闸门",
    "scSystemd": "systemd 单元",
    "scSystemdD": "控制面服务",
    "scSecurity": "安全中心",
    "scSecurityD": "审批 / 工具",
    "applyHighRisk": "套用高风险更新 {{name}}？",
    "highRiskUpdate": "高风险更新",
    "remoteUnknown": "未确认远端",
    "hasUpdate": "有更新",
    "scanned": "已扫描 {{count}} 个软件包",
    "scannedWithOsv": "已扫描 {{count}} 个软件包（含 OSV）",
    "realUpgradeable": "真实可升级 {{count}}",
    "panelCheckFailed": "面板版本检查失败",
    "applyIncomplete": "应用未完成",
    "appliedPackage": "已应用软件包更新",
    "updateFailed": "更新失败",
    "updateIncomplete": "更新未完成",
    "appliedUpdate": "已应用更新",
    "panelRestarting": "面板正在重启以加载新版本…",
    "panelRestarted": "面板已恢复 · {{version}}",
    "panelRestartWait": "已套用更新。若本页未刷新，请数秒后重新加载。",
    "reloadUi": "重新载入界面",
    "reloadUiTitle": "重新载入面板界面？",
    "reloadUiDesc": "面板服务已是 {{version}}。此分页仍是旧前端，须重新载入才会换成新画面。此页未储存的字段会消失。",
    "aptCandidate": "apt Candidate（候选版本）",
    "advice": {
      "update": "建议更新",
      "skip": "跳过",
      "watch": "观察",
      "urgent": "紧急更新"
    },
    "selectCol": "选择",
    "selectAllUpgradable": "全选可升级",
    "clearSelection": "清除选择",
    "updateSelected": "更新已选 ({{n}})",
    "batchConfirmTitle": "确认批量更新软件包？",
    "batchConfirmBody": "将按序升级 {{n}} 个软件包。需 root 且已开启 EXECUTE。",
    "batchConfirmHighRisk": "所选含高风险/需审批软件包，我已审阅并同意套用。",
    "batchProgress": "批量更新 {{n}}/{{total}}：{{pkg}}",
    "batchDone": "批量完成：成功 {{ok}}，失败 {{fail}}",
    "batchPartialFail": "部分失败：{{list}}",
    "batchEmpty": "请先勾选可升级软件包",
    "batchNoneUpgradable": "当前筛选没有可升级软件包",
    "batchCancel": "取消批量",
    "batchCancelling": "正在取消…（当前软件包完成后停止）",
    "batchCancelled": "已取消（其余未执行）",
    "batchRescanned": "已重新扫描主机软件包状态",
    "applyLogTitle": "套件更新日誌（即時）",
    "navBadgeTitle": "待处理更新：{{n}}",
    "aboutPolicySub": "扫描、套用、权限与 OSV 边界；扫描不等于已升级。",
    "tabOverview": "总览",
    "overviewHint": "服务器会按计划扫描套件。安装软件请到各功能页；本页只负责检查与套用升级。",
    "overviewStale": "扫描数据已过期。请立即扫描，或等待下次自动检查。",
    "nextScan": "下次扫描",
    "autoScan": "自动扫描",
    "autoScanEnable": "启用自动套件扫描",
    "scanInterval": "扫描间隔",
    "interval6h": "每 6 小时",
    "interval12h": "每 12 小时",
    "interval24h": "每 24 小时",
    "interval48h": "每 48 小时",
    "scheduleSaved": "已保存扫描计划",
    "scanNow": "立即扫描",
    "viewUpgradable": "查看可升级",
    "installElsewhere": "安装软件（Nginx、PHP、数据库等）请到对应功能页，而非本页。",
    "status": "状态",
    "groupService": "服务",
    "groupRuntime": "执行环境",
    "groupOs": "系统套件",
    "notInstalled": "未安装",
    "goToPage": "前往页面",
    "hubHint": "本机 catalog 服务与 runtime。请扫描以刷新。",
    "intervalDay": "每日",
    "intervalDays": "每 {{n}} 日",
    "intervalHour": "每小时",
    "intervalHours": "每 {{n}} 小时",
    "intervalMinutes": "每 {{n}} 分钟",
    "intervalSeconds": "每 {{n}} 秒",
    "availableHint": "套件管理有较新候选版本的套件。",
    "servicesHint": "本机 catalog 服务。未安装请前往该服务页安装。",
    "runtimeHint": "本机执行环境。升级请到各执行环境页。",
    "needsReboot": "需重启",
    "kernelRebootWarn": "安装新 kernel 后通常要重启才会生效。",
    "neverRun": "尚未执行",
    "scanOsvN": "扫描 + OSV（前 {{n}} 个）"
  },
  "users": {
    "userCount": "{{count}} 用户",
    "users": "用户",
    "packages": "套餐",
    "suspended": "暂停",
    "securityCenter": "安全中心",
    "singleAdminNo2fa": "该主机有一个管理员，并且 2FA 已关闭 - 启用 2FA 并添加备份管理员。",
    "enableAdmin2fa": "开启管理员 2FA",
    "addBackupAdmin": "新增备援管理员",
    "loading": "加载用户与套餐…",
    "userList": "用户列表 ({{count}})",
    "userListDesc": "打开详情可改角色、密码、套餐、权限覆盖",
    "createUser": "创建用户",
    "operatorHighRiskHint": "系统默认「操作员」含高危写入（服务控制、防火墙、套件套用、MySQL、发布 Nginx）。收窄只影响新建账户；修改默认会影响现有操作员。",
    "createUserPlus": "+ 创建用户",
    "searchPh": "用户名 / 角色 / 套餐",
    "searchPkgPh": "方案名稱",
    "searchUsersAria": "搜索用户",
    "user": "用户",
    "roles": "角色",
    "package": "套餐",
    "packageAria": "{{name}} 套餐",
    "noneOption": "— 无 —",
    "resume": "恢复",
    "suspend": "暂停",
    "impersonate": "模拟登录",
    "impersonateHint": "以该用户身份打开会话。使用帐户菜单留下模拟。",
    "cannotDeleteSelf": "不能删除目前登入的帐户",
    "cannotImpersonateSelf": "您已经以此帐户登录",
    "openDetail": "详情",
    "edit": "编辑",
    "resetPassword": "重置密码",
    "newPassword": "新密码",
    "saveUser": "保存用户",
    "userSaved": "已更新 {{name}}",
    "filterAll": "全部",
    "filterAdmin": "管理员",
    "filterOperator": "操作员",
    "filterViewer": "查看者",
    "filterSuspended": "已暂停",
    "filterNoPkg": "无套餐",
    "filter2faOff": "未开 2FA",
    "filterOverrides": "有权限覆盖",
    "subscribers": "订阅用户",
    "subscribersN": "{{count}} 人",
    "ftp": "FTP",
    "ssh": "SSH",
    "databases": "数据库",
    "bandwidth": "带宽 MiB",
    "notes": "备注",
    "editPkg": "编辑套餐",
    "pkgUpdated": "已更新套餐 {{name}}",
    "pkgList": "套餐列表 ({{count}})",
    "pkgListDesc": "可编辑配额；有订阅用户时不可删除",
    "createPkg": "创建套餐",
    "createPkgPlus": "+ 创建套餐",
    "mailboxes": "邮箱",
    "diskMiB": "盘 MiB",
    "noPackages": "尚未有套餐",
    "noPackagesHint": "请用列表右上角创建套餐，然后绑定到用户。",
    "createUserDesc": "密码至少 8 位；创建后可于详情改角色与权限",
    "username": "用户名",
    "passwordHint": "至少 8 位",
    "role": "角色",
    "roleAria": "用户角色",
    "createPkgDesc": "配额模板；可之后绑到用户",
    "maxProjects": "最大项目数",
    "diskQuota": "磁盘 MiB",
    "custom": "自定义",
    "createdUser": "已创建用户 {{name}}",
    "createdPkg": "已创建套餐 {{name}}",
    "impersonateTitle": "模拟登录 {{name}}？",
    "deleteUserTitle": "删除 {{name}}？",
    "deletePkgTitle": "删除套餐 {{name}}？",
    "impersonateDesc": "当前会话会被取代（约 2 小时）。",
    "deleteUserDesc": "此操作无法复原。",
    "deletePkgDesc": "若仍有用户使用此套餐，删除会被拒绝。",
    "lastSeen": "上次活动",
    "neverSeen": "未见",
    "hostUsage": "主机用量",
    "hostUsageHint": "此为全机（host）总量，非 per-user 硬隔离。方案上限仅作对照。",
    "hostTotalsBadge": "主机合计",
    "opsChecklist": "运维 checklist",
    "opsCheck1": "只把 Admin 派给真正需要 privilege 的人；日常用 Operator。",
    "opsCheck2": "在「权限」分页调级后记得 Save；可一键还原系统默认。",
    "opsCheck3": "方案有订阅用户时不要删除；先 unassign。",
    "opsCheck4": "还原备份属 destructive——默认只有 Admin；派给 Operator 前要 Confirm。",
    "detailDesc": "分区管理账户、权限预览与进阶覆盖",
    "tabAccount": "账户",
    "tabAccess": "权限",
    "tabAdvanced": "进阶",
    "rolePickHint": "选择最合适的工作角色；Admin 永远全开",
    "accountSection": "账户设置",
    "packageHint": "托管方案配额模板（可选）",
    "resetPasswordOptional": "留空 = 不改密码",
    "accountStatus": "账户状态",
    "suspendedHint": "已暂停：无法登录面板",
    "activeHint": "正常：可以登录与操作",
    "accessHint": "按角色策略计算的实际能力（易读标签）",
    "noCapsInBand": "此级别暂无能力",
    "overridesHint": "只影响此用户；不改角色默认",
    "adminNoOverrides": "Admin 用户永远功能全开，不需要也无法个人撤销。",
    "grantsHint": "额外打开角色本身没有的能力",
    "revokesHint": "从角色继承中关闭个别能力（Admin 除外）",
    "searchCaps": "搜索能力…",
    "noCapMatch": "没有符合的能力",
    "no2fa": "未开 2FA",
    "lastSeenValue": "上次活动 {{time}}",
    "roleName": {
      "admin": "管理员",
      "operator": "操作员",
      "viewer": "查看者",
      "agent": "代理人"
    },
    "roleDesc": {
      "admin": "全功能、用户与权限、危险操作。永远全开。",
      "operator": "日常运维：服务、更新、DNS/SSL、建站等。",
      "viewer": "只读：看状态、日志、列表，不能改。",
      "agent": "自动化/代理：低危写入，受 scope 限制。"
    },
    "securityTitle": "双重验证（此用户）",
    "securityPerUserHint": "每位用户独立 TOTP／Passkey。管理员可清除此用户 2FA，但不可代持或共用 secret。",
    "securityStatusOn": "已启用 2FA",
    "securityStatusOff": "未设置 2FA",
    "securitySessions": "活跃会话",
    "securityClearTotp": "强制清除此用户 2FA",
    "securityClearTotpHint": "需 step-up 验证；清除后该用户下次只需密码登录（直至自行重设 2FA）。",
    "securityClearConfirm": "输入用户名以确认清除 2FA",
    "securityClearOk": "已清除 {{name}} 的 2FA",
    "securitySelfNote": "要为自己设置 2FA，请到「安全 → 我的安全」。",
    "cannotModifySelf": "不能暂停或降级目前登入的帐户",
    "cannotDeleteLastAdmin": "不能删除最后一个管理员",
    "cannotDemoteLastAdmin": "不能暂停或降级最后一个管理员",
    "lockSelfHint": "这是目前登入的帐户。已禁止删除、暂停及更改角色，以免无法登入。",
    "lockLastAdminHint": "这是最后一个管理员。已禁止删除、暂停及降级。",
    "demoteAdminTitle": "降级此管理员？",
    "demoteAdminDesc": "此用户将失去完整管理员权限。请确认仍有其他管理员。",
    "quotaNonNeg": "数量与配额不可为负数。",
    "diskQuotaHint": "预设晶片以 GiB 计；自订栏为 MiB。",
    "bandwidthHint": "0 代表不限。"
  },
  "validators": {
    "title": "验证者节点 (Beta)",
    "subtitle": "在此主机安装与管理 L1 节点。非托管 — 私钥由你自行保管。",
    "beta": "Beta",
    "tab": {
      "nodes": "节点",
      "disk": "磁盘",
      "stack": "软件",
      "about": "说明"
    },
    "empty": {
      "title": "尚未建立验证者节点",
      "desc": "用向导几步建立测试网节点。"
    },
    "refresh": "刷新",
    "software": {
      "engine": "Docker引擎",
      "engineDesc": "验证者节点以 Compose 专案运行。引擎未装可在此安装。映像清理请到 Docker 页。",
      "client": "客户端",
      "image": "映像",
      "present": "本机",
      "local": "已拉取",
      "missing": "未拉取",
      "size": "大小",
      "usedBy": "使用中",
      "unused": "无实例",
      "pull": "Pull",
      "pulled": "已在本机",
      "pulling": "正在拉取 {{ref}}",
      "empty": "没有钉选客户端映像",
      "emptyDesc": "目录不应为空。",
      "daemonDown": "Docker Engine 未运行",
      "source": "来源",
      "official": "官方最新",
      "officialNewer": "官方较新",
      "stale": "落后于钉选",
      "staleItem": "{{id}}（{{tag}}）",
      "pin": "本面板钉选",
      "openRelease": "发布说明",
      "chooseOnInstance": "请到实例页变更版本。拉取映像不会替已运行节点改 tag。"
    },
    "disk": {
      "title": "验证者节点磁盘",
      "root": "数据目录",
      "free": "可用",
      "used": "已用",
      "fsUsed": "档案系统已用",
      "leftoverTitle": "残留资料（{{count}}）",
      "leftoverEmpty": "没有孤立实例目录",
      "leftoverDesc": "验证者根目录下、不在 store 的资料夹。确认无用后再删。",
      "leftoverRemove": "删除",
      "leftoverRemoveTitle": "删除此残留验证者资料？",
      "leftoverRemoveDesc": "将永久删除磁盘上的 {{path}}。这不是列表中的节点。",
      "browseRoot": "在档案浏览开启",
      "none": "尚无实例数据",
      "warn": "磁盘用量偏高（70% 或以上）",
      "danger": "磁盘用量危急（85% 或以上）",
      "autoClear": "磁盘危急时自动清空最大的已停止实例（默认关闭）",
      "autoClearRisk": "破坏性：会删除最大的已停止实例，不会再询问。预设关闭。触发后请查审计／日志。",
      "autoClearConfirmTitle": "启用自动清空？",
      "autoClearC1": "磁盘危急时会删除最大的已停止实例，不会再询问。",
      "autoClearThreshold": "触发条件：档案系统用量达 85% 或以上。",
      "autoClearCandidate": "目前候选：{{id}}",
      "autoClearCandidates": "已停止候选（有资料且较大者优先）：{{list}}",
      "autoClearNone": "目前没有已停止实例可作为候选。"
    },
    "chain": {
      "eth": "Ethereum",
      "avax": "Avalanche",
      "near": "NEAR",
      "ada": "Cardano",
      "btc": "Bitcoin",
      "cosmos": "Cosmos Hub",
      "sui": "Sui",
      "aptos": "Aptos",
      "dot": "Polkadot",
      "sol": "Solana"
    },
    "network": {
      "hoodi": "Hoodi",
      "sepolia": "Sepolia",
      "mainnet": "主网",
      "fuji": "Fuji",
      "testnet": "测试网",
      "preview": "预览",
      "preprod": "预生产",
      "westend": "Westend"
    },
    "networkKind": {
      "testnet": "测试网",
      "mainnet": "主网",
      "mixed": "主网＋测试网"
    },
    "profile": {
      "minimal": "精简",
      "pruned": "Pruned",
      "validator-ready": "验证者就绪",
      "rpc": "RPC"
    },
    "profileHelp": {
      "title": "四个配置档有何分别",
      "desc": "向导第三步可选精简、Pruned、验证者就绪、RPC。分别在磁盘用量和用途。各链建议容量在向导显示。面板不会保管质押私钥。",
      "colName": "配置档",
      "colUse": "用途",
      "colDisk": "磁盘",
      "colStake": "当验证者",
      "useMinimal": "测试网或先试安装。不是完整历史。",
      "usePruned": "长期跟随链头。只留近期数据（Pruned）。",
      "useValidatorReady": "预留作日后出块。密钥须自行离线生成。",
      "useRpc": "给本机或其他服务查链。默认只听 127.0.0.1。",
      "diskMinimal": "最少",
      "diskPruned": "中等（多于精简）",
      "diskValidatorReady": "四者之中最多",
      "diskRpc": "视链而定",
      "stakeNo": "不适合",
      "stakeYes": "可以 — 离线或设错可能被罚",
      "stakeRpc": "不是验证者",
      "minimal": "占用磁盘最少。适合测试网或先试安装。不是完整历史，也不适合作为正式验证者。",
      "pruned": "保留近期链状态，删除过旧区块数据（Pruned）。磁盘多于精简、少于完整节点。适合长期跟随链头。",
      "validatorReady": "预留较大磁盘，供日后以验证者身份出块。密钥须自行离线生成；离线或设置错误可能损失质押金。",
      "rpc": "供本机或其他服务查询链数据。RPC 默认只监听 127.0.0.1，不会公开到互联网。"
    },
    "col": {
      "id": "标识",
      "chain": "链",
      "network": "网络",
      "profile": "配置档",
      "status": "状态",
      "traffic": "流量",
      "disk": "磁盘"
    },
    "cli": {
      "usage": "用法： ysk-server validators list|chains|disk|get|status|checklist|logs|create|start|stop|restart|clear|upgrade|set-version|versions|policy|mithril|prune|switch-network|snapshot|compose|compose-write|rewrite-compose|software|pull|leftover-remove|stats|settings|producer-keys|producer-detach|near-account [--chain C] [--network N] [--profile P] [--el EL] [--cl CL] [--el-tag T] [--cl-tag T] [--node-tag T] [--client ID] [--tag T] [--data-path P] [--rpc-port N] [--id ID] [--path PATH] [--file PATH] [--image REF] [--upgrade POLICY] [--confirm TOKEN] [--kes-file P] [--vrf-file P] [--opcert-file P] [--accept-low-disk] [--accept-low-mem] [--accept-mainnet] [--refresh] [--execute] [--json]"
    },
    "clients": {
      "el": "执行层客户端",
      "cl": "共识层客户端",
      "version": "版本",
      "pin": "本面板钉选",
      "officialNewer": "官方较新",
      "olderThanPin": "旧于本面板钉选",
      "prerelease": "预发布",
      "current": "目前运行",
      "source": "映像来源"
    },
    "mithril": {
      "label": "先用 Mithril 快照还原（测试网建议）",
      "hint": "这是安装成功后的一次性还原，不会写入 compose。之后也可在实例页再执行。",
      "action": "用 Mithril 还原"
    },
    "errors": {
      "notFound": "找不到验证者节点实例",
      "invalidId": "实例标识无效",
      "diskLow": "此链、网络与配置档所需的可用磁盘空间不足",
      "memLow": "可用内存不足以满足此链的内存上限",
      "diskUnknownMainnet": "无法测量可用磁盘，拒绝建立主网节点",
      "needDocker": "需要 Docker Compose，但找不到",
      "composeFailed": "docker compose 失败",
      "containerNotUp": "Compose 已启动，但容器未能保持运行",
      "probeFailed": "节点尚未回应 RPC。请在本页查看日志。",
      "oom": "内存不足。请设定内存上限或增加 RAM，然后重新启动。",
      "nofile": "程序已达开启档案上限（nofile）。请提高 ulimits.nofile 后重新启动。",
      "noContainer": "此实例没有 Compose 容器。",
      "restarting": "容器正在重新启动。请在本页查看日志。",
      "restartingCount": "容器正在重新启动（第 {{n}} 次）。请在本页查看日志。",
      "needConfirm": "清空须 confirm=实例标识 或 CLEAR",
      "mithrilAdaOnly": "Mithril 还原只适用于 Cardano",
      "needMithrilConfirm": "Mithril 需要 confirm=实例标识 或 MITHRIL",
      "mithrilBlocked": "Mithril 的 docker run 被允许清单拒绝",
      "mithrilKey": "无法载入 Mithril genesis 验证密钥",
      "mithrilFailed": "Mithril 快照下载失败",
      "pruneFailed": "清理失败",
      "switchNeedStop": "转网络前请先停止节点",
      "switchNeedClear": "转网络会清空链数据。请用实例标识或 CLEAR 确认",
      "composeMissing": "找不到 Compose 文件",
      "composeNotManaged": "拒绝写入非 YSK 管理的 Compose 文件",
      "badDataPath": "数据路径必须是绝对目录，并且不可使用系统路径",
      "portInUse": "该 RPC 端口已被另一个验证者实例使用",
      "badTag": "此客户端版本不是该映像的官方 tag",
      "needVersionConfirm": "变更版本须 confirm=实例识别码",
      "needMainnetVersionAck": "主网变更版本须 acceptMainnet",
      "snapshotUnsupported": "此链没有在允许清单内的快照来源",
      "snapshotLookup": "无法解析官方快照指针",
      "needSnapshotConfirm": "还原快照须 confirm=实例标识 或 SNAPSHOT",
      "snapshotBlocked": "快照的 docker run 被允许清单拒绝",
      "snapshotFailed": "快照下载或解压失败",
      "producerAdaOnly": "营运凭证只适用于 Cardano",
      "needProducerConfirm": "挂上营运凭证须 confirm=实例识别码 或 PRODUCER",
      "needMainnetProducerAck": "主网挂上营运凭证须 acceptMainnet",
      "producerColdRejected": "拒绝 cold 或 pool 拥有者签名密钥。cold 密钥须保持离线。",
      "producerTooLarge": "密钥档大于 64 KiB",
      "producerBadType": "此档不是 KES 密钥、VRF 密钥或 operational certificate",
      "producerEmpty": "请至少提供 kes、vrf 或 opcert 其中一份",
      "switchNeedDetachProducer": "转网络前请先卸下营运凭证",
      "nearAccountInvalid": "池名称必须是短名称（或完整的 {pool}{factory} 帐户）。",
      "nearKeyMissing": "validator_key.json 丢失或没有 public_key。启动节点并等待neard init。"
    },
    "notes": {
      "beta": "此功能属 Beta。变更主机须 root 及 YSK_EXECUTE=1。",
      "noKeys": "YSK Server 不会生成或保存质押私钥。",
      "dockerSoon": "安装与启动由此页精灵提供。变更主机须 root 及 YSK_EXECUTE=1。",
      "dryCreate": "已写入实例规格与 compose（dry-run）。要启动容器请加 --execute 及 YSK_EXECUTE=1。",
      "dryStart": "启动为 dry-run。请加 --execute 及 YSK_EXECUTE=1。",
      "dryStop": "停止为 dry-run。请加 --execute 及 YSK_EXECUTE=1。",
      "dryClear": "清空为 dry-run。请加 --execute 及 YSK_EXECUTE=1。",
      "created": "已建立节点并启动 compose",
      "started": "已启动节点",
      "stopped": "已停止节点",
      "cleared": "已清空链数据",
      "dryMithril": "Mithril 还原为试运行。请加 --execute 及 YSK_EXECUTE=1。",
      "mithril": "已用 Mithril 还原快照并重启节点",
      "dryPrune": "清理为试运行。请加 --execute 及 YSK_EXECUTE=1。",
      "pruned": "已清理此项目未用映像",
      "pruneProfile": "客户端原生修剪靠 pruned／minimal 配置档。要改请重建实例。",
      "sameNetwork": "已经在这个网络",
      "drySwitch": "转网络为试运行。",
      "switched": "已转网络并清空链数据",
      "dryCompose": "将写入 compose.yml",
      "composeWrote": "已写入 compose.yml",
      "statsEmpty": "没有运行中的容器可测量",
      "autoClearNone": "没有已停止的实例可供自动清空",
      "drySnapshot": "快照还原为试运行。请加 --execute 及 YSK_EXECUTE=1。",
      "snapshotEthEl": "已还原 ethPandaOps 执行层归档，并重置共识层以使用 checkpoint sync",
      "snapshotEthCl": "已重置共识层数据，使用官方 checkpoint sync",
      "snapshotNear": "已清空 NEAR 数据；compose 会重新用官方 genesis 与 epoch sync 初始化",
      "nativePrune": "已执行客户端原生清理命令",
      "dryProducer": "挂上营运凭证为试行。请加 --execute 及 YSK_EXECUTE=1。",
      "dryProducerDetach": "卸下营运凭证为试行。请加 --execute 及 YSK_EXECUTE=1。",
      "producerPartial": "已写入热密钥。KES、VRF、opcert 齐了才会以 block producer 启动。",
      "producerAttached": "已挂上热密钥，compose 改为 block producer",
      "producerDetached": "已卸下热密钥，compose 改回 relay",
      "dryDelete": "删除属预演。真正套用须 --execute 与 YSK_EXECUTE=1。",
      "deleted": "已删除节点",
      "leftoverRemoved": "已删除残留 {{path}}",
      "dryNearAccount": "将 account_id 设置为 {{account}}（通过 --execute）。秘密永远不会改变。",
      "nearAccountWrote": "将 account_id 设置为 {{account}}。秘密没有改变。如果节点正在运行，请重新启动该节点。"
    },
    "create": "建立节点",
    "wizard": {
      "title": "建立节点",
      "stepOf": "第 {{n}}／{{total}} 步",
      "stepChain": "链",
      "stepNetwork": "网络",
      "stepProfile": "设定档",
      "stepSummary": "摘要",
      "needDocker": "未安装 Docker Engine。请先安装 — 此按钮保持停用。",
      "diskNeed": "此设定档约需 {{need}} · 可用 {{free}}",
      "diskNeedNetwork": "此网络预设精简（Minimal）约需 {{need}} · 可用 {{free}}",
      "profileHint": {
        "minimal": "最小同步——磁盘最轻，不适合质押。",
        "pruned": "只保留近期历史（Pruned）。比完整存档小，仍可用作 RPC。",
        "validator-ready": "按验证者角色预留磁盘。比精简占用更多空间。",
        "rpc": "公开 RPC 节点——不是质押验证者。"
      },
      "diskShort": "可用磁盘不足以建立此链／网络／设定档",
      "diskShortDetail": "需要 {{need}} · 可用 {{free}} · 还差 {{short}}",
      "memShort": "可用内存不足以满足此链的内存上限",
      "memShortDetail": "需要 {{need}} · 可用 {{free}} · 还差 {{short}}",
      "needCustomPath": "请输入绝对资料路径",
      "previewId": "节点识别码",
      "previewCompose": "Compose 专案",
      "profileSeeAbout": "四个配置档的分别见「说明」分页。",
      "back": "上一步",
      "next": "下一步",
      "install": "安装",
      "mainnetWarn": "主网需要大量可用磁盘（ETH 常达 800 GiB 或以上）。建议先用测试网。",
      "mainnetAck": "我明白：主网会占用很多磁盘空间。若把这台机器当验证者，离线或设置错误，质押的币可能被罚走。我仍要建立主网节点。",
      "lowDiskAcked": "可用磁盘低于建议值。你已确认仍要建立；空间不足时同步可能中断。",
      "lowMemAcked": "可用内存低于此链的内存上限加 1 GiB 预留。你已确认仍要建立；节点可能因内存不足而中止。",
      "heavyWarn": "此链负载很重（大量磁盘与高 IOPS）。Solana 主网通常需要 2 TiB 或以上。",
      "memory": "内存上限（例如 4g）",
      "cpus": "CPU 上限（例如 2.0）",
      "dataPath": "数据路径（可选）",
      "rpcPort": "RPC 端口（可选）",
      "limitNone": "不限",
      "rpcDefault": "预设",
      "customPath": "使用自订资料路径",
      "installConfirmTitle": "安装此节点？",
      "installConfirmDesc": "{{chain}} · {{network}} · {{profile}}。约需 {{disk}} 磁盘。拉取映像可能需时颇长。",
      "installC1": "可能下载数 GiB 映像。",
      "installC2": "可取消面板任务；已拉取的映像不会自动删除。",
      "installC3": "主网会占用很多磁盘。若当验证者，离线或设置错误，质押的币可能被罚走。请输入节点识别码以确认。",
      "dockerAbout": "安装与启动节点需要 Docker Engine。",
      "dockerAboutOk": "已安装 Docker Engine。",
      "dockerAboutMissing": "未安装 Docker Engine。请到 Docker 页安装。",
      "rewriteCompose": "重写 compose",
      "rewriteComposeTitle": "用目前 adapter 重写 compose.yml？",
      "rewriteComposeDesc": "会覆写 {{id}} 的产生档，只使用本产品为此链附带的旗标。",
      "chainMeta": "最少 {{disk}} · {{clients}} 个客户端"
    },
    "actions": {
      "detail": "详情",
      "start": "启动",
      "stop": "停止",
      "restart": "重新启动",
      "clear": "清空",
      "upgrade": "升级",
      "setVersion": "变更版本",
      "clearConfirm": "输入实例标识或 CLEAR",
      "prune": "清理映像",
      "switchNetwork": "转网络",
      "removeUnit": "一并删除 compose／实例记录",
      "restoreAfter": "清空后还原快照",
      "delete": "删除",
      "deleteTitle": "删除 {{id}}",
      "deleteDesc": "此操作会从面板移除节点。",
      "deleteC1": "会停止并移除 Docker Compose",
      "deleteC2": "会删除磁盘上的链数据",
      "deleteC3": "会删除实例记录",
      "pruneTitle": "清理未用映像",
      "pruneDesc": "输入实例标识，以清理此节点 Compose 未用映像。",
      "pruneC1": "会删除此 Compose 项目标签下未使用的映像。",
      "clearTitle": "清空 {{id}}",
      "clearC1": "会删除磁盘上的链数据。",
      "clearC2": "实例仍留在面板，状态为已停止、无数据。",
      "switchTitle": "转网络",
      "switchC1": "会先停机并清空链数据，再写入新网络。"
    },
    "policy": {
      "label": "升级策略",
      "manual": "手动",
      "notify": "通知",
      "auto-safe": "自动（安全）",
      "auto-all": "自动（全部）"
    },
    "logs": {
      "empty": "尚无日志",
      "follow": "跟随日志"
    },
    "compose": {
      "label": "Compose 文件",
      "save": "保存 compose"
    },
    "snapshot": {
      "action": "还原快照",
      "mithril": "Cardano 用 Mithril 做认证快照还原。",
      "eth": "Ethereum 主网用官方 checkpoint sync 引导共识客户端。执行层继续 snap sync。",
      "ethEl": "Hoodi／Sepolia 可还原 ethPandaOps 执行层归档，再用 checkpoint sync 引导共识层。",
      "avax": "Avalanche 在 compose 配置档使用 state-sync。",
      "near": "官方免费 NEAR tar 快照已停用。还原会清空数据，再用官方 genesis 与 epoch sync。",
      "none": "此链未设置快照来源。"
    },
    "producer": {
      "title": "Block producer 热密钥",
      "hint": "不是填 IP。请上传离线机产生的 KES、VRF 与 operational certificate。cold 密钥不要放在此主机。",
      "warn": "此节点已公开 P2P，挂上后会出块。官方拓扑把 producer 放在内网。这三份档是热密钥。",
      "kes": "KES",
      "vrf": "VRF",
      "opcert": "操作证书",
      "missing": "未挂上",
      "present": "已挂上 {{fp}}",
      "presentShort": "已在主机",
      "queuedShort": "待套用",
      "queued": "已选 · {{name}}",
      "fileHint": "常见档名 {{file}}",
      "dropOrBrowse": "将 {{file}} 拖放至此，或浏览",
      "dropping": "放开以挂上 {{label}}",
      "browse": "浏览",
      "clearFile": "移除",
      "choose": "选择档案",
      "apply": "套用并以 block producer 重启",
      "detach": "卸下并改回 relay",
      "applyTitle": "将热密钥挂到 {{id}}？",
      "applyDesc": "KES、VRF、opcert 会写入实例 keys 目录，并重写 compose。容器会以 block producer 重启。",
      "applyC1": "cold 密钥须保持离线。不要上传 cold.skey。",
      "applyC2": "档案有效时，运行中的节点可以出块。",
      "applyC3": "主网：离线或设定错误会错过出块。",
      "detachTitle": "从 {{id}} 卸下营运凭证？",
      "detachDesc": "会从此主机删除热密钥，compose 改回 relay。",
      "detachC1": "节点将不再出块。",
      "mainnet": "主网：我明白此主机会保存热密钥并出块。"
    },
    "stake": {
      "title": "准备质押（私钥由你保管）",
      "offlineKeys": "离线生成密钥。面板永不保存。",
      "deposit": "在官方 launchpad 完成存款／登记。",
      "withdrawal": "自行设置提取凭证。",
      "monitor": "在此页留意磁盘、对等节点与升级徽章。"
    },
    "playbook": {
      "overviewTitle": "各链如何质押",
      "overviewDesc": "本面板只负责运行节点。钱包与密钥由你保管。以下只连官方网站。请勿在此输入助记词。",
      "colChain": "链",
      "colModel": "如何登记",
      "colMin": "常见最低额",
      "colWallet": "你使用的钱包",
      "colPanel": "本面板负责",
      "yskDoes": "本面板会做",
      "youDo": "你要自己做",
      "steps": "步骤",
      "never": "请不要",
      "official": "官方连结",
      "seeAbout": "完整步骤见“说明”分页。",
      "nodeIdReady": "NodeID（来自此节点）",
      "nodeIdPending": "节点完成同步并回应 RPC 后，才会显示 NodeID。",
      "blsReady": "BLS 公钥",
      "blsProof": "BLS 持有证明",
      "blsPending": "节点回应 RPC 后，才会显示 BLS 凭证。",
      "copyAll": "全部复制",
      "copyNamed": "复制「{{label}}」",
      "nearStakeKey": "质押公钥",
      "nearStakeKeyPending": "首次启动完成 neard init 后出现。RPC 未就绪不代表尚未产生密钥。",
      "nearAccountId": "密钥文件 account_id",
      "nearAccountIdPending": "池建立后须改成 {{pool}}{{suffix}}。本面板只写此栏，永不写入 secret_key。",
      "nearFactory": "质押池 factory",
      "nearPublicAddr": "Public P2P（对等节点）",
      "nearPublicAddrPending": "首次启动把 WAN:{{port}} 写入 config.json 后出现。",
      "nearCreateCommand": "create_staking_pool 命令",
      "nearPointing": "质押池合约不以本服务器 IP 指向节点，而是存放此节点的 stake public key。对等节点使用上方 Public P2P（主机端口 {{port}}）。RPC 仅本机。",
      "nearAccountIdHint": "池建立后，在此写入 account_id（无须人手改档）。面板永不写入 secret_key。",
      "cosmosPubkey": "共识公钥",
      "cosmosPubkeyPending": "gaiad init 写入 priv_validator_key.json 后出现。RPC 未就绪不代表尚未产生密钥。",
      "cosmosChainId": "链号",
      "cosmosP2p": "Public P2P（external_address）",
      "cosmosP2pPending": "首次启动把 tcp://WAN:{{port}} 写入 config.toml 后出现。",
      "ethBeacon": "Beacon API（本机）",
      "ethBeaconPending": "此主机的 beacon HTTP。请自行把 validator client 对准此 URL — 此 compose 没有 VC。",
      "cosmosCreateCommand": "create-validator 命令",
      "solIdentity": "身份公钥",
      "solIdentityPending": "RPC 响应 getIdentity 后出现。本进程为 --no-voting，除非你自行创建 vote account。",
      "adaP2pPort": "Relay P2P 端口",
      "adaP2pPending": "请把本主机公开 IPv4（或 DNS）与此端口写入池注册证书。topology.json 的 localRoots 只连你自己的 block producer。本面板不探测 WAN。",
      "notPosTitle": "不是权益证明",
      "notPosBody": "此处的 Bitcoin 是完整或 Pruned 节点。本页没有质押钱包。",
      "eth": {
        "model": "本 compose 只跑执行层 + beacon，没有 validator client。请在官方 launchpad 存入 32 ETH。",
        "min": "32 ETH + 手续费",
        "wallets": "MetaMask、Ledger、Trezor — 只在官方 launchpad 使用",
        "panel": "运行 EL + beacon。RPC 与 beacon API 仅本机。compose 没有 validator client。",
        "honesty": "此实例只是执行层 + beacon。compose 没有 validator client。把 keystore 放进 beacon 数据目录不会开始 attest。存款合约不以本服务器 IP 指向节点。",
        "yskDoes": [
          "安装并启动执行层与 beacon 客户端。",
          "显示磁盘、对等节点与升级状态。",
          "不运行 validator client，亦不加载签署 keystore。"
        ],
        "youDo": [
          "用官方 launchpad 或 staking-deposit-cli 自行产生 keystore，提取地址填入你的 ETH 钱包。",
          "在本网络的官方 launchpad 存入 32 ETH。",
          "自行运行 validator client（不是此 compose），对准此实例本机 beacon API。"
        ],
        "steps": [
          "等待执行层与 beacon 同步完成。",
          "开启此网络的官方 launchpad（本页有 Hoodi 或 Mainnet）。Sepolia 不提供 launchpad 按钮。",
          "离线用 staking-deposit-cli 产生 keystore。提款地址设为你自己的 ETH 钱包。",
          "在 launchpad 存入 32 ETH（另留 gas）。",
          "自行运行 validator client，指向本卡的 beacon URL（示例：lighthouse vc --beacon-nodes）。此 compose 没有 VC — 把 keystore 放入 beacon 数据目录不会开始 attest。"
        ],
        "never": [
          "不要把助记词或提款密钥交给任何人，包括本面板。",
          "不要把签署 keystore 上传到托管云。",
          "不要指望把 keystore 复制进 beacon 数据目录后本页会开始 attest。"
        ]
      },
      "avax": {
        "model": "在 Core 或 Ledger 用运行中的 NodeID 与 BLS 证明，于 P-Chain 登记验证者。",
        "min": "2,000 AVAX + 手续费（Fuji 为 1 AVAX）；最少 14 日",
        "wallets": "Core、Ledger",
        "panel": "运行 avalanchego；RPC 回应后可显示 NodeID 与 BLS",
        "yskDoes": [
          "运行 avalanchego，RPC 只听本机。",
          "节点回应 RPC 后显示 NodeID 与 BLS 凭证。"
        ],
        "youDo": [
          "在 Core 或 Ledger 持有 AVAX。",
          "在 Core 用此节点的 NodeID 与 BLS 证明新增验证者。"
        ],
        "steps": [
          "等待此节点同步，并出现 NodeID／BLS 列（须 RPC）。",
          "复制 NodeID、BLS 公钥与 BLS proof of possession。",
          "在 Core 网页（Staking → Validate），或经 Core 用 Ledger，在 P-Chain 登记。交易不收服务器 IP。",
          "主网至少 2,000 AVAX、最短 14 日，并预留手续费。Fuji 为 1 AVAX。"
        ],
        "never": [
          "不要把 AVAX 转入本面板。",
          "不要分享 Core 或 Ledger 的复原短语。"
        ]
      },
      "ada": {
        "model": "以离线 cold／KES／VRF 密钥经营 stake pool，不是浏览器钱包一键操作。",
        "min": "质押金额由你决定（见官方文件）",
        "wallets": "官方 stake pool 工具（cold 密钥保持离线）",
        "panel": "先以 relay 运行 cardano-node；可在本页挂上热钥。",
        "honesty": "此实例预设为 relay。链上登记 pool 用你离线保管的 cold 密钥。同侪与拓扑使用本主机公开 IPv4 与本卡显示的 P2P 端口 — 面板不探测 WAN。",
        "yskDoes": [
          "运行 cardano-node，并在支援时提供 Mithril 快照还原。",
          "你提供时挂上 KES、VRF 与 opcert。拒绝 cold 密钥。"
        ],
        "youDo": [
          "离线产生池密钥。",
          "用官方 Cardano CLI 注册池。把本机公网 IPv4 或 DNS 与 relay P2P 端口写入池注册证书。",
          "在本页挂上 KES、VRF 与 opcert。不要上传冷钥。"
        ],
        "steps": [
          "阅读官方 operate-a-stake-pool 指南。",
          "在离线机器产生 cold、KES、VRF 密钥。",
          "链上注册池。在该证书广告 relay（--pool-relay-ipv4 或 DNS + 本卡 P2P 端口）。公众发现靠证书，不是 topology.json。",
          "在本实例页挂上 KES、VRF 与 operational certificate。冷钥会被拒绝。",
          "topology.json 的 localRoots 只连你自己的 block producer（advertise: false）。本面板不查 WAN 位址。"
        ],
        "never": [
          "不要当成 MetaMask 一键质押。",
          "不要把冷钥放在验证者主机。",
          "不要以为只改 topology.json 就能在链上登记 relay。"
        ]
      },
      "near": {
        "model": "在官方 factory 建立 staking-pool 合约。合约存放此节点的 public key，不是服务器 IP。",
        "min": "见官方验证者文件（建立池须 30 NEAR，另加质押）",
        "wallets": "官方 NEAR 钱包／lockup",
        "panel": "运行 neard；表单填好 create_staking_pool；池建立后只写入 account_id。",
        "yskDoes": [
          "运行 neard，RPC 只在本机，P2P 在 24567。",
          "init 后显示质押公钥、公开 P2P 位址与 factory。",
          "用池名称、拥有人与公钥填好 create_staking_pool。池建立后只写 account_id — 永不改 secret_key，永不送出交易。"
        ],
        "youDo": [
          "启动节点，等待本页出现公钥。",
          "填池名称与拥有人，然后复制命令。",
          "用你自己的 NEAR 钱包或 near-cli 签署 create_staking_pool。",
          "返回本页写入 account_id。再从钱包向该池质押。"
        ],
        "steps": [
          "启动节点，等待 neard init 后公钥出现（RPC 未就绪不代表尚未产生密钥）。",
          "填入池短名与拥有人账号。复制已填好的 create_staking_pool 命令。",
          "用你的钱包呼叫 factory（测试网 pool.f863973.m0／主网 poolv1.near），并付 30 NEAR 作储存。命令使用 --accountId；若你的 near CLI 要用 --account_id，请依该 CLI 的 --help。",
          "池建立后，在本页按“写入 account_id”（确认字为实例识别码）。不要人手改 validator_key.json。",
          "若节点已在运行请重启。等待 RPC 回应且同步完成后再质押大量金额。对等端使用 Public P2P — 合约不收 IP。"
        ],
        "never": [
          "不要在本面板贴上助记词。",
          "不要把本服务器 IP 写进合约。",
          "不要期望面板代发 create_staking_pool 交易。"
        ]
      },
      "cosmos": {
        "model": "用操作者钱包送出 create-validator。交易存放此节点的共识公钥，不是服务器 IP。",
        "min": "见官方 Cosmos Hub 文件（自行质押以 uatom 计）",
        "wallets": "Keplr 或其他由你控制的 Cosmos 钱包",
        "panel": "运行 gaiad v28；显示共识公钥；表单填好 validator.json 与 create-validator。永不写入 priv_validator_key.json，亦不代发交易。",
        "honesty": "此 gaiad 为 v28（JSON 档）。Hub 文件仍用 flags — 在此节点会失败。交易存放此节点的共识公钥，不是服务器 IP。同侪使用 Public P2P。RPC 仅本机。本面板不代发交易，亦不读取 priv_key。",
        "yskDoes": [
          "运行 gaiad，RPC 只在本机，P2P 在 26656。minimum-gas-prices 为 0.005uatom。",
          "init 后显示共识公钥、chain-id 与公开 P2P。",
          "用数量、moniker、--from 与共识公钥填好 validator.json 与 gaiad v28 命令。永不写入 priv_validator_key.json，永不代发交易。"
        ],
        "youDo": [
          "启动节点，等待本页出现共识公钥。",
          "填数量、moniker 与 --from。先复制 validator.json，再复制 gaiad 命令。",
          "用 Keplr 或你控制的 gaiad 金钥签署。不要把该助记词与本机共识金钥混用。"
        ],
        "steps": [
          "启动节点，等待 gaiad init 后共识公钥出现（RPC 未就绪不代表尚未产生金钥）。",
          "填自我委托（1atom = 1 ATOM，或 uatom）、moniker 与 --from。复制 validator.json，再复制 gaiad 命令。此节点为 gaiad v28：用 JSON 档，不是 Hub 文件的 flags。主网 chain-id 为 cosmoshub-4，测试网为 provider。",
          "复制命令的 --gas-prices 为 0.005uatom，对齐此节点。不要贴上 Hub 文件的 0.0025uatom 示例，亦不要贴 flags 版 create-validator。",
          "储存 validator.json，用 operator 钱包广播。交易不收服务器 IP。同侪使用 tcp://WAN:{{port}}。",
          "等待 RPC 回应且同步完成后再大量绑定。"
        ],
        "never": [
          "不要把 operator 钱包助记词与共识金钥混用。",
          "不要在此输入钱包助记词。",
          "不要把此服务器 IP 写进 create-validator。",
          "不要贴上 Hub 文件的 --amount／--pubkey flags — 此 gaiad 为 v28（validator.json）。",
          "不要在此节点使用 0.0025uatom gas — compose 最低为 0.005uatom。"
        ]
      },
      "sol": {
        "model": "本 compose 以 --no-voting 运行 Agave。vote account 与 withdrawer 用官方 Solana 工具建立，不是本面板。",
        "min": "见官方维运文件（硬件与磁盘需求很高）",
        "wallets": "你控制的官方 Solana CLI／钱包",
        "panel": "以 --no-voting 运行 Agave 同步节点。RPC 回应后可显示 identity pubkey。",
        "honesty": "本进程为 --no-voting。在你用官方 Agave CLI 建立 vote account 并改启动方式之前，不会投票、也不会赚取质押。本面板不移除 --no-voting。",
        "yskDoes": [
          "运行 Agave 客户端，并警告磁盘需求。",
          "RPC 回应 getIdentity 后显示 identity pubkey。",
          "不建立 vote account，亦不开始投票。"
        ],
        "youDo": [
          "在你控制的机器上，用官方 Solana 工具建立 vote 与 authorized-withdrawer 密钥。",
          "用官方 CLI 建立 vote account，并使用此处的 identity pubkey。",
          "此 compose 维持 --no-voting。"
        ],
        "steps": [
          "确认本机磁盘与 IOPS 足够（主网通常 2 TiB 或以上）。",
          "等待 RPC 回应，然后复制本页的 identity pubkey。",
          "用官方 Solana 工具在你控制的机器产生 vote 与 authorized-withdrawer 密钥，然后 solana create-vote-account。",
          "此 compose 维持 --no-voting。建立 vote account 不会令此进程开始投票。"
        ],
        "never": [
          "不要指望本面板有浏览器钱包按钮。",
          "不要把 identity 或 vote 密钥对贴进本面板。",
          "不要指望建立 vote account 后本页会开始投票。"
        ]
      },
      "dot": {
        "model": "本 compose 是全节点（没有 --validator）。session keys 与 setKeys 是官方 Polkadot.js 步骤，不是本面板。",
        "min": "见官方 wiki",
        "wallets": "Polkadot.js",
        "panel": "以全节点运行 polkadot。RPC 仅本机。没有 --validator。",
        "honesty": "本进程不是以 --validator 启动。面板不呼叫 author_rotateKeys（会改 keystore）。要成为验证者，须依官方文件加上验证者旗标，并自行对本机 RPC 做 rotateKeys。",
        "yskDoes": [
          "运行 polkadot，RPC 只听本机。",
          "不加上 --validator，亦不轮替 session keys。"
        ],
        "youDo": [
          "阅读官方 set-up-a-validator 指南。",
          "若你自行加上 --validator，对本机 RPC 呼叫 rotateKeys，再在 Polkadot.js 用 stash 绑定结果。"
        ],
        "steps": [
          "同步此全节点。",
          "阅读官方 validate 指南。此 compose 不是验证者进程。",
          "不要在此贴上 stash 助记词。若你稍后以 --validator 运行，请自行对本机 RPC 埠做 rotateKeys。",
          "在 Polkadot.js 把 session keys 设到 stash／controller，再按官方步骤绑定。"
        ],
        "never": [
          "不要在本面板贴上 stash 助记词。",
          "不要期望本页产生 session keys，或已经以 --validator 启动。"
        ]
      },
      "sui": {
        "model": "本 compose 是 Sui fullnode（fullnode.yaml），不是验证者节点。",
        "min": "见官方 Sui 文件",
        "wallets": "官方 Sui 操作者钱包",
        "panel": "以 fullnode 运行 sui-node。RPC 仅本机。",
        "honesty": "此进程不能以 Sui 验证者身份签署。验证者要用另一份设定与密钥。官方验证者文件有连结；本面板不会把节点切成验证者模式。",
        "yskDoes": [
          "以 fullnode 运行产品附带的 sui-node 映像。"
        ],
        "youDo": [
          "把此实例当 fullnode 使用。",
          "若要成为验证者，请依官方 Sui 验证者文件另建验证者设定 — 不是此 compose。"
        ],
        "steps": [
          "同步此 fullnode。",
          "把它当 fullnode：会重放 checkpoint，但不签署共识。",
          "只有在你另行建立验证者进程时，才需要官方验证者操作指南。"
        ],
        "never": [
          "不要把 SUI 转入本面板。",
          "不要期望此 fullnode 进程登记成验证者。"
        ]
      },
      "aptos": {
        "model": "本 compose 是 Aptos 公共全节点（role full_node），不是验证者。",
        "min": "见官方 Aptos 文件",
        "wallets": "官方 Aptos 操作者钱包",
        "panel": "以公共全节点运行 aptos-node。RPC 仅本机。",
        "honesty": "公共全节点不参与共识。验证者需要不同 role、密钥，通常还要 validator fullnode。本面板不会把节点切成验证者模式。",
        "yskDoes": [
          "以公共全节点运行产品附带的 Aptos 映像。"
        ],
        "youDo": [
          "把此实例当公共全节点使用。",
          "若要跑验证者，请依官方 Aptos validator-node 文件 — 不是此 compose。"
        ],
        "steps": [
          "同步此公共全节点。",
          "把它当 PFN：提供账本资料，不投票。",
          "只有在你另行建立验证者 + VFN 时，才需要官方验证者文件。"
        ],
        "never": [
          "不要在本面板输入操作者密钥。",
          "不要期望此全节点进程登记成验证者。"
        ]
      },
      "btc": {
        "model": "不是权益证明。此处是 Bitcoin 完整或 Pruned 节点。",
        "min": "—",
        "wallets": "不适用",
        "panel": "运行 bitcoind",
        "yskDoes": [
          "运行 Bitcoin 完整或 Pruned 节点。"
        ],
        "youDo": [
          "钱包另外使用。挖矿与 Lightning 不在本功能范围。"
        ],
        "steps": [
          "把此实例视为 Bitcoin 节点即可。",
          "没有质押存款，也没有验证者 keystore。"
        ],
        "never": [
          "不要在本页寻找质押钱包。"
        ]
      },
      "nearPoolSlug": "池名称",
      "nearPoolSlugHint": "只填短名。factory 会加上 {{suffix}}。",
      "nearOwner": "拥有人账号",
      "nearOwnerHint": "签署 create_staking_pool 的 NEAR 账号（你的钱包）。不是节点密钥。",
      "nearPreview": "命令预览",
      "nearWriteAccount": "写入 account_id",
      "nearWriteTitle": "为 {{id}} 写入 validator_key.json 的 account_id？",
      "nearWriteDesc": "只改现有密钥档的 account_id。不会送出 create_staking_pool。不会改 secret_key。",
      "nearWriteC1": "account_id 会变成 {{pool}}{{suffix}}",
      "nearWriteC2": "面板不会签署 factory 交易",
      "nearRestart": "写入后重启节点",
      "nearNeedKey": "请先等质押公钥出现（neard init），再填此表。",
      "nearNeedSlug": "请填池名称以写入 account_id。",
      "cosmosPointing": "此 gaiad 为 v28：先复制 validator.json，再复制 create-validator validator.json。Hub 文件仍用 flags — 在此节点会失败。交易用此节点的共识公钥，不是服务器 IP。同侪使用 Public P2P（主机端口 {{port}}）。gas 为 0.005uatom — 不要用 Hub 文件的 0.0025uatom。",
      "avaxPointing": "P-Chain 登记用此 NodeID 与 BLS 证明，不是服务器 IP。RPC 仅本机。请在 Core（Staking → Validate）登记。",
      "ethVcCommand": "Validator client 示例（不在此 compose）",
      "ethVcHint": "请自行运行 validator client，指向此 beacon URL。把 keystore 放入 beacon 数据目录不会开始 attest。",
      "cosmosAmount": "自我委托",
      "cosmosAmountHint": "单位 uatom，或填 1atom 代表 1 ATOM。只填 1 是 1 uatom，不是 1 ATOM。",
      "cosmosMoniker": "Moniker",
      "cosmosFromKey": "--from 密钥名称",
      "cosmosFromHint": "本机 gaiad 密钥名，或用 Keplr 签署。不是此主机上的共识密钥。",
      "cosmosNeedPubkey": "请先等共识公钥出现（gaiad init），再填此表。",
      "cosmosNeedFields": "请填数量、moniker 与 --from 以产生命令。",
      "copyFailed": "复制失败",
      "cosmosCreateJson": "validator.json（gaiad v28）",
      "nearNeedOwner": "请填拥有人账号以产生命令。写入 account_id 只须池名称。",
      "cosmosAmountParsed": "{{amount}} = {{atom}}"
    },
    "alerts": {
      "diskTitle": "验证者节点磁盘危急",
      "diskBody": "验证者数据卷可用空间极低。",
      "upgradeTitle": "验证者节点有可用升级",
      "upgradeBody": "一个或多个客户端有较新的钉选版本。",
      "syncTitle": "验证者节点需要留意",
      "syncBody": "有节点已同步超过 6 小时，或回报错误。",
      "rollbackTitle": "验证者升级已回滚",
      "rollbackBody": "{{id}} 升级健康检查失败，已回滚。"
    },
    "upgrade": {
      "changelog": "更新记录"
    },
    "readiness": {
      "dockerTitle": "验证者节点所需的 Docker",
      "dockerOk": "有 {{count}} 个验证者实例；已安装 Docker",
      "dockerMissing": "已有验证者实例，但找不到 docker 命令"
    },
    "detail": {
      "status": "状态",
      "sync": "同步",
      "peers": "对等节点",
      "traffic": "流量",
      "version": "版本",
      "access": "访问",
      "upgrade": "升级",
      "upgradeHint": "选择此节点如何跟进客户端版本。",
      "setVersion": "变更版本",
      "setVersionHint": "为此节点的客户端选择官方 Docker tag。会重写 compose，然后拉取并重新启动。",
      "setVersionConfirmTitle": "将 {{id}} 改为 {{tag}}？",
      "setVersionConfirmDesc": "会重写 compose、拉取 {{ref}}，并重新启动节点。",
      "setVersionC1": "运行中的容器会换成所选 tag。",
      "setVersionC2": "请输入实例识别码以确认。",
      "setVersionMainnet": "主网：错误版本可令节点离线。我明白。",
      "releaseNotes": "发布说明",
      "network": "网络",
      "networkHint": "转网络会停机并清空链数据。请先在「清空数据」确认。",
      "maintain": "维护",
      "danger": "清空数据",
      "dangerHint": "输入实例标识或 CLEAR。此操作会删除磁盘上的链数据。",
      "compose": "Compose",
      "logs": "日志"
    },
    "state": {
      "unknown": "未知",
      "stopped": "已停止",
      "created": "已建立未启动",
      "missing": "没有容器",
      "starting": "启动中",
      "rpc_wait": "运行中／RPC 未就绪",
      "running": "运行中",
      "syncing": "同步中",
      "error": "错误"
    }
  },
  "vnc": {
    "pageDesc": "VNC 服务器／客户端",
    "result": "VNC 操作结果",
    "installed": "已安装",
    "notInstalled": "未安装",
    "stackBins": "{{垃圾箱}}",
    "stackMissing": "未装",
    "executeOn": "YSK_EXECUTE 已开",
    "executeOff": "YSK_EXECUTE 未开",
    "statAccounts": "账号",
    "statRunning": "运行中",
    "statClients": "客户端配置",
    "statEndpoint": "主机",
    "goAccounts": "账号",
    "goClient": "客户端",
    "goInstall": "安装",
    "accountsEmptyTitle": "暂无账号",
    "accountsEmptyDesc": "创建账号开始",
    "clientPathHint": "两种路径均在浏览器内使用 VNC。区别在于目标语义与说明（皆经面板 TCP 代理）。",
    "clientPathCompare": "「经用户可达端点」：公网主机名（如 hermes.example.com:5901）。「经服务器代理」：仅本机服务器可连的内网／机房地址。连接前会从此服务器探测 TCP。",
    "clientEmptyTitle": "暂无客户端",
    "clientEmptyDesc": "新增远程 host:port",
    "openInBrowser": "在浏览器打开",
    "pathUserReachable": "经用户可达端点",
    "pathServerProxy": "经服务器代理",
    "pathUserReachableShort": "用户可达",
    "pathServerProxyShort": "服务器代理",
    "pathUserReachableHint": "适用于公网主机名或用户侧可连的 VNC（例如 example.com:5901）。浏览器经面板转发；控制面须能对该地址打开 TCP。",
    "pathServerProxyHint": "适用于仅控制面服务器可连的内网或机房地址。流量经本机服务器网络代理后再连目标 VNC。可选填写「连接主机」覆盖实际 TCP 地址（例如显示用主机名、连接用 10.x）。",
    "connectHost": "连接主机（可选，服务器代理）",
    "connectHostHint": "控制面实际打开 TCP 的地址（内网 IP）。留空则使用上方「远程主机」。",
    "pathBrowser": "经用户可达端点",
    "pathHostViewer": "经服务器代理",
    "hostViewer": "经服务器代理",
    "needViewerOptional": "TigerVNC Viewer（可选，非浏览器路径）",
    "viewerStackOptional": "浏览器内 VNC 不需要安装桌面版 vncviewer。以下 Viewer 套件仅供系统维护，可跳过。",
    "viewer": {
      "minting": "准备会话…",
      "connecting": "连接中…",
      "connected": "已连接",
      "disconnected": "已断开",
      "error": "连接失败",
      "idle": "空闲",
      "closed": "已关闭",
      "minting_state": "准备中",
      "reconnect": "重新连接",
      "disconnect": "断开",
      "fullscreen": "全屏",
      "fit": "适合窗口",
      "oneToOne": "1:1",
      "cad": "Ctrl+Alt+Del",
      "password": "VNC 密码",
      "passwordPrompt": "需要密码",
      "sendPassword": "发送密码",
      "securityFailure": "验证失败",
      "canvasLabel": "VNC 桌面：{{name}}",
      "clipboardPaste": "粘贴到远程",
      "clipboardPanel": "剪贴板",
      "clipboardHint": "在本浏览器与远程桌面之间同步文字。",
      "clipboardLocal": "发送到远程",
      "clipboardLocalPh": "粘贴或输入要送入 VNC 的文字",
      "clipboardRemote": "来自远程",
      "clipboardRemotePh": "远程复制的文字会出现在这里",
      "clipboardSend": "发送到远程",
      "clipboardCopy": "复制到本机",
      "clipboardToRemote": "已将剪贴板发送到远程",
      "clipboardToRemoteHint": "将浏览器剪贴板粘贴到远程会话",
      "clipboardFromRemote": "远程剪贴板已复制到本浏览器",
      "clipboardFromRemoteManual": "远程剪贴板有更新 — 打开「剪贴板」面板再复制",
      "clipboardEmpty": "没有可粘贴内容 — 请先复制，或在下方输入",
      "clipboardReadDenied": "浏览器拒绝读取剪贴板 — 请粘贴到面板再发送",
      "clipboardNoRemote": "远程尚未发送文字",
      "clipboardCopiedLocal": "已复制到本浏览器",
      "quality": "画质",
      "qualityHint": "画质 vs 流量（JPEG／压缩）",
      "qualityLow": "低（省流量）",
      "qualityBalanced": "平衡",
      "qualityHigh": "高",
      "qualityMax": "最高画质",
      "passwordPromptHint": "此桌面需要 VNC 密码 — 请在下方输入。",
      "errNeedExecute": "无法启动桌面：服务器需要 root 并开启 YSK_EXECUTE。",
      "errTicket": "会话票据已过期或无效 — 请点「重新连接」。",
      "errBusy": "面板同时打开的 VNC 过多 — 请关闭其他会话再试。",
      "errRefused": "{{host}}:{{port}} 拒绝连接（无服务监听）。远程 VNC 是否在运行？本机是否可达？",
      "errRefusedGeneric": "连接被拒绝 — 请检查 VNC 是否运行、端口是否正确。",
      "errTimeout": "连接 {{host}}:{{port}} 超时。请检查防火墙／本机到远程的网络。",
      "errTimeoutGeneric": "连接超时 — 请检查网络和防火墙。",
      "errDns": "无法解析主机名「{{host}}」。",
      "errDnsGeneric": "主机名无法解析。",
      "errNet": "无法到达 {{host}}:{{port}}。",
      "reconnecting": "连接中断 — 自动重连（{{n}}/{{max}}）…",
      "idleHint": "一段时间无操作。远程可能已锁屏；移动鼠标或重新连接。",
      "idleDismiss": "仍在",
      "sessions": "已开 VNC 会话",
      "sessionCount": "{{n}} / {{max}} 个会话",
      "sessionLimit": "最多同时 {{max}} 个 VNC — 请先关闭一个。",
      "closeSession": "关闭会话 {{name}}",
      "shareLink": "分享链接",
      "shareCopied": "已复制只读分享链接（约 1 小时有效）",
      "shareFailed": "创建分享链接失败",
      "shareTitle": "VNC 分享查看",
      "shareGuest": "分享桌面",
      "shareMissing": "缺少分享 token",
      "shareExpired": "此分享链接无效或已过期",
      "viewOnlyBadge": "只读",
      "screenshot": "截图",
      "screenshotSaved": "已下载截图",
      "screenshotFailed": "截图失败",
      "screenshotNoCanvas": "画面未就绪，无法截图",
      "record": "录屏",
      "recordStop": "停止录屏",
      "recordHint": "录制桌面为 WebM（最长 60 秒）",
      "recordStarted": "录屏中… 点「停止录屏」或等待 60 秒",
      "recordSaved": "已下载录屏",
      "recordFailed": "录屏失败",
      "recordUnsupported": "此浏览器不支持 canvas 录屏",
      "connectingHint": "正在打开到桌面的安全通道…",
      "reconnectHint": "点「重新连接」再试，或检查远程主机与端口。"
    },
    "installHint": "TigerVNC → noVNC；XFCE 可选",
    "needTigerVnc": "需 TigerVNC",
    "needXfceFirst": "需先安装 XFCE",
    "needSessionRunning": "工作阶段未运行 — 请先启动",
    "needNovnc": "需 noVNC",
    "needXfce": "XFCE（可选）",
    "needViewer": "Viewer（可选）",
    "needViewerOrNovnc": "需 viewer 或 noVNC",
    "settingsHint": "新建账号默认",
    "settingsNeedStack": "此处默认值要在已安装 TigerVNC（若选 XFCE 亦需 XFCE）后才会生效。请先到「安装」分页安装。",
    "clientNeedNovnc": "「在浏览器开启」需要 noVNC。若要在此开启远端，请先到「安装」分页安装。",
    "defaultDesktop": "默认桌面",
    "defaultGeometry": "默认分辨率",
    "defaultDepth": "色深",
    "defaultRfbBind": "RFB 监听",
    "defaultAutostart": "开机自启",
    "autostartLabel": "开机自启",
    "settingsSaved": "已保存 VNC 默认",
    "tab": {
      "overview": "总览",
      "accounts": "账号",
      "client": "客户端",
      "install": "安装",
      "settings": "设置",
      "about": "说明"
    },
    "desktop": {
      "xfce": "XFCE（完整桌面）",
      "terminal": "终端"
    },
    "bind": {
      "localhost": "仅本机（noVNC／隧道）",
      "all": "全部接口（直连 RFB — 需开防火墙）",
      "localhostShort": "本地主机",
      "allShort": "0.0.0.0"
    },
    "accountListTitle": "VNC 账号（{{count}}）",
    "accountListDesc": "一账一 Linux 用户",
    "createAccount": "+ 创建账号",
    "createAccountTitle": "创建 VNC 账号",
    "createAccountDesc": "专用 yskvnc_* 用户",
    "createAccountBtn": "创建账号",
    "editAccountTitle": "修改 VNC 账号",
    "editAccountDesc": "Linux 用户 {{user}} · display :{{display}}",
    "setPassword": "密码",
    "setPasswordTitle": "设置 VNC 密码",
    "setPasswordDesc": "更新 {{address}} 的 VNC 登录密码",
    "newPassword": "新密码",
    "confirmPassword": "确认密码",
    "passwordHint": "至少 6 字符",
    "passwordMismatch": "两次密码不一致",
    "passwordTooShort": "密码至少 6 个字符",
    "needName": "请输入显示名称",
    "start": "启动",
    "stop": "停止",
    "startAfterCreate": "创建后启动",
    "hostnameBroken": "此主机无法解析自己的主机名（{{hostname}}）。工作阶段会启动失败。",
    "hostnameBrokenIdle": "Hostname {{hostname}} does not resolve on this host. Fix /etc/hosts before you create a session.",
    "hostnameFix": "把主机名写入 /etc/hosts",
    "hostnameFixTitle": "附加此行到 /etc/hosts？",
    "hostnameFixDesc": "{{line}}",
    "hostnameFixDone": "已更新 /etc/hosts 主机名",
    "startAfterCreateBlocked": "主机名可解析后才可启用",
    "startHostnameBlocked": "主机名可解析后才可启动。请先使用「把主机名写入 /etc/hosts」。",
    "colName": "名称",
    "colLinuxUser": "Linux 用户",
    "colDisplay": "Display／端口",
    "colStatus": "状态",
    "colDesktop": "桌面",
    "colBind": "RFB 监听",
    "accountStatus": {
      "running": "运行中",
      "stopped": "已停止",
      "failed": "失败",
      "written": "已写入",
      "unknown": "未知"
    },
    "clientStatus": {
      "up": "已连接",
      "down": "已断开",
      "unknown": "未知",
      "error": "错误",
      "viewing": "浏览器观看中"
    },
    "accountPager": "账号分页",
    "prevPage": "上一页",
    "nextPage": "下一页",
    "pageOf": "第 {{page}} / {{total}} 页 · {{count}}",
    "deleteAccountTitle": "删除 VNC 账号？",
    "deleteAccountDesc": "移除控制面账号 {{name}}（{{user}}）。会先停止 session。",
    "deleteAccountC1": "此 display 的 VNC session",
    "deleteAccountC2": "面板 dataDir/vnc 中的元数据",
    "deleteAccountC3User": "将一并删除 Linux 用户与 home（userdel -r）",
    "deleteAccountC3Keep": "将保留系统上的 Linux 用户",
    "removeLinuxUser": "一并删除 Linux 用户和家目录",
    "deleteKeepUserWarn": "将留下孤立 Linux 用户，需自行清理。",
    "bindRfbLine": "RFB {{bind}} :{{port}}",
    "bindNovncLine": "noVNC 127.0.0.1:{{port}}",
    "bindNovncHint": "noVNC 只听本机。桌面经面板代理，除非 RFB 绑全部界面，否则不是公网桌面。",
    "connection": "连接",
    "connectionTitle": "连入材料",
    "connectionDesc": "客户端如何连到 {{name}}",
    "connectionPathsHint": "建议用「在浏览器打开」；高级项才是旧 noVNC／直连 RFB",
    "connectionBrowserHint": "建议：在本面板内打开桌面（无需 SSH tunnel，任何能打开面板的浏览器均可）。",
    "connectionBrowserDesc": "必要时会自动启动 VNC 会话，并在面板内用键鼠／剪贴板操作。",
    "connectionAdvanced": "高级：旧版 noVNC URL 与直连 RFB",
    "pathViaServer": "经 server（noVNC）",
    "pathViaServerLegacy": "旧版 noVNC（服务器 127.0.0.1）",
    "pathViaServerLegacyHint": "仅在服务器本机或 SSH tunnel 下可用 — 请优先使用「在浏览器打开」。",
    "pathDirect": "直连 RFB",
    "recommended": "建议",
    "startNovnc": "启动 noVNC",
    "stopNovnc": "停止 noVNC",
    "copyNovncUrl": "复制 noVNC URL",
    "copyAddress": "复制 host:port",
    "openFirewall": "UFW 放行端口",
    "directAddress": "地址",
    "ticketPath": "观看 ticket API",
    "directLocalhostWarn": "RFB 仅监听 localhost",
    "copied": "已复制",
    "clientListTitle": "客户端配置（{{count}}）",
    "clientListDesc": "连出 VNC",
    "addClient": "+ 新增远程",
    "addClientTitle": "新增远程 VNC",
    "addClientDesc": "远程 host:port",
    "clientTarget": "目标",
    "clientPath": "连接路径",
    "clientHost": "远程主机",
    "pathViaServerShort": "浏览器",
    "pathDirectShort": "主机查看器",
    "disconnect": "断开",
    "connect": "连接",
    "clientNeedFields": "名称与主机必填",
    "clientCreated": "已创建客户端配置",
    "clientPasswordOptional": "VNC 密码（可选）",
    "clientPasswordHint": "使用「在浏览器打开」时会带入。留空则每次输入。",
    "clientRememberPassword": "将密码存到本服务器，下次打开使用",
    "clientRememberPasswordWarn": "密码会写入面板 dataDir（root 可读）。共用主机建议每次手动输入。",
    "stackMissingShort": "未安装",
    "editClientTitle": "编辑远程客户端",
    "editClientDesc": "更新连接路径、主机与可选已存密码。",
    "clientUpdated": "已更新客户端配置",
    "rememberNeedPassword": "请先填密码。"
  },
  "vpn": {
    "pageDesc": "VPN 服务器／客户端",
    "eyebrow": "VPN",
    "tab": {
      "wireguard": "WireGuard",
      "openvpn": "OpenVPN",
      "outline": "Shadowsocks",
      "client": "本机连出",
      "software": "软件",
      "monitor": "监控",
      "about": "说明",
      "server": "服务器",
      "install": "安装",
      "overview": "总览"
    },
    "softwareIntro": "在此检查／安装／更新 VPN 引擎。服务器分页只做配置。",
    "monitor": {
      "needLive": "实时数据需 root + YSK_EXECUTE。",
      "autoRefresh": "自动 3 秒",
      "filterEngine": "引擎筛选",
      "filterPresence": "在线筛选",
      "engineAll": "全部引擎",
      "presenceAll": "全部",
      "presenceOnline": "在线",
      "presenceOffline": "离线",
      "onlineOf": "在线 {{online}} / {{total}}",
      "peersTitle": "对等端（{{count}}）",
      "localTitle": "本机连出",
      "colEndpoint": "远端",
      "colLastSeen": "最后见",
      "colRx": "↓ 累计",
      "colTx": "↑ 累计",
      "colRxRate": "↓ 速率",
      "colTxRate": "↑ 速率",
      "sampledAt": "取样 {{when}}",
      "emptyPeers": "暂无 peer",
      "emptyPeersHint": "到引擎 tab 新增 peer，或清除筛选",
      "presence": {
        "online": "在线",
        "idle": "闲置",
        "offline": "离线",
        "never": "从未",
        "unknown": "未知"
      }
    },
    "installed": "已安装",
    "notInstalled": "未安装",
    "serverUp": "运行中",
    "serverDown": "已停",
    "engineSummary": "端口 {{port}} · {{peers}} 个 peer",
    "engineSummaryClient": "{{count}} 个配置 · {{up}} 已连",
    "needWireGuard": "需 WireGuard",
    "needOpenVpn": "需 OpenVPN",
    "needSs": "需 ss-server",
    "ssHonestUi": "ss:// 访问密钥（非完整 Outline Manager）",
    "listenPort": "监听端口",
    "listenPortUdp": "监听端口（UDP）",
    "listenPortTcp": "监听端口（TCP）",
    "endpoint": "公开端点",
    "endpointHint": "客户端连入的公网 host:port",
    "ddnsFill": "使用 DDNS 主机名称",
    "ddnsFilled": "已用 DDNS 填入 Endpoint 主机。现有 peers 未改动。",
    "ddnsFillEmpty": "尚无 DDNS 主要主机名称。请先到 DNS 的 DDNS 分页新增。",
    "ensureServer": "应用服务器",
    "openFirewall": "开端口 {{port}}/{{proto}}",
    "presets": "常用端口",
    "portHint": {
      "51820": "默认 WireGuard 监听端口",
      "51821": "备用 WireGuard 侦听端口",
      "51822": "第二个备用 WireGuard 侦听端口"
    },
    "proto": "协议",
    "protoUdp": "UDP协议",
    "protoTcp": "传输控制协议",
    "statusLine": "{{state}} · {{port}}/{{proto}} · {{peers}} 对等点",
    "peersTitle": "对等端",
    "peersTitleWg": "对等端",
    "peersTitleOvpn": "客户端配置",
    "peersTitleSs": "访问密钥",
    "peerName": "名称",
    "peerNamePlaceholder": "电话",
    "peerNameHint": "可用英文字母、数字、. _ -，不可有空格、／或 !",
    "peerNameInvalid": "不可使用空格、／或 !。请改为 {{preview}}，或自行修改名称。",
    "addPeer": "+ 新增",
    "installEngineFirst": "首先安装VPN引擎",
    "needServerRunning": "请先套用并启动 {{engine}} 服务器",
    "engineSummarySoftware": "{{installed}} 已安装 · {{running}} 运行中",
    "privateKeyOnce": "客户端私钥只在此显示一次。请立即下载或复制，之后无法复原。",
    "showPrivateKey": "显示私钥",
    "hidePrivateKey": "隐藏私钥",
    "deletePeerTitle": "删除对等端 {{name}}？",
    "deletePeerDesc": "将移除 {{name}}（{{address}}）。客户端会立即断线，配置无法恢复。WireGuard 服务器保持运行。",
    "deleteClientTitle": "删除 OpenVPN 客户端 {{name}}？",
    "deleteClientDesc": "将移除 {{name}}（{{address}}）。该客户端会立即断线，配置无法恢复。OpenVPN 服务器保持运行。",
    "deleteKeyTitle": "删除 Shadowsocks 密钥 {{name}}？",
    "deleteKeyDesc": "将移除访问密钥 {{name}}（{{address}}）。使用此密钥的客户端会断线。Shadowsocks 服务器保持运行。",
    "deleteResult": "已移除 {{name}}。",
    "portInvalid": "监听端口须为 1 至 65535 的整数。",
    "portRequired": "请填写监听端口。",
    "importInvalid": "未能识别为 WireGuard 或 OpenVPN 客户端配置。",
    "qrFailed": "未能生成此配置的二维码。请改为下载或复制文本。",
    "cfgTitle": "配置 — {{name}}",
    "addPeerWg": "+ 新增 peer",
    "addPeerOvpn": "+ 新增客户端",
    "addPeerSs": "+ 新增密钥",
    "noPeers": "暂无项目",
    "noPeersHint": "新增后可下载配置／QR",
    "colName": "名称",
    "colAddress": "地址",
    "colCreated": "创建",
    "colActions": "操作",
    "colEngine": "引擎",
    "colStatus": "状态",
    "colIface": "接口",
    "downloadKey": "下载",
    "showQr": "二维码",
    "copyConf": "复制",
    "copied": "已复制",
    "downloaded": "已下载配置",
    "qrReady": "QR 就绪",
    "qrTitle": "二维码 — {{name}}",
    "qrHintWg": "用 WireGuard App 扫",
    "qrHintSs": "用 Shadowsocks 客户端扫 ss://",
    "showConf": "配置文本",
    "close": "关闭",
    "clientIntro": "导入 conf，令本机连出 VPN",
    "profileName": "配置名称",
    "pasteConf": "粘贴 conf",
    "importProfile": "导入",
    "importOpen": "+ 导入 conf",
    "noProfiles": "暂无本机配置",
    "noProfilesHint": "粘贴 WireGuard 或 OpenVPN 客户端 conf",
    "connect": "连接",
    "disconnect": "断开",
    "clientStatus": {
      "up": "已连接",
      "down": "已断开",
      "unknown": "未知",
      "error": "错误"
    },
    "result": "结果",
    "clientEngine": "类型",
    "engineAuto": "自动检测",
    "refresh": "刷新",
    "dnsOptional": "DNS（可选）",
    "serverSettings": "服务器设置",
    "access": {
      "label": "客户端流量",
      "full": "全网上网",
      "lan": "只连区域",
      "custom": "自定义路由",
      "fullHint": "客户端上网都经本服务器（会开 NAT）。应用后请重连客户端。",
      "lanHint": "仅可达 VPN／所选内网；不改客户端本身上网。应用后请重连。",
      "customHint": "仅将填写的网段进入 tunnel。应用后请重连。",
      "lanCidrs": "区域网段",
      "customCidr": "CIDR",
      "addCidr": "添加",
      "cidrRequired": "请填写 CIDR（例如 192.168.1.0/24）。",
      "cidrInvalid": "请填写有效的 CIDR，例如 192.168.1.0/24。"
    },
    "engineNotInstalled": "此主机尚未安装此 VPN 引擎。",
    "serverNotListening": "服务器单元未在运行。UDP/TCP {{port}} 可能未监听。"
  }
}
