Files
OpenFlare/frontend/messages/fragments/security.zh-CN.json
T
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

1081 lines
44 KiB
JSON
Raw 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.
{
"waf": {
"title": "WAF",
"createRule": "新建规则",
"ruleGroups": "规则组",
"ruleGroupsDesc": "使用可视化流程编排 WAF 防护规则;全局规则始终应用到所有网站。",
"refresh": "刷新",
"loading": "加载 WAF 规则组中...",
"empty": "暂无规则组,系统通常会自动创建全局规则组。",
"created": "规则已创建",
"groupDeleted": "规则组已删除",
"deleteTitle": "确认删除规则组",
"deleteDesc": "确认删除规则组「{name}」吗?删除后无法恢复。",
"deleting": "删除中...",
"confirmDelete": "确认删除",
"operationFailed": "操作失败",
"autoConfigMustBeObject": "自动配置必须是 JSON 对象。",
"autoConfigInvalid": "自动配置格式错误",
"saveFailed": "保存失败",
"enabled": "已启用",
"disabled": "已停用",
"enable": "启用",
"disable": "停用",
"global": "全局",
"custom": "自定义",
"allSites": "全部网站",
"siteCount": "{count} 个网站",
"columns": {
"name": "名称",
"type": "类型",
"status": "状态",
"nodeCount": "节点数",
"scope": "应用范围",
"updatedAt": "更新时间",
"actions": "操作"
},
"actions": {
"compose": "编排",
"delete": "删除"
},
"createDialog": {
"title": "新建 WAF 规则",
"description": "创建后将进入编排页面,通过处理单元配置规则执行流程。",
"name": "规则名称",
"namePlaceholder": "例如:入口防护",
"submit": "创建并编排"
},
"editor": {
"missingId": "缺少有效的规则 ID。",
"loadFailed": "规则加载失败,请重试。",
"reload": "重新加载",
"back": "返回",
"graphValid": "图校验通过",
"issueCount": "{count} 个问题",
"unsaved": "未保存",
"enableRule": "启用规则",
"format": "格式化",
"formatTitle": "自动整理节点与连线布局",
"saving": "保存中...",
"save": "保存",
"saved": "规则图已保存",
"conflict": "规则已在其他页面更新,请重新加载",
"saveCheckNodes": "保存失败,请检查标记的节点和连线",
"ruleEnabled": "规则已启用",
"ruleDisabled": "规则已停用",
"leaveTitle": "未保存的更改",
"leaveDesc": "存在未保存的更改,确定离开吗?",
"leaveConfirm": "确定离开",
"deleteNode": "删除节点",
"systemNodeLocked": "系统节点不可删除",
"deleteEdge": "删除连线",
"propsTitle": "节点属性",
"propsDesc": "配置当前处理单元",
"systemNodeNoConfig": "系统节点无需配置。",
"displayName": "显示名称",
"ips": "IP 地址",
"cidrs": "CIDR 网段",
"ipGroups": "IP 组",
"countries": "国家代码",
"countriesDesc": "共 {count} 个国家/地区,显示国家名与 ISO 代码",
"regions": "地区代码",
"regionsDesc": "共 {count} 个一级行政区,输入名称或代码搜索",
"uaCheck": "UA 检查",
"enableUaCheck": "开启 UA 检查",
"enableUaCheckTip": "开启后如果请求头不携带 UA 将返回 False",
"block": "屏蔽",
"blockTip": "命中返回 false,优先级高于匹配",
"blockBots": "屏蔽常见爬虫 UA",
"blockBotsTip": "浏览器或操作系统分类为 Bot(含 bot / spider / crawler / slurp 等特征,如 Googlebot)",
"blockAbnormal": "屏蔽非正常 UA",
"blockAbnormalTip": "浏览器分类为 Other 或 Unknown(不含搜索引擎等爬虫 Bot,爬虫请用上方开关)",
"blockCustom": "屏蔽自定义 UA",
"blockCustomTip": "原始 User-Agent 命中任一条正则时返回 false(Lua 模式语法)",
"customUaPatterns": "自定义 UA 正则",
"customUaPatternsTip": "每行一条 Lua 模式正则,命中任一条即 false;最多 32 条",
"uaMatch": "UA 匹配",
"matchMode": "匹配模式",
"matchModeTip": "浏览器与操作系统两侧都有选择时生效",
"matchOr": "或(OR)",
"matchAnd": "且(AND)",
"browsers": "浏览器",
"os": "操作系统",
"security": "安全防护",
"securityTip": "命中任意已启用规则返回 False",
"basicProtection": "基础防护",
"help": "说明",
"oneValuePerLine": "每行一个值",
"selectedCount": "已选择 {count} 项",
"pleaseSelect": "请选择",
"createLabel": "新建{label}",
"searchNameOrCode": "搜索名称或代码",
"addCode": "添加代码",
"searchOptions": "输入名称或代码搜索 {count} 个选项",
"noMatchingOptions": "没有匹配的选项",
"algorithm": "算法",
"algorithmFast": "快速",
"algorithmSlow": "稳健",
"difficulty": "难度",
"sessionTtl": "会话 TTL(秒)",
"challengeTtl": "挑战 TTL(秒)",
"statusCode": "HTTP 状态码",
"responseBody": "HTML 响应体",
"bytes": "字节",
"securityRules": {
"path_traversal": {
"label": "路径穿越防护",
"tip": "检测 Path / Query / Body 中的 ../ 与编码变种"
},
"file_inclusion": {
"label": "文件包含(LFI/RFI)",
"tip": "检测 Path / Query / Body 中的 php://、file://、/etc/passwd 等"
},
"sql_injection": {
"label": "SQL 注入",
"tip": "检测 Query / Body / Header / Cookie 中的 SQL 注入特征"
},
"command_injection": {
"label": "命令注入",
"tip": "检测 Query / Body / Header 中的 OS 命令注入特征"
},
"xss": {
"label": "XSS",
"tip": "检测 Query / Body / Header 中的反射型 XSS 特征"
},
"ssrf": {
"label": "SSRF",
"tip": "检测 Query / Body 中的内网地址与危险协议"
},
"malicious_upload": {
"label": "恶意文件上传",
"tip": "检测 Multipart 文件名与危险扩展名"
},
"xxe": {
"label": "XXE",
"tip": "检测 XML Body 中的外部实体特征"
},
"crlf_injection": {
"label": "CRLF 注入",
"tip": "检测 Header / Query / Body 中的换行注入"
}
}
}
},
"ipGroups": {
"title": "IP 组",
"create": "新建 IP 组",
"listTitle": "IP 组列表",
"listDesc": "维护可被 WAF IP 黑白名单引用的手动、自动与订阅 IP 集合。",
"refresh": "刷新",
"loading": "加载 IP 组中...",
"empty": "暂无 IP 组,请先创建一个。",
"updated": "IP 组已更新",
"created": "IP 组已创建",
"deleted": "IP 组已删除",
"synced": "同步完成",
"ipRemoved": "IP 已移除",
"testHit": "规则测试完成,命中 {count} 个 IP",
"testMiss": "规则测试完成,当前未命中任何 IP",
"deleteTitle": "确认删除 IP 组",
"deleteDesc": "确认删除 IP 组「{name}」吗?删除后无法恢复。",
"deleting": "删除中...",
"confirmDelete": "确认删除",
"operationFailed": "操作失败",
"types": {
"manual": "手动",
"automatic": "自动",
"subscription": "订阅"
},
"enabled": "启用",
"disabled": "停用",
"noSyncRecord": "尚无同步记录",
"columns": {
"name": "名称",
"type": "类型",
"status": "状态",
"ipCount": "IP 数",
"refCount": "引用次数",
"syncStatus": "同步状态",
"updatedAt": "更新时间",
"actions": "操作"
},
"actions": {
"view": "查看",
"edit": "编辑",
"test": "测试规则",
"runNow": "立即执行",
"syncNow": "立即同步",
"delete": "删除"
},
"ban": {
"permanent": "永久",
"expired": "已过期",
"minutesLater": "{count} 分钟后",
"hoursLater": "{count} 小时后"
},
"presets": {
"scan404": "单 IP 404 高频扫描",
"directAccess": "单 IP 直连访问异常"
},
"dialog": {
"editTitle": "编辑 {name}",
"createTitle": "新建 IP 组",
"description": "维护可被 WAF IP 黑白名单引用的手动、自动与订阅 IP 集合。",
"name": "IP 组名称",
"nameRequired": "请输入 IP 组名称",
"type": "类型",
"enable": "启用 IP 组",
"enableDesc": "关闭后保留配置,但发布时不会展开到 WAF 运行时名单。",
"subscriptionUrl": "订阅 URL",
"subscriptionUrlRequired": "订阅类型需要填写订阅 URL",
"subscriptionFormat": "订阅格式",
"formatText": "文本列表",
"syncInterval": "同步间隔(分钟)",
"syncIntervalDesc": "最小 1 分钟,默认 1440 分钟。",
"mappingRule": "JSON 映射规则",
"mappingPlaceholder": "留空表示根数组",
"autoIntervalDesc": "定时从请求日志挖掘恶意 IP 的周期。最小 1 分钟,默认 1440 分钟。",
"presetRules": "预设规则",
"autoConfigJson": "自动配置 JSON",
"ipList": "IP / IP 段",
"ipListSubscriptionHint": "订阅同步会覆盖此列表;也可以先手动保存当前内容。",
"ipListManualHint": "支持单个 IP 或 CIDR,每行一个。",
"saving": "保存中...",
"save": "保存 IP 组"
},
"testDialog": {
"title": "自动规则测试结果",
"description": "基于当前自动配置 JSON 对请求日志进行回看测试。",
"testing": "测试中...",
"summary": "回看 {lookback} · 规则 {rules} 条 · 命中 {matched} 个 IP",
"testedAt": "测试时间:{time}",
"noMatch": "当前没有匹配到任何 IP。",
"empty": "暂无测试结果。",
"close": "关闭"
},
"viewDialog": {
"titleNamed": "查看 {name}",
"title": "查看 IP 组",
"summary": "{type} · 共 {count} 条 IP",
"fallbackDesc": "查看当前 IP 组中的 IP 列表,并可移除不需要的条目。",
"loading": "加载 IP 列表...",
"noGroup": "未选择 IP 组。",
"emptyAuto": "该自动规则暂未抓取任何 IP,可点击「立即执行」手动触发抓取。",
"empty": "当前 IP 组暂无 IP 条目。",
"subscriptionHint": "订阅类型在下次同步时可能重新拉取已删除的 IP。",
"ipAddress": "IP 地址",
"capturedAt": "抓取时间",
"banRemaining": "封禁剩余",
"actions": "操作",
"deleteIp": "删除 {ip}",
"close": "关闭",
"deleteTitle": "确认删除 IP",
"deleteDesc": "确认从 IP 组「{name}」中移除 {ip} 吗?",
"deleting": "删除中...",
"confirmDelete": "确认删除"
},
"autoConfigMustBeObject": "自动配置必须是 JSON 对象。"
},
"rateLimits": {
"title": "限流",
"subtitle": "查看边缘请求压力,并配置站点默认并发与带宽限流。",
"loadingAuth": "加载权限信息...",
"forbiddenTitle": "权限不足",
"forbiddenDesc": "只有管理员可以访问限流设置。",
"tabAnalysis": "分析",
"tabConfig": "配置",
"loadingPage": "加载限流页面...",
"loadingPressure": "加载请求压力...",
"loadFailed": "加载失败",
"emptyTitle": "暂无数据",
"emptyDesc": "当前时间范围内没有可用的访问日志。",
"topHost": "平均 RPS 最高域名",
"topIp": "平均 RPS 最高 IP",
"avgRate": "{range}平均请求速率",
"range": {
"h24": "24 小时",
"h72": "3 天"
},
"chart": {
"title": "请求压力",
"empty": "暂无请求压力数据",
"requestRate": "请求速率",
"uniqueVisitors": "独立访客",
"visitorsPerBucket": "访客 / 桶"
},
"config": {
"saved": "限流参数已保存",
"saveFailed": "保存失败",
"loading": "加载限流参数...",
"preview": "查看配置预览",
"title": "全局默认限流",
"description": "0 或空表示默认关闭;站点未单独配置时继承此处设置。修改后需在版本发布中生效。",
"save": "保存",
"connPerServer": "默认并发限制(每站点)",
"connPerServerHint": "站点最大并发连接数默认值",
"connPerIp": "默认单 IP 并发",
"connPerIpHint": "单个 IP 最大并发连接数默认值",
"limitRate": "默认限速",
"limitRateHint": "单请求带宽默认值,例如 512k 或 1m",
"reqPerIp": "默认单 IP 请求频率限制",
"reqPerIpHint": "单个 IP 请求频率默认值,例如 10r/s 或 100r/m,留空关闭",
"invalidConn": "并发限制请输入非负整数,或留空表示关闭",
"invalidRate": "限速格式不合法,请使用 512k、1m、纯数字,或留空关闭",
"invalidReq": "请求频率限制格式不合法,请使用类似 10r/s、100r/m,或留空关闭"
}
},
"pages": {
"title": "Pages",
"subtitle": "边缘静态站点托管,上传静态资源部署包并在代理规则中选择 Pages 上游。",
"refresh": "刷新",
"create": "新建项目",
"loadFailed": "加载失败",
"emptyTitle": "还没有 Pages 项目",
"emptyDesc": "先创建一个项目,再上传静态资源部署包。",
"enabled": "已启用",
"disabled": "已停用",
"spaFallback": "SPA fallback",
"strict404": "严格 404",
"currentActive": "当前激活",
"none": "暂无",
"activatedAt": "激活时间:",
"notActivated": "未激活",
"viewDetail": "查看详情",
"saveFailed": "保存失败",
"updated": "项目已更新",
"created": "项目已创建",
"deleted": "项目已删除",
"deleteFailed": "删除失败",
"editTitle": "编辑 Pages 项目",
"createTitle": "新建 Pages 项目",
"editorDesc": "配置静态站点托管参数,上传部署包后在代理规则中选择 Pages 上游。",
"settingsDesc": "配置静态站点托管参数,保存后会同步到项目详情与代理引用。",
"reset": "重置",
"saving": "保存中...",
"saveChanges": "保存修改",
"createProject": "创建项目",
"form": {
"name": "项目名称",
"nameRequired": "请输入项目名称",
"slug": "项目标识",
"slugPlaceholder": "留空自动生成",
"entryFile": "入口文件",
"entryRequired": "请输入入口文件",
"rootDir": "根目录",
"optional": "可选",
"spaFallback": "SPA fallback",
"spaFallbackDesc": "未命中静态文件时回退到指定路径",
"fallbackPath": "回退路径",
"fallbackPathPrefix": "回退路径必须以 / 开头",
"apiProxy": "API 反向代理",
"apiProxyDesc": "为静态站点附加 API 反代规则",
"matchPath": "匹配路径",
"matchPathPrefix": "匹配路径必须以 / 开头",
"backend": "后端地址",
"backendPrefix": "后端地址必须以 http:// 或 https:// 开头",
"rewrite": "重写规则"
},
"detail": {
"invalidId": "缺少有效的 Pages 项目 ID。",
"loading": "加载项目详情...",
"loadFailed": "项目详情加载失败",
"back": "返回列表",
"notFound": "Pages 项目不存在或已被删除。",
"deploymentCount": "{count} 个部署",
"tabDeployments": "部署",
"tabSettings": "设置"
},
"danger": {
"title": "危险区域",
"deleteProject": "删除项目",
"deleteHint": "将永久删除 {name}({slug})及其全部部署。",
"confirmTitle": "删除 Pages 项目",
"confirmDesc": "确认删除项目 {name} 吗?此操作不可恢复。",
"confirm": "确认删除"
},
"upload": {
"selectFile": "请选择部署包",
"success": "部署包上传成功",
"failed": "上传失败",
"unsupported": "仅支持 zip、tar.gz、tar.xz、tar.bz2、tar、7z 格式的部署包",
"title": "上传部署包",
"description": "上传不可变的静态资源压缩包,完成后可在部署历史中激活。",
"localPackage": "本地部署包",
"dropHint": "拖拽部署包到此处,或点击选择文件",
"selected": "已选择 {name}({size})",
"chooseArchive": "请选择一个受支持的压缩包。",
"entry": "部署入口",
"entryHint": "入口来自项目设置;部署包上传不会覆盖该配置。",
"processing": "服务端处理中",
"progress": "上传进度",
"pleaseWait": "请稍候",
"uploading": "上传中...",
"submit": "上传并创建部署"
},
"files": {
"loadFailed": "文件清单加载失败",
"empty": "暂无文件记录",
"path": "路径",
"size": "大小"
},
"history": {
"source": {
"manual_upload": "本地上传",
"manual_url": "URL 导入"
},
"trigger": {
"manual_upload": "手动上传",
"manual_url": "手动导入",
"manual_sync": "手动同步",
"scheduled_auto_update": "定时更新"
},
"fileMeta": "{checksum} · {count} 个文件 · ",
"createdAt": "创建于 {time}",
"activatedAt": " · 激活于 {time}",
"collapseFiles": "收起文件清单",
"expandFiles": "展开文件清单",
"deploymentNumber": "部署 #{number}",
"activate": "激活",
"delete": "删除",
"activated": "历史部署已激活;自动更新(如已开启)已关闭",
"activateFailed": "激活失败",
"deleted": "部署已删除",
"deleteFailed": "删除失败",
"activateTitle": "激活历史部署",
"deleteTitle": "删除部署",
"activateDesc": "激活其它历史部署会终止当前来源任务;若已开启自动更新,将同时关闭自动更新。",
"deleteDesc": "确认删除部署 #{number} 吗?此操作不可恢复。",
"confirm": "确认",
"loading": "加载部署历史...",
"loadFailed": "部署历史加载失败",
"productionHint": "当前对外生效的生产部署;切换激活状态后会立即生效。",
"manualUpload": "手动上传",
"emptyProductionTitle": "暂无 Production 部署",
"emptyProductionDesc": "上传本地部署包,或配置 Remote URL / GitHub Release 来源后同步发布。",
"historyHint": "部署记录不可变,来源信息是创建部署时的安全快照。可从历史部署激活或删除。",
"emptyTitle": "暂无部署",
"emptyDesc": "上传本地部署包,或配置 Remote URL / GitHub Release 来源后同步发布。"
},
"source": {
"status": {
"idle": "空闲",
"checking": "检查中",
"update_available": "有可用更新",
"syncing": "同步中",
"failed": "最近同步失败",
"attention": "需要确认"
},
"check": "检查",
"syncPublish": "同步并发布",
"missingExecutionId": "缺少任务执行 ID",
"actionDone": "部署源{action}完成",
"actionFailed": "部署源{action}失败",
"checkQueued": "检查任务已提交",
"checkQueueFailed": "检查任务提交失败",
"syncQueued": "同步任务已提交",
"syncQueueFailed": "同步任务提交失败",
"title": "部署源",
"loadingDesc": "加载来源配置...",
"independentDesc": "来源配置与部署历史相互独立。",
"loadFailed": "部署源加载失败",
"configDesc": "配置远端来源并同步发布;发布结果见部署历史。",
"manualBadge": "手动部署",
"localPackage": "本地部署包",
"noRemote": "当前没有持久化远端来源。上传部署包后,再从部署历史显式激活。",
"submitFailed": "来源任务提交失败",
"statusFailed": "任务状态读取失败",
"waitStopped": "自动等待已停止,任务可能仍在后台运行。",
"refreshStatus": "刷新任务状态",
"configure": "配置",
"checkUpdate": "检查更新",
"refresh": "刷新",
"confirmTitle": "确认发布当前 GitHub revision",
"confirmLead": "这将发布卡片当前显示的精确 revision:",
"revisionUnavailable": "当前 revision 已不可用,请刷新后重试",
"confirmPublish": "确认并发布",
"updated": "部署源已更新",
"updateFailed": "部署源更新失败",
"switchedManual": "已切换回手动部署",
"switchFailed": "切换失败",
"urlRequired": "请输入 Remote URL",
"urlInvalid": "请输入有效的 HTTP(S) URL",
"githubUrlInvalid": "请输入 https://github.com/'{owner}'/'{repo}' 格式的公开仓库地址",
"tagInvalid": "Release tag 须为有效 Git ref(1–255 字节,可使用 /、#、&、=)",
"assetInvalid": "Asset 文件名须为 1–255 字节,且不能是路径或包含控制、换行、双向文本字符",
"intervalInvalid": "检查间隔须为 5–1440 分钟的整数",
"useManual": "使用手动部署",
"saveRemote": "保存 Remote 来源",
"saveGithub": "保存 GitHub 来源",
"settingsTitle": "部署源设置",
"settingsDesc": "选择部署来源。",
"mode": "来源类型",
"manual": "手动部署",
"manualHint": "保留现有部署与当前生产版本,后续通过“上传部署包”创建新部署。",
"urlHint": "填写可直接下载的部署包 HTTP(S) 地址。",
"allowInsecure": "允许不安全的连接",
"allowInsecureDesc": "默认允许公网与内网地址;开启后跳过 TLS 证书校验,适用于自签名或私有 CA。",
"switchManualTitle": "切换回手动部署",
"switchManualDesc": "当前来源配置将被删除,但已有部署与当前生产版本会保留。",
"githubUrl": "GitHub 仓库 URL",
"githubUrlHint": "仅支持公开 github.com 仓库。",
"releaseSelect": "Release 选择",
"latestRelease": "最新 Release",
"pinnedTag": "固定 Tag",
"pinnedTagHint": "精确检查并同步指定 tag。",
"autoUpdate": "自动更新",
"autoUpdateHint": "检查到新的 Release 后自动同步并发布。",
"checkInterval": "检查间隔(分钟)",
"checkIntervalHint": "可设置为 5–1440 分钟。",
"assetName": "Release Asset 文件名",
"noRecord": "尚无记录",
"address": "地址",
"verifyCert": "校验证书",
"lastSync": "最近同步",
"neverSynced": "尚未同步",
"applied": "已应用",
"latestReleaseLabel": "最新 Release",
"pinnedTagLabel": "固定 Tag · {tag}",
"tagMissing": "未提供",
"assetChangedTitle": "Release Asset 发生变化,需要显式确认",
"assetChangedDesc": "当前远端 revision 与已发布内容不一致。请核对版本和资源后,再确认发布这一精确 revision。",
"autoUpdateOn": "已开启",
"autoUpdateOff": "已关闭",
"intervalMinutes": "{count} 分钟",
"nextCheck": "下次检查",
"waitingSchedule": "等待调度",
"lastCheck": "最近检查",
"neverChecked": "尚未检查",
"remote": "远端"
}
},
"accessLogs": {
"title": "访问日志",
"subtitle": "查看访问概览、IP 明细与请求日志。",
"refresh": "刷新",
"cleanup": "清理日志",
"tabOverview": "概览",
"tabIps": "IP 明细",
"tabList": "日志明细",
"cleaned": "已清理 {count} 条日志",
"cleanupFailed": "清理失败",
"loadingTitle": "加载访问日志",
"loadingDesc": "正在准备页面...",
"loadFailed": "加载失败",
"range": {
"h24": "24 小时",
"h168": "7 天",
"h360": "15 天",
"h720": "30 天"
},
"rangeHint": {
"hours24": "近 24 小时",
"days": "近 {count} 天",
"hours": "近 {count} 小时"
},
"sort": {
"logged_at:desc": "时间从新到旧",
"logged_at:asc": "时间从旧到新",
"status_code:desc": "状态码从高到低",
"status_code:asc": "状态码从低到高",
"remote_addr:asc": "IP 正序",
"remote_addr:desc": "IP 倒序",
"total_requests:desc": "请求数从高到低",
"total_requests:asc": "请求数从低到高",
"request_length:desc": "入站从高到低",
"request_length:asc": "入站从低到高",
"bytes_sent:desc": "出站从高到低",
"bytes_sent:asc": "出站从低到高",
"success_ratio:desc": "2xx 比例从高到低",
"success_ratio:asc": "2xx 比例从低到高",
"last_seen_at:desc": "最后访问从新到旧",
"last_seen_at:asc": "最后访问从旧到新"
},
"cache": {
"hit": "命中",
"origin": "回源",
"uncached": "未缓存"
},
"filters": {
"pickTime": "选择时间",
"remoteAddr": "来源 IP",
"remoteAddrPlaceholder": "按 IP 搜索",
"host": "访问域名",
"hostPlaceholder": "按域名搜索",
"statusCode": "状态码",
"statusCodePlaceholder": "输入状态码,如 404",
"more": "更多筛选",
"nodeId": "节点 ID",
"nodeIdPlaceholder": "按 node_id 搜索",
"path": "请求路径",
"pathPlaceholder": "按路径搜索",
"timeRange": "时间范围",
"pageSize": "每页条数",
"pageSizeItem": "{count} 条",
"apply": "筛选",
"clear": "清空"
},
"cleanupDialog": {
"invalidDays": "保留天数必须大于 0",
"title": "清理访问日志",
"description": "删除早于指定保留天数的访问日志记录,操作不可恢复。",
"policy": "保留策略",
"keepDays": "保留最近 {days} 天",
"custom": "自定义天数",
"customDays": "自定义保留天数",
"cleaning": "清理中...",
"confirm": "确认清理"
},
"detail": {
"title": "访问日志详情",
"description": "本条请求的全部业务字段。IP 访问分析请前往「IP 明细」。",
"logId": "日志 ID",
"requestTime": "请求时间",
"storedAt": "入库时间",
"node": "节点",
"nodeId": "节点 ID",
"clientIp": "客户端 IP",
"region": "地区",
"host": "域名",
"status": "状态码",
"cache": "缓存",
"bytesSent": "出站流量",
"requestLength": "入站流量",
"duration": "请求耗时",
"path": "路径",
"page": "当前第 {page} 页",
"prev": "上一页",
"next": "下一页",
"listTitle": "日志明细",
"empty": "暂无访问日志",
"time": "时间",
"view": "查看详情"
},
"ip": {
"needRange": "请填写开始与结束时间",
"invalidTime": "时间格式无效",
"endAfterStart": "结束时间必须晚于开始时间",
"maxRange": "时间范围不能超过 30 天",
"page": "当前第 {page} 页",
"total": " · 共 {count} 个 IP",
"prev": "上一页",
"next": "下一页",
"customRange": "自定义区间",
"customPending": "自定义(未应用)",
"timeRange": "时间范围",
"current": "当前:{range}",
"custom": "自定义",
"start": "开始",
"end": "结束",
"apply": "应用",
"applyHint": "修改时间后点击「应用」再查询;详情分析窗口与列表时长对齐。",
"sort": "排序",
"pageSize": "每页",
"title": "IP 明细",
"empty": "暂无 IP 数据",
"region": "地区",
"requests": "请求数",
"successRatio": "2xx 比例",
"inbound": "入站",
"outbound": "出站",
"lastSeen": "最后访问",
"view": "查看 IP 详情",
"dialogTitle": "IP 详情",
"dialogDesc": "。查看该 IP 的访问趋势、分布与 WAF IP 组操作。"
},
"analysis": {
"emptySeries": "暂无 {title} 数据",
"selectGroup": "请选择要加入的 IP 组",
"added": "已将 {ip} 加入 IP 组「{name}」",
"addFailed": "加入 IP 组失败",
"removed": "已从 IP 组「{name}」移除 {ip}",
"removeFailed": "移除失败",
"joinTitle": "将 IP 加入 IP 组",
"targetIp": "目标 IP:",
"loadingGroups": "加载 IP 组",
"loadGroupsFailed": "加载 IP 组失败",
"alreadyIn": "该 IP 已存在于以下 IP 组",
"alreadyInHint": "可选择删除,或继续添加到其他 IP 组。",
"entryCount": "{type} · {count} 条",
"delete": "删除",
"cannotDelete": "不可手动删除",
"notInAny": "该 IP 尚未加入任何 IP 组。",
"addToOther": "添加到其他 IP 组",
"noWritable": "没有可写入的手动 IP 组(或已全部包含该 IP)。",
"selectManual": "选择手动 IP 组",
"close": "关闭",
"processing": "处理中...",
"joinSelected": "加入所选 IP 组",
"recentHours": "近 {hours} 小时",
"invalidIp": "没有有效 IP。",
"addToGroup": "将 IP 加入到 IP 组",
"loading": "加载 IP 分析",
"loadFailed": "加载 IP 分析失败",
"totalRequests": "总请求",
"errors": "错误数",
"bandwidth": "已提供带宽",
"received": "接收数据",
"uniqueHosts": "独立域名",
"uniquePaths": "独立路径",
"trend": "IP 请求趋势",
"trendMeta": "{ip} · {range} · {minutes} 分钟桶",
"refresh": "刷新",
"trendFailed": "加载趋势失败",
"trendEmpty": "该 IP 在{range}内没有访问记录。"
},
"overview": {
"loadingTitle": "加载访问概览",
"loadingDesc": "正在聚合请求量、访问量与带宽趋势...",
"loadFailed": "加载访问概览失败",
"emptyTitle": "暂无概览数据",
"emptyDesc": "当前时间范围内没有可展示的访问统计。",
"uniqueVisitors": "{hint} · 独立访客",
"served": "{hint} · 已提供数据",
"requestsHint": "观察请求量是否出现异常抬升或回落。",
"requests": "请求量",
"deviceDesc": "按设备类型统计请求占比。",
"deviceEmpty": "暂无设备类型数据",
"statusDesc": "按 HTTP 状态码统计请求占比。",
"statusEmpty": "暂无状态码分布数据",
"topPathsDesc": "访问量最高的请求路径。",
"topHostsDesc": "流量集中的访问域名。",
"topIpsDesc": "请求次数最多的来源 IP。",
"browsersDesc": "按浏览器聚合的请求排行。",
"osDesc": "按操作系统聚合的请求排行。",
"uaDesc": "原始 User-Agent 请求排行。"
},
"toolbar": {
"hostsFiltered": "已筛选 {count} 个域名",
"filterByHost": "按域名筛选",
"filterHosts": "筛选域名",
"clear": "清除",
"searchPlaceholder": "搜索 Zone 或域名",
"loadingHosts": "加载域名…",
"loadHostsFailed": "加载域名失败",
"retry": "重试",
"noRegistered": "暂无已登记域名",
"noMatch": "没有匹配的域名",
"selectZone": "选择 Zone {name}",
"selectHost": "选择域名 {name}",
"selectedCount": "已选 {count} 个域名"
}
},
"cloudflare": {
"title": "Cloudflare",
"connectionSettings": "连接设置",
"addGroup": "新增分组",
"loadingOverview": "加载 Cloudflare 总览中...",
"notReadyTitle": "Cloudflare 连接尚未就绪",
"notReadyDesc": "请先导入现有 Cloudflare DNS 账号,或录入独立 API Token 并完成连接测试。",
"configure": "配置连接",
"groupsTitle": "指向分组",
"groupsDesc": "管理 Cloudflare A 记录对应的节点与域名成员。",
"loadingGroups": "加载指向分组中...",
"emptyTitle": "暂无指向分组",
"emptyDesc": "创建分组后,可将域名成员同步到指定的边缘节点。",
"enabled": "已启用",
"disabled": "已停用",
"memberSummary": "成员 {count} 个 · 新成员默认{proxy}橙云",
"proxyOn": "开启",
"proxyOff": "关闭",
"manage": "管理",
"sync": "同步",
"delete": "删除",
"created": "指向分组已创建",
"syncQueued": "分组同步任务已入队",
"deleted": "指向分组及远端记录已删除",
"deleteTitle": "删除指向分组",
"deleteDesc": "将删除 {name} 的全部成员及本模块管理的远端 A 记录。此操作不可撤销。",
"confirmDelete": "确认删除",
"loadingDetail": "加载分组详情中...",
"groupUpdated": "分组配置已更新",
"memberAddedOne": "域名已加入并排队同步",
"memberAddedMany": "已添加 {count} 个域名并排队同步",
"memberAddFailed": "添加失败:{count} 个域名未能加入",
"memberPartial": "部分成功:{succeeded} 个已加入,{failed} 个失败",
"proxyUpdated": "橙云设置已更新并排队同步",
"memberSyncQueued": "成员同步任务已入队",
"memberDeleted": "成员及远端 A 记录已删除",
"back": "返回列表",
"refresh": "刷新",
"edit": "编辑",
"addDomain": "添加域名",
"currentPoint": "当前指向",
"activeNode": "生效节点 {name} · {ip}",
"syncEnabled": "同步已启用",
"syncDisabled": "同步已停用",
"primaryNode": "主节点 {name}",
"backupNode": "备用节点 {name}",
"backupUnset": "未设置",
"members": "域名成员",
"membersDesc": "成员级橙云是同步时的唯一依据。",
"noMembers": "暂无域名成员。",
"columns": {
"domain": "域名",
"desiredIp": "期望 IP",
"status": "状态",
"proxied": "橙云",
"actions": "操作"
},
"pendingSync": "待同步",
"remove": "移出",
"groupDialog": {
"editTitle": "编辑指向分组",
"createTitle": "新增指向分组",
"description": "一期使用主节点作为生效节点;备用节点仅保存,不会自动切换。",
"name": "分组名称",
"primary": "主节点",
"primaryPlaceholder": "选择带 IPv4 的边缘节点",
"noIp": "未配置 IP",
"backup": "备用节点",
"none": "不设置",
"defaultProxied": "新成员默认开启橙云",
"enableSync": "启用同步",
"save": "保存"
},
"memberDialog": {
"title": "添加域名成员",
"description": "支持搜索筛选与批量勾选;加入后会创建或接管唯一同名 A 记录,多条同名 A 会拒绝同步。",
"zoneDomain": "Zone 域名",
"searchPlaceholder": "搜索域名或顶级域…",
"selected": "已选 {count}",
"visible": "可见 {count}",
"unselectAll": "取消全选",
"selectVisible": "全选可见",
"clear": "清空",
"noAvailable": "暂无可用域名(均已加入分组,或尚未在网站管理中添加)。",
"noMatch": "没有匹配的域名",
"groupByZone": "按顶级域分组",
"selectZone": "选择顶级域 {name}",
"zone": "顶级域",
"proxied": "开启橙云代理",
"submitCount": "添加并同步({count})",
"submit": "添加并同步"
},
"tasks": {
"pending": "等待中",
"running": "执行中",
"succeeded": "成功",
"failed": "失败",
"system": "系统",
"manual": "手动",
"retry": "重试",
"schedule": "定时",
"retried": "同步任务已重新下发",
"newTaskId": "新任务 ID:{id}",
"retryFailed": "任务重试失败",
"unknownError": "未知错误",
"title": "同步任务",
"description": "仅展示 Cloudflare 域名同步(sync_member)与分组同步(sync_group)的执行记录。",
"statusPlaceholder": "状态",
"allStatus": "全部状态",
"refresh": "刷新",
"loadFailed": "加载同步任务失败",
"loading": "加载同步任务中...",
"emptyTitle": "暂无同步任务",
"emptyDesc": "添加域名或同步分组后,这里会显示 Cloudflare 域名 / 分组同步执行记录。",
"columns": {
"task": "任务",
"status": "状态",
"trigger": "触发",
"duration": "耗时",
"result": "结果/错误",
"createdAt": "创建时间"
},
"pageSummary": "共 {total} 条,第 {page}/{pages} 页",
"prev": "上一页",
"next": "下一页",
"detailTitle": "同步任务详情",
"defaultName": "Cloudflare 同步",
"loadingDetail": "加载任务详情中...",
"status": "状态",
"trigger": "触发",
"retries": "重试",
"duration": "耗时",
"taskId": "任务 ID",
"createdAt": "创建时间",
"finishedAt": "结束时间",
"result": "执行结果",
"error": "错误信息",
"logs": "执行日志",
"close": "关闭"
},
"settings": {
"saved": "Cloudflare 连接配置已保存",
"verified": "Cloudflare 连接验证成功",
"cleared": "Cloudflare 连接已清除",
"back": "返回列表",
"title": "Cloudflare 连接设置",
"sourceTitle": "凭据来源",
"sourceDesc": "Token 建议授予 Zone:Read 与 DNS:Edit 权限;Token 不会在 API 或页面中回显。",
"source": "连接来源",
"importDns": "导入现有 DNS 账号",
"standalone": "独立 API Token",
"dnsAccount": "Cloudflare DNS 账号",
"selectAccount": "选择 DNS 账号",
"dnsHint": "仅显示类型为 cloudflare 的 DNS 账号。可前往",
"dnsLink": "DNS 账号",
"dnsHintAfter": "新增。",
"tokenKeep": "留空不会回显现有 Token;保存将替换",
"tokenEnter": "输入 Cloudflare API Token",
"save": "保存配置",
"test": "测试连接",
"clear": "清除连接",
"statusTitle": "当前状态",
"ready": "Token 已验证,Cloudflare 指向同步可以执行。",
"notReady": "保存配置后仍需测试连接;未验证状态下同步任务会被拒绝。"
}
},
"openflareOps": {
"saved": "OpenFlare 运维设置已保存",
"saveFailed": "保存失败",
"tokenRotated": "Discovery Token 已重新生成",
"tokenRotateFailed": "Token 轮换失败",
"kumaSynced": "Uptime Kuma 同步任务已执行",
"syncFailed": "同步失败",
"invalidParams": "参数校验失败",
"loading": "加载 OpenFlare 运维设置...",
"loadFailed": "加载失败",
"save": "保存",
"agent": {
"title": "Agent 运行参数",
"description": "心跳间隔与离线阈值会在下个心跳周期同步到节点。",
"heartbeat": "心跳间隔 ({duration})",
"offline": "离线阈值 ({duration})",
"wsUpgrade": "开启 WS 连接升级",
"wsUpgradeDesc": "HTTP 心跳成功后尝试升级为 WebSocket,配置发布可即时通知。",
"updateRepo": "Agent 更新仓库"
},
"geo": {
"title": "IP 归属解析",
"description": "控制节点地图等场景的 GeoIP 来源;访客访问记录归属地固定使用 MaxMind mmdb。",
"mode": "归属方式",
"disabled": "关闭",
"testIp": "测试 IP",
"querying": "查询中...",
"query": "查询归属",
"country": "国家/地区"
},
"pages": {
"title": "Pages 静态托管",
"description": "配置部署包上传体积上限与每个项目的历史部署保留数量。",
"maxSize": "部署包大小上限 (MiB)",
"history": "历史部署保留数(0 不限制)",
"historyHint": "每个项目最多保留 N 条部署:激活部署始终保留,其余按从新到旧填充;超出的非激活部署会在上传成功后自动清理。支持 zip、tar.gz、tar.xz、tar.bz2、tar、7z 格式。"
},
"discovery": {
"title": "Discovery Token 与部署",
"description": "新节点首次接入使用 Discovery Token;轮换请前往节点管理或使用下方操作。",
"manageNodes": "节点管理",
"rotate": "轮换 Token",
"tokenReadonly": "Discovery Token(只读)",
"loading": "加载中...",
"notGenerated": "未生成",
"command": "一键部署命令",
"commandHint": "请先填写可访问的 Server URL 并获取 Token。",
"copied": "命令已复制",
"copy": "复制命令"
},
"kuma": {
"title": "Uptime Kuma 集成",
"description": "将反代站点差分同步至 Uptime Kuma 监控实例。",
"syncNow": "立即同步",
"enable": "开启 Uptime Kuma",
"url": "Uptime Kuma 地址",
"username": "用户名",
"password": "密码",
"passwordKeep": "留空表示不更新",
"syncInterval": "同步间隔 (分钟)",
"scope": "监控范围",
"allSites": "全部站点",
"selectedSites": "选择站点",
"selectedLabel": "已选站点",
"pickSites": "选择监控站点",
"noneSelected": "未选择任何站点",
"interval": "检测频率 (秒)",
"retry": "重试次数",
"retryInterval": "重试间隔 (秒)",
"timeout": "请求超时 (秒)"
},
"duration": {
"minutes": "{count} 分钟",
"seconds": "{count} 秒"
},
"errors": {
"heartbeatMin": "心跳间隔不能小于 1000 毫秒。",
"offlineMin": "离线阈值不能小于 10000 毫秒。",
"offlineRatio": "离线阈值建议至少为心跳间隔的 3 倍。",
"kumaUrl": "请输入 Uptime Kuma 地址。",
"kumaUser": "请输入 Uptime Kuma 用户名。",
"syncInterval": "同步间隔必须为正整数。",
"interval": "心跳间隔必须为正整数。",
"retry": "重试次数必须为非负整数。",
"retryInterval": "心跳重试间隔必须为正整数。",
"timeout": "请求超时必须为正整数。",
"pagesSize": "Pages 部署包大小上限必须为 1~2048 MiB。",
"pagesHistory": "Pages 历史保留数必须为大于等于 0 的整数(0 表示不限制)。"
},
"status": {
"title": "系统状态",
"loadFailed": "获取系统状态失败",
"unknownError": "请求时发生未知错误",
"autoRefresh": "自动刷新",
"refresh": "刷新",
"overview": "服务概览",
"overviewDesc": "服务的基础生命指标",
"uptime": "服务运行时间",
"goroutines": "当前 Goroutines 数量",
"heapObjects": "Heap 对象数量",
"memory": "内存统计",
"memoryDesc": "主内存消耗概览",
"alloc": "当前内存使用量",
"totalAlloc": "所有已分配的内存",
"sys": "内存占用量",
"nextGc": "下次 GC 内存回收量",
"usageRatio": "当前使用率 (Alloc / Sys)",
"heapStack": "堆/栈详情",
"heapStackDesc": "运行时堆栈内存空间细节",
"heapAlloc": "当前 Heap 内存使用量",
"heapSys": "Heap 内存占用量",
"heapIdle": "Heap 内存空闲量",
"heapInuse": "正在使用的 Heap 内存",
"heapReleased": "已释放的 Heap 内存",
"stackInuse": "启动 Stack 使用量",
"stackSys": "已分配的 Stack 内存",
"structs": "底层及结构体内存",
"structsDesc": "运行时底层管理结构体开销",
"mspanInuse": "MSpan 结构内存使用量",
"mspanSys": "已分配的 MSpan 结构内存",
"mcacheInuse": "MCache 结构内存使用量",
"mcacheSys": "已分配的 MCache 结构内存",
"buckHashSys": "已分配的剖析哈希表内存",
"gcSys": "已分配的 GC 元数据内存",
"otherSys": "其它已分配的系统内存",
"gc": "垃圾回收与分配计数",
"gcDesc": "GC 历史数据与分配频次",
"numGc": "GC 执行次数",
"lastGc": "距离上次 GC 时间",
"pauseTotal": "GC 暂停时间总量",
"lastPause": "上次 GC 暂停时间",
"mallocs": "内存分配次数",
"frees": "内存释放次数",
"lookups": "指针查找次数"
},
"siteModal": {
"title": "选择监控站点",
"description": "选择要同步到 Uptime Kuma 的反代站点,支持按站点名称和域名搜索。",
"search": "搜索站点",
"searchPlaceholder": "按名称或域名搜索...",
"selectFiltered": "全选过滤项",
"clearFiltered": "清空过滤项",
"loading": "加载站点列表...",
"loadFailed": "加载站点失败",
"noMatch": "无匹配的站点",
"select": "选择",
"siteName": "站点名称",
"primaryDomain": "主域名",
"selectedCount": "已选择 {count} 个监控站点",
"save": "保存选择"
}
}
}