Files
ryan 497edfd564 refactor(i18n): fragments 为唯一源,主包改为生成物
- 一次性回灌:主包最新内容(含 565 个未同步键)全量写回 6 个 fragment 文件,fragments 成为完整唯一源;新增 core fragment(common/docs/home 等 9 个此前仅存在于主包的命名空间)
- merge-i18n-fragments.mjs 改为从零重建主包(不再以主包为基础),重建结果与原主包语义零差异
- 主包 messages/{zh-CN,en}.json 移出跟踪并加入 .gitignore
- 生成接入入口:predev/prebuild/prebuild:embed/precheck:i18n 钩子 + Makefile code-check 与 checks.sh vitest 前置生成
- 修复既有漂移:configVersions.title 现以 fragments(Config versions)为准
2026-08-16 22:38:50 +08:00

674 lines
28 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"dashboard": {
"title": "总览",
"generatedAt": "数据生成于 {time}",
"refresh": "刷新",
"loadingTitle": "加载总览数据",
"loadingDesc": "正在聚合节点健康、流量与容量指标...",
"loadFailed": "总览看板加载失败:{error}",
"emptyTitle": "暂无总览数据",
"emptyDesc": "系统已经启动,但还没有可展示的总览聚合结果。",
"requestFailed": "请求失败,请稍后重试。",
"stats": {
"requests24h": "24h 请求量",
"requestsMeta": "24h 独立访客 {visitors} · 错误 {errors} · 估算 QPS {qps}",
"clusterCapacity": "集群容量",
"avgMemoryHighLoad": "平均内存 {memory} · 高负载节点 CPU {cpu} / 内存 {memoryNodes} / 存储 {storage}",
"nodeOverview": "节点概览",
"onlineOf": "/ {total} 在线",
"pending": "待接入 {count}",
"unhealthyOffline": "异常 {unhealthy} · 离线 {offline}"
},
"world": {
"title": "全球态势板",
"description": "汇总节点分布、来源国家热度与最近窗口运行状态。",
"legendSource": "来源",
"legendHealthy": "正常",
"legendPressure": "承压",
"legendUnhealthy": "异常",
"modeVisitorSource": "访客来源",
"modeNodeCoords": "节点坐标",
"modeCoverage": "覆盖信号",
"onlineCoverage": "在线覆盖",
"onlineHint": "{online}/{total} 在线",
"runHealth": "运行健康",
"unhealthyCount": "{count} 个异常",
"requests24h": "24小时请求",
"qpsReported": "QPS {qps} · {count} 个节点上报",
"nodeCoords": "节点坐标",
"sourceCountries": "{count} 个来源国家",
"fallbackPins": "未配置时使用预设落点",
"avgCpu": "平均 CPU",
"highCount": "{count} 个偏高",
"avgMemory": "平均内存",
"highStorage": "高存储",
"offlinePending": "{offline} 离线 · {pending} 待接入",
"mapPreparing": "地图准备中",
"mapPreparingDesc": "进入可视区域后加载",
"noNodesOverlay": "暂无节点,接入后将展示地理分布"
},
"map": {
"sourceRequests": "最近 24 小时来源请求 {count}",
"presetPin": "预设落点",
"requestsErrors": "请求量 {requests} · 错误数 {errors}",
"eventsStatus": "活动事件 {events} · 节点状态 {status}",
"openrestyStatus": "OpenResty 状态 {status}",
"loadFailed": "全球地图加载失败",
"loading": "全球地图加载中",
"loadFailedDesc": "ECharts 世界地图资源未能成功注册,请稍后刷新重试。",
"loadingDesc": "正在按需初始化全球地图,这一步会延后到首屏内容稳定后执行。",
"measuring": "正在测量地图容器尺寸..."
},
"trafficTrend": {
"title": "24 小时请求趋势",
"description": "按小时拆分请求总量与 2xx/4xx/5xx 状态码请求量,判断各状态是否异常抬升。",
"summaryHint": "近 24 小时",
"requests": "请求量",
"status2xx": "2xx 请求",
"status4xx": "4xx 请求",
"status5xx": "5xx 请求"
},
"capacityTrend": {
"title": "24 小时容量趋势",
"description": "按小时聚合 CPU 与内存使用率,判断整体容量是否持续紧张。",
"avgCpu": "平均 CPU",
"avgMemory": "平均内存"
},
"trafficCapacity": {
"title": "24 小时业务流量与容量趋势",
"networkHint": "近 24 小时 · 来自访问日志",
"received": "接收数据",
"provided": "已提供数据",
"capacityHint": "近 24 小时 · 宿主机容量 · 平均值"
},
"distributions": {
"sourceTitle": "来源分布",
"sourceDesc": "聚合最近 24 小时主要来源国家。",
"sourceEmpty": "暂无来源分布数据",
"statusTitle": "状态码分布",
"statusDesc": "快速判断成功响应是否仍是主流,以及错误码是否有抬升。",
"statusEmpty": "暂无状态码分布",
"httpLabel": "HTTP {code}",
"domainTitle": "Top Domain",
"domainDesc": "观察主要流量集中在哪些域名。",
"domainEmpty": "暂无域名分布"
},
"nodeHealth": {
"title": "节点健康列表",
"description": "按异常数量和资源压力排序。",
"openNodes": "进入节点页",
"emptyTitle": "暂无节点",
"emptyDesc": "节点接入后,这里会展示系统健康与容量摘要。",
"colNode": "节点",
"colStatus": "状态",
"colCpuMem": "CPU / 内存",
"colReqErr": "请求 / 错误",
"colEvents": "活动异常",
"colHeartbeat": "最近心跳",
"colActions": "操作",
"noGeo": "未配置地图点位",
"wsConnected": "WS 已连接",
"na": "暂无",
"detail": "详情"
},
"nodeRank": {
"title": "Top 节点榜单",
"traffic": "流量最高节点",
"trafficEmpty": "暂无流量榜单",
"pressure": "容量压力节点",
"pressureEmpty": "暂无容量压力数据"
}
},
"nodes": {
"title": "节点管理",
"applyLogs": "应用记录",
"create": "新增节点",
"listTitle": "节点列表",
"refreshNow": "立即刷新",
"loadingList": "加载节点列表中...",
"emptyAll": "暂无节点,请先创建一个节点。",
"emptyFilter": "当前筛选无结果",
"updated": "节点已更新",
"created": "节点已创建",
"deleted": "节点已删除",
"deleteTitle": "确认删除节点",
"deleteDesc": "确认删除节点「{name}」吗?删除后该节点需要重新创建并重新接入。",
"deleting": "删除中...",
"confirmDelete": "确认删除",
"edit": "编辑",
"delete": "删除",
"refresh": "刷新",
"detail": "详情",
"na": "暂无",
"wsConnected": "WS 已连接",
"wsEstablished": "WebSocket 长连接已建立",
"requestFailed": "请求失败,请稍后重试。",
"unknown": "未知",
"running": "运行中",
"liveConfig": "实时配置",
"notApplied": "未应用",
"enabled": "已启用",
"manual": "手动",
"lockedSuffix": "(已锁定)",
"noGeo": "未配置地图点位",
"notConfigured": "未配置",
"ipLine": "IP:{ip}",
"locationLine": "位置:{location}",
"backToList": "返回节点列表",
"missingId": "缺少节点 ID,请从节点列表进入详情页。",
"loadingDetail": "加载节点详情中...",
"notFound": "节点不存在,可能已被删除或 ID 无效。",
"syncing": "同步中...",
"forceSync": "强制同步",
"dispatching": "下发中...",
"viewUpgrade": "查看升级",
"tabOverview": "概览",
"tabManage": "状态与部署",
"kpiNodeId": "节点 ID",
"kpiLastSeen": "最近心跳",
"kpiCurrentConfig": "当前配置",
"filter": {
"all": "全部节点",
"descAll": "当前展示全部节点。",
"descRelay": "当前仅展示 Relay 节点。",
"descTunnel": "当前仅展示 Tunnel 节点。",
"descEdge": "当前仅展示 Edge 节点。"
},
"status": {
"online": "在线",
"pending": "待接入",
"offline": "离线",
"running": "运行中",
"wsConnected": "WS 已连接"
},
"apply": {
"success": "成功",
"warning": "警告",
"failed": "失败",
"none": "暂无"
},
"health": {
"healthy": "健康",
"unhealthy": "异常",
"unknown": "未知"
},
"relative": {
"justNow": "刚刚",
"minutesAgo": "{count} 分钟前",
"hoursAgo": "{count} 小时前",
"daysAgo": "{count} 天前",
"monthsAgo": "{count} 个月前"
},
"uptime": {
"daysHours": "{days} 天 {hours} 小时",
"hoursMinutes": "{hours} 小时 {minutes} 分钟",
"minutes": "{minutes} 分钟"
},
"channel": {
"preview": "预览版",
"stable": "正式版"
},
"table": {
"node": "节点",
"status": "状态",
"version": "Version",
"runHealth": "运行健康",
"currentVersion": "当前版本",
"latestApply": "最近应用",
"lastSeen": "最近心跳",
"actions": "操作"
},
"editor": {
"editTitle": "编辑节点",
"createTitle": "新增节点",
"description": "预创建节点后可在详情页查看专属 Token 与部署命令。",
"nodeType": "节点类型",
"typeEdge": "Edge 节点",
"typeRelay": "Relay 节点",
"typeTunnel": "Tunnel 节点",
"name": "节点名称",
"namePlaceholder": "例如 edge-hk-01",
"ip": "节点 IP",
"ipPlaceholder": "可选,接入后自动上报",
"lockIp": "锁定 IP",
"lockIpDesc": "启用后管理端不再自动覆盖 IP",
"autoUpdate": "自动更新 Agent",
"autoUpdateDesc": "启用后节点将自动拉取正式版更新",
"bindPort": "绑定端口",
"vhostPort": "VHost 端口",
"manualGeo": "手动地图点位",
"manualGeoDesc": "用于总览地图展示",
"geoName": "位置名称",
"latitude": "纬度",
"longitude": "经度",
"saving": "保存中...",
"saveEdit": "保存修改",
"createAction": "新增节点",
"errName": "请输入节点名称",
"errLockIp": "锁定 IP 时必须填写节点 IP",
"errBindPort": "请输入有效的绑定端口",
"errVhostPort": "请输入有效的 VHost 端口"
},
"install": {
"edgeTitle": "边缘节点部署",
"edgeDesc": "使用 Agent Token 将边缘节点接入控制端。",
"relayTitle": "中继部署命令",
"relayDesc": "使用 Discovery Token 将 frps 中继节点接入控制端。",
"tunnelTitle": "隧道部署命令",
"tunnelDesc": "使用 Tunnel Token 将 openflared 客户端接入控制端。",
"agentToken": "Agent Token",
"discoveryToken": "Discovery Token",
"tunnelToken": "Tunnel Token",
"scriptLabel": "一键脚本部署 (Linux / macOS)",
"dockerLabel": "Docker 容器部署",
"copyFailed": "复制失败,请手动选择命令文本。",
"copiedScript": "部署脚本命令已复制",
"copiedDocker": "Docker 部署命令已复制",
"copyScript": "复制脚本",
"copyDocker": "复制 Docker",
"nodeId": "Node ID",
"serverUrl": "Server URL(控制端地址)",
"serverUrlHint": "部署脚本和容器将使用此地址连接 OpenFlare 控制端。",
"noToken": "节点尚未生成接入 Token,请稍后刷新。",
"needServerUrl": "请填写有效的 Server URL 以生成部署命令。"
},
"update": {
"title": "Agent 升级",
"description": "检查 GitHub 发布并向节点下发升级指令,节点将在下一次心跳后执行。",
"currentVersion": "当前版本",
"channel": "检查通道",
"updateStatus": "更新状态",
"waitingPreview": "等待预览更新",
"waitingUpdate": "等待更新",
"notRequested": "未下发",
"checking": "检查发布版本中...",
"hasUpdate": "发现可升级版本",
"upToDate": "当前已是最新版本",
"previewRelease": "Preview 发布",
"stableRelease": "正式发布",
"targetVersion": "目标版本",
"notFound": "未找到",
"publishedAt": "发布时间",
"noNotes": "暂无更新说明",
"viewRelease": "查看发布详情",
"checkStable": "检查正式版",
"checkPreview": "检查预览版",
"upgradePreview": "升级到预览版",
"upgradeStable": "升级到正式版"
},
"edge": {
"upgrade": "升级 Agent",
"restartOpenresty": "重启 OpenResty",
"runStatus": "运行状态",
"runStatusDesc": "节点在线情况与 OpenResty 健康",
"openrestyHealth": "OpenResty 健康",
"lastSeen": "最近心跳",
"ip": "IP 地址",
"geo": "地图点位",
"syncTitle": "配置同步",
"syncDesc": "版本追平与应用结果摘要",
"currentVersion": "当前配置版本",
"latestApply": "最近应用",
"latestApplyAt": "最近应用时间",
"agentVersion": "Agent 版本",
"nginxVersion": "Nginx 版本",
"autoUpdate": "自动更新",
"runtimeMessages": "运行消息",
"runtimeMessagesDesc": "OpenResty 与 Agent 上报的状态说明",
"openrestyMessage": "OpenResty 状态消息",
"noExtraError": "当前未上报额外错误。",
"restartPending": "已等待节点在下一次心跳后执行 OpenResty 重启。",
"kpiAgent": "Agent 版本",
"connectionHint": "OpenResty 当前连接",
"toastUpdated": "节点已更新",
"toastForceSync": "已向节点 {name} 下发强制同步指令",
"toastRestart": "已向节点 {name} 下发 OpenResty 重启指令",
"toastUpgrade": "已向节点 {name} 下发{channel}升级指令",
"toastDeleted": "节点已删除"
},
"relay": {
"upgrade": "升级 Relay",
"runStatus": "中继运行状态",
"runStatusDesc": "frps 在线情况与负载摘要",
"health": "中继健康",
"connections": "活动连接 / 代理数",
"portsTitle": "网络端口",
"portsDesc": "frps 控制面与 HTTP 虚拟主机配置",
"bindPort": "绑定控制端口",
"vhostPort": "VHost HTTP 端口",
"agentAddr": "Agent 接入地址",
"relayVersion": "Relay 版本",
"frpsVersion": "frps 核心版本",
"webuiTitle": "FRPS WebUI",
"webuiDesc": "控制 frps 内置 Web 管理界面是否启用及其监听端口",
"enableWebui": "启用 Web 管理界面",
"enableWebuiHint": "开启后,节点将启动 frps 的内置管理服务。",
"webuiPort": "Web 管理界面端口",
"webuiPortPlaceholder": "例如: 17500",
"actualPort": "当前实际监听端口:{port} (修改后在下次节点心跳同步时生效,默认为绑定端口 + 500)。",
"openWebui": "打开 FRPS WebUI",
"copiedLink": "链接已复制到剪贴板",
"copyLink": "复制链接",
"webuiDisabled": "WebUI 已禁用或未配置绑定端口。",
"metadata": "节点元数据",
"createdAt": "创建时间",
"updatedAt": "更新时间",
"kpiFrps": "frps 核心",
"connectionHint": "中继承载活动连接数",
"invalidPort": "端口号必须在 1 ~ 65535 范围内",
"portSaveFailed": "更新端口失败",
"toastPortSaved": "FRPS WebUI 端口配置已更新",
"toastUpdated": "中继节点已更新",
"toastWebui": "FRPS WebUI 设置已更新",
"toastForceSync": "已向中继节点 {name} 下发强制同步指令",
"toastUpgrade": "已向中继节点 {name} 下发{channel}升级指令",
"toastDeleted": "中继节点已删除",
"deleteTitle": "确认删除中继节点",
"deleteDesc": "确认删除中继节点「{name}」吗?删除后该节点需要重新创建并重新接入。"
},
"tunnel": {
"upgrade": "升级 openflared",
"runStatus": "隧道运行状态",
"runStatusDesc": "openflared 连接与在线情况",
"flaredStatus": "flared 状态",
"autoUpdate": "自动更新",
"syncTitle": "配置同步",
"syncDesc": "隧道客户端配置追平状态",
"currentVersion": "当前配置版本",
"latestApply": "最近应用",
"latestApplyAt": "最近应用时间",
"fileCount": "同步文件数",
"fileCountValue": "{count} 个",
"upgradeStatus": "升级状态",
"credentials": "接入凭证",
"credentialsDesc": "隧道客户端接入所需 Token",
"tunnelToken": "Tunnel Token",
"createdAt": "创建时间",
"updatedAt": "更新时间",
"kpiOpenflared": "openflared",
"connectionHint": "隧道并发连接数",
"toastUpdated": "隧道节点已更新",
"toastForceSync": "已向隧道节点 {name} 下发强制同步指令",
"toastUpgrade": "已向隧道节点 {name} 下发{channel}升级指令",
"toastDeleted": "隧道节点已删除",
"deleteTitle": "确认删除隧道节点",
"deleteDesc": "确认删除隧道节点「{name}」吗?删除后该节点需要重新创建并重新接入。"
},
"obs": {
"hostname": "主机名",
"os": "操作系统",
"kernelArch": "内核 / 架构",
"uptime": "在线时长",
"cpu": "CPU",
"cpuCores": "{count} 核",
"totalMemory": "总内存",
"totalStorage": "总存储",
"reportedAt": "上报时间",
"eventsTitle": "健康事件时间线",
"eventsDesc": "保留活动与已恢复事件,帮助判断运行状态。",
"cleanupLogs": "清理日志",
"filterAll": "全部事件",
"filterActive": "活动中",
"filterResolved": "已恢复",
"filterEmpty": "当前筛选下没有健康事件。",
"noMessage": "暂无详细消息",
"firstTriggered": "首次触发:",
"lastTriggered": "最近触发:",
"resolvedAt": "恢复时间:",
"noEvents": "节点当前还没有上报健康事件记录。",
"cleaned": "已清理 {count} 条健康事件日志",
"nothingToClean": "当前没有可清理的健康事件日志",
"loading": "加载运行观测数据中...",
"diag": "运行诊断",
"activeIssues": "{count} 个活动异常",
"stable": "运行稳定",
"noActiveEvents": "当前没有活动中的健康事件",
"systemCore": "系统核心",
"uptimeFromProfile": "来自节点系统画像上报",
"profileTitle": "系统画像",
"profileDesc": "节点上报的主机与硬件信息",
"noProfile": "节点已接入,但尚未上报完整系统画像。",
"noProfileLong": "节点已经接入,但还没有上报完整系统画像。",
"snapshotTitle": "实时资源快照",
"snapshotDesc": "最近一次 metrics 上报",
"realtimeResources": "实时资源",
"memory": "内存",
"storage": "存储",
"connections": "连接数",
"snapshotAgo": "快照 {time}",
"noSnapshot": "节点已接入,但尚未上报资源快照。",
"noSnapshotLong": "节点已经接入,但还没有上报资源快照。",
"cleanupTitle": "清理健康事件日志",
"cleanupDesc": "该操作会删除此节点在控制端记录的所有健康诊断事件历史,不会影响后续新事件上报。",
"cleaning": "清理中...",
"confirmCleanup": "确认清理",
"windowRequests": "查询窗口请求",
"windowVisitorsHint": "查询窗口独立访客 {visitors} · 错误率 {rate}%",
"noWindowSummary": "当前没有可展示的请求窗口摘要",
"capacityPressure": "容量压力",
"needsAttention": "需要关注",
"normalRange": "正常范围",
"cpuStorage": "CPU {cpu} · 存储 {storage}",
"noResourceSnapshot": "当前没有资源快照",
"sourceSignal": "来源信号",
"requestTimes": "{count} 次请求",
"noSourceDist": "当前没有来源分布数据",
"systemInfo": "系统信息",
"networkTraffic": "网络流量",
"noActiveIssue": "无活动异常",
"openrestyConn": "OpenResty 连接",
"currentConn": "当前连接:",
"throughputHint": "业务吞吐请看访问日志趋势(已提供/接收数据)",
"windowVisitors": "查询窗口独立访客",
"reqQps": "请求 {requests} · 估算 QPS {qps}",
"noTrafficSummary": "暂无窗口流量摘要",
"windowErrors": "查询窗口错误",
"errorRate": "错误率 {rate}%",
"noErrorSummary": "暂无错误率摘要",
"noNetworkSnapshot": "节点已经接入,但还没有上报网络流量相关快照。",
"trafficTrendDesc": "按小时聚合该节点的请求量和错误量。",
"capacityTrendDesc": "观察该节点 CPU 与内存使用率在 24 小时内的变化。",
"structureTitle": "请求结构分布",
"structureDesc": "聚合最近 24 小时窗口上报,帮助判断错误集中在哪些状态码、流量集中在哪些域名。",
"mainStatus": "主状态码",
"times": "{count} 次",
"noStatusDist": "暂无状态码分布",
"topDomain": "Top Domain",
"noDomainDist": "暂无域名分布",
"resolvedEvents": "已恢复事件",
"resolvedHint": "最近 24 小时已恢复健康事件",
"statusDist": "状态码分布",
"distEmpty": "暂无分布数据",
"unknownLabel": "未知"
},
"networkTrend": {
"title": "24 小时网络趋势",
"description": "按小时展示已提供/接收数据(访问日志);摘要为近 24 小时总量。",
"summaryHint": "近 24 小时",
"received": "接收数据",
"provided": "已提供数据"
},
"diskIo": {
"title": "24 小时磁盘 IO 趋势",
"description": "按小时展示磁盘读写速率(B/s),辅助判断日志放大、缓存抖动或磁盘压力。",
"summaryHint": "近 24 小时 · 平均速率",
"read": "磁盘读",
"write": "磁盘写"
}
},
"performance": {
"title": "性能",
"description": "集中管理 OpenResty 全局性能参数,保存后进入统一配置发布链路。",
"preview": "查看配置预览",
"saved": "性能参数已保存",
"saveFailed": "保存失败",
"loadingAuth": "加载权限信息...",
"forbiddenTitle": "权限不足",
"forbiddenDesc": "只有管理员可以访问性能设置。",
"loading": "加载性能参数...",
"runtimeTitle": "连接与事件",
"runtimeDesc": "worker、超时、请求体大小等运行参数",
"proxyTitle": "反代缓冲与超时",
"proxyDesc": "upstream 连接、缓冲与 WebSocket/HTTP3 开关",
"gzipTitle": "压缩",
"cacheTitle": "缓存",
"cacheDesc": "单节点反代缓存优化场景",
"errors": {
"workerProcesses": "worker_processes 必须为 auto 或大于 0 的整数",
"timeouts": "超时与连接参数必须为大于 0 的整数",
"statusCode": "空白页面返回状态码必须在 100 到 999 之间",
"bodySize": "client_max_body_size 格式不合法",
"headerBuffers": "large_client_header_buffers 格式必须类似 \"4 16k\"",
"proxyTimeouts": "代理超时参数必须为大于 0 的整数秒",
"proxyBuffers": "proxy_buffers 格式必须类似 \"16 16k\"",
"bufferSize": "缓冲大小必须为整数或带 k/m/g 单位的值",
"gzipMinLength": "gzip_min_length 必须为大于 0 的整数",
"gzipLevel": "gzip_comp_level 必须在 1 到 9 之间",
"cachePath": "启用缓存时必须填写 proxy_cache_path 目录",
"cacheFormat": "缓存 levels、inactive、max_size 或 lock_timeout 格式不合法",
"cacheKey": "启用缓存时必须填写缓存 Key 模板"
}
},
"applyLogs": {
"title": "应用日志",
"description": "查看节点应用配置的成功、警告和失败记录,支持按 node_id 过滤。",
"refresh": "刷新",
"clear": "清空日志",
"backToNodes": "返回节点",
"totalRecords": "总记录数",
"currentPage": "当前页",
"totalPages": "总页数",
"pageNodes": "当前页节点数",
"nodeId": "Node ID",
"nodePlaceholder": "输入 node_id 过滤应用日志",
"pageSize": "每页条数",
"pageSizeOption": "{count} 条",
"filter": "筛选",
"reset": "重置筛选",
"emptyTitle": "暂无应用日志",
"emptyDesc": "当前筛选条件下没有可展示的应用记录。",
"colNodeId": "Node ID",
"colVersion": "版本",
"colResult": "结果",
"colChecksum": "Checksum",
"colTime": "时间",
"colMessage": "消息",
"colActions": "操作",
"detail": "详情",
"pageInfo": "第 {current} / {total} 页,共 {count} 条记录。",
"prev": "上一页",
"next": "下一页",
"loadFailed": "加载失败",
"cleared": "应用日志已清空",
"clearedDesc": "共删除 {count} 条记录",
"clearFailed": "清空应用日志失败",
"unknownError": "未知错误",
"clearTitle": "确认清空应用日志?",
"clearDesc": "该操作将删除全部 {count} 条应用日志记录,且不可撤销。清空后节点仍会照常上报新的应用结果。",
"clearing": "清空中...",
"confirmClear": "确认清空",
"success": "成功",
"warning": "警告",
"failed": "失败",
"sheetTitle": "应用日志详情",
"sheetDesc": "查看单条应用日志的完整结果与校验信息。",
"versionBadge": "版本: {version}",
"createdAt": "创建时间",
"targetChecksum": "目标 Checksum",
"mainChecksum": "主配置摘要",
"routeChecksum": "路由配置摘要",
"supportFiles": "支持文件数",
"message": "消息",
"close": "关闭"
},
"configVersions": {
"title": "配置版本",
"description": "查看历史快照、预览待发布配置差异,并在需要时重新激活旧版本。",
"refresh": "刷新",
"cleanupOld": "清理旧版本",
"viewDiff": "查看差异",
"forcePublish": "强制发布",
"previewPublish": "预览并发布",
"emptyTitle": "暂无历史版本",
"emptyDesc": "当前还没有可查看的发布记录,请先触发一次配置发布。",
"colVersion": "版本号",
"colStatus": "状态",
"colAuthor": "创建人",
"colChecksum": "Checksum",
"colCreatedAt": "创建时间",
"colActions": "操作",
"active": "当前激活",
"history": "历史版本",
"system": "系统",
"snapshot": "快照",
"activate": "激活",
"loadFailed": "加载失败",
"previewLoadFailed": "加载预览失败",
"diffLoadFailed": "加载差异失败",
"publishSuccess": "发布成功",
"publishSuccessDesc": "版本 {version}",
"publishFailed": "发布失败",
"activateSuccess": "激活成功",
"activateSuccessDesc": "版本 {version}",
"activateFailed": "激活失败",
"cleanupDone": "清理完成",
"cleanupDoneDesc": "已删除 {count} 个历史快照",
"cleanupFailed": "清理失败",
"unknownError": "未知错误",
"confirmPublishTitle": "确认发布配置",
"confirmPublishDesc": "将把当前待发布配置生成新版本并设为激活版本,节点将随后拉取更新。",
"confirmPublish": "确认发布",
"confirmForceTitle": "确认强制发布",
"confirmForceDesc": "将忽略配置变化检查并立即生成一个新版本,请确认你确实需要重新发布。",
"confirmActivateTitle": "确认激活版本",
"confirmActivateDesc": "确认将版本 {version} 设为当前激活版本吗?",
"confirmActivate": "确认激活",
"previewTitle": "发布预览",
"previewDesc": "查看待发布配置的渲染结果与支持文件。",
"loadingPreview": "正在加载预览...",
"routeCount": "规则 {count} 条",
"websiteCount": "网站 {count} 个",
"mainConfig": "主配置",
"routeConfig": "路由配置",
"supportFiles": "支持文件 ({count})",
"noSupportFiles": "当前发布不需要额外支持文件。",
"noChanges": "当前规则与已激活版本一致,无法重复发布。",
"close": "关闭",
"publishing": "发布中...",
"diffTitle": "配置差异",
"diffDesc": "对比当前待发布配置与已激活版本之间的差异。",
"loadingDiff": "正在加载差异数据...",
"activeVersion": "激活版本",
"none": "无",
"addedDomains": "新增域名",
"removedDomains": "删除域名",
"modifiedDomains": "修改域名",
"itemCount": "{count} 项",
"noChange": "无变更",
"emptyValue": "空",
"mainChanged": "主配置 已变化",
"mainUnchanged": "主配置 无变化",
"wafChanged": "WAF 已变化",
"wafUnchanged": "WAF 无变化",
"websiteDelta": "网站数 {from} → {to}",
"optionKey": "参数",
"activeValue": "激活值",
"pendingValue": "待发布值",
"noOptionChanges": "当前无 OpenResty 参数变化。",
"snapshotTitle": "版本快照",
"snapshotVersion": "版本 {version}",
"snapshotDesc": "查看历史配置版本的完整快照内容。",
"loadingSnapshot": "正在加载快照...",
"createdBy": "创建人",
"createdAt": "创建时间",
"snapshotLoadFailed": "加载版本快照失败",
"cleanupTitle": "清理历史快照",
"cleanupDesc": "删除旧的历史快照配置,系统将始终保护当前已激活的版本不被删除。",
"keepCount": "保留最近快照个数",
"keepHint": "默认为 10 个,最少需保留 3 个。",
"keepMin": "最少保留 3 个历史快照",
"cleaning": "清理中...",
"confirmCleanup": "确认清理"
}
}