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:
1 parent
fea6d8db04
commit
b0d0e3a5f3
301 files changed
+28002
-2705
No files matched your search
@@ -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"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user