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

+174
View File
@@ -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 自定义"
}
}