mirror of
https://github.com/hansjone/netx.git
synced 2026-10-11 20:50:52 +08:00
Make forward-on-clear a global monitor toggle, run key-alert DDL in an isolated startup transaction, and fix HelpHint popovers plus API errors when the server returns non-JSON responses. Co-authored-by: Cursor <cursoragent@cursor.com>
420 lines
18 KiB
TypeScript
420 lines
18 KiB
TypeScript
const zh = {
|
||
common: {
|
||
help: "帮助说明",
|
||
refresh: "刷新",
|
||
refreshing: "刷新中…",
|
||
query: "查询",
|
||
clearFilters: "清除筛选",
|
||
prevPage: "上一页",
|
||
nextPage: "下一页",
|
||
perPage: "{{n}}/页",
|
||
pagerMeta: "共 {{total}} 条 · 第 {{page}}/{{pages}} 页",
|
||
opFailed: "操作失败",
|
||
empty: "-",
|
||
},
|
||
workbench: {
|
||
title: "工作台",
|
||
backToWorkbench: "返回工作台",
|
||
openInNewTab: "在新标签页中打开",
|
||
openModule: "打开或切换到该模块页签",
|
||
monitoring: "监控",
|
||
operations: "运维",
|
||
cards: {
|
||
umeSync: "UME同步",
|
||
umeSyncDesc: "UME 告警同步、订阅与清单",
|
||
managedNe: "网元管理",
|
||
managedNeDesc: "多厂商 SSH/Telnet 网元与连通性测试",
|
||
collect: "批量采集",
|
||
collectDesc: "对已连通网元执行定制 CLI 命令并保存日志",
|
||
},
|
||
},
|
||
layout: {
|
||
title: "UME 对接",
|
||
titleUme: "UME同步",
|
||
titleManagedNe: "网元管理",
|
||
titleCollect: "批量采集",
|
||
navUme: "UME 对接",
|
||
netxApi: "netx api",
|
||
oclawBridge: "oclaw WSS",
|
||
language: "语言",
|
||
moreMenu: "更多",
|
||
langZh: "中文",
|
||
langEn: "English",
|
||
},
|
||
collect: {
|
||
create: {
|
||
title: "新建采集任务",
|
||
hint: "配置命令与网元后创建任务;创建后需在任务列表中点击「开始」执行采集。",
|
||
selectedTitle: "已选择网元",
|
||
selectedEmpty: "请从下方筛选并逐个添加网元。",
|
||
selectedCount: "共 {{count}} 台",
|
||
clearSelected: "清空已选",
|
||
remove: "移除",
|
||
pickTitle: "可选网元(连通性已通过)",
|
||
pickHint: "仅展示 connect_status=pass 的网元。请先在「网元管理」完成连通性测试。",
|
||
pickEmpty: "没有匹配的网元。",
|
||
filterKeyword: "筛选",
|
||
filterKeywordPh: "名称 / IP / 厂商 / 设备类型",
|
||
add: "添加",
|
||
addBatch: "批量添加({{count}})",
|
||
added: "已添加",
|
||
create: "创建任务",
|
||
creating: "创建中…",
|
||
expand: "展开",
|
||
collapse: "收起",
|
||
meta: "已选 {{ne}} 台网元 · {{cmd}} 条命令",
|
||
},
|
||
eligible: {
|
||
title: "可选网元(连通性已通过)",
|
||
hint: "仅展示 connect_status=pass 的网元。请先在「网元管理」完成连通性测试。",
|
||
empty: "暂无已通过连通性测试的网元。",
|
||
},
|
||
form: {
|
||
title: "采集配置",
|
||
jobTitle: "任务名称",
|
||
jobTitlePh: "留空则自动生成",
|
||
commands: "采集命令(每行一条,# 开头为注释)",
|
||
commandsPh: "display version\ndisplay current-configuration",
|
||
commandsHint: "命令将按顺序在每台设备上执行,输出合并为一份文本日志(格式与旧版 NetX 采集一致)。",
|
||
meta: "已选 {{ne}} 台网元 · {{cmd}} 条命令",
|
||
start: "开始采集",
|
||
starting: "提交中…",
|
||
},
|
||
created: "采集任务已创建:{{id}}",
|
||
started: "采集已开始:{{id}}",
|
||
paused: "任务已暂停",
|
||
restarted: "已重新开始采集",
|
||
retryFailedDone: "已开始重采失败网元",
|
||
deleted: "任务已删除",
|
||
nothingToRetry: "没有可重试的失败网元",
|
||
neBusy: "部分网元正在被其他采集任务占用,请等待其完成后再开始",
|
||
jobRunning: "该任务已在执行中",
|
||
confirmDelete: "确定删除该采集任务?相关日志文件将一并删除。",
|
||
jobs: {
|
||
title: "采集任务",
|
||
col: {
|
||
title: "任务",
|
||
status: "状态",
|
||
progress: "进度",
|
||
created: "创建时间",
|
||
lastRun: "最近执行",
|
||
actions: "操作",
|
||
},
|
||
ok: "成功",
|
||
fail: "失败",
|
||
expand: "详情",
|
||
collapse: "收起",
|
||
pause: "暂停",
|
||
start: "开始",
|
||
starting: "启动中…",
|
||
restart: "重新开始",
|
||
retryFailed: "重采失败网元",
|
||
downloadResults: "下载结果",
|
||
delete: "删除",
|
||
autoRefresh: "任务进行中,每 2 秒自动刷新",
|
||
runsInProgress: "部分网元仍在采集中,请稍候…",
|
||
},
|
||
runs: {
|
||
status: "状态",
|
||
message: "说明",
|
||
download: "日志",
|
||
downloadFile: "下载",
|
||
filterStatus: "状态筛选",
|
||
filterDevice: "设备筛选",
|
||
deviceKeywordPh: "名称 / IP",
|
||
allStatus: "全部状态",
|
||
},
|
||
},
|
||
managedNe: {
|
||
title: "网元管理",
|
||
credsNotConfigured: "未配置 NETX_CREDENTIAL_SECRET_KEY,无法保存密码。请在 .env 中设置 Fernet 密钥后重启 API。",
|
||
add: "新增网元",
|
||
importBtn: "批量导入",
|
||
downloadTemplate: "下载导入模板",
|
||
importing: "导入中…",
|
||
edit: "编辑",
|
||
delete: "删除",
|
||
confirmDelete: "确定删除该网元?",
|
||
batchDelete: "批量删除",
|
||
batchDeleting: "删除中…",
|
||
batchDeleteConfirm: "确定删除选中的 {{n}} 台网元?此操作不可恢复。",
|
||
batchDeleteDone: "已删除 {{n}} 台网元",
|
||
batchDeleteSelectRequired: "请先勾选要删除的网元",
|
||
keywordPh: "名称 / IP / 用户名 / 标签",
|
||
allVendors: "全部厂商",
|
||
allConnectStatus: "全部连通状态",
|
||
stats: {
|
||
title: "统计",
|
||
total: "共 {{n}} 台网元",
|
||
pass: "已连通",
|
||
fail: "失败",
|
||
unknown: "未测试",
|
||
testing: "测试中",
|
||
batchProxy: "一键添加代理",
|
||
batchTest: "一键连通性测试",
|
||
tagFilter: "按标签筛选",
|
||
all: "全部",
|
||
allTag: "全部(无标签筛选)",
|
||
noTag: "无标签",
|
||
tagStats: "按标签统计(Top)",
|
||
confirm: "将对 {{n}} 台网元执行操作,确认继续?",
|
||
proxyDone: "已为 {{n}} 台网元提交代理配置",
|
||
testDone: "已提交 {{n}} 台网元连通性测试",
|
||
loadingIds: "加载中…",
|
||
},
|
||
col: {
|
||
name: "名称",
|
||
vendor: "厂商",
|
||
deviceType: "设备类型",
|
||
ip: "管理地址",
|
||
port: "端口",
|
||
protocol: "协议",
|
||
user: "用户名",
|
||
password: "密码",
|
||
tags: "标签",
|
||
remark: "备注",
|
||
connect: "连通性",
|
||
testedAt: "测试时间",
|
||
actions: "操作",
|
||
},
|
||
connect: {
|
||
run: "连通性测试",
|
||
running: "测试中…",
|
||
submitted: "已提交 {{n}} 台设备测试",
|
||
retest: "重新测试",
|
||
},
|
||
connectDetail: "详情",
|
||
connectDetailTitle: "连通性测试日志",
|
||
connectDetailEmpty: "暂无日志。请先执行连通性测试;失败时会记录完整错误与跳板上下文(不含密码)。",
|
||
help:
|
||
"【批量导入】\n" +
|
||
"· 必填列:device_type、ip、username、port、protocol、name、vendor;可先下载模板。\n" +
|
||
"· password 可留空(直连需填;堡垒机托管或后续批量添加代理时可空)。\n" +
|
||
"· 推荐流程:先导入网元 → 勾选网元 → 点「批量添加代理」统一配置跳板/堡垒机。\n\n" +
|
||
"【跳板 / 堡垒机】\n" +
|
||
"· 堡垒机 SSH 用户名模板:{hop_user}@{target_user}@{target_ip}@{hop_host};目标账号填网元「用户名」。\n" +
|
||
"· 堡垒机托管时填「跳板密码」(Vault 密码),目标密码可留空;手动模式需填目标密码。\n" +
|
||
"· JumpServer/CBH 常用跳板端口 2222,部分现场为 22。\n\n" +
|
||
"【连通性 / 编辑】\n" +
|
||
"· 保存密码需配置 NETX_CREDENTIAL_SECRET_KEY。\n" +
|
||
"· 编辑时密码留空表示不修改;连通性失败请点「详情」查看 hop 上下文(不含密码)。",
|
||
importResult: {
|
||
done: "导入完成:新增 {{inserted}},更新 {{updated}},失败 {{failed}} 行",
|
||
},
|
||
form: {
|
||
requiredHint: "带 * 为必填项",
|
||
nameConnectHint: "连通性测试成功后将自动更新为设备名称",
|
||
createTitle: "新增网元",
|
||
editTitle: "编辑网元",
|
||
save: "保存",
|
||
saving: "保存中…",
|
||
cancel: "取消",
|
||
created: "网元已创建",
|
||
updated: "网元已更新",
|
||
deleted: "网元已删除",
|
||
passwordRequired: "请填写密码",
|
||
passwordOptional: "留空则不修改",
|
||
},
|
||
hop: {
|
||
sectionTitle: "跳板 / 代理",
|
||
type: "跳板类型",
|
||
enable: "经跳板登录目标网元",
|
||
vendor: {
|
||
zte: "ZTE 设备(CLI 跳登)",
|
||
huawei: "华为设备(CLI 跳登)",
|
||
cisco: "思科设备(CLI 跳登)",
|
||
linux: "Linux 服务器(SSH 隧道)",
|
||
bastion: "堡垒机(SSH 协议代理)",
|
||
},
|
||
zteHint: "在 ZTE 设备上执行 ssh/telnet 命令跳转到目标,目标账号由二次认证输入。",
|
||
huaweiHint: "在华为设备上执行 telnet / stelnet(SSH)跳登;stelnet 即 SSH。目标账号由二次认证输入。",
|
||
ciscoHint: "在思科设备上执行 ssh -vrf / telnet /vrf 跳登,目标账号由二次认证输入。",
|
||
linuxHint: "先 SSH 登录 Linux 跳板,经 direct-tcpip 隧道连接目标 IP:端口(等同 ProxyJump)。",
|
||
bastionHint:
|
||
"SSH 复合用户名直连堡垒机,由堡垒机协议代理到目标。示例:bastion-user@target-user@2.2.2.2@1.1.1.1;密码为 Vault/堡垒机密码。JumpServer/CBH 常用端口 2222。",
|
||
targetAuthMode: "目标凭据",
|
||
targetAuthBastionManaged: "堡垒机托管(目标密码可留空)",
|
||
targetAuthManual: "手动输入(连接后二次认证)",
|
||
targetAuthHint: "堡垒机托管时仅需堡垒机密码;手动模式需填写目标网元密码。",
|
||
usernameTemplate: "SSH 用户名模板",
|
||
templateHintBastion:
|
||
"默认 {hop_user}@{target_user}@{target_ip}@{hop_host}。留空时后端同样规则。示例:bastion-user@target-user@2.2.2.2@1.1.1.1。",
|
||
host: "跳板地址",
|
||
port: "跳板端口",
|
||
protocol: "跳板协议",
|
||
protocolSshStelnet: "ssh(stelnet)",
|
||
username: "跳板用户名",
|
||
password: "跳板密码",
|
||
vrf: "管理 VRF(可选)",
|
||
vpnInstance: "VPN-Instance(可选)",
|
||
vrfCisco: "VRF(可选,如 MGMT)",
|
||
commandTemplate: "跳登命令模板",
|
||
templateHint:
|
||
"ZTE 常用:telnet {target_ip}、telnet {target_ip} vrf {vrf}、ssh {target_ip}、ssh {target_ip} vrf {vrf}。按跳板协议与 VRF 自动推荐;留空时后端同样规则。目标账号密码由二次认证提示输入。",
|
||
templateHintHuawei:
|
||
"华为常用:telnet {target_ip}、telnet vpn-instance {vrf} {target_ip}、stelnet {target_ip}、stelnet {target_ip} -vpn-instance {vrf}。SSH 协议对应 stelnet。留空时按协议与 VPN-Instance 自动推荐。",
|
||
templateHintCisco:
|
||
"思科常用:ssh {target_ip}、ssh -vrf {vrf} {target_ip}、telnet {target_ip}、telnet {target_ip} /vrf {vrf}。留空时按协议与 VRF 自动推荐。",
|
||
badge: {
|
||
zte: "ZTE跳板",
|
||
huawei: "华为跳板",
|
||
cisco: "思科跳板",
|
||
linux: "Linux跳板",
|
||
bastion: "堡垒机",
|
||
},
|
||
hostRequired: "请填写跳板地址",
|
||
userRequired: "请填写跳板用户名",
|
||
passwordRequired: "请填写跳板密码",
|
||
batchAdd: "添加代理",
|
||
batchTitle: "批量添加代理",
|
||
batchHint: "将以下跳板配置应用到已选中的 {{n}} 台网元(会覆盖原有跳板设置)。",
|
||
batchDone: "已为 {{n}} 台网元配置代理",
|
||
selectRequired: "请先勾选要配置的网元",
|
||
applying: "应用中…",
|
||
apply: "应用到选中网元",
|
||
},
|
||
},
|
||
ume: {
|
||
token: {
|
||
title: "UME Token 状态",
|
||
disconnected: "disconnected",
|
||
connected: "connected",
|
||
connectedRenew: "connected (需续期)",
|
||
expiresIn: "expires_in",
|
||
needsRenew: "需续期 / 0s",
|
||
preview: "preview",
|
||
refreshStatus: "刷新状态",
|
||
renewLogin: "手动续期/登录",
|
||
renewing: "续期中…",
|
||
disconnect: "断开 token",
|
||
disconnecting: "断开中…",
|
||
renewOkChanged: "续期成功,token 已更新",
|
||
renewOkSame: "续期完成(与此前一致)",
|
||
disconnectOk: "已断开 UME token",
|
||
renewHint: "库中 token 缺少有效过期时间或已过期,请点「手动续期/登录」或等待后台自动续期",
|
||
},
|
||
subscription: {
|
||
title: "UME 告警订阅(WebSocket)",
|
||
help:
|
||
"订阅需手动建立/取消;建立后(或重启后若库中仍有有效订阅)后台会自动连接 WSS 接收实时告警。后台任务 alarms_current_ws_consumer 的 pause/resume 会停止或恢复 WSS 连接(不会取消 UME 订阅)。",
|
||
sub: "订阅",
|
||
subActive: "已建立",
|
||
subInactive: "未建立",
|
||
wssPaused: "已暂停",
|
||
wssModeBanner:
|
||
"当前告警由 WSS 实时维护(模式: {{mode}}),定时 REST 全量同步已暂停。需要全量对账时请使用下方「同步当前告警」。",
|
||
serverLostBanner:
|
||
"UME 服务器侧告警订阅已丢失或已过期,本地记录可能仍显示「已建立」。请确认清除本地记录后重新订阅。",
|
||
establish: "建立告警订阅",
|
||
establishing: "建立订阅…",
|
||
reestablish: "清除本地并重新订阅",
|
||
reestablishing: "重新订阅…",
|
||
cancel: "取消告警订阅",
|
||
cancelling: "取消订阅…",
|
||
refreshStatus: "刷新订阅状态",
|
||
clearLocalOnly: "仅清除本地记录",
|
||
clearing: "清除中…",
|
||
opFailed: "订阅操作失败",
|
||
confirmClearDefault:
|
||
"UME 侧告警订阅已不存在或已过期(服务器订阅已丢失)。\n\n是否清除本地订阅记录?清除后可点击「建立告警订阅」重新订阅。",
|
||
confirmReestablish: "将清除本地订阅记录并在 UME 上重新建立告警订阅,是否继续?",
|
||
titleLoginFirst: "请先登录 UME token",
|
||
titleReestablish: "清除本地失效记录并重新向 UME 建立订阅",
|
||
establishInvalid: "建立订阅未返回有效 id/uri",
|
||
establishExists: "订阅已存在,未重复建立(WSS 将保持/恢复连接)",
|
||
establishOk: "告警订阅已建立,WSS 将自动连接",
|
||
clearLocalOk: "已清除本地订阅记录,可重新建立订阅",
|
||
serverLostMsg: "UME 侧告警订阅已丢失。请确认是否清除本地订阅记录后重新订阅。",
|
||
cancelFailed: "取消订阅失败:UME 侧订阅可能仍存在,请查看错误详情后重试",
|
||
cancelOkMissing: "本地已清除(UME 侧订阅此前已不存在)",
|
||
cancelOk: "告警订阅已取消",
|
||
wsLogs: "WSS 运行日志",
|
||
wsActivity: "最近活动 {{time}}",
|
||
wsAutoRefresh: "自动刷新",
|
||
wsLogsEmpty: "暂无日志(建立订阅并连接 WSS 后会出现连接、收包、重连等记录)",
|
||
},
|
||
keyAlert: {
|
||
title: "AI 告警监控(OClaw WhatsApp)",
|
||
help: "按 notificationId 精确匹配,或按告警描述关键字模糊匹配(不区分大小写,匹配 nativeProbableCause 等字段),经 OClaw WebSocket 推送到 WhatsApp 群。鉴权与 NETX_OCLAW_ANALYZE_TOKEN 共用。",
|
||
ws: "OClaw WSS",
|
||
wsConnected: "已连接",
|
||
wsDisconnected: "未连接",
|
||
wsDisabled: "未启用",
|
||
publishedOk: "发布成功",
|
||
publishedFail: "发布失败",
|
||
queue: "待发队列",
|
||
matchType: "匹配方式",
|
||
matchNotificationId: "告警码 (notificationId)",
|
||
matchKeyword: "告警描述关键字",
|
||
matchValuePhNotificationId: "输入 notificationId",
|
||
matchValuePhKeyword: "输入匹配关键字(不区分大小写)",
|
||
label: "规则描述",
|
||
labelPh: "必填,如 BGP Down",
|
||
forwardOnClear: "告警清除时也推送",
|
||
forwardOnClearHelp: "全局开关:对所有监控规则生效。默认只在告警新增/更新时推送;勾选后,UME 上报告警已清除时也会向 WhatsApp 发送清除通知。",
|
||
add: "添加规则",
|
||
adding: "添加中…",
|
||
delete: "删除",
|
||
pickFromAlarms: "加载当前告警参考",
|
||
emptyRules: "尚未配置监控规则",
|
||
colType: "类型",
|
||
colMatch: "匹配内容",
|
||
colLabel: "描述",
|
||
colForwardClear: "清除推送",
|
||
colPublished: "发布次数",
|
||
colAttempts: "尝试次数",
|
||
colLast: "最近推送",
|
||
colActions: "操作",
|
||
addOk: "已添加监控规则",
|
||
deleteOk: "已删除",
|
||
confirmDelete: "确定删除该监控规则?",
|
||
yes: "是",
|
||
no: "否",
|
||
},
|
||
sync: {
|
||
title: "UME 同步",
|
||
inventory: "同步 Inventory",
|
||
alarmsCurrent: "同步当前告警",
|
||
full: "全量同步",
|
||
failed: "同步失败",
|
||
},
|
||
tasks: {
|
||
currentTitle: "当前任务",
|
||
running: "running",
|
||
noRunning: "当前无运行中的任务",
|
||
runtimeTitle: "后台任务",
|
||
runtimeOpFailed: "后台任务操作失败",
|
||
noRuntime: "暂无后台任务状态",
|
||
intervalTitle: "Configured sleep between loop iterations (clamped at process start)",
|
||
lastRunTitle: "Last finished sync for scheduled tasks; refreshed at each loop tick",
|
||
deletedTitle: "全量对账删除条数:inventory 为网元行,alarms_current 为当前告警行,其余域多为 0",
|
||
},
|
||
syncStatus: {
|
||
title: "同步状态",
|
||
empty: "暂无同步记录",
|
||
},
|
||
ne: {
|
||
title: "网元清单",
|
||
showPanel: "展开",
|
||
hidePanel: "收起",
|
||
keywordPh: "keyword(ne_id/ne_name/user_label/ip/host_name)",
|
||
clearTitle: "清空 keyword,回到第 1 页",
|
||
expand: "展开详情",
|
||
collapse: "收起详情",
|
||
},
|
||
alarms: {
|
||
title: "当前告警",
|
||
showPanel: "展开",
|
||
hidePanel: "收起",
|
||
keywordPh: "keyword(告警键/原因/ne_name/host_name/ip 等)",
|
||
hostNamePh: "host_name(含匹配)",
|
||
allSeverity: "全部级别",
|
||
clearedAll: "is_cleared: all",
|
||
clearTitle: "清空 keyword、host_name、级别、is_cleared,回到第 1 页",
|
||
filterByHost: "按该主机名筛选",
|
||
noHostName: "无 host_name(需先同步网元)",
|
||
},
|
||
},
|
||
};
|
||
|
||
export default zh;
|