feat(i18n): add multi-language support (ja/ko/vi/ru/zh-TW) with system auto-detection
- Extend AppLanguage to 7 locales: zh-CN, zh-TW, en, ja, ko, vi, ru - Auto-detect system language via navigator.languages; fallback to English - Add BCP47 locale mapping for date formatting and sorting - Create 50 translation JSON files (5 languages × 10 namespaces, 1137 keys each) - Update language selector with native language names - Extend locale key parity test to cover all 7 languages (70 assertions) - Add VNC/RDP desktop, serial terminal, AI agent, port forwarding, and SFTP features - Add credential encryption, host metrics, session backup crypto, and zmodem bridge - Update Rust backend: desktop services, host metrics, SSH/SFTP enhancements
This commit is contained in:
1 parent
fea6d8db04
commit
b0d0e3a5f3
301 files changed
+28002
-2705
No files matched your search
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"panel": {
|
||||
"title": "Agent CLI",
|
||||
"modelConfigured": "{{provider}} · {{model}}",
|
||||
"modelNotConfigured": "未配置模型",
|
||||
"sshReady": "SSH · {{target}}",
|
||||
"sshNotConnected": "未连接远程 SSH",
|
||||
"defaultTarget": "当前 SSH 会话",
|
||||
"emptyHint": "描述运维任务后发送。可连续追问,或点 + 开新话题。",
|
||||
"newTopic": "新话题",
|
||||
"close": "关闭",
|
||||
"thinking": "思考中…",
|
||||
"conclusion": "结论",
|
||||
"copy": "复制",
|
||||
"copied": "已复制",
|
||||
"stop": "停止",
|
||||
"send": "发送",
|
||||
"placeholder": "任务或追问…(Enter 发送,Shift+Enter 换行)",
|
||||
"hintFollowUp": "继续追问将带上本轮上下文",
|
||||
"hintSelection": "将附带选中 {{lines}} 行",
|
||||
"hintSteps": "最多 {{max}} 步 · 不落盘",
|
||||
"footerNote": "高风险需确认 · critical 拒绝 · 会话不落盘"
|
||||
},
|
||||
"safety": {
|
||||
"aria": "Agent 安全模式",
|
||||
"strict": {
|
||||
"label": "严格",
|
||||
"short": "中风险起确认",
|
||||
"description": "文件修改、权限调整及更高风险命令需要确认,适合生产或陌生主机。"
|
||||
},
|
||||
"relaxed": {
|
||||
"label": "宽松",
|
||||
"short": "仅高风险确认",
|
||||
"description": "查看和普通修改自动执行;删除、重启、安装等高风险操作需要确认。"
|
||||
}
|
||||
},
|
||||
"risk": {
|
||||
"safe": "安全",
|
||||
"low": "低风险",
|
||||
"medium": "中风险",
|
||||
"high": "高风险",
|
||||
"critical": "禁止执行"
|
||||
},
|
||||
"step": {
|
||||
"round": "第 {{round}} 步",
|
||||
"awaiting": "待确认",
|
||||
"running": "执行中",
|
||||
"done": "完成",
|
||||
"confirmTitle": "第 {{round}} 步 · {{risk}}",
|
||||
"confirmMessage": "SSH · {{target}}\n{{mode}}\n\n$ {{command}}",
|
||||
"rejected": "已拒绝第 {{round}} 步命令。",
|
||||
"terminated": "已终止",
|
||||
"stoppedMessage": "已终止。正在执行的远端命令已请求中断。"
|
||||
},
|
||||
"confirm": {
|
||||
"reject": "Reject",
|
||||
"once": "Once",
|
||||
"always": "Always",
|
||||
"hint": "Enter · Once Esc · Reject Always · 本会话同类命令不再确认"
|
||||
},
|
||||
"error": {
|
||||
"noProvider": "请先在设置 → 大模型配置 Provider",
|
||||
"noApiKey": "「{{provider}}」尚未保存 API Key",
|
||||
"emptyTask": "请输入任务或追问",
|
||||
"sshRequired": "需要已连接的远程 SSH",
|
||||
"modelEmpty": "模型未返回内容",
|
||||
"protocolFailed": "模型连续两次未遵循协议,已停止",
|
||||
"noConclusion": "模型未返回可用结论",
|
||||
"multipleCommands": "模型一次返回了多个命令,已拒绝执行",
|
||||
"invalidCommand": "模型未返回唯一的单行命令,已拒绝执行",
|
||||
"repeatLoop": "检测到重复命令循环,已停止:{{command}}",
|
||||
"criticalBlocked": "命令命中破坏性操作硬红线,不提供确认放行:{{command}}",
|
||||
"execFailed": "ssh-exec 失败:{{error}}",
|
||||
"execUnknown": "未知错误",
|
||||
"execNoOutput": "命令执行完成,无输出",
|
||||
"maxSteps": "已达 {{max}} 步上限,请缩小范围后重试"
|
||||
},
|
||||
"output": {
|
||||
"empty": "(空输出)",
|
||||
"truncatedMiddle": "... [已省略 {{count}} 行] ...",
|
||||
"totalLines": "总行数: {{count}}{{truncatedSuffix}}",
|
||||
"truncatedSuffix": "(已截断保留首尾)",
|
||||
"errorLines": "疑似错误/告警行 ({{count}}):\n{{lines}}",
|
||||
"noErrorKeywords": "未发现明显错误关键词",
|
||||
"snippetLabel": "输出片段:\n{{snippet}}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,326 @@
|
||||
{
|
||||
"action": {
|
||||
"confirm": "确认",
|
||||
"cancel": "取消",
|
||||
"close": "关闭",
|
||||
"delete": "删除",
|
||||
"save": "保存",
|
||||
"create": "创建",
|
||||
"copy": "复制",
|
||||
"copied": "已复制",
|
||||
"refresh": "刷新",
|
||||
"gotIt": "知道了",
|
||||
"edit": "编辑",
|
||||
"open": "打开",
|
||||
"clone": "克隆",
|
||||
"reconnect": "重连",
|
||||
"disconnect": "断开",
|
||||
"submit": "确定"
|
||||
},
|
||||
"status": {
|
||||
"loading": "加载中...",
|
||||
"processing": "处理中...",
|
||||
"connecting": "连接中...",
|
||||
"connected": "已连接",
|
||||
"disconnected": "未连接",
|
||||
"background": "后台",
|
||||
"suspended": "已挂起",
|
||||
"reconnecting": "重连中",
|
||||
"error": "连接错误",
|
||||
"reading": "读取中...",
|
||||
"saving": "保存中..."
|
||||
},
|
||||
"error": {
|
||||
"title": "出错了",
|
||||
"body": "应用遇到意外问题",
|
||||
"recoverable": "此错误可以恢复,请尝试刷新页面",
|
||||
"refreshPage": "刷新页面",
|
||||
"restartApp": "重启应用",
|
||||
"supportHint": "如果问题持续存在,请检查日志或联系支持"
|
||||
},
|
||||
"toast": {
|
||||
"closeAria": "关闭通知"
|
||||
},
|
||||
"metrics": {
|
||||
"timezone": "时区 {{value}}",
|
||||
"memory": "内存 {{percent}}%{{detail}}",
|
||||
"sessionTransfer": "会话流量 {{value}}"
|
||||
},
|
||||
"palette": {
|
||||
"title": "命令面板",
|
||||
"aria": "命令面板",
|
||||
"placeholder": "搜索命令、会话或片段...",
|
||||
"empty": "没有找到匹配的结果",
|
||||
"emptyHint": "试试其他关键词",
|
||||
"resultCount": "{{count}} 个结果",
|
||||
"badge": {
|
||||
"command": "命令",
|
||||
"session": "会话",
|
||||
"snippet": "片段"
|
||||
},
|
||||
"hint": {
|
||||
"nav": "导航",
|
||||
"run": "执行",
|
||||
"close": "关闭"
|
||||
},
|
||||
"cmd": {
|
||||
"newSession": "新建会话",
|
||||
"newSessionDesc": "创建新的 SSH 会话配置",
|
||||
"quickConnect": "快速连接",
|
||||
"quickConnectDesc": "直接输入主机信息连接",
|
||||
"localTerminal": "本地终端",
|
||||
"localTerminalDesc": "打开本机 Shell",
|
||||
"settings": "打开设置",
|
||||
"settingsDesc": "应用偏好设置",
|
||||
"toggleSidebar": "折叠/展开侧栏",
|
||||
"toggleSidebarDesc": "隐藏侧栏以专心操作终端",
|
||||
"newTab": "新建标签页",
|
||||
"closeTab": "关闭当前标签",
|
||||
"closeAllTabs": "关闭所有标签",
|
||||
"portForward": "新建端口转发",
|
||||
"upgradePro": "升级 OpsXShell Pro",
|
||||
"editSession": "编辑会话: {{name}}"
|
||||
}
|
||||
},
|
||||
"tab": {
|
||||
"welcome": "欢迎",
|
||||
"new": "新标签",
|
||||
"settings": "设置",
|
||||
"portForward": "端口转发",
|
||||
"terminal": "终端",
|
||||
"batch": "批量执行",
|
||||
"newTerminal": "新终端",
|
||||
"kind": {
|
||||
"terminal": "终端",
|
||||
"sftp": "SFTP",
|
||||
"portforward": "转发",
|
||||
"serial": "串口",
|
||||
"rdp": "RDP",
|
||||
"vnc": "VNC",
|
||||
"batch": "批量",
|
||||
"settings": "设置"
|
||||
},
|
||||
"menu": {
|
||||
"closeOthers": "关闭其他",
|
||||
"closeRight": "关闭右侧标签",
|
||||
"closeLeft": "关闭左侧标签",
|
||||
"closeAll": "关闭全部",
|
||||
"clone": "克隆标签"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"brandSub": "SSH / SFTP 终端",
|
||||
"collapse": "折叠侧栏 (Ctrl/Cmd+B)",
|
||||
"collapseAria": "折叠侧栏",
|
||||
"expand": "展开侧栏",
|
||||
"expandAria": "展开侧栏",
|
||||
"toggle": "切换侧边栏",
|
||||
"searchPlaceholder": "搜索...",
|
||||
"localShell": {
|
||||
"openDefault": "打开默认本地 Shell",
|
||||
"choose": "选择 Shell",
|
||||
"title": "本地 Shell",
|
||||
"subtitle": "打开本机终端",
|
||||
"default": "默认"
|
||||
}
|
||||
},
|
||||
"connectionPanel": {
|
||||
"title": "连接管理",
|
||||
"empty": "暂无连接",
|
||||
"emptyDesc": "当前没有任何活跃连接,连接到服务器后将在此显示。",
|
||||
"stat": {
|
||||
"total": "总计",
|
||||
"active": "活跃",
|
||||
"background": "后台",
|
||||
"error": "断开/错误"
|
||||
},
|
||||
"status": {
|
||||
"connected": "已连接",
|
||||
"connecting": "连接中",
|
||||
"background": "后台",
|
||||
"suspended": "已挂起",
|
||||
"error": "错误",
|
||||
"disconnected": "已断开",
|
||||
"reconnecting": "重连中"
|
||||
},
|
||||
"refCount": "×{{count}} 引用",
|
||||
"reconnect": "重连",
|
||||
"reconnecting": "重连中...",
|
||||
"disconnect": "断开"
|
||||
},
|
||||
"pro": {
|
||||
"upgrade": "升级 Pro",
|
||||
"feature": "专业功能",
|
||||
"unlock": "解锁 {{feature}}",
|
||||
"comingSoon": "即将推出",
|
||||
"activateSuccess": "激活成功",
|
||||
"activateFailed": "激活失败",
|
||||
"licenseActivated": "Pro 许可证已激活",
|
||||
"paymentPending": "支付完成后请粘贴许可证,或稍后再试激活",
|
||||
"invalidLicense": "激活失败:许可证无效",
|
||||
"goUpgrade": "去付费升级",
|
||||
"haveLicense": "已有许可证?激活",
|
||||
"title": "OpsXShell Pro · 解锁专业运维能力",
|
||||
"subtitleComingSoon": "{{feature}} 即将推出 · 升级 Pro 可优先体验",
|
||||
"subtitleUnlock": "正在解锁:{{feature}}",
|
||||
"subtitleDefault": "转发、代理、串口、AI、批量与广播",
|
||||
"activated": "已激活 Pro",
|
||||
"expiresAt": " · 有效期至 {{date}}",
|
||||
"lifetime": " · 终身授权",
|
||||
"oneTimeFee": "一次性费用 · 本机终身授权 · 无需订阅",
|
||||
"pasteLicense": "粘贴许可证",
|
||||
"activateButton": "激活",
|
||||
"clearLicense": "清除本机许可证",
|
||||
"paymentNote": "支付由 Waffo 托管收银台处理;本应用不收集或保存银行卡信息。",
|
||||
"testDeviceId": "测试环境 · 设备 ID:{{deviceId}}",
|
||||
"later": "稍后再说",
|
||||
"viewPro": "查看 Pro",
|
||||
"wallComingSoonSuffix": " · 即将推出",
|
||||
"wallUnlock": "解锁 {{feature}}",
|
||||
"wallMessageComingSoon": "该能力属于 OpsXShell Pro,协议实现尚在开发中。升级后可优先体验。",
|
||||
"wallMessageDefault": "此功能属于 OpsXShell Pro。升级后即可在本机使用。",
|
||||
"checkoutUnavailable": "结账服务不可用 ({{status}})",
|
||||
"freeTier": "Free",
|
||||
"proTier": "Pro",
|
||||
"freeItems": {
|
||||
"ssh": "SSH 终端",
|
||||
"sftp": "SFTP 文件管理",
|
||||
"local": "本地终端",
|
||||
"crud": "会话 CRUD",
|
||||
"import": "单条 / ssh_config 导入"
|
||||
},
|
||||
"proItems": {
|
||||
"forward": "端口转发",
|
||||
"proxy": "会话代理 / SOCKS",
|
||||
"serial": "串口终端",
|
||||
"ai": "终端 AI 助手",
|
||||
"batch": "批量执行 / 广播同步",
|
||||
"broadcast": "广播同步输入",
|
||||
"importExport": "批量导入导出主机清单",
|
||||
"desktop": "RDP / VNC 远程桌面"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"title": "快速启动",
|
||||
"description": "会话、本地 Shell 与设备控制台统一入口",
|
||||
"cards": {
|
||||
"quickConnect": { "title": "快速连接", "desc": "user@host:port" },
|
||||
"saveSession": { "title": "保存会话", "desc": "凭据、分组、代理" },
|
||||
"serial": { "title": "串口终端", "desc": "波特率与串口参数" }
|
||||
},
|
||||
"sectionLocalShell": "本地 Shell",
|
||||
"sectionSavedSessions": "保存会话",
|
||||
"systemDefault": "系统默认"
|
||||
},
|
||||
"statusBar": {
|
||||
"socksLabel": "转发",
|
||||
"socksIdle": "打开端口转发 · 右键复制 SOCKS 地址",
|
||||
"socksRunning": "SOCKS5 运行中 · 点击管理 · 右键复制",
|
||||
"forwardOpenIdle": "打开端口转发 · 右键复制 socks5://127.0.0.1:{{port}}",
|
||||
"forwardOpenRunning": "SOCKS5 已开(:{{port}})· 点击管理 · 右键复制",
|
||||
"forwardStarted": "转发已启动",
|
||||
"forwardStartedDynamic": "SOCKS5 已启动:socks5://127.0.0.1:{{port}}",
|
||||
"socksStartFailed": "启动失败:{{message}}",
|
||||
"socksStopFailed": "停止失败:{{message}}",
|
||||
"socksCopied": "已复制 socks5://127.0.0.1:{{port}}"
|
||||
},
|
||||
"portForward": {
|
||||
"title": "端口转发",
|
||||
"connectedAs": "已连接:{{target}}",
|
||||
"notConnected": "未连接 — 请先建立 SSH 连接",
|
||||
"socksDefaultHint": "本机 SOCKS5:127.0.0.1:1080",
|
||||
"socksRunning": "SOCKS5 运行中",
|
||||
"socksStart": "启动 SOCKS5",
|
||||
"addRule": "添加",
|
||||
"emptyTitle": "暂无端口转发",
|
||||
"emptyDesc": "可启动 SOCKS5,或添加本地 / 远程规则",
|
||||
"emptyAction": "启动 127.0.0.1:1080",
|
||||
"typeLocal": "本地",
|
||||
"typeRemote": "远程",
|
||||
"typeDynamic": "动态",
|
||||
"running": "运行中",
|
||||
"socksProxy": "SOCKS5:127.0.0.1:{{port}}",
|
||||
"remoteToLocal": "远端 {{remote}} → 本机 {{local}}",
|
||||
"stats": "{{connections}} 连接 · ↑{{up}} · ↓{{down}}",
|
||||
"copyProxy": "复制代理",
|
||||
"copyRule": "复制规则",
|
||||
"editRule": "编辑",
|
||||
"stopListener": "停止",
|
||||
"start": "启动",
|
||||
"delete": "删除",
|
||||
"editTitle": "编辑转发",
|
||||
"addTitle": "添加转发",
|
||||
"typeLocalDesc": "本机 → 远端",
|
||||
"typeRemoteDesc": "远端 → 本机",
|
||||
"typeDynamicDesc": "SOCKS5",
|
||||
"selectType": "转发类型",
|
||||
"drawerSubtitle": "经当前 SSH 建立隧道",
|
||||
"ruleFields": "参数",
|
||||
"dynamicHint": "本机 SOCKS5,默认 127.0.0.1:1080;端口可改。流量经当前 SSH 服务器出口 IP 访问外网。",
|
||||
"dynamicSingleHint": "每台 SSH 仅一条动态转发;停止后可改监听端口。",
|
||||
"dynamicPortHint": "端口被占用时可改为其他本机端口(如 1081)。",
|
||||
"ruleList": "规则",
|
||||
"ruleListEmpty": "暂无本地 / 远程规则",
|
||||
"addSection": "新建",
|
||||
"errorDynamicExists": "动态转发已存在,请直接启停或修改端口。",
|
||||
"diagram": {
|
||||
"title": "流量示意",
|
||||
"localApp": "本机应用",
|
||||
"sshHost": "SSH 主机",
|
||||
"remoteService": "远端服务",
|
||||
"remoteClient": "远端访问方",
|
||||
"localService": "本机服务",
|
||||
"localClient": "本机",
|
||||
"browser": "本机客户端",
|
||||
"socksProxy": "本机 SOCKS",
|
||||
"anyTarget": "任意目标",
|
||||
"localSide": "本机",
|
||||
"remoteSide": "远端",
|
||||
"firewall": "防火墙",
|
||||
"viaApp": "经 OpsXShell",
|
||||
"viaSsh": "经 SSH",
|
||||
"toTarget": "到目标",
|
||||
"toListen": "到监听",
|
||||
"targetDb": "DB",
|
||||
"targetWeb": "Web",
|
||||
"targetApi": "API",
|
||||
"remotePeerA": "远端 A",
|
||||
"remotePeerB": "远端 B",
|
||||
"remotePeerC": "远端 C",
|
||||
"cloudA": "云 A",
|
||||
"cloudB": "云 B",
|
||||
"internet": "互联网",
|
||||
"localCaption": "本地转发:经隧道访问远端端口,如同访问本机。",
|
||||
"remoteCaption": "远程转发:远端访问经隧道转到本机服务。",
|
||||
"dynamicCaption": "动态转发:本机变成 SOCKS5 代理,可经当前 SSH 服务器出口 IP 访问互联网。"
|
||||
},
|
||||
"ruleName": "名称",
|
||||
"ruleNamePlaceholder": "例如 MySQL",
|
||||
"localListenPort": "本机监听端口",
|
||||
"localTargetPort": "本机目标端口",
|
||||
"remoteTargetPort": "远端目标端口",
|
||||
"remoteListenPort": "远端监听端口",
|
||||
"portPlaceholder": "如 3306",
|
||||
"remoteHost": "远端主机",
|
||||
"remoteHostPlaceholder": "localhost 或 IP",
|
||||
"socksRuleName": "SOCKS5 代理",
|
||||
"defaultLocalName": "本地转发",
|
||||
"defaultRemoteName": "远程转发",
|
||||
"sessionRestoredTitle": "会话已恢复",
|
||||
"sessionRestoredDesc": "上次关闭时的端口转发标签已恢复\n需要重新建立 SSH 连接才能使用",
|
||||
"stopEditTitle": "停止后编辑",
|
||||
"stopEditMessage": "转发运行中,编辑前需先停止。是否继续?",
|
||||
"stopEditConfirm": "停止并编辑",
|
||||
"deleteTitle": "确认删除",
|
||||
"deleteRunning": "转发运行中,将先停止再删除。",
|
||||
"deleteConfirm": "确定删除此规则?",
|
||||
"errorNamePort": "请填写名称和有效端口(1–65535)",
|
||||
"errorTargetPort": "请填写有效目标端口(1–65535)",
|
||||
"errorRemoteHost": "请填写远端主机",
|
||||
"errorNotConnected": "未连接到服务器",
|
||||
"errorStartFailed": "启动失败",
|
||||
"errorStopFailed": "停止失败",
|
||||
"errorSocksRunning": "SOCKS5 已在运行",
|
||||
"copySuffix": "副本"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"connect": {
|
||||
"rdpTitle": "连接 RDP",
|
||||
"vncTitle": "连接 VNC",
|
||||
"rdpDesc": "Windows 远程桌面 · 原生 IronRDP 引擎",
|
||||
"vncDesc": "VNC / RFB 远程桌面 · 原生引擎",
|
||||
"confirm": "连接",
|
||||
"host": "主机",
|
||||
"hostPlaceholderRdp": "windows.example.com",
|
||||
"hostPlaceholderVnc": "192.168.1.10",
|
||||
"port": "端口",
|
||||
"username": "用户名",
|
||||
"domain": "域名(可选)",
|
||||
"password": "密码",
|
||||
"passwordOptional": "密码(可选)",
|
||||
"width": "宽度",
|
||||
"height": "高度",
|
||||
"rdpFootnote": "原生 IronRDP:TCP → X.224 → TLS → CredSSP/NLA → MCS;握手超时 45s。证书校验当前为开发期宽松模式。",
|
||||
"vncFootnote": "原生 vnc-rs RFB:支持 Tight JPEG 帧解码;剪贴板按 UTF-8 发送(极旧服务端可能乱码)。",
|
||||
"errorHostRequired": "请输入主机地址",
|
||||
"errorUsernameRequired": "请输入用户名"
|
||||
},
|
||||
"toolbar": {
|
||||
"pasteClipboard": "粘贴本机剪贴板到远端",
|
||||
"pasteAria": "粘贴到远端",
|
||||
"shareDrive": "把本地文件复制到共享盘(本机「下载」= 远端「Downloads on OpsXShell」)",
|
||||
"shareDriveAria": "放入共享盘",
|
||||
"openShareDir": "在本机打开共享目录(下载文件夹)",
|
||||
"openShareDirAria": "打开共享目录",
|
||||
"disconnect": "断开连接",
|
||||
"disconnectAria": "断开连接"
|
||||
},
|
||||
"status": {
|
||||
"connecting": "正在连接…",
|
||||
"connected": "已连接",
|
||||
"disconnected": "已断开",
|
||||
"connectFailed": "连接失败",
|
||||
"clipboardSynced": "已同步远端剪贴板",
|
||||
"savedToDownloads": "已保存到本机下载文件夹:{{name}}",
|
||||
"pastedToRemote": "已粘贴到远端",
|
||||
"fileTooLarge": "单文件上限 50MB",
|
||||
"fileShared": "已放入共享盘「下载」:{{name}}(远端此电脑可见)"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
{
|
||||
"code": {
|
||||
"1000": "连接失败,请检查网络或主机地址",
|
||||
"1001": "连接超时,请检查网络或稍后重试",
|
||||
"1002": "认证失败,请检查用户名和密码",
|
||||
"1003": "主机不可达,请检查网络配置",
|
||||
"1004": "连接已关闭",
|
||||
"1100": "终端创建失败",
|
||||
"1101": "命令执行失败",
|
||||
"1102": "端口转发设置失败",
|
||||
"1200": "SFTP 连接失败",
|
||||
"1201": "文件不存在",
|
||||
"1202": "权限不足,无法访问该文件或目录",
|
||||
"1203": "文件传输失败",
|
||||
"1204": "无法读取目录内容",
|
||||
"1300": "会话不存在",
|
||||
"1301": "保存会话失败",
|
||||
"1302": "加载会话失败",
|
||||
"1400": "主机地址格式不正确",
|
||||
"1401": "端口号必须在 1-65535 之间",
|
||||
"1402": "凭据格式不正确",
|
||||
"9000": "发生未知错误",
|
||||
"9001": "内部通信错误",
|
||||
"9002": "文件系统错误",
|
||||
"9003": "网络错误"
|
||||
},
|
||||
"action": {
|
||||
"retry": "重试",
|
||||
"reconnect": "重新连接",
|
||||
"ignore": "忽略",
|
||||
"exit": "退出",
|
||||
"none": "无"
|
||||
},
|
||||
"connection": {
|
||||
"failed": "连接失败,请检查网络或主机地址",
|
||||
"timeout": "连接超时,请检查网络或稍后重试",
|
||||
"authFailed": "认证失败,请检查用户名和密码",
|
||||
"hostUnreachable": "主机不可达,请检查网络配置",
|
||||
"closed": "连接已关闭",
|
||||
"dnsFailed": "无法解析主机",
|
||||
"refused": "连接被拒绝",
|
||||
"disconnected": "连接已断开"
|
||||
},
|
||||
"auth": {
|
||||
"failed": "认证失败,请检查用户名和密码",
|
||||
"invalidCredentials": "凭据格式不正确",
|
||||
"keyLoadFailed": "无法加载私钥",
|
||||
"passphraseRequired": "私钥需要口令",
|
||||
"passphraseWrong": "私钥口令不正确"
|
||||
},
|
||||
"shell": {
|
||||
"createFailed": "终端创建失败",
|
||||
"execFailed": "命令执行失败",
|
||||
"localCreateFailed": "创建本地 Shell 失败",
|
||||
"remoteCreateFailed": "创建远端 Shell 失败"
|
||||
},
|
||||
"proxy": {
|
||||
"connectFailed": "代理连接失败",
|
||||
"authFailed": "代理认证失败",
|
||||
"tunnelFailed": "代理隧道建立失败",
|
||||
"unsupported": "不支持的代理类型",
|
||||
"jumpFailed": "跳板机连接失败",
|
||||
"hostRequired": "代理 host 不能为空",
|
||||
"hostNoSpaces": "代理 host 不能包含空格",
|
||||
"portRequired": "代理 port 必须大于 0",
|
||||
"portTooHigh": "代理 port 不能超过 65535"
|
||||
},
|
||||
"forward": {
|
||||
"failed": "端口转发设置失败",
|
||||
"bindFailed": "端口绑定失败",
|
||||
"alreadyInUse": "端口已被占用"
|
||||
},
|
||||
"sftp": {
|
||||
"connectFailed": "SFTP 连接失败",
|
||||
"fileNotFound": "文件不存在",
|
||||
"permissionDenied": "权限不足,无法访问该文件或目录",
|
||||
"transferFailed": "文件传输失败",
|
||||
"listFailed": "无法读取目录内容",
|
||||
"readFailed": "读取失败",
|
||||
"writeFailed": "保存失败",
|
||||
"renameFailed": "重命名失败",
|
||||
"chmodFailed": "权限修改失败",
|
||||
"apiUnavailable": "SFTP API 不可用"
|
||||
},
|
||||
"session": {
|
||||
"notFound": "会话不存在",
|
||||
"saveFailed": "保存会话失败",
|
||||
"loadFailed": "加载会话失败",
|
||||
"readConfigFailed": "无法读取会话配置",
|
||||
"exportWriteFailed": "写入导出文件失败",
|
||||
"exportFailed": "导出会话失败",
|
||||
"importReadFailed": "读取文件失败",
|
||||
"importFailed": "导入会话失败",
|
||||
"importEmpty": "未找到可导入的会话"
|
||||
},
|
||||
"validation": {
|
||||
"invalidHost": "主机地址格式不正确",
|
||||
"invalidPort": "端口号必须在 1-65535 之间",
|
||||
"invalidCredentials": "凭据格式不正确",
|
||||
"hostRequired": "请输入主机地址",
|
||||
"usernameRequired": "请输入用户名",
|
||||
"targetRequired": "请输入主机,例如 root@192.168.1.10 或 opsbase.cn:5555",
|
||||
"serialPathRequired": "请输入串口设备路径",
|
||||
"taskRequired": "请输入任务或追问"
|
||||
},
|
||||
"filesystem": {
|
||||
"error": "文件系统错误",
|
||||
"readFailed": "读取文件失败",
|
||||
"writeFailed": "写入文件失败"
|
||||
},
|
||||
"clipboard": {
|
||||
"readFailed": "读取剪贴板失败",
|
||||
"writeFailed": "写入剪贴板失败",
|
||||
"copyPathFailed": "复制路径失败",
|
||||
"unsupportedRead": "当前环境不支持读取剪贴板",
|
||||
"unsupportedWrite": "当前环境不支持写入剪贴板"
|
||||
},
|
||||
"ipc": {
|
||||
"error": "内部通信错误",
|
||||
"nativeApiUnavailable": "原生 API 不可用"
|
||||
},
|
||||
"network": {
|
||||
"error": "网络错误"
|
||||
},
|
||||
"pool": {
|
||||
"limitReached": "连接数达到上限 ({{max}}),请先关闭一些连接"
|
||||
},
|
||||
"desktop": {
|
||||
"connectFailed": "连接失败",
|
||||
"fileTooLarge": "单文件上限 50MB",
|
||||
"nativeOnly": "远程连接仅在 OpsXShell Tauri 原生应用中可用",
|
||||
"rdpNativeOnly": "RDP 仅在 OpsXShell Tauri 原生应用中可用",
|
||||
"vncNativeOnly": "VNC 仅在 OpsXShell Tauri 原生应用中可用"
|
||||
},
|
||||
"serial": {
|
||||
"openFailed": "打开串口失败",
|
||||
"writeFailed": "串口写入失败",
|
||||
"nativeOnly": "串口仅在 Tauri 原生应用中可用"
|
||||
},
|
||||
"ai": {
|
||||
"noProvider": "请先在设置 → 大模型配置 Provider",
|
||||
"noApiKey": "「{{provider}}」尚未保存 API Key",
|
||||
"modelEmpty": "模型未返回内容",
|
||||
"protocolFailed": "模型连续两次未遵循协议,已停止",
|
||||
"noConclusion": "模型未返回可用结论",
|
||||
"multipleCommands": "模型一次返回了多个命令,已拒绝执行",
|
||||
"invalidCommand": "模型未返回唯一的单行命令,已拒绝执行",
|
||||
"repeatLoop": "检测到重复命令循环,已停止:{{command}}",
|
||||
"criticalBlocked": "命令命中破坏性操作硬红线,不提供确认放行:{{command}}",
|
||||
"execFailed": "ssh-exec 失败:{{error}}",
|
||||
"maxSteps": "已达 {{max}} 步上限,请缩小范围后重试",
|
||||
"sshRequired": "需要已连接的远程 SSH"
|
||||
},
|
||||
"zmodem": {
|
||||
"readFailed": "读取失败: {{name}}",
|
||||
"writeFailed": "写入失败: {{name}}"
|
||||
},
|
||||
"unknown": {
|
||||
"error": "发生未知错误"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"connect": {
|
||||
"title": "连接串口",
|
||||
"description": "原生串口终端 · 适用于路由器、交换机、开发板与调试控制台",
|
||||
"confirm": "打开串口",
|
||||
"device": "设备",
|
||||
"refresh": "刷新",
|
||||
"devicePlaceholder": "{{path}}",
|
||||
"noDevicesHint": "未枚举到设备时可直接输入路径,例如 {{examples}}。",
|
||||
"examplesWindows": "{{default}}、COM3",
|
||||
"examplesLinux": "{{default}}、/dev/ttyACM0",
|
||||
"examplesMac": "{{default}}、/dev/tty.usbserial-*",
|
||||
"baudRate": "波特率",
|
||||
"dataBits": "数据位",
|
||||
"stopBits": "停止位",
|
||||
"parity": "校验",
|
||||
"parityNone": "无",
|
||||
"parityOdd": "奇校验",
|
||||
"parityEven": "偶校验",
|
||||
"flowControl": "流控",
|
||||
"flowNone": "无",
|
||||
"flowSoftware": "软件 XON/XOFF",
|
||||
"flowHardware": "硬件 RTS/CTS",
|
||||
"lineEnding": "行尾",
|
||||
"lineEndingLf": "LF (\\n)",
|
||||
"lineEndingCr": "CR (\\r)",
|
||||
"lineEndingCrlf": "CRLF (\\r\\n)",
|
||||
"localEcho": "本地回显",
|
||||
"localEchoHint": "(半双工调试)",
|
||||
"errorPathRequired": "请输入串口设备路径"
|
||||
},
|
||||
"terminal": {
|
||||
"title": "串口",
|
||||
"connected": "已连接",
|
||||
"disconnected": "未连接",
|
||||
"connecting": "连接中…",
|
||||
"error": "串口错误",
|
||||
"configSummary": "{{path}} · {{baud}} · {{dataBits}}-{{parity}}-{{stopBits}}",
|
||||
"opening": "正在打开 {{path}} @ {{baud}}...",
|
||||
"openFailed": "打开串口失败: {{message}}",
|
||||
"connectedBanner": "已连接 {{path}} · {{baud}} {{frame}} · {{lineEnding}}{{echo}}",
|
||||
"localEchoSuffix": " · local echo"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,237 @@
|
||||
{
|
||||
"sidebar": {
|
||||
"quickConnect": "快速连接",
|
||||
"quickConnectShort": "快连",
|
||||
"newSession": "新建会话",
|
||||
"newSessionShort": "新建",
|
||||
"searchPlaceholder": "搜索会话...",
|
||||
"batchMode": "批量操作",
|
||||
"exitBatchMode": "退出批量操作",
|
||||
"batchSelected": "已选 {{count}} 个 SSH",
|
||||
"batchExcludedDesktop": " · 已排除 RDP/VNC",
|
||||
"selectAllVisible": "全选当前结果",
|
||||
"deselectAllVisible": "取消当前结果",
|
||||
"batchExec": "批量执行",
|
||||
"settings": "设置",
|
||||
"resizeHint": "拖拽调整宽度,双击折叠"
|
||||
},
|
||||
"tree": {
|
||||
"selectSession": "选择会话",
|
||||
"noMatchTitle": "未找到匹配的会话",
|
||||
"noMatchDesc": "尝试其他关键词",
|
||||
"emptyTitle": "暂无会话",
|
||||
"emptyDesc": "快速连接或新建会话,双击即可进终端",
|
||||
"emptyAction": "新建会话"
|
||||
},
|
||||
"contextMenu": {
|
||||
"blank": {
|
||||
"newGroup": "新建分组",
|
||||
"newSession": "新建会话"
|
||||
},
|
||||
"group": {
|
||||
"newSessionHere": "在此新建会话",
|
||||
"newGroup": "新建分组",
|
||||
"renameGroup": "重命名分组",
|
||||
"deleteEmptyGroup": "删除空分组"
|
||||
},
|
||||
"session": {
|
||||
"open": "打开",
|
||||
"edit": "编辑",
|
||||
"duplicate": "克隆",
|
||||
"delete": "删除"
|
||||
}
|
||||
},
|
||||
"groups": {
|
||||
"default": "默认分组",
|
||||
"new": {
|
||||
"title": "新建分组",
|
||||
"message": "输入分组名称",
|
||||
"placeholder": "如:生产环境",
|
||||
"confirm": "创建"
|
||||
},
|
||||
"rename": {
|
||||
"title": "重命名分组",
|
||||
"message": "将「{{name}}」改为",
|
||||
"placeholder": "分组名称",
|
||||
"confirm": "保存"
|
||||
},
|
||||
"deleteBlocked": {
|
||||
"title": "无法删除",
|
||||
"message": "分组「{{name}}」内还有会话,请先移出或删除会话。",
|
||||
"confirm": "知道了"
|
||||
},
|
||||
"newOption": "新建分组…",
|
||||
"hint": "默认「默认分组」;也可选已有分组或新建"
|
||||
},
|
||||
"deleteSession": {
|
||||
"title": "确认删除",
|
||||
"message": "确定删除会话 \"{{name}}\"?",
|
||||
"confirm": "删除"
|
||||
},
|
||||
"welcome": {
|
||||
"tagline": "远程终端 · SFTP · 端口转发",
|
||||
"sectionStart": "开始",
|
||||
"sectionDesktop": "远程桌面",
|
||||
"sectionRecent": "最近会话",
|
||||
"quickConnect": {
|
||||
"title": "快速连接",
|
||||
"desc": "临时 SSH,不写入会话库"
|
||||
},
|
||||
"newSession": {
|
||||
"title": "新建会话",
|
||||
"desc": "保存主机,侧栏双击连接"
|
||||
},
|
||||
"localShell": {
|
||||
"title": "本地 Shell",
|
||||
"selectShell": "选择 Shell",
|
||||
"default": "默认"
|
||||
},
|
||||
"rdp": {
|
||||
"title": "RDP 远程桌面",
|
||||
"desc": "Windows · NLA / CredSSP"
|
||||
},
|
||||
"vnc": {
|
||||
"title": "VNC 远程桌面",
|
||||
"desc": "RFB · 跨平台图形会话"
|
||||
},
|
||||
"recentEmpty": {
|
||||
"title": "暂无已保存会话",
|
||||
"desc": "用快速连接试连,或新建会话以便复用"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"searchPlaceholder": "搜索主机、分组或标签页"
|
||||
},
|
||||
"quickConnect": {
|
||||
"title": "快速连接",
|
||||
"target": "目标",
|
||||
"targetPlaceholder": "root@192.168.1.10:22",
|
||||
"targetHint": "支持 host、user@host、user@host:port",
|
||||
"password": "密码",
|
||||
"passwordOptional": "可选 · 用密钥可留空",
|
||||
"connect": "连接",
|
||||
"errorInvalidTarget": "请输入主机,例如 root@192.168.1.10 或 opsbase.cn:5555",
|
||||
"errorConnectFailed": "连接失败"
|
||||
},
|
||||
"dialog": {
|
||||
"create": "新建会话",
|
||||
"edit": "编辑会话",
|
||||
"subtitle": "目标一行搞定 · 高级可折叠",
|
||||
"saving": "保存中…",
|
||||
"save": "保存",
|
||||
"createAndSave": "创建并保存",
|
||||
"basic": "基本",
|
||||
"login": "登录",
|
||||
"advanced": "高级选项",
|
||||
"advancedCollapsed": "代理 · 跳板 · 标签",
|
||||
"collapse": "收起",
|
||||
"protocol": "协议",
|
||||
"displayName": "显示名称(可选)",
|
||||
"displayNamePlaceholder": "自动用 user@host 或 vnc:host",
|
||||
"host": "主机",
|
||||
"hostPlaceholder": "192.168.1.10",
|
||||
"hostHint": "填写 IP 或域名;也可粘贴 host:port",
|
||||
"port": "端口",
|
||||
"username": "用户名",
|
||||
"usernamePlaceholderRdp": "Administrator",
|
||||
"usernamePlaceholderSsh": "root",
|
||||
"width": "宽",
|
||||
"height": "高",
|
||||
"group": "分组",
|
||||
"authPassword": "密码",
|
||||
"authKey": "密钥",
|
||||
"password": "密码",
|
||||
"domain": "域(可选)",
|
||||
"domainPlaceholder": "不常用,企业域账号再填",
|
||||
"keySource": "密钥来源",
|
||||
"keyFile": "文件",
|
||||
"keyText": "文本",
|
||||
"privateKeyPath": "私钥路径",
|
||||
"privateKeyText": "私钥内容",
|
||||
"privateKeyTextHint": "粘贴的私钥会加密后落盘,与密码相同处理",
|
||||
"pickKeyFile": "选择…",
|
||||
"pickKeyDialogTitle": "选择私钥文件",
|
||||
"allFilesFilter": "所有文件",
|
||||
"passphrase": "密钥口令(可选)",
|
||||
"passphrasePlaceholder": "可选",
|
||||
"tags": "标签",
|
||||
"tagsPlaceholder": "生产, web",
|
||||
"startupCommand": "启动命令(可选)",
|
||||
"startupCommandPlaceholder": "连接后自动执行,如 cd /var/log",
|
||||
"proxy": "代理",
|
||||
"proxyNone": "无",
|
||||
"proxyHostPlaceholder": "代理地址",
|
||||
"proxyPortPlaceholder": "端口",
|
||||
"proxyUserPlaceholder": "用户名(可选)",
|
||||
"proxyPasswordPlaceholder": "密码(可选)",
|
||||
"jumpHost": "跳板机(可选)",
|
||||
"jumpNone": "无跳板",
|
||||
"jumpNoneAlt": "不使用跳板",
|
||||
"jumpHint": "当前支持一个已保存会话作为跳板"
|
||||
},
|
||||
"batch": {
|
||||
"title": "批量执行",
|
||||
"subtitle": "已选 {{selected}} 台 · 并发 {{concurrency}} · 关闭标签即丢弃结果",
|
||||
"dialogTitle": "批量命令",
|
||||
"dialogDesc": "已选 {{selected}}/{{total}} 台主机 · 最大并发 {{concurrency}}",
|
||||
"targetCount": "目标 {{count}} 台",
|
||||
"runningProgress": "执行中 {{completed}}/{{total}}",
|
||||
"execute": "执行 {{count}} 台",
|
||||
"executeAgain": "再次执行",
|
||||
"success": "成功 {{count}}",
|
||||
"failed": "失败 {{count}}",
|
||||
"command": "远程命令",
|
||||
"commandPlaceholder": "例如:uptime",
|
||||
"targets": "目标主机",
|
||||
"filterPlaceholder": "名称、IP、分组或标签",
|
||||
"filterAria": "筛选主机",
|
||||
"noMatchHosts": "没有匹配的主机",
|
||||
"resultMatrix": "结果矩阵",
|
||||
"resultMatrixHint": "主机 × 状态 × 输出",
|
||||
"emptySelection": "从左侧选择目标主机,或在侧栏批量模式保留选中后打开",
|
||||
"noOutput": "(无输出)",
|
||||
"errorReadConfig": "无法读取会话配置",
|
||||
"errorConnectFailed": "连接失败",
|
||||
"errorExecFailed": "命令执行失败",
|
||||
"results": "执行结果",
|
||||
"resultsHint": "输出仅保留在当前弹框内",
|
||||
"ctrlEnterHint": "Ctrl/⌘ + Enter 执行",
|
||||
"executeTo": "执行到 {{count}} 台",
|
||||
"selectFromLeft": "请从左侧选择目标主机"
|
||||
},
|
||||
"importExport": {
|
||||
"exportTitle": "导出会话",
|
||||
"exportDefaultPath": "opsxshell-sessions.bak",
|
||||
"exportFilterBak": "OpsXShell 备份",
|
||||
"exportFilterJson": "JSON",
|
||||
"exportSuccess": "已导出 {{count}} 个会话到:\n{{path}}",
|
||||
"exportWriteFailed": "写入导出文件失败",
|
||||
"exportFailed": "导出会话失败",
|
||||
"exportFailedDetail": "导出会话失败:{{message}}",
|
||||
"exportPasswordTitle": "设置备份密码",
|
||||
"exportPasswordMessage": "导出文件将加密保存主机分组、私钥、密码等敏感信息。请设置备份密码。",
|
||||
"exportPasswordPlaceholder": "输入备份密码",
|
||||
"exportPasswordConfirmTitle": "确认备份密码",
|
||||
"exportPasswordConfirmMessage": "请再次输入备份密码以确认。",
|
||||
"exportPasswordConfirmPlaceholder": "再次输入备份密码",
|
||||
"exportPasswordMismatch": "两次输入的密码不一致",
|
||||
"exportPasswordRequired": "必须设置备份密码才能导出",
|
||||
"importTitle": "导入会话",
|
||||
"importFilterBak": "OpsXShell 备份",
|
||||
"importFilterJson": "JSON",
|
||||
"importFilterSshConfig": "SSH Config",
|
||||
"importFilterAll": "所有文件",
|
||||
"readFileFailed": "读取文件失败",
|
||||
"readFileFailedDetail": "读取文件失败:{{message}}",
|
||||
"importPasswordTitle": "输入备份密码",
|
||||
"importPasswordMessage": "该文件已加密,请输入导出时设置的密码以导入主机分组与密钥等信息。",
|
||||
"importPasswordPlaceholder": "输入备份密码",
|
||||
"importPasswordRequired": "需要密码才能导入加密备份",
|
||||
"importPasswordInvalid": "备份密码不正确,或文件已损坏",
|
||||
"noSessionsFound": "未找到可导入的会话",
|
||||
"noValidSessions": "文件中没有有效的会话配置",
|
||||
"importSuccess": "成功导入 {{created}}/{{total}} 个会话",
|
||||
"importFailed": "导入会话失败",
|
||||
"importFailedDetail": "导入会话失败:{{message}}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"nav": {
|
||||
"general": "工作区",
|
||||
"generalDesc": "布局与资源",
|
||||
"appearance": "外观",
|
||||
"appearanceDesc": "界面主题与语言",
|
||||
"terminal": "终端",
|
||||
"terminalDesc": "字体与主题色",
|
||||
"shortcuts": "快捷键",
|
||||
"shortcutsDesc": "键盘绑定",
|
||||
"ssh": "SSH",
|
||||
"sshDesc": "连接与连接池",
|
||||
"security": "安全",
|
||||
"securityDesc": "凭据与主机密钥",
|
||||
"ai": "大模型",
|
||||
"aiDesc": "AI Provider",
|
||||
"about": "关于",
|
||||
"aboutDesc": "版本与数据"
|
||||
},
|
||||
"title": "设置",
|
||||
"search": {
|
||||
"placeholder": "搜索设置..."
|
||||
},
|
||||
"language": {
|
||||
"label": "界面语言",
|
||||
"description": "切换后立即生效",
|
||||
"zhCN": "简体中文",
|
||||
"zhTW": "繁體中文",
|
||||
"en": "English",
|
||||
"ja": "日本語",
|
||||
"ko": "한국어",
|
||||
"vi": "Tiếng Việt",
|
||||
"ru": "Русский"
|
||||
},
|
||||
"general": {
|
||||
"layout": "工作区布局",
|
||||
"sidebarWidth": "侧栏宽度",
|
||||
"sidebarWidthDesc": "会话侧栏的默认宽度",
|
||||
"collapseSidebar": "折叠侧栏",
|
||||
"collapseSidebarDesc": "隐藏会话树以专心操作终端,可用 Ctrl/Cmd+B 切换"
|
||||
},
|
||||
"appearance": {
|
||||
"themeGroup": "界面主题",
|
||||
"theme": "主题",
|
||||
"themeDesc": "应用界面配色(与终端配色无关)",
|
||||
"dark": "深色",
|
||||
"light": "浅色",
|
||||
"system": "跟随系统"
|
||||
},
|
||||
"terminal": {
|
||||
"fontGroup": "字体与字号",
|
||||
"fontFamily": "字体",
|
||||
"fontFamilyDesc": "需 Nerd Font 才能正确显示 Zsh 提示符图标",
|
||||
"fontSize": "字号",
|
||||
"fontSizeDesc": "终端文字大小",
|
||||
"scrollback": "回滚缓冲",
|
||||
"scrollbackDesc": "每个终端保留的历史行数",
|
||||
"keywordHighlight": "关键词高亮",
|
||||
"keywordHighlightDesc": "突出显示错误、警告和成功状态",
|
||||
"colorTheme": "配色主题"
|
||||
},
|
||||
"shortcuts": {
|
||||
"resetAll": "重置全部为默认",
|
||||
"custom": "自定义",
|
||||
"pressKeys": "按下快捷键...",
|
||||
"resetDefault": "重置为默认",
|
||||
"conflict": "与「{{label}}」冲突",
|
||||
"setTo": "设置为 {{keys}}",
|
||||
"hint": "点击快捷键可重新绑定 · 按 Esc 取消录入",
|
||||
"category": {
|
||||
"tabs": "标签管理",
|
||||
"view": "视图",
|
||||
"session": "会话",
|
||||
"tools": "工具"
|
||||
},
|
||||
"actions": {
|
||||
"tabNext": "切换到下一个标签",
|
||||
"tabPrev": "切换到上一个标签",
|
||||
"tabGotoN": "跳转到第 N 个标签",
|
||||
"tabClose": "关闭当前标签",
|
||||
"tabNew": "新建标签",
|
||||
"viewFullscreen": "切换全屏",
|
||||
"viewToggleSidebar": "折叠/展开侧栏",
|
||||
"sessionNew": "新建会话",
|
||||
"sessionQuickConnect": "快速连接",
|
||||
"toolsCommandPalette": "命令面板"
|
||||
}
|
||||
},
|
||||
"ssh": {
|
||||
"connection": "连接",
|
||||
"keepAlive": "保持心跳",
|
||||
"keepAliveDesc": "空闲时发送心跳,减少断线",
|
||||
"autoReconnect": "自动重连",
|
||||
"autoReconnectDesc": "意外断开后自动尝试重连",
|
||||
"timeout": "连接超时",
|
||||
"timeoutDesc": "建立 SSH 连接的最长等待时间(秒)",
|
||||
"maxReconnect": "自动重连次数",
|
||||
"maxReconnectDesc": "意外断线后的最大尝试次数",
|
||||
"pool": "连接池",
|
||||
"maxConnections": "最大连接数",
|
||||
"maxConnectionsDesc": "SSH、SFTP 与批量连接共享此上限",
|
||||
"maxBackground": "后台连接上限",
|
||||
"maxBackgroundDesc": "超过上限时优先回收最久未使用的连接",
|
||||
"suspend": "后台挂起",
|
||||
"suspendDesc": "标签进入后台后多少分钟释放活跃通道"
|
||||
},
|
||||
"security": {
|
||||
"credentials": "凭据保护",
|
||||
"sessionPassword": "会话密码与密钥口令",
|
||||
"sessionPasswordDesc": "保存前由 Rust 使用 AES-256-GCM 加密,无法关闭",
|
||||
"enabled": "已启用",
|
||||
"masterKey": "本地主密钥",
|
||||
"masterKeyDesc": "仅当前系统用户可读取;路径 ~/.opsxshell/master.key(旧版 ~/.opsxshsell 会自动迁移)",
|
||||
"knownHosts": "已知主机",
|
||||
"knownHostsHint": "首次连接会确认主机指纹。重装/克隆导致密钥变更时,连接弹窗可选「仍要信任并更新」覆盖旧记录。此处可删除单条或清空全部。",
|
||||
"clearAll": "清空",
|
||||
"removeHost": "删除此主机记录",
|
||||
"empty": "暂无记录",
|
||||
"clearConfirm": "确定清空全部已知主机密钥?下次连接将重新确认。"
|
||||
},
|
||||
"about": {
|
||||
"tagline": "轻量原生的 SSH / SFTP 运维终端",
|
||||
"appVersion": "应用 v{{version}}",
|
||||
"copyVersion": "复制版本信息",
|
||||
"runtime": "运行环境",
|
||||
"system": "系统",
|
||||
"localData": "本地数据",
|
||||
"sessionsSettings": "会话与设置",
|
||||
"masterKeyPath": "加密主密钥",
|
||||
"privacyNote": "密码与密钥口令由 Rust 使用 AES-256-GCM 加密。OpsXShell 不保存终端命令历史。",
|
||||
"license": "MIT License · Rust · XTerm.js"
|
||||
},
|
||||
"ai": {
|
||||
"presets": "供应商预设",
|
||||
"add": "添加",
|
||||
"configured": "已配置",
|
||||
"configuredHint": "选择供应商后点添加",
|
||||
"emptyHint": "添加一个 Provider 开始",
|
||||
"noModel": "未选模型",
|
||||
"name": "名称",
|
||||
"model": "模型",
|
||||
"protocol": "协议",
|
||||
"auth": "认证",
|
||||
"authNone": "无",
|
||||
"test": "测试",
|
||||
"testing": "测试中",
|
||||
"testingMessage": "测试中...",
|
||||
"saved": "已保存",
|
||||
"retest": "请重新测试",
|
||||
"testFailed": "连接测试失败",
|
||||
"available": "可用 · {{latency}} ms",
|
||||
"savedKeepBlank": "已保存,留空沿用",
|
||||
"notRequired": "无需填写",
|
||||
"otherModels": "其他模型…",
|
||||
"customModel": "自定义模型",
|
||||
"backToList": "返回列表",
|
||||
"apiKeyOptional": "API Key(无需)",
|
||||
"advanced": "高级",
|
||||
"allowHttp": "允许 HTTP(本机/内网)",
|
||||
"setActive": "设为当前",
|
||||
"deleteTitle": "删除",
|
||||
"apiKeySaveFailed": "API Key 保存失败",
|
||||
"providerNotFound": "Provider 不存在",
|
||||
"modelCatalogReadFailed": "模型目录读取失败",
|
||||
"catalogUnavailable": "models.dev 暂不可用"
|
||||
},
|
||||
"family": {
|
||||
"openai_compatible": "OpenAI 兼容",
|
||||
"standalone": "────────",
|
||||
"plan": "Plan 计划",
|
||||
"local": "私有化本地",
|
||||
"custom": "Custom 自定义"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,186 @@
|
||||
{
|
||||
"panel": {
|
||||
"local": "本地",
|
||||
"remote": "远程",
|
||||
"notConnectedTitle": "未连接到远程服务器",
|
||||
"notConnectedDesc": "请先连接 SSH 会话以使用 SFTP",
|
||||
"ariaLabel": "{{title}}文件面板"
|
||||
},
|
||||
"connection": {
|
||||
"selectServer": "选择服务器",
|
||||
"noSessions": "暂无保存的会话",
|
||||
"createSessionHint": "请先在侧边栏创建会话",
|
||||
"reconnect": "重新连接",
|
||||
"notConnected": "未连接",
|
||||
"connecting": "连接中..."
|
||||
},
|
||||
"errors": {
|
||||
"notConnected": "SFTP 尚未连接",
|
||||
"noUploadFiles": "没有可上传的文件",
|
||||
"localStatFailed": "无法读取本地文件信息",
|
||||
"loadRemoteFailed": "加载远程目录失败: {{message}}",
|
||||
"noFolderDownload": "下载文件夹失败",
|
||||
"selectDownloadFiles": "请先选择要下载的文件",
|
||||
"uploadFailed": "上传失败",
|
||||
"downloadFailed": "下载失败",
|
||||
"fileError": "{{fileName}}: {{message}}"
|
||||
},
|
||||
"toolbar": {
|
||||
"upload": "上传",
|
||||
"uploadAria": "上传",
|
||||
"download": "下载",
|
||||
"downloadAria": "下载",
|
||||
"downloadNeedSelection": "请先选择远程文件",
|
||||
"downloadHint": "下载选中的远程文件",
|
||||
"refresh": "刷新",
|
||||
"refreshAria": "刷新",
|
||||
"newFolder": "新建文件夹",
|
||||
"newFolderAria": "新建文件夹"
|
||||
},
|
||||
"sort": {
|
||||
"name": "名称",
|
||||
"modified": "修改时间",
|
||||
"size": "大小",
|
||||
"type": "类型"
|
||||
},
|
||||
"nav": {
|
||||
"home": "主目录",
|
||||
"back": "后退",
|
||||
"forward": "前进",
|
||||
"up": "上级目录",
|
||||
"searchPlaceholder": "搜索文件名",
|
||||
"clearSearch": "清除搜索",
|
||||
"clearSearchAria": "清除搜索",
|
||||
"showHidden": "显示隐藏文件",
|
||||
"hideHidden": "隐藏点文件(.xxx)",
|
||||
"showHiddenAria": "显示隐藏文件",
|
||||
"hideHiddenAria": "隐藏点文件",
|
||||
"searchAria": "{{title}} 当前文件夹搜索"
|
||||
},
|
||||
"status": {
|
||||
"loading": "加载中...",
|
||||
"selected": "已选择 {{count}} 项",
|
||||
"filtered": "显示 {{shown}} / {{total}} 项",
|
||||
"hiddenCount": "共 {{total}} 项(已隐藏 {{hidden}})",
|
||||
"total": "共 {{count}} 项",
|
||||
"filterHint": "筛选: {{query}}"
|
||||
},
|
||||
"empty": {
|
||||
"dirTitle": "目录为空",
|
||||
"dirDescLocal": "此目录下没有文件",
|
||||
"dirDescRemote": "可尝试返回上级或刷新",
|
||||
"goUp": "返回上级",
|
||||
"hiddenOnlyTitle": "仅有隐藏文件",
|
||||
"hiddenOnlyDesc": "点击标题栏眼睛图标显示点文件",
|
||||
"showHiddenAction": "显示隐藏文件",
|
||||
"noMatchTitle": "无匹配文件",
|
||||
"noMatchDesc": "没有包含「{{query}}」的文件"
|
||||
},
|
||||
"fileType": {
|
||||
"folder": "文件夹",
|
||||
"symlink": "链接",
|
||||
"symlinkLong": "符号链接",
|
||||
"file": "文件",
|
||||
"text": "文本",
|
||||
"log": "日志",
|
||||
"database": "数据库",
|
||||
"imageIso": "镜像",
|
||||
"executable": "可执行",
|
||||
"library": "库"
|
||||
},
|
||||
"relativeDate": {
|
||||
"today": "今天",
|
||||
"yesterday": "昨天",
|
||||
"daysAgo": "{{count}} 天前"
|
||||
},
|
||||
"contextMenu": {
|
||||
"open": "打开",
|
||||
"upload": "上传",
|
||||
"download": "下载",
|
||||
"edit": "编辑",
|
||||
"rename": "重命名",
|
||||
"copyPath": "复制路径",
|
||||
"properties": "属性",
|
||||
"permissions": "权限",
|
||||
"delete": "删除"
|
||||
},
|
||||
"dialog": {
|
||||
"renameTitle": "重命名",
|
||||
"renameMessage": "输入新名称:",
|
||||
"renamePlaceholder": "新名称",
|
||||
"newFolderTitle": "新建文件夹",
|
||||
"newFolderMessage": "输入文件夹名称:",
|
||||
"newFolderPlaceholder": "文件夹名称",
|
||||
"propertiesTitle": "文件属性",
|
||||
"propertiesClose": "关闭",
|
||||
"chmodTitle": "权限编辑",
|
||||
"chmodApply": "应用",
|
||||
"pickUploadTitle": "选择要上传的文件或文件夹",
|
||||
"pickUploadRzTitle": "选择要上传的文件(rz)"
|
||||
},
|
||||
"properties": {
|
||||
"name": "名称",
|
||||
"path": "路径",
|
||||
"size": "大小",
|
||||
"permissions": "权限",
|
||||
"modified": "修改时间",
|
||||
"accessed": "访问时间",
|
||||
"symlink": "符号链接",
|
||||
"loadingDetails": "加载详细信息..."
|
||||
},
|
||||
"chmod": {
|
||||
"read": "读取",
|
||||
"write": "写入",
|
||||
"execute": "执行",
|
||||
"owner": "所有者",
|
||||
"group": "所属组",
|
||||
"other": "其他人",
|
||||
"current": "当前权限:",
|
||||
"readR": "读取 (r)",
|
||||
"writeW": "写入 (w)",
|
||||
"executeX": "执行 (x)"
|
||||
},
|
||||
"transfer": {
|
||||
"queue": "传输队列",
|
||||
"active": "{{count}} 进行中",
|
||||
"completed": "{{count}} 已完成",
|
||||
"taskCount": "{{count}} 个任务",
|
||||
"empty": "暂无传输任务",
|
||||
"cancel": "取消",
|
||||
"remove": "移除",
|
||||
"statusWaiting": "等待中",
|
||||
"statusDone": "完成",
|
||||
"statusFailed": "失败",
|
||||
"statusCancelled": "已取消",
|
||||
"dropUpload": "上传到 {{path}}",
|
||||
"dropDownload": "下载到 {{path}}"
|
||||
},
|
||||
"editor": {
|
||||
"readFailed": "读取失败",
|
||||
"saveFailed": "保存失败",
|
||||
"unsavedClose": "有未保存的修改,确定关闭?",
|
||||
"saving": "保存中...",
|
||||
"save": "保存",
|
||||
"saved": "文件已保存",
|
||||
"loadingEditor": "加载编辑器...",
|
||||
"footer": "UTF-8 · Monaco · ⌘/Ctrl+S 保存 · 最大约 2MB",
|
||||
"charCount": "{{count}} 字符",
|
||||
"unsavedMark": " · 未保存",
|
||||
"savedMark": " · 已保存"
|
||||
},
|
||||
"toast": {
|
||||
"renamed": "已重命名为 {{name}}",
|
||||
"renameFailed": "重命名失败",
|
||||
"pathCopied": "路径已复制到剪贴板",
|
||||
"pathCopyFailed": "复制路径失败",
|
||||
"chmodUpdated": "权限已更新为 {{mode}}",
|
||||
"chmodFailed": "权限修改失败",
|
||||
"uploadPartial": "{{action}}完成 {{completed}} 个,失败 {{failed}} 个:{{detail}}",
|
||||
"uploadSuccess": "{{action}}完成 {{completed}} 项",
|
||||
"uploadAction": "上传",
|
||||
"downloadAction": "下载",
|
||||
"noFolderUpload": "上传文件夹失败",
|
||||
"noDragPath": "当前系统未提供拖拽文件路径,请使用“上传”按钮选择文件",
|
||||
"noFolderRecursive": "文件夹递归传输失败,请重试或改用上传按钮"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"panel": {
|
||||
"title": "命令片段"
|
||||
},
|
||||
"search": {
|
||||
"placeholder": "搜索片段..."
|
||||
},
|
||||
"form": {
|
||||
"name": "名称",
|
||||
"command": "命令",
|
||||
"tags": "标签",
|
||||
"tagsHint": "(逗号分隔)",
|
||||
"namePlaceholder": "例如:重启 Nginx",
|
||||
"commandPlaceholder": "sudo systemctl restart nginx\n# 支持 {{host}} {{username}} {{date}}",
|
||||
"variables": "变量:"
|
||||
},
|
||||
"dialog": {
|
||||
"createTitle": "新建片段",
|
||||
"editTitle": "编辑片段"
|
||||
},
|
||||
"empty": {
|
||||
"noMatch": "没有匹配的片段",
|
||||
"noMatchDesc": "尝试其他关键词搜索",
|
||||
"noSnippets": "暂无片段",
|
||||
"noSnippetsDesc": "保存常用命令,快速插入到终端"
|
||||
},
|
||||
"action": {
|
||||
"create": "新建片段",
|
||||
"insert": "插入到终端",
|
||||
"noTerminal": "无活跃终端"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
{
|
||||
"toolbar": {
|
||||
"splitHorizontal": "左右分屏",
|
||||
"splitVertical": "上下分屏",
|
||||
"addPane": "再加一屏",
|
||||
"closePane": "关闭当前分屏",
|
||||
"maximizePane": "最大化当前分屏",
|
||||
"restoreLayout": "恢复分屏布局",
|
||||
"broadcast": "广播",
|
||||
"broadcastAria": "广播输入",
|
||||
"broadcastOn": "广播已开启:输入将同步到范围内 {{count}} 个终端",
|
||||
"broadcastOffPro": "广播同步输入(Pro)· 当前范围 {{count}} 个终端",
|
||||
"broadcastNeedPanesTab": "当前标签至少需要 2 个就绪分页才能广播(先点上下/左右分屏)",
|
||||
"broadcastNeedPanesAll": "全部终端标签至少需要 2 个就绪终端才能广播",
|
||||
"broadcastScopeAria": "广播目标范围",
|
||||
"broadcastScopeTab": "当前标签分页",
|
||||
"broadcastScopeAll": "全部终端标签",
|
||||
"broadcastActive": "广播中 · {{count}}",
|
||||
"aiAssistant": "AI 助手",
|
||||
"aiOpen": "打开终端 AI 助手",
|
||||
"aiClose": "关闭终端 AI 助手",
|
||||
"aiTitle": "终端 AI 助手(Pro)",
|
||||
"paneCount": "{{current}}/{{max}}",
|
||||
"labelLocal": "本地终端",
|
||||
"labelSsh": "SSH 终端",
|
||||
"closePaneLabel": "关闭当前分屏",
|
||||
"closeTabLabel": "关闭当前终端标签",
|
||||
"targetSshSession": "当前 SSH 会话"
|
||||
},
|
||||
"overlay": {
|
||||
"shellClosedIdle": "空闲超时,Shell 已退出",
|
||||
"shellClosed": "Shell 已退出",
|
||||
"shellClosedHint": "SSH 连接仍可用,其他分屏、SFTP 和隧道不受影响",
|
||||
"reopenShell": "重新打开 Shell",
|
||||
"reopening": "正在打开…",
|
||||
"disconnected": "连接已断开",
|
||||
"disconnectedHint": "SSH 会话已结束或网络中断。点击下方一键重新连接。",
|
||||
"reconnect": "重新连接",
|
||||
"suspended": "连接已挂起",
|
||||
"suspendedHint": "长时间未操作,连接已进入挂起以节省资源",
|
||||
"resume": "恢复连接",
|
||||
"connectFailed": "连接失败",
|
||||
"connectFailedHint": "请检查主机、端口、用户名与认证方式",
|
||||
"retryConnect": "重试连接",
|
||||
"connecting": "正在连接…",
|
||||
"reconnecting": "自动重连中{{attempt}}…",
|
||||
"reconnectingAttempt": " ({{count}})",
|
||||
"localShellExited": "本地 Shell 已退出"
|
||||
},
|
||||
"hostKey": {
|
||||
"titleNew": "确认主机密钥",
|
||||
"titleChanged": "主机密钥已变更",
|
||||
"descNew": "首次连接此主机,请核对指纹后信任。",
|
||||
"descChanged": "该主机的 SSH 密钥与本地记录不一致,可能存在中间人攻击风险。",
|
||||
"host": "主机",
|
||||
"type": "类型",
|
||||
"fingerprint": "SHA256 指纹",
|
||||
"previousFingerprint": "先前指纹",
|
||||
"reject": "拒绝",
|
||||
"acceptOnce": "仅本次",
|
||||
"acceptAlways": "始终信任",
|
||||
"acceptAlwaysChanged": "仍要信任并更新"
|
||||
},
|
||||
"contextMenu": {
|
||||
"aria": "终端操作",
|
||||
"copy": "复制",
|
||||
"paste": "粘贴",
|
||||
"selectAll": "全选终端内容",
|
||||
"clear": "清空显示",
|
||||
"splitRight": "向右分屏",
|
||||
"splitDown": "向下分屏",
|
||||
"maximizePane": "最大化当前分屏",
|
||||
"restoreLayout": "恢复分屏布局"
|
||||
},
|
||||
"search": {
|
||||
"placeholder": "搜索...",
|
||||
"previous": "上一个 (Shift+Enter)",
|
||||
"next": "下一个 (Enter)",
|
||||
"close": "关闭 (Escape)"
|
||||
},
|
||||
"zmodem": {
|
||||
"uploadTransferring": "rz 上传:{{detail}}",
|
||||
"downloadTransferring": "sz 下载:{{detail}}",
|
||||
"selectLocalFile": "选择本地文件",
|
||||
"pickUploadTitle": "选择要上传的文件(rz)",
|
||||
"uploadedCount": "已上传 {{count}} 个文件",
|
||||
"downloadedSingle": "{{path}}",
|
||||
"downloadedCount": "已下载 {{count}} 个文件 → {{dir}}",
|
||||
"transferDone": "传输结束",
|
||||
"transferFailed": "传输失败 {{message}}",
|
||||
"uploadSuccessTerminal": "✓ 已上传 {{count}} 个文件 到远端当前目录",
|
||||
"downloadSuccessTerminal": "✓ 已下载 {{path}}",
|
||||
"savedDownloadsSingle": "✓ 已保存到下载目录",
|
||||
"savedDownloadsMultiple": "✓ 已保存 {{count}} 个文件到下载目录",
|
||||
"nativeApiUnavailable": "原生 API 不可用",
|
||||
"readFailed": "读取失败: {{name}}",
|
||||
"writeFailed": "写入失败: {{name}}",
|
||||
"createLocalShellFailed": "创建本地 Shell 失败",
|
||||
"createRemoteShellFailed": "创建远端 Shell 失败",
|
||||
"createShellFailed": "创建 Shell 失败: {{error}}"
|
||||
},
|
||||
"clipboard": {
|
||||
"readFailed": "读取剪贴板失败",
|
||||
"writeFailed": "写入剪贴板失败"
|
||||
},
|
||||
"input": {
|
||||
"failed": "终端输入失败"
|
||||
},
|
||||
"connection": {
|
||||
"errorPrefix": "错误: {{message}}",
|
||||
"autoReconnecting": "自动重连中 ({{attempt}})...",
|
||||
"autoReconnectLimit": "自动重连已达上限 ({{max}}){{reasonSuffix}}",
|
||||
"autoReconnectLimitReason": " — {{reason}}",
|
||||
"disconnectedRetry": "连接断开,{{seconds}}s 后第 {{attempt}}/{{max}} 次重连...",
|
||||
"autoReconnectBanner": "[自动重连] {{seconds}}s 后尝试 {{attempt}}/{{max}}",
|
||||
"disconnectedBanner": "[连接已断开] {{reason}}",
|
||||
"noConfig": "无可用连接信息"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user