{ "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": { "homepage": "Website", "homepageDesc": "Product tour, docs and downloads", "tagline": "Simple, practical native ops terminal", "appVersion": "v{{version}}", "copyVersion": "Copy version, system, and paths for a GitHub issue", "copyDiagnostics": "Diagnostics", "copyPath": "Copy path", "resources": "Resources", "wechat": "WeChat Group", "github": "Discussions", "githubDesc": "GitHub 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", "wechatDesc": "加入交流群,问题反馈与版本动态" }, "ai": { "retestConnection": "Test connection again", "cancelChanges": "Discard changes", "configuration": "Configuration", "active": "Default", "unsaved": "Unsaved", "testBeforeSave": "Test the connection before saving this configuration.", "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 default", "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." }, "persistence": { "loadFailed": "Failed to load settings", "saveFailed": "Failed to save settings; the change was reverted" } }