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

+237
View File
@@ -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": "prod, 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}}"
}
}