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": "Connection failed. Check the network or host address.",
"1001": "Connection timed out. Check the network or try again later.",
"1002": "Authentication failed. Check the username and password.",
"1003": "Host unreachable. Check network settings.",
"1004": "Connection closed",
"1100": "Failed to create terminal",
"1101": "Command execution failed",
"1102": "Port forward setup failed",
"1200": "SFTP connection failed",
"1201": "File not found",
"1202": "Permission denied for this file or directory",
"1203": "File transfer failed",
"1204": "Could not read directory contents",
"1300": "Session not found",
"1301": "Failed to save session",
"1302": "Failed to load session",
"1400": "Invalid host address format",
"1401": "Port must be between 1 and 65535",
"1402": "Invalid credential format",
"9000": "An unknown error occurred",
"9001": "Internal communication error",
"9002": "File system error",
"9003": "Network error"
},
"action": {
"retry": "Retry",
"reconnect": "Reconnect",
"ignore": "Ignore",
"exit": "Exit",
"none": "None"
},
"connection": {
"failed": "Connection failed. Check the network or host address.",
"timeout": "Connection timed out. Check the network or try again later.",
"authFailed": "Authentication failed. Check the username and password.",
"hostUnreachable": "Host unreachable. Check network settings.",
"closed": "Connection closed",
"dnsFailed": "Could not resolve host",
"refused": "Connection refused",
"disconnected": "Disconnected"
},
"auth": {
"failed": "Authentication failed. Check the username and password.",
"invalidCredentials": "Invalid credential format",
"keyLoadFailed": "Failed to load private key",
"passphraseRequired": "Private key requires a passphrase",
"passphraseWrong": "Incorrect private key passphrase"
},
"shell": {
"createFailed": "Failed to create terminal",
"execFailed": "Command execution failed",
"localCreateFailed": "Failed to create local shell",
"remoteCreateFailed": "Failed to create remote shell"
},
"proxy": {
"connectFailed": "Proxy connection failed",
"authFailed": "Proxy authentication failed",
"tunnelFailed": "Failed to establish proxy tunnel",
"unsupported": "Unsupported proxy type",
"jumpFailed": "Jump host connection failed",
"hostRequired": "Proxy host is required",
"hostNoSpaces": "Proxy host cannot contain spaces",
"portRequired": "Proxy port must be greater than 0",
"portTooHigh": "Proxy port cannot exceed 65535"
},
"forward": {
"failed": "Port forward setup failed",
"bindFailed": "Failed to bind port",
"alreadyInUse": "Port already in use"
},
"sftp": {
"connectFailed": "SFTP connection failed",
"fileNotFound": "File not found",
"permissionDenied": "Permission denied for this file or directory",
"transferFailed": "File transfer failed",
"listFailed": "Could not read directory contents",
"readFailed": "Read failed",
"writeFailed": "Save failed",
"renameFailed": "Rename failed",
"chmodFailed": "Failed to update permissions",
"apiUnavailable": "SFTP API unavailable"
},
"session": {
"notFound": "Session not found",
"saveFailed": "Failed to save session",
"loadFailed": "Failed to load session",
"readConfigFailed": "Could not read session config",
"exportWriteFailed": "Failed to write export file",
"exportFailed": "Session export failed",
"importReadFailed": "Failed to read file",
"importFailed": "Session import failed",
"importEmpty": "No importable sessions found"
},
"validation": {
"invalidHost": "Invalid host address format",
"invalidPort": "Port must be between 1 and 65535",
"invalidCredentials": "Invalid credential format",
"hostRequired": "Enter a host address",
"usernameRequired": "Enter a username",
"targetRequired": "Enter a host, e.g. root@192.168.1.10 or opsbase.cn:5555",
"serialPathRequired": "Enter a serial device path",
"taskRequired": "Enter a task or follow-up"
},
"filesystem": {
"error": "File system error",
"readFailed": "Failed to read file",
"writeFailed": "Failed to write file"
},
"clipboard": {
"readFailed": "Failed to read clipboard",
"writeFailed": "Failed to write clipboard",
"copyPathFailed": "Failed to copy path",
"unsupportedRead": "Reading the clipboard is not supported in this environment",
"unsupportedWrite": "Writing to the clipboard is not supported in this environment"
},
"ipc": {
"error": "Internal communication error",
"nativeApiUnavailable": "Native API unavailable"
},
"network": {
"error": "Network error"
},
"pool": {
"limitReached": "Connection limit reached ({{max}}). Close some connections first."
},
"desktop": {
"connectFailed": "Connection failed",
"fileTooLarge": "Single file limit is 50MB",
"nativeOnly": "Remote connections are only available in the OpsXShell Tauri desktop app",
"rdpNativeOnly": "RDP is only available in the OpsXShell Tauri desktop app",
"vncNativeOnly": "VNC is only available in the OpsXShell Tauri desktop app"
},
"serial": {
"openFailed": "Failed to open serial port",
"writeFailed": "Serial write failed",
"nativeOnly": "Serial ports are only available in the Tauri desktop app"
},
"ai": {
"noProvider": "Configure an AI provider in Settings → AI first",
"noApiKey": "No API key saved for \"{{provider}}\"",
"modelEmpty": "Model returned no content",
"protocolFailed": "Model failed the tool protocol twice; stopped",
"noConclusion": "Model returned no usable conclusion",
"multipleCommands": "Model returned multiple commands; execution refused",
"invalidCommand": "Model did not return a single one-line command; execution refused",
"repeatLoop": "Repeated command loop detected; stopped: {{command}}",
"criticalBlocked": "Command hit a destructive hard block; no override: {{command}}",
"execFailed": "ssh-exec failed: {{error}}",
"maxSteps": "Reached {{max}}-step limit; narrow the scope and retry",
"sshRequired": "A connected remote SSH session is required"
},
"zmodem": {
"readFailed": "Read failed: {{name}}",
"writeFailed": "Write failed: {{name}}"
},
"unknown": {
"error": "An unknown error occurred"
}
}