219 lines
8.2 KiB
JSON
219 lines
8.2 KiB
JSON
{
|
||
"nav": {
|
||
"general": "General",
|
||
"generalDesc": "Theme, language, and layout",
|
||
"terminal": "Terminal",
|
||
"terminalDesc": "Font and colors",
|
||
"shortcuts": "Shortcuts",
|
||
"shortcutsDesc": "Key bindings",
|
||
"ssh": "SSH",
|
||
"sshDesc": "Connection and pool",
|
||
"security": "Security",
|
||
"securityDesc": "Credentials and host keys",
|
||
"ai": "AI models",
|
||
"aiDesc": "AI providers",
|
||
"about": "About",
|
||
"aboutDesc": "Version, contact, and diagnostics",
|
||
"account": "Account",
|
||
"accountDesc": "Email, license, and device"
|
||
},
|
||
"title": "Settings",
|
||
"search": {
|
||
"placeholder": "Search settings…"
|
||
},
|
||
"language": {
|
||
"label": "Language",
|
||
"description": "Applies immediately",
|
||
"zhCN": "简体中文",
|
||
"zhTW": "繁體中文",
|
||
"en": "English",
|
||
"ja": "日本語",
|
||
"ko": "한국어",
|
||
"vi": "Tiếng Việt",
|
||
"ru": "Русский"
|
||
},
|
||
"general": {
|
||
"layout": "Workspace layout",
|
||
"sidebarWidth": "Sidebar width",
|
||
"sidebarWidthDesc": "Default width of the session sidebar",
|
||
"collapseSidebar": "Collapse sidebar",
|
||
"collapseSidebarDesc": "Hide the session tree to focus on the terminal; toggle with Ctrl/Cmd+B"
|
||
},
|
||
"appearance": {
|
||
"themeGroup": "Theme",
|
||
"theme": "Theme",
|
||
"themeDesc": "App UI colors (independent of terminal colors)",
|
||
"dark": "Dark",
|
||
"light": "Light",
|
||
"system": "System"
|
||
},
|
||
"terminal": {
|
||
"fontGroup": "Font and size",
|
||
"fontFamily": "Font",
|
||
"fontFamilyDesc": "Use a Nerd Font for Zsh prompt icons",
|
||
"fontSize": "Size",
|
||
"fontSizeDesc": "Terminal text size",
|
||
"scrollback": "Scrollback",
|
||
"scrollbackDesc": "Lines of history kept per terminal",
|
||
"keywordHighlight": "Keyword highlight",
|
||
"keywordHighlightDesc": "Highlight errors, warnings, and success states",
|
||
"colorTheme": "Color theme"
|
||
},
|
||
"shortcuts": {
|
||
"resetAll": "Reset all to defaults",
|
||
"custom": "Custom",
|
||
"pressKeys": "Press keys...",
|
||
"resetDefault": "Reset to default",
|
||
"conflict": "Conflicts with \"{{label}}\"",
|
||
"setTo": "Set to {{keys}}",
|
||
"hint": "Click a shortcut to rebind · Esc to cancel",
|
||
"category": {
|
||
"tabs": "Tabs",
|
||
"view": "View",
|
||
"session": "Session",
|
||
"tools": "Tools"
|
||
},
|
||
"actions": {
|
||
"tabNext": "Next tab",
|
||
"tabPrev": "Previous tab",
|
||
"tabGotoN": "Go to tab N",
|
||
"tabClose": "Close current tab",
|
||
"tabNew": "New tab",
|
||
"viewFullscreen": "Toggle fullscreen",
|
||
"viewToggleSidebar": "Toggle sidebar",
|
||
"sessionNew": "New session",
|
||
"sessionQuickConnect": "Quick connect",
|
||
"toolsCommandPalette": "Command palette"
|
||
}
|
||
},
|
||
"ssh": {
|
||
"connection": "Connection",
|
||
"keepAlive": "Keep-alive",
|
||
"keepAliveDesc": "Send SSH protocol keep-alive while idle (not typed into the shell). Beats NAT drops; does not bypass remote TMOUT",
|
||
"autoReconnect": "Auto reconnect",
|
||
"autoReconnectDesc": "Retry after unexpected disconnects while the tab stays open (new shell). Closing the tab, idle suspend, or remote TMOUT are not forced alive",
|
||
"timeout": "Connection timeout",
|
||
"timeoutDesc": "Maximum wait when establishing an SSH connection (seconds)",
|
||
"maxReconnect": "Auto-reconnect attempts",
|
||
"maxReconnectDesc": "Maximum retries after an unexpected disconnect",
|
||
"pool": "Connection pool",
|
||
"maxConnections": "Maximum connections",
|
||
"maxConnectionsDesc": "Shared by SSH, SFTP, and batch connections",
|
||
"maxBackground": "Background connection limit",
|
||
"maxBackgroundDesc": "When exceeded, the least recently used connection is reclaimed first",
|
||
"suspend": "Background suspend",
|
||
"suspendDesc": "Minutes before a background tab is suspended (kept alive while a shell or SFTP is active)",
|
||
"keepAliveInterval": "Keep-alive interval (sec)",
|
||
"keepAliveIntervalDesc": "How often to ping the server (like ClientAliveInterval). Use 15s or less on flaky Wi‑Fi / NAT",
|
||
"sessionPolicyHint": "Keep-alive protects the TCP link, not remote session policy. Bash TMOUT, sshd ClientAlive, and Windows idle GPO still apply. Use tmux/screen on the server for long jobs."
|
||
},
|
||
"security": {
|
||
"credentials": "Credential protection",
|
||
"sessionPassword": "Session passwords and key passphrases",
|
||
"sessionPasswordDesc": "Encrypted with AES-256-GCM in Rust before save; cannot be disabled",
|
||
"enabled": "Enabled",
|
||
"masterKey": "Local master key",
|
||
"masterKeyDesc": "Readable only by the current system user; path ~/.opsxshell/master.key (legacy ~/.opsxshsell is migrated automatically)",
|
||
"knownHosts": "Known hosts",
|
||
"knownHostsHint": "First connect prompts for the host fingerprint. If a reinstall or clone changes the key, choose “Trust and update” in the prompt to replace the old record. Remove one entry or clear all here.",
|
||
"clearAll": "Clear all",
|
||
"removeHost": "Remove this host record",
|
||
"empty": "No records",
|
||
"clearConfirm": "Clear all known host keys? You will be prompted again on next connect."
|
||
},
|
||
"about": {
|
||
"tagline": "Simple, practical native ops terminal",
|
||
"appVersion": "v{{version}}",
|
||
"copyVersion": "Copy version, system, and paths for a GitHub issue",
|
||
"copyDiagnostics": "Copy diagnostics",
|
||
"copyPath": "Copy path",
|
||
"resources": "Resources",
|
||
"wechat": "WeChat",
|
||
"copyWechat": "Copy WeChat ID",
|
||
"github": "Discussions",
|
||
"githubDesc": "https://github.com/L00J/opsxshell/discussions",
|
||
"releases": "Releases",
|
||
"releasesDesc": "Installers and release notes",
|
||
"licenseLink": "License",
|
||
"licenseLinkDesc": "MIT License",
|
||
"diagnostics": "Diagnostics",
|
||
"sessionsSettings": "Sessions and settings",
|
||
"license": "MIT License · Rust · XTerm.js",
|
||
"logPath": "Application log",
|
||
"reportBug": "Report a bug",
|
||
"reportBugDesc": "Opens GitHub with this version and platform filled in"
|
||
},
|
||
"ai": {
|
||
"presets": "Provider presets",
|
||
"add": "Add",
|
||
"configured": "Configured",
|
||
"configuredHint": "Choose a provider and click Add",
|
||
"emptyHint": "Add a provider to get started",
|
||
"noModel": "No model selected",
|
||
"name": "Name",
|
||
"model": "Model",
|
||
"protocol": "Protocol",
|
||
"auth": "Auth",
|
||
"authNone": "None",
|
||
"test": "Test",
|
||
"testing": "Testing",
|
||
"testingMessage": "Testing...",
|
||
"saved": "Saved",
|
||
"retest": "Please re-test",
|
||
"testFailed": "Connection test failed",
|
||
"available": "OK · {{latency}} ms",
|
||
"savedKeepBlank": "Saved — leave blank to keep",
|
||
"notRequired": "Not required",
|
||
"otherModels": "Other models…",
|
||
"customModel": "Custom model",
|
||
"backToList": "Back to list",
|
||
"apiKey": "API Key",
|
||
"apiKeyOptional": "API Key (not required)",
|
||
"endpoint": "Endpoint",
|
||
"advanced": "Advanced",
|
||
"allowHttp": "Allow HTTP (localhost/LAN)",
|
||
"setActive": "Set as active",
|
||
"deleteTitle": "Delete",
|
||
"apiKeySaveFailed": "Failed to save API key",
|
||
"providerNotFound": "Provider not found",
|
||
"modelCatalogReadFailed": "Failed to read model catalog",
|
||
"catalogUnavailable": "models.dev is unavailable",
|
||
"family": {
|
||
"openai_compatible": "OpenAI compatible",
|
||
"standalone": "Native APIs",
|
||
"plan": "Subscription plans",
|
||
"local": "Self-hosted",
|
||
"custom": "Custom"
|
||
}
|
||
},
|
||
"account": {
|
||
"title": "Account",
|
||
"email": "Email",
|
||
"emailDesc": "Used for checkout and license claims",
|
||
"plan": "Current plan",
|
||
"planFree": "Free",
|
||
"planYearly": "Pro Yearly",
|
||
"planPerpetual": "Pro Perpetual",
|
||
"planTrial": "Pro Trial",
|
||
"expires": "Expires {{date}}",
|
||
"lifetime": "Lifetime",
|
||
"devices": "Seats: up to {{count}} devices",
|
||
"deviceId": "This device ID",
|
||
"saveEmail": "Save email",
|
||
"activate": "Activate license",
|
||
"pasteLicense": "Paste LIC- license key",
|
||
"clear": "Clear local license",
|
||
"deactivate": "Deactivate this device",
|
||
"upgrade": "Upgrade",
|
||
"saved": "Saved",
|
||
"activateOk": "Activated",
|
||
"deviceList": "Bound devices",
|
||
"loadingDevices": "Loading devices…",
|
||
"noDevices": "No bound devices",
|
||
"thisDevice": "This device",
|
||
"removeDevice": "Unbind",
|
||
"deviceRemoved": "Device unbound",
|
||
"seatFull": "All seats are in use. Unbind another device before activating on a new machine."
|
||
}
|
||
}
|