mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-28 06:05:24 +00:00
* fix(sso): send the PKCE verifier for GitHub login (#1534) * fix(remote-desktop): clip cursor overflow without disabling zoom (#1535) * test(remote-desktop): preserve sessions beyond one hour (#1536) * fix(hosts): expose controls for overflowing editor tabs (#1537) * fix(hosts): expose controls for overflowing editor tabs * test(hosts): mock resize observation in admin panel tests * fix(status): skip TCP probes while host sessions are active (#1538) * fix(database): batch session activity persistence (#1539) * docs(api): describe cookie and API key authentication (#1540) * fix(snippets): repair missing note column on SQLite upgrades (#1541) * fix(docker): retain stored SSH credential association (#1543) * fix(file-manager): render transfer toasts without plugin hooks (#1546) * feat(hosts): keep compact row actions inline (#1547) * fix(auth): allow retrying unavailable second-factor interfaces (#1549) * fix(auth): reject unresolved legacy identity provisioning (#1550) * fix(desktop): ship the plugin SDK inside Mac App Store builds (#1551) * fix(tmux): pass full session info to the terminal's session picker (#1552) The tmux.sessions service reduced detected sessions to bare names, but the picker reads session.name, so every entry rendered blank and selecting one sent an empty name, which created a new session instead of attaching. * fix(ssh): read force keyboard-interactive as a boolean when resolving hosts (#1553) The column holds the text "true"/"false", and the resolver passed it through as-is. The string "false" is truthy, so the password provider treated every saved host as forced keyboard-interactive and left the password out. Jump hops are built straight from the resolved host, so a password hop whose server doesn't offer keyboard-interactive failed with "All configured authentication methods failed". * fix(database): batch database saves for bulk host writes (#1554) * fix(database): yield to the event loop between database saves Each SQLite save serializes and encrypts the whole database into new buffers, which V8 only releases once the event loop turns. Boot migrations and bulk host import write plugin settings per host and per key in an awaited loop, so hundreds of full copies piled up and the container ran out of memory. * fix(database): save once per bulk host write instead of once per row On SQLite every repository write force-saves the whole database. Boot plugin data migrations, host defaults materialization and the bulk host routes write one row per host per setting, so they serialized and encrypted the full database hundreds of times in a row. DatabaseSaveTrigger.batched wraps a function so force saves made while it runs collapse into a single save when it finishes. Nested scopes fold into the outer one, and work that outlives its scope saves normally. * feat(hosts): add instance-wide predefined tag suggestions (#1548) * feat(hosts): add shared predefined tag suggestions * style(hosts): format tag catalog routes * test(database): advance fake timers past the save yield (#1555) * fix(i18n): complete Simplified Chinese core and plugin translations (#1542) * fix(i18n): complete Chinese onboarding and navigation labels * fix(i18n): translate remaining Chinese core and plugin interfaces * fix(i18n): translate host editor tab overflow controls * fix(i18n): use consistent Chinese fleet terminology * fix(i18n): localize hardcoded controls and plugin views * fix(i18n): translate built-in homepage widget catalog * test(homepage): follow translated timezone placeholder * fix(i18n): translate plugin-provided homepage widgets * fix(i18n): localize feature settings section titles * fix: 2.8 oidc accounts unable to sign in after upgrading (#1381) * fix: plugins losing the saved ssh login when copying a host (#1391) * fix: fleets, proxmox and automations not getting the host sudo password * fix: host imports running a defaults pass and metrics restart per host (#1384) * fix: high cpu from status probes and full database saves on every sample (#1300) * fix: user data export freezing the server (#1393) * fix: op:// secret references rejected as ssh keys on credentials (#1394) * fix: slow file deletes from the trash lookups on every delete (#1390) * fix: add openapi docs and error handling to host tag routes * test: compare download stream buffers directly so it stops timing out * chore: drop em dash from host row comment * chore: update release notes for 2.9.1 * fix: restore space to add host tags and redesign predefined tags editor * fix: host key silently accepted when the host is missing from the database (#1397) * fix: clearer host login failed status label and fix its translations (#1396) * chore: add host key and status label fixes to release notes * fix: sso and ldap provider dialogs overflowing the screen and using mismatched toggles * chore: increment ver * fix(audit): store plugin entries with no acting user as a null user_id (#1556) Plugin audit entries written outside a request used the literal "system" as user_id. That column references users.id, so the insert was refused (Postgres logs it as an FK violation) and the entry was silently dropped. Write null instead and keep "system" / plugin:<id> in username. * chore: add sso/ldap dialog and audit log fixes to release notes * fix: tunnels and host settings missing from shared hosts on desktop * fix: remote desktop logins missing from shared hosts on desktop * fix: simplify host status to online/offline and keep it live without a refresh * chore: sync Crowdin translations for 2.9.1 --------- Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
709 lines
28 KiB
JSON
709 lines
28 KiB
JSON
{
|
||
"mobileKeyboard": {
|
||
"addQuickKey": "Add",
|
||
"arrowDown": "Arrow Down",
|
||
"arrowLeft": "Arrow Left",
|
||
"arrowRight": "Arrow Right",
|
||
"arrowUp": "Arrow Up",
|
||
"backTab": "⇥",
|
||
"ctrl": "Ctrl",
|
||
"delete": "Del",
|
||
"done": "Done",
|
||
"editQuickKeys": "Edit quick keys",
|
||
"end": "End",
|
||
"esc": "Esc",
|
||
"home": "Home",
|
||
"pageDown": "PgDn",
|
||
"pageUp": "PgUp",
|
||
"paste": "Paste",
|
||
"quickKeyPlaceholder": "e.g. sudo ",
|
||
"quickKeysDesc": "Tap × to remove. Supports up to 8 characters.",
|
||
"quickKeysTitle": "Quick Keys",
|
||
"removeQuickKey": "Remove",
|
||
"resetDefaults": "Reset to defaults",
|
||
"shift": "Shift",
|
||
"tab": "Tab"
|
||
},
|
||
"terminal": {
|
||
"autoTmuxEnableFailed": "Failed to enable Auto-Tmux",
|
||
"autoTmuxEnabled": "Auto-Tmux enabled for {{host}}. It applies from the next connection.",
|
||
"clipboardHttpWarning": "Couldn't read the clipboard. Some browsers restrict clipboard access outside HTTPS - try Ctrl+V instead, or serve Termix over HTTPS.",
|
||
"closeTab": "Close",
|
||
"connecting": "Connecting...",
|
||
"connectionLost": "Connection lost",
|
||
"connectionRejected": "Connection rejected by server. Please check your authentication and network configuration.",
|
||
"connectionTimeout": "Connection timeout",
|
||
"enableAutoTmuxAction": "Enable Auto-Tmux",
|
||
"hostKeyRejected": "SSH host key verification rejected. Connection cancelled.",
|
||
"linkDialogCopy": "Copy",
|
||
"linkDialogOpen": "Open",
|
||
"linkDialogTitle": "Open Link",
|
||
"maxReconnectAttemptsReached": "Maximum reconnection attempts reached",
|
||
"noHostSelected": "No host selected",
|
||
"passwordPromptFillTitle": "Fill the saved password into this prompt?",
|
||
"reconnect": "Reconnect",
|
||
"reconnected": "Reconnected successfully",
|
||
"reconnecting": "Reconnecting... ({{attempt}}/{{max}})",
|
||
"autoReconnecting": "Connection lost, reconnecting...",
|
||
"searchCaseSensitive": "Match Case",
|
||
"searchClose": "Close (Escape)",
|
||
"searchNext": "Next Match (Enter)",
|
||
"searchNoResults": "No results",
|
||
"searchPlaceholder": "Find",
|
||
"searchPrevious": "Previous Match (Shift+Enter)",
|
||
"searchRegex": "Use Regular Expression",
|
||
"searchResultCount": "{{index}} of {{count}}",
|
||
"searchWholeWord": "Match Whole Word",
|
||
"sessionExpiredNotice": "Your previous session on {{host}} expired after {{minutes}} minutes disconnected; the shell and anything running in it are gone. Enable Auto-Tmux on this host to keep sessions alive.",
|
||
"sessionExpiredNoticeNoMinutes": "Your previous session on {{host}} expired while disconnected; the shell and anything running in it are gone. Enable Auto-Tmux on this host to keep sessions alive.",
|
||
"sessionTakenOver": "Session was opened in another tab. Reconnecting...",
|
||
"tmuxAttached": "Attached clients",
|
||
"tmuxAttachedCount": "{{count}} attached",
|
||
"tmuxCopyHint": "Adjust selection and press Enter to copy to clipboard",
|
||
"tmuxCreateNew": "Start new session",
|
||
"tmuxDetached": "Detached from tmux session",
|
||
"tmuxLastActivity": "Last activity",
|
||
"tmuxSessionAttached": "tmux session attached: {{name}}",
|
||
"tmuxSessionCreated": "tmux session created: {{name}}",
|
||
"tmuxSessionPickerDesc": "Existing tmux sessions found on this host. Select one to reattach or create a new session.",
|
||
"tmuxSessionPickerTitle": "tmux Sessions",
|
||
"tmuxTimeDays": "{{count}}d ago",
|
||
"tmuxTimeHours": "{{count}}h ago",
|
||
"tmuxTimeJustNow": "just now",
|
||
"tmuxTimeMinutes": "{{count}}m ago",
|
||
"tmuxUnavailable": "tmux is not installed on the remote host, falling back to standard shell",
|
||
"tmuxWindowCount": "{{count}} window",
|
||
"tmuxWindows": "Windows",
|
||
"unknownError": "Unknown error occurred",
|
||
"websocketAbnormalClose": "Connection closed unexpectedly. This may be due to a reverse proxy or SSL configuration issue. Please check server logs.",
|
||
"websocketError": "WebSocket connection error",
|
||
"clipboardReadFailed": "Failed to read from clipboard. Make sure clipboard permissions are granted.",
|
||
"clipboardWriteFailed": "Failed to copy to clipboard. Make sure the page is served over HTTPS or localhost.",
|
||
"connected": "Connected",
|
||
"totpCodeLabel": "Verification Code",
|
||
"duplicateTab": "Duplicate tab",
|
||
"imageChooseFile": "Choose an image file",
|
||
"imageUploaded": "Image uploaded: {{path}}",
|
||
"imageClipboardUnavailable": "This browser cannot read images from the clipboard",
|
||
"imageClipboardEmpty": "No image found in the clipboard",
|
||
"localShell": "Local terminal shell",
|
||
"autocompleteHintComplete": "Tab or Enter to complete",
|
||
"autocompleteHintNavigate": "↑↓ to navigate",
|
||
"autocompleteHintClose": "Esc to close"
|
||
},
|
||
"terminalToolbar": {
|
||
"detachTmux": "Detach tmux",
|
||
"detachTmuxDescription": "Detach tmux session",
|
||
"dismissError": "Dismiss image error",
|
||
"hideToolbar": "Hide toolbar",
|
||
"image": "Image actions (images only)",
|
||
"imageActionFailed": "Image action failed",
|
||
"layout": "Toolbar display mode",
|
||
"layoutExpanded": "Expanded with metrics",
|
||
"layoutIcon": "Icon only",
|
||
"layoutLabeled": "Icons and labels",
|
||
"moveToolbar": "Move toolbar",
|
||
"moveToolbarHint": "Drag to reposition the toolbar",
|
||
"paste": "Paste image",
|
||
"pasteImage": "Paste image from clipboard (images only)",
|
||
"retry": "Retry",
|
||
"showToolbar": "Expand toolbar",
|
||
"upload": "Upload image",
|
||
"uploadImage": "Upload an image to the host",
|
||
"uploadingImage": "Uploading..."
|
||
},
|
||
"history": {
|
||
"noTerminalSelected": "No terminal selected",
|
||
"noTerminalSelectedHint": "Open an SSH terminal tab to view its command history",
|
||
"searchPlaceholder": "Search history...",
|
||
"clearAll": "Clear All",
|
||
"noHistoryEntries": "No history entries",
|
||
"trackingDisabled": "History tracking is disabled",
|
||
"trackingDisabledHint": "Turn on Command History in this host's SSH Terminal tab.",
|
||
"commandCount_one": "{{count}} command",
|
||
"commandCount_other": "{{count}} commands"
|
||
},
|
||
"touchInput": {
|
||
"enabled": "Enable Touch Input",
|
||
"enabledDesc": "Allow one-finger touch scrolling in terminals",
|
||
"momentumEnabled": "Enable Momentum",
|
||
"momentumEnabledDesc": "Continue scrolling briefly after a swipe",
|
||
"advanced": "Advanced",
|
||
"resetDefaults": "Reset to defaults",
|
||
"dragThreshold": "Drag threshold",
|
||
"maxWheelDelta": "Maximum wheel delta",
|
||
"momentumSampleWindow": "Momentum sample window",
|
||
"releaseGracePeriod": "Release grace period",
|
||
"minimumVelocity": "Minimum velocity",
|
||
"maximumVelocity": "Maximum velocity",
|
||
"maximumDuration": "Maximum duration",
|
||
"maximumTravel": "Maximum travel",
|
||
"decayTime": "Decay time",
|
||
"pixelsPerTick": "Pixels per tick",
|
||
"maximumFrameInterval": "Maximum frame interval",
|
||
"maximumTicksPerFrame": "Maximum ticks per frame"
|
||
},
|
||
"imageStorage": {
|
||
"instanceId": "Terminal session instance ID",
|
||
"instanceIdDesc": "Instance ID of one of your connected terminal tabs, used to test visibility.",
|
||
"selectedModeUnavailable": "Unavailable",
|
||
"test": "Test",
|
||
"testing": "Testing...",
|
||
"testFailed": "Failed to test image storage",
|
||
"testConnected": "Terminal session is connected.",
|
||
"testNotConnected": "No connected terminal session with this instance ID.",
|
||
"testSelectedMode": "An upload would use: {{mode}}",
|
||
"testLocalVisible": "The local directory is visible from the connected host.",
|
||
"testLocalNotVisible": "The local directory is NOT visible from the connected host."
|
||
},
|
||
"settings": {
|
||
"admin": {
|
||
"group": {
|
||
"touch": "Touch Input",
|
||
"images": "Image Storage",
|
||
"sessions": "Sessions",
|
||
"newHosts": "New Hosts"
|
||
},
|
||
"sessionTimeoutMinutes": {
|
||
"label": "Terminal Session Persistence",
|
||
"description": "How long a disconnected terminal is kept alive on the server before it is closed. Min 1, max 1440 minutes. For sessions that must outlive this, enable Auto-Tmux on the host."
|
||
},
|
||
"commandHistoryEnabled": {
|
||
"label": "Command History",
|
||
"description": "Allow command history recording. When disabled, history is not saved regardless of per-host settings."
|
||
},
|
||
"commandHistoryForNewHosts": {
|
||
"label": "Command history for new hosts",
|
||
"description": "Whether new hosts start with command history on."
|
||
},
|
||
"imageStorageMode": {
|
||
"label": "Storage Mode",
|
||
"description": "Where pasted and uploaded terminal images are written. Auto picks by connection, Local and Remote (SFTP) are fixed.",
|
||
"auto": "Auto",
|
||
"local": "Local",
|
||
"remoteSftp": "Remote (SFTP)"
|
||
},
|
||
"imageLocalDir": {
|
||
"label": "Local directory",
|
||
"description": "Absolute path on the Termix backend where local mode writes images. Never shown after saving. Empty uses TERMIX_IMAGE_DIR."
|
||
},
|
||
"imageHostPath": {
|
||
"label": "Host path",
|
||
"description": "The host-side view of the local directory that terminal agents receive."
|
||
},
|
||
"imageTtlMs": {
|
||
"label": "TTL (ms)",
|
||
"description": "How long an uploaded image is kept, in milliseconds. Empty uses TERMIX_IMAGE_TTL_MS or one hour."
|
||
},
|
||
"imageMaxCount": {
|
||
"label": "Max image count",
|
||
"description": "Most images kept at once. Empty uses TERMIX_MAX_IMAGE_COUNT or 100."
|
||
},
|
||
"imageMaxBytes": {
|
||
"label": "Max storage bytes",
|
||
"description": "Most bytes of images kept at once. Empty uses TERMIX_MAX_IMAGE_STORAGE_BYTES or 5 GiB."
|
||
},
|
||
"sessionPersistence": {
|
||
"label": "Keep sessions after disconnect",
|
||
"description": "Keep a disconnected terminal alive on the server for the time above, so reopening its tab picks up where it left off."
|
||
},
|
||
"newHostAutoTmux": {
|
||
"label": "Auto-Tmux",
|
||
"description": "Run new hosts' terminals inside tmux so sessions survive disconnects (needs tmux on the host)"
|
||
},
|
||
"newHostTheme": {
|
||
"label": "Theme for new hosts",
|
||
"description": "The terminal theme a new host starts with."
|
||
},
|
||
"newHostFontFamily": {
|
||
"label": "Font for new hosts",
|
||
"description": "The terminal font a new host starts with."
|
||
},
|
||
"newHostFontSize": {
|
||
"label": "Font size for new hosts",
|
||
"description": "The terminal font size a new host starts with, in pixels."
|
||
},
|
||
"newHostCursorStyle": {
|
||
"label": "Cursor style for new hosts"
|
||
},
|
||
"newHostCursorBlink": {
|
||
"label": "Blinking cursor for new hosts"
|
||
}
|
||
},
|
||
"host": {
|
||
"enableTerminalToolbar": {
|
||
"label": "Enable Terminal Toolbar",
|
||
"description": "Show a quick-access toolbar docked to the active terminal for this host's tools and live stats"
|
||
},
|
||
"terminalToolbarPosition": {
|
||
"label": "Toolbar Position",
|
||
"description": "Where the toolbar sits in the terminal. You can still drag it from there.",
|
||
"bottom": "Bottom center",
|
||
"bottomLeft": "Bottom left",
|
||
"bottomRight": "Bottom right",
|
||
"top": "Top center",
|
||
"topLeft": "Top left",
|
||
"topRight": "Top right"
|
||
},
|
||
"terminalToolbarStartState": {
|
||
"label": "Toolbar Start State",
|
||
"description": "Whether the toolbar opens expanded or minimized when the terminal connects",
|
||
"expanded": "Expanded",
|
||
"collapsed": "Minimized"
|
||
},
|
||
"terminalToolbarDisplay": {
|
||
"label": "Toolbar Display Mode",
|
||
"description": "How toolbar buttons are shown. Last used keeps whatever you picked in the toolbar.",
|
||
"remember": "Last used",
|
||
"icon": "Icon only",
|
||
"labeled": "Icons and labels",
|
||
"expanded": "Expanded with stats"
|
||
},
|
||
"terminalToolbarShowStatus": {
|
||
"label": "Show Live Stats",
|
||
"description": "Show live host stats above the toolbar buttons in expanded mode"
|
||
},
|
||
"terminalToolbarFade": {
|
||
"label": "Fade When Idle",
|
||
"description": "Fade the toolbar out until you hover over it"
|
||
},
|
||
"enableCommandHistory": {
|
||
"label": "Command History",
|
||
"description": "Record commands run in this terminal for history and autocomplete"
|
||
},
|
||
"enableTerminal": {
|
||
"label": "Enable Terminal",
|
||
"description": "Offer an SSH terminal for this host."
|
||
},
|
||
"inheritAppearance": {
|
||
"label": "Use user defaults"
|
||
},
|
||
"theme": {
|
||
"label": "Theme"
|
||
},
|
||
"cursorBlink": {
|
||
"label": "Blinking cursor"
|
||
},
|
||
"cursorStyle": {
|
||
"label": "Cursor style"
|
||
},
|
||
"fontSize": {
|
||
"label": "Font size"
|
||
},
|
||
"fontFamily": {
|
||
"label": "Font"
|
||
},
|
||
"scrollback": {
|
||
"label": "Scrollback"
|
||
},
|
||
"letterSpacing": {
|
||
"label": "Letter spacing"
|
||
},
|
||
"lineHeight": {
|
||
"label": "Line height"
|
||
},
|
||
"bellStyle": {
|
||
"label": "Bell"
|
||
},
|
||
"minimumContrastRatio": {
|
||
"label": "Minimum contrast ratio"
|
||
},
|
||
"backgroundImage": {
|
||
"label": "Background image"
|
||
},
|
||
"backgroundImageOpacity": {
|
||
"label": "Background image opacity"
|
||
},
|
||
"customThemeColors": {
|
||
"label": "Custom theme colors"
|
||
},
|
||
"rightClickSelectsWord": {
|
||
"label": "Right click selects word"
|
||
},
|
||
"macOptionIsMeta": {
|
||
"label": "Option is Meta"
|
||
},
|
||
"fastScrollModifier": {
|
||
"label": "Fast scroll key"
|
||
},
|
||
"fastScrollSensitivity": {
|
||
"label": "Fast scroll speed"
|
||
},
|
||
"backspaceMode": {
|
||
"label": "Backspace"
|
||
},
|
||
"autoMosh": {
|
||
"label": "Auto mosh"
|
||
},
|
||
"moshCommand": {
|
||
"label": "Mosh command"
|
||
},
|
||
"autoTmux": {
|
||
"label": "Auto tmux"
|
||
},
|
||
"useSSHTitle": {
|
||
"label": "Use the SSH title"
|
||
},
|
||
"syntaxHighlighting": {
|
||
"label": "Syntax highlighting"
|
||
},
|
||
"syntaxHighlightingOptions": {
|
||
"label": "Syntax highlighting categories"
|
||
},
|
||
"linkClickBehavior": {
|
||
"label": "Link click"
|
||
},
|
||
"localEcho": {
|
||
"label": "Local echo"
|
||
},
|
||
"passwordPromptAutoFill": {
|
||
"label": "Offer to fill password prompts"
|
||
},
|
||
"sudoPasswordAutoFill": {
|
||
"label": "Fill sudo prompts"
|
||
},
|
||
"autoReconnect": {
|
||
"label": "Reconnect automatically"
|
||
}
|
||
},
|
||
"user": {
|
||
"commandAutocomplete": {
|
||
"label": "Command Autocomplete",
|
||
"description": "Show autocomplete while typing if you press tab"
|
||
},
|
||
"localEcho": {
|
||
"label": "Local Echo",
|
||
"description": "Reduce perceived input latency using safe local keystroke prediction"
|
||
},
|
||
"linkClickBehavior": {
|
||
"label": "Terminal Link Click",
|
||
"description": "Default behavior when clicking links in the terminal"
|
||
},
|
||
"customThemes": {
|
||
"label": "Saved themes"
|
||
}
|
||
}
|
||
},
|
||
"palette": {
|
||
"localTerminal": "Local Terminal"
|
||
},
|
||
"permissions": {
|
||
"sessions": {
|
||
"title": "Use live terminal sessions",
|
||
"description": "Lets other features, such as session sharing and recording, reach your live terminal sessions."
|
||
},
|
||
"history": {
|
||
"title": "Read command history",
|
||
"description": "Lets other features, such as the AI assistant, read your command history."
|
||
}
|
||
},
|
||
"hosts": {
|
||
"tabTerminal": "Terminal",
|
||
"addHost": "Add Host",
|
||
"applyGlobalThemeTooltip": "Apply this theme",
|
||
"backgroundImageDesc": "Optional URL for a terminal background image",
|
||
"backgroundImageLabel": "Background Image URL",
|
||
"backgroundImageOpacityLabel": "Background Image Opacity",
|
||
"backspaceMode": "Backspace Mode",
|
||
"backspaceModeControlH": "Control-H (BS)",
|
||
"backspaceModeLabel": "Backspace Mode",
|
||
"backspaceModeNormal": "Normal (DEL)",
|
||
"behaviorAndAdvanced": "Behavior & Advanced",
|
||
"bellStyle": "Bell Style",
|
||
"bellStyleBoth": "Both",
|
||
"bellStyleLabel": "Bell Style",
|
||
"bellStyleNone": "None",
|
||
"bellStyleSound": "Sound",
|
||
"bellStyleVisual": "Visual",
|
||
"colorTheme": "Color Theme",
|
||
"cursorBlink": "Cursor Blink",
|
||
"cursorBlinking": "Cursor Blinking",
|
||
"cursorBlinkingDesc": "Enable blinking animation for the terminal cursor",
|
||
"cursorStyle": "Cursor Style",
|
||
"cursorStyleBar": "Bar",
|
||
"cursorStyleBlock": "Block",
|
||
"cursorStyleLabel": "Cursor Style",
|
||
"cursorStyleUnderline": "Underline",
|
||
"customThemeAnsiColors": "ANSI Colors",
|
||
"customThemeBackground": "Background",
|
||
"customThemeBlack": "Black",
|
||
"customThemeBlue": "Blue",
|
||
"customThemeBrightBlack": "Bright Black",
|
||
"customThemeBrightBlue": "Bright Blue",
|
||
"customThemeBrightCyan": "Bright Cyan",
|
||
"customThemeBrightGreen": "Bright Green",
|
||
"customThemeBrightMagenta": "Bright Magenta",
|
||
"customThemeBrightRed": "Bright Red",
|
||
"customThemeBrightWhite": "Bright White",
|
||
"customThemeBrightYellow": "Bright Yellow",
|
||
"customThemeColors": "Custom Colors",
|
||
"customThemeCursor": "Cursor",
|
||
"customThemeCursorAccent": "Cursor Accent",
|
||
"customThemeCyan": "Cyan",
|
||
"customThemeForeground": "Foreground",
|
||
"customThemeGreen": "Green",
|
||
"customThemeMagenta": "Magenta",
|
||
"customThemeRed": "Red",
|
||
"customThemeResetTooltip": "Reset to defaults",
|
||
"customThemeSelection": "Selection",
|
||
"customThemeWhite": "White",
|
||
"customThemeYellow": "Yellow",
|
||
"deleteGlobalThemeTooltip": "Delete this theme",
|
||
"docsLink": "View docs",
|
||
"enableAutoMosh": "Enable Auto-Mosh",
|
||
"enableAutoMoshDesc": "Prefer Mosh over SSH if available",
|
||
"enableAutoTmux": "Enable Auto-Tmux",
|
||
"enableAutoTmuxDesc": "Keep your shell and anything running in it alive across disconnects and browser restarts by running inside tmux (tmux must be installed on the host)",
|
||
"fastScrollModifier": "Fast Scroll Modifier",
|
||
"fastScrollModifierAlt": "Alt",
|
||
"fastScrollModifierCtrl": "Ctrl",
|
||
"fastScrollModifierLabel": "Fast Scroll Modifier",
|
||
"fastScrollModifierShift": "Shift",
|
||
"fastScrollSensitivity": "Fast Scroll Sensitivity",
|
||
"fastScrollSensitivityLabel": "Fast Scroll Sensitivity",
|
||
"fontFamily": "Font Family",
|
||
"fontFamilyCustomHint": "Pick a bundled font, or choose Custom and type the exact name of a font already installed on your system (e.g. MesloLGS NF, Noto Sans Mono). Termix cannot install fonts for you, install it on your OS first.",
|
||
"fontFamilyCustomOption": "Custom...",
|
||
"fontFamilyCustomPlaceholder": "Exact font name, e.g. MesloLGS NF",
|
||
"fontFamilyLabel": "Font Family",
|
||
"fontSize": "Font Size",
|
||
"fontSizeLabel": "Font Size",
|
||
"hostNotFound": "Host not found",
|
||
"letterSpacing": "Letter Spacing",
|
||
"letterSpacingPx": "Letter Spacing (px)",
|
||
"lineHeight": "Line Height",
|
||
"lineHeightLabel": "Line Height",
|
||
"linkClickBehaviorConfirm": "Show popup to open or copy",
|
||
"linkClickBehaviorDesc": "Controls what happens when you click a link in the terminal. Use 'Default' to follow the app-level setting.",
|
||
"linkClickBehaviorDirect": "Open directly",
|
||
"linkClickBehaviorLabel": "Link Click Behavior",
|
||
"loadingHost": "Loading host...",
|
||
"localEchoAuto": "Automatic",
|
||
"localEchoDesc": "Predict safe printable keystrokes locally on slow connections. Password prompts and control input are never echoed.",
|
||
"localEchoLabel": "Local Echo",
|
||
"localEchoOff": "Off",
|
||
"localEchoOn": "Always on",
|
||
"macOptionIsMetaLabel": "Option Key Sends Meta",
|
||
"macOptionIsMetaShortDesc": "Disable to type special characters (like @ or |) with the Option/Alt key on macOS instead of sending Meta",
|
||
"moshCommand": "MOSH Command",
|
||
"moshCommandLabel": "Mosh Command",
|
||
"noSavedThemes": "No saved themes yet",
|
||
"none": "None",
|
||
"passwordPromptAutoFillDesc": "Offer to fill in the saved password when the terminal asks for one. Turn off to never auto-fill any password on this host.",
|
||
"passwordPromptAutoFillLabel": "Offer Password Auto-fill",
|
||
"autoReconnectLabel": "Auto Reconnect",
|
||
"autoReconnectDesc": "Reconnect on its own when the SSH connection drops, like after a network blip or sleep. Keeps the scrollback.",
|
||
"rightClickSelectsWord": "Right Click Selects Word",
|
||
"rightClickSelectsWordLabel": "Right-click Selects Word",
|
||
"rightClickSelectsWordShortDesc": "Select the word under cursor on right-click",
|
||
"saveAsGlobalTheme": "Save as Global Theme",
|
||
"saveGlobalThemeError": "Failed to save theme",
|
||
"saveGlobalThemeNamePrompt": "Enter a name for this theme",
|
||
"saveGlobalThemeSuccess": "Theme saved",
|
||
"savedThemesLabel": "Saved Themes",
|
||
"scrollbackBufferLabel": "Scrollback Buffer",
|
||
"scrollbackMaxLines": "Maximum number of lines kept in history",
|
||
"sudoPasswordAutoFill": "Sudo Password Auto-Fill",
|
||
"sudoPasswordAutoFillDesc": "Store a sudo password so host metrics, terminal prompts, and others can run privileged commands automatically.",
|
||
"sudoPasswordAutoFillLabel": "Sudo Password Auto-fill",
|
||
"syntaxCategoryIpAddresses": "IP Addresses",
|
||
"syntaxCategoryIpAddressesDesc": "192.168.1.1, 10.0.0.1:8080",
|
||
"syntaxCategoryLogLevels": "Log Levels",
|
||
"syntaxCategoryLogLevelsDesc": "error, warn, info, debug, fatal",
|
||
"syntaxCategoryNumbers": "Labeled Numbers",
|
||
"syntaxCategoryNumbersDesc": "port 8080, exit 1, status 404",
|
||
"syntaxCategoryPaths": "File Paths",
|
||
"syntaxCategoryPathsDesc": "/usr/share/doc, ~/file.txt",
|
||
"syntaxCategoryTimestamps": "Timestamps",
|
||
"syntaxCategoryTimestampsDesc": "[12:34:56], 2024-01-15",
|
||
"syntaxCategoryUrls": "URLs",
|
||
"syntaxCategoryUrlsDesc": "https://example.com",
|
||
"syntaxHighlightingDesc": "Colorize terminal output (errors, paths, IPs, timestamps)",
|
||
"syntaxHighlightingLabel": "Syntax Highlighting",
|
||
"terminalAppearance": "Terminal Appearance",
|
||
"theme": "Theme",
|
||
"themePreview": "Theme Preview",
|
||
"useSSHTitleDesc": "Update the tab title from the shell's window title instead of the host name",
|
||
"useSSHTitleLabel": "Use SSH Window Title",
|
||
"enableTunnel": "Enable Tunnel",
|
||
"enableFileManager": "Enable File Manager",
|
||
"enableDocker": "Enable Docker",
|
||
"startupSnippet": "Startup Snippet",
|
||
"quickActions": "Quick Actions",
|
||
"proxmoxLastSyncStatus": {
|
||
"success": "Success"
|
||
},
|
||
"proxmoxResultSkippedNoIp": "{{count}} skipped (no IP found)",
|
||
"proxmoxStatsUrlCopied": "Proxmox Stats URL copied to clipboard",
|
||
"rdpUrlCopied": "RDP URL copied",
|
||
"vncUrlCopied": "VNC URL copied",
|
||
"filterAuthStepca": "Step CA",
|
||
"guac": {
|
||
"noCredential": "No credential (direct credentials below)",
|
||
"authTypeDirect": "Direct",
|
||
"authTypeCredential": "Credential",
|
||
"authTypeNone": "None",
|
||
"recordingPath": "Recording Path",
|
||
"recordingName": "Recording Name",
|
||
"saveHostFirst": "Save the host first.",
|
||
"sharingOptionsAfterSave": "Sharing options are available after the host has been saved.",
|
||
"permissionLevel": "Permission Level",
|
||
"typeHeader": "Type",
|
||
"targetHeader": "Target",
|
||
"permissionHeader": "Permission",
|
||
"cancelBtn": "Cancel",
|
||
"savingBtn": "Saving...",
|
||
"updateHostBtn": "Update Host",
|
||
"addHostBtn": "Add Host"
|
||
},
|
||
"filterAuthVault": "Vault"
|
||
},
|
||
"nav": {
|
||
"history": "History",
|
||
"localTerminal": "Local Terminal",
|
||
"sshTools": "SSH Tools",
|
||
"terminal": "Terminal",
|
||
"macros": "Macros"
|
||
},
|
||
"sshTools": {
|
||
"broadcastInputPlaceholder": "Type here to broadcast keystrokes...",
|
||
"copyOnSelect": "Copy selected text automatically",
|
||
"enableRightClickCopyPaste": "Enable right-click copy/paste",
|
||
"fillPassword": "Fill password",
|
||
"fillPasswordMissing": "No saved password for {{count}} selected terminal(s)",
|
||
"fillPasswordSuccess": "Filled password into {{count}} terminal(s)",
|
||
"keyRecordingTitle": "Key Recording",
|
||
"noTerminalTabsOpen": "No terminal tabs open",
|
||
"recordToTerminals": "Record to terminals",
|
||
"selectAll": "All",
|
||
"selectNone": "None",
|
||
"selectTerminalsAbove": "Select terminals above",
|
||
"settingsTitle": "Settings",
|
||
"startRecording": "Start Recording",
|
||
"stopRecording": "Stop Recording"
|
||
},
|
||
"keybindings": {
|
||
"copy": "Copy selection",
|
||
"paste": "Paste",
|
||
"sendControlCode": "Send Ctrl+letter signal",
|
||
"sendText": "Send text",
|
||
"controlCodeLabel": "Letter",
|
||
"textLabel": "Text to send",
|
||
"appendEnterLabel": "Press Enter after sending",
|
||
"clipboardPermissionNote": "May prompt for clipboard permission on first use in some browsers.",
|
||
"textRequired": "Enter the text to send",
|
||
"controlCodeRequired": "Enter a single letter for the control code",
|
||
"builtIn": {
|
||
"copyCtrlC": "Copy selection (Ctrl+C, only when text is selected)",
|
||
"copyCtrlShiftC": "Copy selection (Ctrl+Shift+C)",
|
||
"copyCmdC": "Copy selection (Cmd+C)",
|
||
"pasteCtrlShiftV": "Paste from clipboard (Ctrl+Shift+V)",
|
||
"ctrlW": "Send Ctrl+W to shell (blocked from closing browser tab)",
|
||
"ctrlT": "Send Ctrl+T to shell (blocked from opening browser tab)",
|
||
"ctrlN": "Send Ctrl+N to shell (blocked from opening browser window)",
|
||
"ctrlQ": "Send Ctrl+Q to shell (blocked from quitting browser)"
|
||
}
|
||
},
|
||
"macros": {
|
||
"title": "Macros",
|
||
"description": "Run a saved series of commands in a terminal, and react to what the server sends back.",
|
||
"target": "Target",
|
||
"noTerminal": "No terminal open",
|
||
"empty": "No macros yet",
|
||
"emptyHint": "Create a macro to automate a terminal flow, like logging in, restarting a service, or answering prompts.",
|
||
"create": "New macro",
|
||
"back": "Back to macros",
|
||
"name": "Name",
|
||
"namePlaceholder": "Restart web server",
|
||
"nameRequired": "Give the macro a name before saving",
|
||
"descriptionLabel": "Description",
|
||
"descriptionPlaceholder": "What this macro does (optional)",
|
||
"unsaved": "Unsaved changes",
|
||
"save": "Save",
|
||
"saved": "Macro saved",
|
||
"saveFailed": "Could not save the macro",
|
||
"delete": "Delete",
|
||
"deleteTitle": "Delete this macro?",
|
||
"deleteBody": "\"{{name}}\" will be permanently deleted. This cannot be undone.",
|
||
"deleted": "Macro deleted",
|
||
"cancel": "Cancel",
|
||
"run": "Run",
|
||
"stop": "Stop",
|
||
"running": "Running...",
|
||
"completed": "Macro finished",
|
||
"failed": "Macro failed",
|
||
"loadFailed": "Could not load macros",
|
||
"needTerminal": "Open and connect a terminal first",
|
||
"noSteps": "This macro has no steps yet. Add one below.",
|
||
"addStep": "Add step",
|
||
"stepNumber": "Step {{number}}",
|
||
"removeStep": "Remove step",
|
||
"confirmRunTitle": "Run this macro?",
|
||
"confirmRunBody": "\"{{name}}\" will send commands to {{host}}.",
|
||
"confirmRunAction": "Run macro",
|
||
"stepTypes": {
|
||
"send": {
|
||
"label": "Send command",
|
||
"help": "Types text into the terminal, the same as if you typed it."
|
||
},
|
||
"wait": {
|
||
"label": "Wait for output",
|
||
"help": "Pauses until the server prints the text you name, like a password prompt."
|
||
},
|
||
"delay": {
|
||
"label": "Pause",
|
||
"help": "Waits a fixed amount of time before the next step."
|
||
},
|
||
"if": {
|
||
"label": "If output contains",
|
||
"help": "Checks everything the server has printed so far, then runs one of two branches."
|
||
},
|
||
"repeat": {
|
||
"label": "Repeat",
|
||
"help": "Runs the steps inside it a set number of times."
|
||
}
|
||
},
|
||
"send": {
|
||
"text": "Command or text",
|
||
"textPlaceholder": "systemctl restart nginx",
|
||
"pressEnter": "Press Enter after sending",
|
||
"pressEnterHelp": "Turn this off to type text without submitting it."
|
||
},
|
||
"wait": {
|
||
"pattern": "Wait until the output contains",
|
||
"patternPlaceholder": "password:",
|
||
"timeout": "Give up after",
|
||
"onTimeout": "If it never appears",
|
||
"stop": "Stop the macro",
|
||
"continue": "Keep going anyway"
|
||
},
|
||
"delay": {
|
||
"duration": "Wait for"
|
||
},
|
||
"ifStep": {
|
||
"pattern": "If the output contains",
|
||
"patternPlaceholder": "Active: active (running)",
|
||
"then": "Then do this",
|
||
"else": "Otherwise do this",
|
||
"emptyBranch": "No steps"
|
||
},
|
||
"repeat": {
|
||
"count": "Number of times",
|
||
"times": "times"
|
||
},
|
||
"match": {
|
||
"useRegex": "Match with a regular expression",
|
||
"useRegexHelp": "Leave this off to match the text exactly as written.",
|
||
"invalidRegex": "Not a valid regular expression, it will be matched as plain text"
|
||
},
|
||
"seconds": "seconds",
|
||
"secondsShort": "{{count}}s"
|
||
},
|
||
"errors": {
|
||
"remoteServerRequired": "Remote server required. Connect a remote server in Settings to use this connection type."
|
||
},
|
||
"plugin": {
|
||
"name": "SSH Terminal"
|
||
}
|
||
}
|