feat: harden local shell, SFTP, and desktop session reliability
Finder-launched terminals now inherit a login PATH so tools like ollama resolve, destructive SFTP/editor actions require confirmation, and terminal search plus window dragging work again. SSH forwards and RDP sessions keep listeners and survive reconnect without FastPath crashes. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
188f3556ed
commit
08696896f9
223 files changed
+13493
-3423
No files matched your search
@@ -78,7 +78,7 @@
|
||||
"closeTab": "关闭当前标签",
|
||||
"closeAllTabs": "关闭所有标签",
|
||||
"portForward": "新建端口转发",
|
||||
"upgradePro": "升级 OpsXShell Pro",
|
||||
"upgradePro": "升级 OpsXShell 专业版",
|
||||
"editSession": "编辑会话: {{name}}"
|
||||
}
|
||||
},
|
||||
@@ -90,6 +90,8 @@
|
||||
"terminal": "终端",
|
||||
"batch": "批量执行",
|
||||
"newTerminal": "新终端",
|
||||
"closeAria": "关闭 {{title}}",
|
||||
"listAria": "打开的标签",
|
||||
"kind": {
|
||||
"terminal": "终端",
|
||||
"sftp": "SFTP",
|
||||
@@ -105,7 +107,8 @@
|
||||
"closeRight": "关闭右侧标签",
|
||||
"closeLeft": "关闭左侧标签",
|
||||
"closeAll": "关闭全部",
|
||||
"clone": "克隆标签"
|
||||
"clone": "克隆标签",
|
||||
"openSftp": "打开 SFTP"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
@@ -149,39 +152,44 @@
|
||||
"disconnect": "断开"
|
||||
},
|
||||
"pro": {
|
||||
"upgrade": "升级 Pro",
|
||||
"feature": "专业功能",
|
||||
"unlock": "解锁 {{feature}}",
|
||||
"upgrade": "升级专业版",
|
||||
"feature": "专业版功能",
|
||||
"unlock": "解锁专业版高级功能",
|
||||
"comingSoon": "即将推出",
|
||||
"activateSuccess": "激活成功",
|
||||
"activateFailed": "激活失败",
|
||||
"licenseActivated": "Pro 许可证已激活",
|
||||
"licenseActivated": "专业版许可证已激活",
|
||||
"paymentPending": "支付完成后请粘贴许可证,或稍后再试激活",
|
||||
"invalidLicense": "激活失败:许可证无效",
|
||||
"goUpgrade": "去付费升级",
|
||||
"goUpgrade": "去升级专业版",
|
||||
"haveLicense": "已有许可证?激活",
|
||||
"title": "OpsXShell Pro · 解锁专业运维能力",
|
||||
"subtitleComingSoon": "{{feature}} 即将推出 · 升级 Pro 可优先体验",
|
||||
"subtitleUnlock": "正在解锁:{{feature}}",
|
||||
"subtitleDefault": "转发、代理、串口、AI、批量与广播",
|
||||
"activated": "已激活 Pro",
|
||||
"title": "OpsXShell · 解锁专业版",
|
||||
"subtitleComingSoon": "高级功能即将推出 · 升级专业版可优先体验",
|
||||
"subtitleUnlock": "目前正在解锁高级功能",
|
||||
"subtitleDefault": "端口转发、终端 AI、批量运维、主机清单与远程桌面等专业版能力",
|
||||
"activated": "已激活专业版",
|
||||
"expiresAt": " · 有效期至 {{date}}",
|
||||
"lifetime": " · 终身授权",
|
||||
"oneTimeFee": "一次性费用 · 本机终身授权 · 无需订阅",
|
||||
"oneTimeFee": "免费 / 专业版包年 / 专业版永久",
|
||||
"pasteLicense": "粘贴许可证",
|
||||
"activateButton": "激活",
|
||||
"clearLicense": "清除本机许可证",
|
||||
"paymentNote": "支付由 Waffo 托管收银台处理;本应用不收集或保存银行卡信息。",
|
||||
"testDeviceId": "测试环境 · 设备 ID:{{deviceId}}",
|
||||
"later": "稍后再说",
|
||||
"viewPro": "查看 Pro",
|
||||
"wallComingSoonSuffix": " · 即将推出",
|
||||
"wallUnlock": "解锁 {{feature}}",
|
||||
"wallMessageComingSoon": "该能力属于 OpsXShell Pro,协议实现尚在开发中。升级后可优先体验。",
|
||||
"wallMessageDefault": "此功能属于 OpsXShell Pro。升级后即可在本机使用。",
|
||||
"viewPro": "查看专业版方案",
|
||||
"wallComingSoonSuffix": "即将推出",
|
||||
"wallUnlock": "解锁专业版高级功能",
|
||||
"wallMessageComingSoon": "该能力属于 OpsXShell 专业版,相关实现尚在完善。升级专业版包年或永久后,可优先体验。",
|
||||
"wallMessageDefault": "端口转发、终端 AI、批量执行、主机清单与远程桌面等均包含在专业版中。升级专业版包年或永久后,即可在本机使用。",
|
||||
"checkoutUnavailable": "结账服务不可用 ({{status}})",
|
||||
"freeTier": "Free",
|
||||
"proTier": "Pro",
|
||||
"emailLabel": "邮箱",
|
||||
"emailRequired": "结账前请先填写邮箱",
|
||||
"claimPending": "正在领取许可证…",
|
||||
"invalidKeyFormat": "密钥格式无效,请粘贴 LIC- 开头的许可证",
|
||||
"accountEmail": "账户:{{email}}",
|
||||
"freeTier": "免费",
|
||||
"proTier": "专业版",
|
||||
"freeItems": {
|
||||
"ssh": "SSH 终端",
|
||||
"sftp": "SFTP 文件管理",
|
||||
@@ -197,16 +205,54 @@
|
||||
"batch": "批量执行 / 广播同步",
|
||||
"broadcast": "广播同步输入",
|
||||
"importExport": "批量导入导出主机清单",
|
||||
"desktop": "RDP / VNC 远程桌面"
|
||||
}
|
||||
"desktop": "远程桌面(RDP / VNC)"
|
||||
},
|
||||
"planYearly": "专业版包年",
|
||||
"planYearlyDesc": "¥99 / 年 · 2 台设备",
|
||||
"planPerpetual": "专业版永久",
|
||||
"planPerpetualDesc": "¥199 · 5 台设备 · 终身",
|
||||
"planTrial": "专业版体验",
|
||||
"devices": "最多 {{count}} 台设备",
|
||||
"goUpgradeYearly": "购买专业版包年",
|
||||
"goUpgradePerpetual": "购买专业版永久",
|
||||
"activatedYearly": "已激活专业版包年",
|
||||
"activatedPerpetual": "已激活专业版永久",
|
||||
"activatedTrial": "已激活专业版体验",
|
||||
"choosePlan": "选择方案:免费 / 专业版包年 / 专业版永久",
|
||||
"planFreePrice": "¥0",
|
||||
"planFreeDesc": "SSH · SFTP · 本地终端",
|
||||
"planFreeCta": "当前方案",
|
||||
"planIncludesPro": "含全部专业版功能",
|
||||
"planFree": "免费",
|
||||
"subtitleUnlockDetail": "相关能力:{{feature}}",
|
||||
"wallUnlockComingSoon": "专业版高级功能即将推出",
|
||||
"wallMessageComingSoonFeature": "「{{feature}}」属于专业版高级功能,相关实现尚在完善。升级专业版包年或永久后,可优先体验。",
|
||||
"wallMessageFeature": "「{{feature}}」属于专业版高级功能。升级专业版包年或永久后,即可在本机使用。"
|
||||
},
|
||||
"launcher": {
|
||||
"title": "快速启动",
|
||||
"description": "会话、本地 Shell 与设备控制台统一入口",
|
||||
"description": "常用入口集中:会话、本机 Shell、桌面、串口",
|
||||
"cards": {
|
||||
"quickConnect": { "title": "快速连接", "desc": "user@host:port" },
|
||||
"saveSession": { "title": "保存会话", "desc": "凭据、分组、代理" },
|
||||
"serial": { "title": "串口终端", "desc": "波特率与串口参数" }
|
||||
"quickConnect": {
|
||||
"title": "快速连接",
|
||||
"desc": "user@host:port"
|
||||
},
|
||||
"saveSession": {
|
||||
"title": "保存会话",
|
||||
"desc": "凭据、分组、代理"
|
||||
},
|
||||
"serial": {
|
||||
"title": "串口终端",
|
||||
"desc": "波特率与串口参数"
|
||||
},
|
||||
"rdp": {
|
||||
"title": "RDP 桌面",
|
||||
"desc": "远程 Windows 桌面"
|
||||
},
|
||||
"vnc": {
|
||||
"title": "VNC 桌面",
|
||||
"desc": "远程图形桌面"
|
||||
}
|
||||
},
|
||||
"sectionLocalShell": "本地 Shell",
|
||||
"sectionSavedSessions": "保存会话",
|
||||
@@ -220,6 +266,7 @@
|
||||
"forwardOpenRunning": "SOCKS5 已开(:{{port}})· 点击管理 · 右键复制",
|
||||
"forwardStarted": "转发已启动",
|
||||
"forwardStartedDynamic": "SOCKS5 已启动:socks5://127.0.0.1:{{port}}",
|
||||
"forwardResumed": "已恢复 {{count}} 条端口转发",
|
||||
"socksStartFailed": "启动失败:{{message}}",
|
||||
"socksStopFailed": "停止失败:{{message}}",
|
||||
"socksCopied": "已复制 socks5://127.0.0.1:{{port}}"
|
||||
@@ -240,7 +287,7 @@
|
||||
"typeDynamic": "动态",
|
||||
"running": "运行中",
|
||||
"socksProxy": "SOCKS5:127.0.0.1:{{port}}",
|
||||
"remoteToLocal": "远端 {{remote}} → 本机 {{local}}",
|
||||
"remoteToLocal": "远端 {{bind}}:{{remote}} → {{host}}:{{local}}",
|
||||
"stats": "{{connections}} 连接 · ↑{{up}} · ↓{{down}}",
|
||||
"copyProxy": "复制代理",
|
||||
"copyRule": "复制规则",
|
||||
@@ -250,15 +297,15 @@
|
||||
"delete": "删除",
|
||||
"editTitle": "编辑转发",
|
||||
"addTitle": "添加转发",
|
||||
"typeLocalDesc": "本机 → 远端",
|
||||
"typeRemoteDesc": "远端 → 本机",
|
||||
"typeLocalDesc": "访问远端服务",
|
||||
"typeRemoteDesc": "暴露本机服务",
|
||||
"typeDynamicDesc": "SOCKS5",
|
||||
"selectType": "转发类型",
|
||||
"drawerSubtitle": "经当前 SSH 建立隧道",
|
||||
"ruleFields": "参数",
|
||||
"dynamicHint": "本机 SOCKS5,默认 127.0.0.1:1080;端口可改。流量经当前 SSH 服务器出口 IP 访问外网。",
|
||||
"dynamicSingleHint": "每台 SSH 仅一条动态转发;停止后可改监听端口。",
|
||||
"dynamicPortHint": "端口被占用时可改为其他本机端口(如 1081)。",
|
||||
"dynamicHint": "本机 SOCKS5(默认 :1080)。流量经当前 SSH 出口访问外网。",
|
||||
"dynamicSingleHint": "每台 SSH 仅一条动态转发;停止后可改端口。",
|
||||
"dynamicPortHint": "端口被占用时可改,例如 1081。",
|
||||
"ruleList": "规则",
|
||||
"ruleListEmpty": "暂无本地 / 远程规则",
|
||||
"addSection": "新建",
|
||||
@@ -292,17 +339,30 @@
|
||||
"internet": "互联网",
|
||||
"localCaption": "本地转发:经隧道访问远端端口,如同访问本机。",
|
||||
"remoteCaption": "远程转发:远端访问经隧道转到本机服务。",
|
||||
"dynamicCaption": "动态转发:本机变成 SOCKS5 代理,可经当前 SSH 服务器出口 IP 访问互联网。"
|
||||
"dynamicCaption": "动态转发:本机 SOCKS5,经当前 SSH 出口访问外网。"
|
||||
},
|
||||
"ruleName": "名称",
|
||||
"ruleNamePlaceholder": "例如 MySQL",
|
||||
"localListenPort": "本机监听端口",
|
||||
"localListenPortHint": "默认 localhost,等同 ssh -L 端口:…。一般只填端口。",
|
||||
"localBindAdvanced": "高级:改本机绑定",
|
||||
"localTargetPort": "本机目标端口",
|
||||
"remoteTargetPort": "远端目标端口",
|
||||
"remoteTargetPort": "目标端口",
|
||||
"remoteListenPort": "远端监听端口",
|
||||
"remoteListenPortHint": "默认仅远端 localhost,等同 ssh -R 端口:…。一般只填端口。",
|
||||
"remoteListenAddress": "远端监听",
|
||||
"remoteListenAddressPlaceholder": "127.0.0.1:18080",
|
||||
"remoteListenAddressHint": "127.0.0.1 = 仅远端本机;0.0.0.0 = 远端内网可连(需 GatewayPorts)。",
|
||||
"errorRemoteListenAddress": "请填写有效远端监听,如 127.0.0.1:18080",
|
||||
"localTargetAddress": "本机 / 内网目标",
|
||||
"localTargetAddressPlaceholder": "127.0.0.1:8080",
|
||||
"localTargetAddressHint": "转到本机或内网服务,如 127.0.0.1:8080。勿填 0.0.0.0。",
|
||||
"viaSessionRemote": "在 {{target}} 上监听(默认 localhost)",
|
||||
"errorRemoteListenPort": "请填写有效远端监听端口(1–65535)",
|
||||
"errorLocalTargetAddress": "请填写有效本机/内网目标,如 127.0.0.1:8080",
|
||||
"portPlaceholder": "如 3306",
|
||||
"remoteHost": "远端主机",
|
||||
"remoteHostPlaceholder": "localhost 或 IP",
|
||||
"remoteHost": "目标主机",
|
||||
"remoteHostPlaceholder": "127.0.0.1",
|
||||
"socksRuleName": "SOCKS5 代理",
|
||||
"defaultLocalName": "本地转发",
|
||||
"defaultRemoteName": "远程转发",
|
||||
@@ -316,11 +376,35 @@
|
||||
"deleteConfirm": "确定删除此规则?",
|
||||
"errorNamePort": "请填写名称和有效端口(1–65535)",
|
||||
"errorTargetPort": "请填写有效目标端口(1–65535)",
|
||||
"errorRemoteHost": "请填写远端主机",
|
||||
"errorRemoteHost": "请填写目标主机(相对当前 SSH 服务器)",
|
||||
"errorNotConnected": "未连接到服务器",
|
||||
"errorStartFailed": "启动失败",
|
||||
"errorStopFailed": "停止失败",
|
||||
"errorSocksRunning": "SOCKS5 已在运行",
|
||||
"copySuffix": "副本"
|
||||
"copySuffix": "副本",
|
||||
"remoteBindHint": "0.0.0.0 需 GatewayPorts;未开启时常静默绑 127.0.0.1。目标勿填 0.0.0.0。",
|
||||
"localToRemote": "本机 {{bind}}:{{local}} → 远端 {{host}}:{{remote}}",
|
||||
"localToRemotePort": "本机 :{{local}} → 远端 {{host}}:{{remote}}",
|
||||
"remoteHostHint": "相对 SSH 服务器。远端本机填 127.0.0.1,内网其它机填可达 IP。勿填 0.0.0.0。",
|
||||
"localBindHost": "本地绑定",
|
||||
"localBindHostPlaceholder": "127.0.0.1",
|
||||
"localBindHostHint": "默认仅本机。填 0.0.0.0 或内网 IP 可让局域网访问。",
|
||||
"errorTargetHostInvalid": "目标不能是 0.0.0.0,请填 127.0.0.1 或可达内网 IP",
|
||||
"listenAddress": "本机监听",
|
||||
"listenAddressPlaceholder": "127.0.0.1:8080",
|
||||
"listenAddressHint": "默认仅本机;0.0.0.0 可让局域网访问。",
|
||||
"targetAddress": "远端目标",
|
||||
"targetAddressPlaceholder": "127.0.0.1:80",
|
||||
"targetAddressHint": "相对 SSH 服务器。远端本机服务填 127.0.0.1:端口。",
|
||||
"errorListenAddress": "请填写有效监听地址,如 127.0.0.1:8080",
|
||||
"errorTargetAddress": "请填写有效目标,如 127.0.0.1:80",
|
||||
"targetAddressHintVia": "经 {{target}}。远端本机服务填 127.0.0.1:端口(不会在远端新建端口)。",
|
||||
"viaSession": "经当前会话 {{target}}",
|
||||
"remoteToLocalPort": "远端 :{{remote}} → {{host}}:{{local}}",
|
||||
"remoteBindAdvanced": "高级:改远端绑定",
|
||||
"remoteBindHost": "远端绑定",
|
||||
"remoteBindHostPlaceholder": "127.0.0.1",
|
||||
"remoteBindHostHint": "默认仅远端本机。0.0.0.0 需 GatewayPorts;未开启时多数 sshd 仍只绑 127.0.0.1。",
|
||||
"remoteGatewayPortsWarning": "已请求远端 0.0.0.0 监听。若未开 GatewayPorts,sshd 常会静默只绑 127.0.0.1。"
|
||||
}
|
||||
}
|
||||
@@ -15,10 +15,12 @@
|
||||
"passwordOptional": "密码(可选)",
|
||||
"width": "宽度",
|
||||
"height": "高度",
|
||||
"rdpFootnote": "原生 IronRDP:TCP → X.224 → TLS → CredSSP/NLA → MCS;握手超时 45s。证书校验当前为开发期宽松模式。",
|
||||
"vncFootnote": "原生 vnc-rs RFB:支持 Tight JPEG 帧解码;剪贴板按 UTF-8 发送(极旧服务端可能乱码)。",
|
||||
"rdpFootnote": "全屏或最大化时,会按当前窗口区域动态请求远端分辨率;也可在连接前用预设选择初始分辨率。证书校验当前为开发期宽松模式。",
|
||||
"vncFootnote": "多数 VNC 服务端分辨率由远端固定,全屏仅本地缩放适配;连接前的偏好尺寸仅供参考。剪贴板按 UTF-8 发送。",
|
||||
"errorHostRequired": "请输入主机地址",
|
||||
"errorUsernameRequired": "请输入用户名"
|
||||
"errorUsernameRequired": "请输入用户名",
|
||||
"resolution": "分辨率",
|
||||
"resolutionCustom": "自定义"
|
||||
},
|
||||
"toolbar": {
|
||||
"pasteClipboard": "粘贴本机剪贴板到远端",
|
||||
@@ -28,7 +30,12 @@
|
||||
"openShareDir": "在本机打开共享目录(下载文件夹)",
|
||||
"openShareDirAria": "打开共享目录",
|
||||
"disconnect": "断开连接",
|
||||
"disconnectAria": "断开连接"
|
||||
"disconnectAria": "断开连接",
|
||||
"fullscreen": "全屏",
|
||||
"fullscreenAria": "进入全屏",
|
||||
"exitFullscreen": "退出全屏",
|
||||
"exitFullscreenAria": "退出全屏",
|
||||
"exitFullscreenHint": "Esc / F11 退出"
|
||||
},
|
||||
"status": {
|
||||
"connecting": "正在连接…",
|
||||
|
||||
@@ -39,7 +39,9 @@
|
||||
"closed": "连接已关闭",
|
||||
"dnsFailed": "无法解析主机",
|
||||
"refused": "连接被拒绝",
|
||||
"disconnected": "连接已断开"
|
||||
"disconnected": "连接已断开",
|
||||
"keepaliveFailed": "SSH 心跳连续失败,连接已关闭",
|
||||
"idleKicked": "远端 Shell 因空闲超时退出(TMOUT)"
|
||||
},
|
||||
"auth": {
|
||||
"failed": "认证失败,请检查用户名和密码",
|
||||
@@ -68,7 +70,10 @@
|
||||
"forward": {
|
||||
"failed": "端口转发设置失败",
|
||||
"bindFailed": "端口绑定失败",
|
||||
"alreadyInUse": "端口已被占用"
|
||||
"alreadyInUse": "本地端口已被占用。请先暂停本规则或其它占用该端口的进程,再启动。",
|
||||
"remoteDenied": "远端拒绝远程端口转发(AllowTcpForwarding / PermitListen、端口占用或绑定限制)。当前仅在远端 127.0.0.1 监听。",
|
||||
"remoteDeniedPrivileged": "远端拒绝特权监听端口(<1024)。请改用 ≥1024,或以 root 监听,并检查 AllowTcpForwarding / PermitListen。",
|
||||
"invalidTargetHost": "目标地址不能是 0.0.0.0,请填 127.0.0.1 或远端可达的内网 IP"
|
||||
},
|
||||
"sftp": {
|
||||
"connectFailed": "SFTP 连接失败",
|
||||
@@ -80,7 +85,15 @@
|
||||
"writeFailed": "保存失败",
|
||||
"renameFailed": "重命名失败",
|
||||
"chmodFailed": "权限修改失败",
|
||||
"apiUnavailable": "SFTP API 不可用"
|
||||
"apiUnavailable": "SFTP API 不可用",
|
||||
"channelFailed": "无法打开 SFTP 通道(服务器限制或会话繁忙),请重连后再试",
|
||||
"sessionGone": "SFTP 会话已结束,请重新连接",
|
||||
"busy": "正在传输文件,请稍后再试",
|
||||
"editTooLarge": "文件过大,文本编辑上限约 2MB。请下载后用本地编辑器打开。",
|
||||
"editBinary": "该文件像是二进制内容,无法用文本编辑器打开",
|
||||
"editNotUtf8": "远程文件不是有效 UTF-8 文本",
|
||||
"transferCancelled": "传输已取消",
|
||||
"diskFull": "磁盘空间不足(本地或远程)"
|
||||
},
|
||||
"session": {
|
||||
"notFound": "会话不存在",
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
"confirm": "删除"
|
||||
},
|
||||
"welcome": {
|
||||
"tagline": "远程终端 · SFTP · 端口转发",
|
||||
"tagline": "简单好用 · 终端 · 传文件 · 远程桌面",
|
||||
"sectionStart": "开始",
|
||||
"sectionDesktop": "远程桌面",
|
||||
"sectionRecent": "最近会话",
|
||||
@@ -79,7 +79,7 @@
|
||||
},
|
||||
"newSession": {
|
||||
"title": "新建会话",
|
||||
"desc": "保存主机,侧栏双击连接"
|
||||
"desc": "保存主机,侧栏双击即连"
|
||||
},
|
||||
"localShell": {
|
||||
"title": "本地 Shell",
|
||||
@@ -167,7 +167,9 @@
|
||||
"jumpHost": "跳板机(可选)",
|
||||
"jumpNone": "无跳板",
|
||||
"jumpNoneAlt": "不使用跳板",
|
||||
"jumpHint": "当前支持一个已保存会话作为跳板"
|
||||
"jumpHint": "当前支持一个已保存会话作为跳板",
|
||||
"resolution": "分辨率",
|
||||
"resolutionCustom": "自定义"
|
||||
},
|
||||
"batch": {
|
||||
"title": "批量执行",
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
{
|
||||
"nav": {
|
||||
"general": "工作区",
|
||||
"generalDesc": "布局与资源",
|
||||
"appearance": "外观",
|
||||
"appearanceDesc": "界面主题与语言",
|
||||
"general": "通用",
|
||||
"generalDesc": "主题、语言与布局",
|
||||
"terminal": "终端",
|
||||
"terminalDesc": "字体与主题色",
|
||||
"shortcuts": "快捷键",
|
||||
@@ -15,11 +13,13 @@
|
||||
"ai": "大模型",
|
||||
"aiDesc": "AI Provider",
|
||||
"about": "关于",
|
||||
"aboutDesc": "版本与数据"
|
||||
"aboutDesc": "版本与数据",
|
||||
"account": "账户",
|
||||
"accountDesc": "邮箱、许可证与设备"
|
||||
},
|
||||
"title": "设置",
|
||||
"search": {
|
||||
"placeholder": "搜索设置..."
|
||||
"placeholder": "搜索设置…"
|
||||
},
|
||||
"language": {
|
||||
"label": "界面语言",
|
||||
@@ -89,7 +89,7 @@
|
||||
"ssh": {
|
||||
"connection": "连接",
|
||||
"keepAlive": "保持心跳",
|
||||
"keepAliveDesc": "空闲时发送心跳,减少断线",
|
||||
"keepAliveDesc": "空闲时发送 SSH 心跳;连续多次无响应才会断开",
|
||||
"autoReconnect": "自动重连",
|
||||
"autoReconnectDesc": "意外断开后自动尝试重连",
|
||||
"timeout": "连接超时",
|
||||
@@ -102,7 +102,9 @@
|
||||
"maxBackground": "后台连接上限",
|
||||
"maxBackgroundDesc": "超过上限时优先回收最久未使用的连接",
|
||||
"suspend": "后台挂起",
|
||||
"suspendDesc": "标签进入后台后多少分钟释放活跃通道"
|
||||
"suspendDesc": "后台标签空闲多少分钟后挂起(有活跃 Shell/SFTP 时保持连接)",
|
||||
"keepAliveInterval": "心跳间隔(秒)",
|
||||
"keepAliveIntervalDesc": "向服务器发送心跳的频率(类似 ClientAliveInterval)。不稳定网络建议 ≤15 秒"
|
||||
},
|
||||
"security": {
|
||||
"credentials": "凭据保护",
|
||||
@@ -119,7 +121,7 @@
|
||||
"clearConfirm": "确定清空全部已知主机密钥?下次连接将重新确认。"
|
||||
},
|
||||
"about": {
|
||||
"tagline": "轻量原生的 SSH / SFTP 运维终端",
|
||||
"tagline": "简单、便捷、人性化的原生运维终端",
|
||||
"appVersion": "应用 v{{version}}",
|
||||
"copyVersion": "复制版本信息",
|
||||
"runtime": "运行环境",
|
||||
@@ -127,8 +129,9 @@
|
||||
"localData": "本地数据",
|
||||
"sessionsSettings": "会话与设置",
|
||||
"masterKeyPath": "加密主密钥",
|
||||
"privacyNote": "密码与密钥口令由 Rust 使用 AES-256-GCM 加密。OpsXShell 不保存终端命令历史。",
|
||||
"license": "MIT License · Rust · XTerm.js"
|
||||
"privacyNote": "密码与密钥口令由 Rust 使用 AES-256-GCM 加密。不保存终端命令历史,也不做堡垒审计。",
|
||||
"license": "MIT License · Rust · XTerm.js",
|
||||
"logPath": "应用日志"
|
||||
},
|
||||
"ai": {
|
||||
"presets": "供应商预设",
|
||||
@@ -162,13 +165,42 @@
|
||||
"apiKeySaveFailed": "API Key 保存失败",
|
||||
"providerNotFound": "Provider 不存在",
|
||||
"modelCatalogReadFailed": "模型目录读取失败",
|
||||
"catalogUnavailable": "models.dev 暂不可用"
|
||||
"catalogUnavailable": "models.dev 暂不可用",
|
||||
"family": {
|
||||
"openai_compatible": "OpenAI 兼容",
|
||||
"standalone": "独立协议",
|
||||
"plan": "套餐计划",
|
||||
"local": "本地私有化",
|
||||
"custom": "自定义"
|
||||
}
|
||||
},
|
||||
"family": {
|
||||
"openai_compatible": "OpenAI 兼容",
|
||||
"standalone": "────────",
|
||||
"plan": "Plan 计划",
|
||||
"local": "私有化本地",
|
||||
"custom": "Custom 自定义"
|
||||
"account": {
|
||||
"title": "账户",
|
||||
"email": "邮箱",
|
||||
"emailDesc": "结账与领取许可证用的联系邮箱",
|
||||
"plan": "当前计划",
|
||||
"planFree": "免费",
|
||||
"planYearly": "专业版包年",
|
||||
"planPerpetual": "专业版永久",
|
||||
"planTrial": "专业版体验",
|
||||
"expires": "有效期至 {{date}}",
|
||||
"lifetime": "终身有效",
|
||||
"devices": "设备席位:最多 {{count}} 台",
|
||||
"deviceId": "本机设备 ID",
|
||||
"saveEmail": "保存邮箱",
|
||||
"activate": "激活许可证",
|
||||
"pasteLicense": "粘贴 LIC- 许可证",
|
||||
"clear": "清除本机许可证",
|
||||
"deactivate": "停用本机激活",
|
||||
"upgrade": "升级专业版",
|
||||
"saved": "已保存",
|
||||
"activateOk": "激活成功",
|
||||
"deviceList": "已绑定设备",
|
||||
"loadingDevices": "加载设备列表…",
|
||||
"noDevices": "暂无绑定设备",
|
||||
"thisDevice": "本机",
|
||||
"removeDevice": "解除绑定",
|
||||
"deviceRemoved": "已解除该设备绑定",
|
||||
"seatFull": "设备席位已满。请先解除其他设备,再在新机器上激活。"
|
||||
}
|
||||
}
|
||||
@@ -3,8 +3,9 @@
|
||||
"local": "本地",
|
||||
"remote": "远程",
|
||||
"notConnectedTitle": "未连接到远程服务器",
|
||||
"notConnectedDesc": "请先连接 SSH 会话以使用 SFTP",
|
||||
"ariaLabel": "{{title}}文件面板"
|
||||
"notConnectedDesc": "先连上 SSH,再传文件、改配置",
|
||||
"ariaLabel": "{{title}}文件面板",
|
||||
"reconnectResumeDesc": "连接中断。一键重连后回到 {{path}}"
|
||||
},
|
||||
"connection": {
|
||||
"selectServer": "选择服务器",
|
||||
@@ -12,7 +13,9 @@
|
||||
"createSessionHint": "请先在侧边栏创建会话",
|
||||
"reconnect": "重新连接",
|
||||
"notConnected": "未连接",
|
||||
"connecting": "连接中..."
|
||||
"connecting": "连接中...",
|
||||
"resumeHint": "重连后将回到 {{path}}",
|
||||
"reconnectingResume": "正在重连并恢复 {{path}}…"
|
||||
},
|
||||
"errors": {
|
||||
"notConnected": "SFTP 尚未连接",
|
||||
@@ -23,19 +26,14 @@
|
||||
"selectDownloadFiles": "请先选择要下载的文件",
|
||||
"uploadFailed": "上传失败",
|
||||
"downloadFailed": "下载失败",
|
||||
"mkdirFailed": "创建文件夹失败",
|
||||
"fileError": "{{fileName}}: {{message}}"
|
||||
},
|
||||
"toolbar": {
|
||||
"upload": "上传",
|
||||
"uploadAria": "上传",
|
||||
"download": "下载",
|
||||
"downloadAria": "下载",
|
||||
"downloadNeedSelection": "请先选择远程文件",
|
||||
"downloadHint": "下载选中的远程文件",
|
||||
"refresh": "刷新",
|
||||
"refreshAria": "刷新",
|
||||
"refreshAria": "刷新当前面板",
|
||||
"newFolder": "新建文件夹",
|
||||
"newFolderAria": "新建文件夹"
|
||||
"newFolderAria": "在当前面板新建文件夹"
|
||||
},
|
||||
"sort": {
|
||||
"name": "名称",
|
||||
@@ -48,6 +46,7 @@
|
||||
"back": "后退",
|
||||
"forward": "前进",
|
||||
"up": "上级目录",
|
||||
"upAtRoot": "已在根目录",
|
||||
"searchPlaceholder": "搜索文件名",
|
||||
"clearSearch": "清除搜索",
|
||||
"clearSearchAria": "清除搜索",
|
||||
@@ -63,7 +62,8 @@
|
||||
"filtered": "显示 {{shown}} / {{total}} 项",
|
||||
"hiddenCount": "共 {{total}} 项(已隐藏 {{hidden}})",
|
||||
"total": "共 {{count}} 项",
|
||||
"filterHint": "筛选: {{query}}"
|
||||
"filterHint": "筛选: {{query}}",
|
||||
"refreshing": "正在刷新..."
|
||||
},
|
||||
"empty": {
|
||||
"dirTitle": "目录为空",
|
||||
@@ -99,7 +99,6 @@
|
||||
"download": "下载",
|
||||
"edit": "编辑",
|
||||
"rename": "重命名",
|
||||
"copyPath": "复制路径",
|
||||
"properties": "属性",
|
||||
"permissions": "权限",
|
||||
"delete": "删除"
|
||||
@@ -116,7 +115,18 @@
|
||||
"chmodTitle": "权限编辑",
|
||||
"chmodApply": "应用",
|
||||
"pickUploadTitle": "选择要上传的文件或文件夹",
|
||||
"pickUploadRzTitle": "选择要上传的文件(rz)"
|
||||
"pickUploadRzTitle": "选择要上传的文件(rz)",
|
||||
"overwriteTitle": "覆盖已有文件?",
|
||||
"overwriteConfirm": "覆盖",
|
||||
"overwriteSkip": "跳过",
|
||||
"overwriteOneRemote": "远程已存在「{{name}}」,覆盖?",
|
||||
"overwriteOneLocal": "本地已存在「{{name}}」,覆盖?",
|
||||
"overwriteManyRemote": "远程已有 {{count}} 个同名项,覆盖全部?",
|
||||
"overwriteManyLocal": "本地已有 {{count}} 个同名项,覆盖全部?",
|
||||
"overwriteMore": "…另有 {{count}} 个",
|
||||
"deleteTitle": "确认删除",
|
||||
"deleteMessage": "将删除 {{count}} 项:{{names}}",
|
||||
"deleteRecursiveWarn": "其中包含目录,会递归删除且无法撤销。"
|
||||
},
|
||||
"properties": {
|
||||
"name": "名称",
|
||||
@@ -152,27 +162,41 @@
|
||||
"statusDone": "完成",
|
||||
"statusFailed": "失败",
|
||||
"statusCancelled": "已取消",
|
||||
"dropUpload": "上传到 {{path}}",
|
||||
"dropDownload": "下载到 {{path}}"
|
||||
"dropUpload": "拖放到此处上传到 {{path}}",
|
||||
"dropDownload": "拖放到此处下载到 {{path}}",
|
||||
"railAria": "本地与远程之间传输",
|
||||
"railUpload": "上传选中的本地文件(未选中时可打开文件选择器)",
|
||||
"railDownload": "下载选中的远程文件到本地",
|
||||
"railUploadAria": "上传到远程",
|
||||
"railDownloadAria": "下载到本地",
|
||||
"railDownloadNeedSelection": "请先选择远程文件",
|
||||
"retry": "重试"
|
||||
},
|
||||
"editor": {
|
||||
"readFailed": "读取失败",
|
||||
"saveFailed": "保存失败",
|
||||
"unsavedClose": "有未保存的修改,确定关闭?",
|
||||
"unsavedTitle": "未保存的修改",
|
||||
"discardAndClose": "放弃并关闭",
|
||||
"reloadTitle": "重新加载",
|
||||
"discardAndReload": "放弃并重新加载",
|
||||
"saving": "保存中...",
|
||||
"save": "保存",
|
||||
"saved": "文件已保存",
|
||||
"loadingEditor": "加载编辑器...",
|
||||
"footer": "UTF-8 · Monaco · ⌘/Ctrl+S 保存 · 最大约 2MB",
|
||||
"loadBlocked": "未能加载文件内容",
|
||||
"footer": "UTF-8 · ⌘/Ctrl+S 保存 · Esc 关闭 · 最大约 2MB",
|
||||
"charCount": "{{count}} 字符",
|
||||
"unsavedMark": " · 未保存",
|
||||
"savedMark": " · 已保存"
|
||||
"savedMark": " · 已保存",
|
||||
"title": "编辑 {{name}}",
|
||||
"dirtyBadge": "未保存",
|
||||
"reload": "重新加载",
|
||||
"unsavedReload": "有未保存的修改,确定重新加载并丢弃?"
|
||||
},
|
||||
"toast": {
|
||||
"renamed": "已重命名为 {{name}}",
|
||||
"renameFailed": "重命名失败",
|
||||
"pathCopied": "路径已复制到剪贴板",
|
||||
"pathCopyFailed": "复制路径失败",
|
||||
"chmodUpdated": "权限已更新为 {{mode}}",
|
||||
"chmodFailed": "权限修改失败",
|
||||
"uploadPartial": "{{action}}完成 {{completed}} 个,失败 {{failed}} 个:{{detail}}",
|
||||
@@ -180,7 +204,13 @@
|
||||
"uploadAction": "上传",
|
||||
"downloadAction": "下载",
|
||||
"noFolderUpload": "上传文件夹失败",
|
||||
"noDragPath": "当前系统未提供拖拽文件路径,请使用“上传”按钮选择文件",
|
||||
"noFolderRecursive": "文件夹递归传输失败,请重试或改用上传按钮"
|
||||
"noDragPath": "当前系统未提供拖拽路径。请用中间 → 箭头或选择文件上传。",
|
||||
"noFolderRecursive": "文件夹传输失败。请重试,或使用中间 → 箭头 / 文件选择器。",
|
||||
"dropFailed": "拖放失败:未读到文件信息。请再试,或使用中间箭头传输。",
|
||||
"folderCreated": "已创建文件夹 {{name}}",
|
||||
"allSkippedExisting": "同名文件均已跳过",
|
||||
"skippedExisting": "已跳过 {{count}} 个同名文件",
|
||||
"deleteFailed": "删除失败",
|
||||
"deleted": "已删除"
|
||||
}
|
||||
}
|
||||
@@ -34,7 +34,7 @@
|
||||
"reopenShell": "重新打开 Shell",
|
||||
"reopening": "正在打开…",
|
||||
"disconnected": "连接已断开",
|
||||
"disconnectedHint": "SSH 会话已结束或网络中断。点击下方一键重新连接。",
|
||||
"disconnectedHint": "SSH 会话已结束或网络中断。点下方一键重新连接,即可继续工作。",
|
||||
"reconnect": "重新连接",
|
||||
"suspended": "连接已挂起",
|
||||
"suspendedHint": "长时间未操作,连接已进入挂起以节省资源",
|
||||
@@ -70,7 +70,8 @@
|
||||
"splitRight": "向右分屏",
|
||||
"splitDown": "向下分屏",
|
||||
"maximizePane": "最大化当前分屏",
|
||||
"restoreLayout": "恢复分屏布局"
|
||||
"restoreLayout": "恢复分屏布局",
|
||||
"openSftp": "打开 SFTP"
|
||||
},
|
||||
"search": {
|
||||
"placeholder": "搜索...",
|
||||
|
||||
Reference in new issue
Block a user