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:
Logan.Li committed 2026-08-12 00:07:48 +08:00
1 parent fea6d8db04
commit b0d0e3a5f3
301 files changed
+28002 -2705

No files matched your search

+161
View File
@@ -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": "发生未知错误"
}
}