mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-07-17 05:43:36 +00:00
release-2.5.0 (#994)
* feat(sshid) - sshid.io equivalent for termix (#919) * feat(ssh-id): database schema, migrations and field encryption Adds ssh_identities, ssh_identity_keys and ssh_identity_ca tables (public keys stored plaintext for the unauthenticated resolver; CA private key registered for per-user field encryption), with UNIQUE(user_id), an index on ssh_identity_keys(identity_id), and idempotent CREATE TABLE migrations. * feat(ssh-id): backend API — resolver, key management, CA and certificates Mounts /sshid (nginx route added). Public text/plain authorized_keys resolver (+ exact /:algo filter, HTML viewer) and CA public-key endpoint; no-store + noindex headers on every resolver response including early 404s. Authenticated management: claim/rename/delete handle, add/import/generate/enable/delete keys, and a per-user CA (create/rotate/delete) with pure-Node OpenSSH certificate issuance. Audit logging on all mutations; UNIQUE races map to a precise 409. Unit tests for key parsing and certificate signing (ssh-keygen-validated). * feat(ssh-id): frontend panel, API client and i18n SSH ID panel wired into the app rail and AppShell: claim handle, resolver URL + curl one-liner, key list, generate, paste/import, CA enable/rotate/remove with server trust command, and per-key certificate issuance. API client re-exported through main-axios.ts; all strings i18n'd. * style(ssh-id): align panel and resolver page with Termix theme - Rebuild the SSH ID sidebar panel with the theme's square components (SectionCard / SettingRow / FakeSwitch) instead of rounded ad-hoc cards; use accent-brand and destructive tokens rather than raw red/green. - Fix panel scrolling: move overflow to a block scroll container so the cards keep their natural height instead of being clipped. - Restyle the public resolver HTML page (/sshid/u/:handle) to the Termix dark theme: square corners, #18181b/#303032 palette, #f59145 accent, uppercase section labels. - Tidy copy: 'Save To Credentials' label, drop the redundant generate intro, and correct the generate tooltip (the key is stored when saving to vault). * feat: rename to Termix ID, improve UI, backend inconsistencies, and general bug fixes --------- Co-authored-by: LukeGus <bugattiguy527@gmail.com> * ci(deps): bump actions/checkout from 6 to 7 in the github-actions group (#922) Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout). Updates `actions/checkout` from 6 to 7 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump the dev-patch-updates group with 11 updates (#923) Bumps the dev-patch-updates group with 11 updates: | Package | From | To | | --- | --- | --- | | [@codemirror/search](https://github.com/codemirror/search) | `6.7.0` | `6.7.1` | | [@codemirror/view](https://github.com/codemirror/view) | `6.43.0` | `6.43.1` | | [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite) | `4.3.0` | `4.3.1` | | [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) | `4.1.8` | `4.1.9` | | [@vitest/ui](https://github.com/vitest-dev/vitest/tree/HEAD/packages/ui) | `4.1.8` | `4.1.9` | | [eslint-plugin-react-refresh](https://github.com/ArnaudBarre/eslint-plugin-react-refresh) | `0.5.2` | `0.5.3` | | [lint-staged](https://github.com/lint-staged/lint-staged) | `17.0.7` | `17.0.8` | | [prettier](https://github.com/prettier/prettier) | `3.8.3` | `3.8.4` | | [sharp](https://github.com/lovell/sharp) | `0.35.1` | `0.35.2` | | [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) | `4.3.0` | `4.3.1` | | [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.8` | `4.1.9` | Updates `@codemirror/search` from 6.7.0 to 6.7.1 - [Changelog](https://github.com/codemirror/search/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/search/commits) Updates `@codemirror/view` from 6.43.0 to 6.43.1 - [Changelog](https://github.com/codemirror/view/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/view/commits) Updates `@tailwindcss/vite` from 4.3.0 to 4.3.1 - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.1/packages/@tailwindcss-vite) Updates `@vitest/coverage-v8` from 4.1.8 to 4.1.9 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.9/packages/coverage-v8) Updates `@vitest/ui` from 4.1.8 to 4.1.9 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.9/packages/ui) Updates `eslint-plugin-react-refresh` from 0.5.2 to 0.5.3 - [Release notes](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/releases) - [Changelog](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/blob/main/CHANGELOG.md) - [Commits](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/compare/v0.5.2...v0.5.3) Updates `lint-staged` from 17.0.7 to 17.0.8 - [Release notes](https://github.com/lint-staged/lint-staged/releases) - [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md) - [Commits](https://github.com/lint-staged/lint-staged/compare/v17.0.7...v17.0.8) Updates `prettier` from 3.8.3 to 3.8.4 - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.8.3...3.8.4) Updates `sharp` from 0.35.1 to 0.35.2 - [Release notes](https://github.com/lovell/sharp/releases) - [Commits](https://github.com/lovell/sharp/compare/v0.35.1...v0.35.2) Updates `tailwindcss` from 4.3.0 to 4.3.1 - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.1/packages/tailwindcss) Updates `vitest` from 4.1.8 to 4.1.9 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.9/packages/vitest) --- updated-dependencies: - dependency-name: "@codemirror/search" dependency-version: 6.7.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@codemirror/view" dependency-version: 6.43.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@tailwindcss/vite" dependency-version: 4.3.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@vitest/coverage-v8" dependency-version: 4.1.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@vitest/ui" dependency-version: 4.1.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: eslint-plugin-react-refresh dependency-version: 0.5.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: lint-staged dependency-version: 17.0.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: prettier dependency-version: 3.8.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: sharp dependency-version: 0.35.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: tailwindcss dependency-version: 4.3.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: vitest dependency-version: 4.1.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump nanoid in the prod-patch-updates group (#925) Bumps the prod-patch-updates group with 1 update: [nanoid](https://github.com/ai/nanoid). Updates `nanoid` from 5.1.11 to 5.1.15 - [Release notes](https://github.com/ai/nanoid/releases) - [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md) - [Commits](https://github.com/ai/nanoid/compare/5.1.11...5.1.15) --- updated-dependencies: - dependency-name: nanoid dependency-version: 5.1.15 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump the major-updates group with 5 updates (#926) Bumps the major-updates group with 5 updates: | Package | From | To | | --- | --- | --- | | [js-yaml](https://github.com/nodeca/js-yaml) | `4.2.0` | `5.0.0` | | [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.39.4` | `10.0.1` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `25.9.2` | `26.0.0` | | [concurrently](https://github.com/open-cli-tools/concurrently) | `9.2.1` | `10.0.3` | | [eslint](https://github.com/eslint/eslint) | `9.39.4` | `10.5.0` | Updates `js-yaml` from 4.2.0 to 5.0.0 - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/4.2.0...5.0.0) Updates `@eslint/js` from 9.39.4 to 10.0.1 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](https://github.com/eslint/eslint/commits/v10.0.1/packages/js) Updates `@types/node` from 25.9.2 to 26.0.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `concurrently` from 9.2.1 to 10.0.3 - [Release notes](https://github.com/open-cli-tools/concurrently/releases) - [Commits](https://github.com/open-cli-tools/concurrently/compare/v9.2.1...v10.0.3) Updates `eslint` from 9.39.4 to 10.5.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](https://github.com/eslint/eslint/compare/v9.39.4...v10.5.0) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-updates - dependency-name: "@eslint/js" dependency-version: 10.0.1 dependency-type: direct:development update-type: version-update:semver-major dependency-group: major-updates - dependency-name: "@types/node" dependency-version: 26.0.0 dependency-type: direct:development update-type: version-update:semver-major dependency-group: major-updates - dependency-name: concurrently dependency-version: 10.0.3 dependency-type: direct:development update-type: version-update:semver-major dependency-group: major-updates - dependency-name: eslint dependency-version: 10.5.0 dependency-type: direct:development update-type: version-update:semver-major dependency-group: major-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * feat(ssh): add HashiCorp Vault SSH signer authentication * fix: small fixes to vault feature to align with Termix codebase * chore: add view docs links for vault/termix id * fix: file upload fails with 400 and missing schema migrations on upgrade (#929) Two bugs introduced in v2.4.1: 1. uploadFileStream uses fileManagerApi.post() which triggers axios's transformRequest to JSON-serialize the FormData because the instance default Content-Type is application/json. Change to postForm() which sets Content-Type: multipart/form-data so the browser XHR sends the correct multipart body with boundary. 2. Two schema items added to schema.ts were not included in migrateSchema() in db/index.ts, causing 500 errors on existing installations upgrading from v2.4.0: - user_preferences.status_color_scheme (no such column) - dashboard_service_links table (no such table) Fixes #928 Co-authored-by: sash <sash@fominykh.io> * fix: support PuTTY PPK ssh keys (#930) * fix: chunk large file manager uploads (#932) * fix: route dashboard hosts by protocol (#934) * fix: resolve tunnel endpoints reliably (#935) * Fix Electron OIDC browser auth failures (#936) * Allow RDP connections without stored credentials (#937) * Sync role credential shares for OIDC users (#938) * Fix terminal link dialog layering (#940) * Confirm large files before opening editor (#942) * Confirm closing active host connections (#943) * Preserve file path case in file manager UI (#941) * fix: preserve unicode guacamole tokens (#933) * Persist VNC authentication settings (#944) * Fix Guacamole websocket base path (#946) * Promote file manager terminals to tabs (#939) * Guard Guacamole disconnect during startup (#945) * chore: increment ver * feat: bitwarden ssh agent integration * feat: serial connections support * fix: various small bug fixes * feat: open all sessions in a folder and terminal custom theme color support * feat: cross host file manager clipboard and several small bug fixes * feat: tailscale/wireguard support and added a new status state for when backend is checking status * feat: grafana like server stats history, new alert system, ntfy/webhook support * feat: new grid and widget based homepage function * feat: new donate button in dashboard * fix: alert ui incorrectly using termix css and fixed issue with alert system not loading * chore: fix ci checks (#966) * Fix dashboard service link creation (#950) * Fix jump host SOCKS5 proxy selection (#951) * Fix jump host SOCKS5 proxy selection * fix: type jump host socks proxy config * Fix tmux detection path handling (#949) * Support GUACD_URL environment config (#952) * Retry autostart tunnel host fetches (#953) * Retry autostart tunnel host fetches * chore: format tunnel route * Fix PUID html ownership in Docker entrypoint (#954) * feat: allow custom tunnel endpoints (#977) * fix: skip metrics start for non-ssh hosts (#976) * Fix Proxmox import auth fallback (#956) * Fix Proxmox import auth fallback * chore: format proxmox import auth * Fix SSH heading syntax highlighting (#955) * Fix SSH heading syntax highlighting * chore: format terminal highlighter * Initialize auth before fullscreen terminal routes (#957) * Add WebAuthn passkey authentication (#959) * chore: add Biome tooling (#965) * chore: add biome tooling * chore: support tailwind syntax in biome * Fix VNC required argument handshake (#968) * Prioritize host results in command palette search (#969) * Prevent sidebar host hover layout shift (#970) * Add terminal font zoom with mouse wheel (#971) * Add host temperature metrics card (#972) * Make file downloads reliable in desktop app (#973) * Add app rail hover expansion setting (#974) * fix: use correct translation key for nav.close (#964) * fix(tunnel): skip endpoint credential validation for direct tunnels (#963) * fix: SSH port connection bug (#975) * fix: chunked upload for files >=1.5GB to bypass browser ArrayBuffer limit (#948) * feat: support SSH agent auth across SSH features (#960) * feat: add Podman container runtime support (#958) * chore: update readme and release notes * fix: stabilize Windows app icon (#978) * Add safe host sharing export (#979) * Add external editor support for file manager (#985) * Rework SSH credential password handling (#984) * Support password fallback for SSH key credentials * Complete SSH credential password fallback * Fix runtime base path for auth callbacks (#982) * Fix TUI terminal output highlighting (#983) Co-authored-by: LukeGus <bugattiguy527@gmail.com> * Add app fullscreen mode (#993) * Fix host metrics startup polling (#986) * chore: update release notes * fix: line chart text overlap * chore: update RELEASE_NOTES.md * chore: add donation goal to readme * chore: update readme * fix: hide full-screen button in electron app * fix: failed unit tests * chore: lint, format, and bump version to 2.5.0 * chore: remove timeout from crowdin translate * chore: sync Crowdin translations for 2.5.0 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: DivByZero <mr.oplus@yahoo.fr> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: devdanetra <46488477+devdanetra@users.noreply.github.com> Co-authored-by: Aleksandr Fominykh <neoformalex@users.noreply.github.com> Co-authored-by: sash <sash@fominykh.io> Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
This commit is contained in:
+556
-5
@@ -1,4 +1,73 @@
|
||||
{
|
||||
"termixId": {
|
||||
"title": "Termix ID",
|
||||
"loadFailed": "Failed to load Termix ID",
|
||||
"claimTitle": "Claim your Termix ID",
|
||||
"claimIntro": "Pick a unique handle. Your SSH public keys will be published at a public URL you can add to any server's authorized_keys file.",
|
||||
"handleLabel": "Handle",
|
||||
"handlePlaceholder": "alice",
|
||||
"checking": "Checking…",
|
||||
"available": "Available",
|
||||
"taken": "Already taken",
|
||||
"invalidHandle": "Lowercase letters, numbers, - and _ only",
|
||||
"descriptionLabel": "Description (optional)",
|
||||
"descriptionPlaceholder": "Work laptop & phone keys",
|
||||
"create": "Create Termix ID",
|
||||
"created": "Termix ID created",
|
||||
"createFailed": "Failed to create Termix ID",
|
||||
"deleteConfirm": "Delete your Termix ID and all published keys? Servers you provisioned will keep the keys until you remove them manually.",
|
||||
"deleted": "Termix ID deleted",
|
||||
"deleteFailed": "Failed to delete Termix ID",
|
||||
"copyFailed": "Copy failed",
|
||||
"resolverUrlLabel": "Public resolver URL",
|
||||
"provisionLabel": "Provision a server",
|
||||
"publishTitle": "Publish a public key",
|
||||
"generate": "Generate",
|
||||
"generateTooltip": "Generate an Ed25519 key pair — publishes the public key and downloads the private key to your device",
|
||||
"saveToVault": "Save To Credentials",
|
||||
"keyPlaceholder": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5... user@host",
|
||||
"labelPlaceholder": "Label (optional)",
|
||||
"add": "Add",
|
||||
"importFromCredential": "Or import from a stored credential",
|
||||
"keyPublished": "Key published",
|
||||
"addKeyFailed": "Failed to add key",
|
||||
"generatedSaved": "Key pair generated and saved to your credentials vault. Private key also downloaded.",
|
||||
"generatedOnly": "Key pair generated — private key downloaded (shown only once).",
|
||||
"generateFailed": "Failed to generate key",
|
||||
"imported": "Key imported from credential",
|
||||
"importFailed": "Failed to import key",
|
||||
"noKeys": "No public keys published yet.",
|
||||
"keysTitle": "Published keys",
|
||||
"published": "Published",
|
||||
"hidden": "Hidden",
|
||||
"keyRemoved": "Key removed",
|
||||
"removeKeyFailed": "Failed to remove key",
|
||||
"updateKeyFailed": "Failed to update key",
|
||||
"fromVault": "From credentials vault",
|
||||
"linkedToTermixId": "Published via Termix ID",
|
||||
"selectCredential": "Select a credential...",
|
||||
"import": "Import",
|
||||
"caTitle": "Certificate authority",
|
||||
"caIntro": "Trust this CA on a server and it accepts any certificate you sign. Rotate to revoke everything at once; certificates also expire on their own.",
|
||||
"caEnable": "Enable CA",
|
||||
"caEnabled": "CA enabled",
|
||||
"caCreateFailed": "Failed to enable CA",
|
||||
"caPublicKeyLabel": "CA public key",
|
||||
"caTrustLabel": "Trust on a server (run as root)",
|
||||
"caRotate": "Rotate",
|
||||
"caRotateConfirm": "Rotate the CA? Every certificate it has signed will stop being accepted and must be re-issued.",
|
||||
"caRotated": "CA rotated — previous certificates revoked",
|
||||
"caRotateFailed": "Failed to rotate CA",
|
||||
"caDelete": "Remove CA",
|
||||
"caDeleteConfirm": "Remove the certificate authority?",
|
||||
"caDeleted": "CA removed",
|
||||
"caDeleteFailed": "Failed to remove CA",
|
||||
"caValidityLabel": "Cert validity (days)",
|
||||
"issueCert": "Certificate",
|
||||
"issueCertTooltip": "Issue an SSH certificate for this key, signed by your CA",
|
||||
"certIssued": "Certificate issued and downloaded",
|
||||
"certIssueFailed": "Failed to issue certificate"
|
||||
},
|
||||
"credentials": {
|
||||
"folders": "Folders",
|
||||
"folder": "Folder",
|
||||
@@ -84,6 +153,7 @@
|
||||
"minimize": "Minimize",
|
||||
"online": "Online",
|
||||
"offline": "Offline",
|
||||
"unknown": "Unknown",
|
||||
"continue": "Continue",
|
||||
"maintenance": "Maintenance",
|
||||
"degraded": "Degraded",
|
||||
@@ -155,6 +225,7 @@
|
||||
"serverStats": "Host Metrics",
|
||||
"hostMetrics": "Host Metrics",
|
||||
"admin": "Admin",
|
||||
"termixId": "ID",
|
||||
"userProfile": "User Profile",
|
||||
"splitScreen": "Split Screen",
|
||||
"confirmClose": "Close this active session?",
|
||||
@@ -174,6 +245,7 @@
|
||||
"dashboard": "Dashboard",
|
||||
"networkGraph": "Network Graph",
|
||||
"tmuxMonitor": "Tmux Monitor",
|
||||
"homepage": "Homepage",
|
||||
"quickConnect": "Quick Connect",
|
||||
"sshTools": "SSH Tools",
|
||||
"history": "History",
|
||||
@@ -183,6 +255,8 @@
|
||||
"hostManager": "Host Manager",
|
||||
"credentials": "Credentials",
|
||||
"connections": "Connections",
|
||||
"alerts": "Alerts",
|
||||
"serial": "Serial",
|
||||
"roleAdministrator": "Administrator",
|
||||
"roleUser": "User"
|
||||
},
|
||||
@@ -334,6 +408,30 @@
|
||||
"authMethod": "Auth Method",
|
||||
"storedCredential": "Stored Credential",
|
||||
"selectACredential": "Select a credential...",
|
||||
"vaultProfile": "Vault Signer Profile",
|
||||
"selectAVaultProfile": "Select a Vault profile...",
|
||||
"vaultProfileHint": "Settings come from the shared profile; you'll sign in to Vault via OIDC when you connect. No secrets are stored.",
|
||||
"vaultNewProfile": "New profile",
|
||||
"vaultManageProfiles": "Manage Vault profiles",
|
||||
"vaultAddrLabel": "Vault Address",
|
||||
"vaultNamespaceLabel": "Namespace",
|
||||
"vaultOidcMountLabel": "OIDC Auth Mount",
|
||||
"vaultOidcRoleLabel": "OIDC Role",
|
||||
"vaultSshMountLabel": "SSH Secrets Mount",
|
||||
"vaultSshRoleLabel": "SSH Signer Role",
|
||||
"vaultValidPrincipalsLabel": "Valid Principals",
|
||||
"vaultKeyTypeLabel": "Ephemeral Key Type",
|
||||
"vaultSharedLabel": "Share with all users",
|
||||
"vaultCreateProfile": "Create profile",
|
||||
"vaultProfileCreated": "Vault profile created",
|
||||
"vaultProfileSaved": "Vault profile saved",
|
||||
"vaultProfileDeleted": "Vault profile deleted",
|
||||
"vaultProfileSaveFailed": "Failed to save Vault profile",
|
||||
"vaultProfileDeleteFailed": "Failed to delete Vault profile",
|
||||
"vaultSaveProfile": "Save profile",
|
||||
"vaultProfileValidationError": "Name, Vault address and SSH signer role are required",
|
||||
"vaultNoProfiles": "No Vault profiles yet.",
|
||||
"vaultSharedBadge": "shared",
|
||||
"keyTypeLabel": "Key Type",
|
||||
"keyTypeAuto": "Auto Detect",
|
||||
"keyPasteTab": "Paste",
|
||||
@@ -350,6 +448,11 @@
|
||||
"opksshDesc": "Sign in to this host using your identity provider instead of a password or key. Requires OPKSSH set up on the server.",
|
||||
"warpgateLabel": "Warpgate Gateway",
|
||||
"warpgateDesc": "This host connects through a Warpgate SSH proxy. Termix will handle the browser-based approval flow automatically after authenticating.",
|
||||
"agentLabel": "SSH Agent",
|
||||
"agentDesc": "Authenticate using an SSH agent running on the Termix server (Bitwarden, 1Password, gpg-agent, KeeAgent, ssh-agent). The agent must be running on the machine where Termix is hosted.",
|
||||
"agentSocketPathLabel": "Agent Socket Path",
|
||||
"agentSocketPathPlaceholder": "Leave empty to use SSH_AUTH_SOCK",
|
||||
"agentSocketPathHint": "Leave empty to auto-detect from the SSH_AUTH_SOCK environment variable, or enter a custom socket path (e.g. /run/user/1000/gnupg/S.gpg-agent.ssh).",
|
||||
"tailscaleDeviceSelect": "Select Tailscale device",
|
||||
"tailscaleDeviceSelectPlaceholder": "Select a device...",
|
||||
"tailscaleNoApiKey": "No Tailscale API key configured. Add one in Admin Settings to enable device discovery.",
|
||||
@@ -378,6 +481,30 @@
|
||||
"backgroundImageLabel": "Background Image URL",
|
||||
"backgroundImageDesc": "Optional URL for a terminal background image",
|
||||
"backgroundImageOpacityLabel": "Background Image Opacity",
|
||||
"customThemeColors": "Custom Colors",
|
||||
"customThemeBackground": "Background",
|
||||
"customThemeForeground": "Foreground",
|
||||
"customThemeCursor": "Cursor",
|
||||
"customThemeCursorAccent": "Cursor Accent",
|
||||
"customThemeSelection": "Selection",
|
||||
"customThemeAnsiColors": "ANSI Colors",
|
||||
"customThemeBlack": "Black",
|
||||
"customThemeRed": "Red",
|
||||
"customThemeGreen": "Green",
|
||||
"customThemeYellow": "Yellow",
|
||||
"customThemeBlue": "Blue",
|
||||
"customThemeMagenta": "Magenta",
|
||||
"customThemeCyan": "Cyan",
|
||||
"customThemeWhite": "White",
|
||||
"customThemeBrightBlack": "Bright Black",
|
||||
"customThemeBrightRed": "Bright Red",
|
||||
"customThemeBrightGreen": "Bright Green",
|
||||
"customThemeBrightYellow": "Bright Yellow",
|
||||
"customThemeBrightBlue": "Bright Blue",
|
||||
"customThemeBrightMagenta": "Bright Magenta",
|
||||
"customThemeBrightCyan": "Bright Cyan",
|
||||
"customThemeBrightWhite": "Bright White",
|
||||
"customThemeResetTooltip": "Reset to defaults",
|
||||
"syntaxHighlightingLabel": "Syntax Highlighting",
|
||||
"syntaxHighlightingDesc": "Colorize terminal output (errors, paths, IPs, timestamps)",
|
||||
"syntaxHighlightingCategories": "Highlight Categories",
|
||||
@@ -440,6 +567,7 @@
|
||||
"tunnelModeDynamicDesc": "Create a SOCKS5 proxy on a local port for dynamic port forwarding.",
|
||||
"sameHost": "This host (direct tunnel)",
|
||||
"endpointHost": "Endpoint Host",
|
||||
"endpointHostPlaceholder": "Same host, SSH host, or reachable host/IP",
|
||||
"endpointPort": "Endpoint Port",
|
||||
"bindHost": "Bind Host",
|
||||
"sourcePort": "Source Port",
|
||||
@@ -454,6 +582,10 @@
|
||||
"dockerIntegration": "Docker Integration",
|
||||
"enableDockerMonitor": "Enable Docker",
|
||||
"enableDockerMonitorDesc": "Monitor and manage containers on this host via Docker",
|
||||
"containerRuntime": "Container Runtime",
|
||||
"containerRuntimeDesc": "Choose the CLI used for container management on this host",
|
||||
"containerRuntimeDocker": "Docker",
|
||||
"containerRuntimePodman": "Podman",
|
||||
"enableTmuxMonitor": "Enable Tmux Monitor",
|
||||
"enableTmuxMonitorDesc": "Show this host in the Tmux Monitor and add its tmux actions to the sidebar",
|
||||
"tabProxmox": "Proxmox",
|
||||
@@ -509,7 +641,7 @@
|
||||
"checkIntervalDesc": "Seconds between each connectivity ping",
|
||||
"metricsCollectionLabel": "Metrics Collection",
|
||||
"enableMetricsLabel": "Enable Metrics",
|
||||
"enableMetricsDesc": "Collect CPU, RAM, disk, and network usage from this host",
|
||||
"enableMetricsDesc": "Collect CPU, RAM, disk, and other metrics from this host",
|
||||
"useGlobalMetrics": "Use Global Interval",
|
||||
"useGlobalMetricsDesc": "Override with the server-wide metrics interval",
|
||||
"metricsIntervalS": "Metrics Interval (s)",
|
||||
@@ -556,6 +688,7 @@
|
||||
"credentialCreated": "Credential created",
|
||||
"failedToSaveCredential": "Failed to save credential",
|
||||
"credentialNameRequired": "Please enter a name for the credential",
|
||||
"credentialAuthRequired": "Add a password, an SSH key, or both",
|
||||
"backToHosts": "Back to Hosts",
|
||||
"backToCredentials": "Back to Credentials",
|
||||
"pinned": "Pinned",
|
||||
@@ -601,6 +734,7 @@
|
||||
"saveFolderButton": "Save folder",
|
||||
"cancel": "Cancel",
|
||||
"iconSearchPlaceholder": "Search icons...",
|
||||
"openAllSessions": "Open all sessions",
|
||||
"editFolder": "Edit folder",
|
||||
"deleteFolder": "Delete folder",
|
||||
"folderSaved": "Folder saved",
|
||||
@@ -708,11 +842,13 @@
|
||||
"refreshBtn2": "Refresh",
|
||||
"exitSelectionTitle": "Exit selection",
|
||||
"exportAll": "Export All",
|
||||
"exportForSharing": "Export for Sharing",
|
||||
"addHostBtn2": "Add Host",
|
||||
"addCredentialBtn2": "Add Credential",
|
||||
"checkingHostStatuses": "Checking host statuses...",
|
||||
"pinnedSection": "Pinned",
|
||||
"hostsExported": "Hosts exported successfully",
|
||||
"hostsShareExported": "Shareable hosts exported successfully",
|
||||
"exportFailed": "Failed to export hosts",
|
||||
"sampleDownloaded": "Sample file downloaded",
|
||||
"failedToDeleteCredential2": "Failed to delete credential",
|
||||
@@ -1036,6 +1172,7 @@
|
||||
"clipboardWriteFailed": "Failed to copy to clipboard. Make sure the page is served over HTTPS or localhost.",
|
||||
"clipboardReadFailed": "Failed to read from clipboard. Make sure clipboard permissions are granted.",
|
||||
"clipboardHttpWarning": "Paste requires HTTPS. Use Ctrl+Shift+V or serve Termix over HTTPS.",
|
||||
"passwordPromptFillTitle": "Fill the saved password into this prompt?",
|
||||
"unknownError": "Unknown error occurred",
|
||||
"websocketError": "WebSocket connection error",
|
||||
"connecting": "Connecting...",
|
||||
@@ -1082,6 +1219,10 @@
|
||||
"opksshTimeout": "Authentication timed out. Please try again.",
|
||||
"opksshAuthFailed": "Authentication failed. Please check your credentials and try again.",
|
||||
"opksshSignInWith": "Sign in with {{provider}}",
|
||||
"vaultAuthTitle": "Vault sign-in required",
|
||||
"vaultAuthDescription": "A window has opened to sign in to HashiCorp Vault. Complete the sign-in there; this connection will continue automatically.",
|
||||
"vaultAuthFailed": "Vault authentication failed. Please try again.",
|
||||
"vaultReopen": "Reopen sign-in window",
|
||||
"sudoPasswordPopupTitle": "Insert Password?",
|
||||
"linkDialogTitle": "Open Link",
|
||||
"linkDialogOpen": "Open",
|
||||
@@ -1190,6 +1331,13 @@
|
||||
"itemRenamedSuccessfully": "{{type}} renamed successfully",
|
||||
"failedToRenameItem": "Failed to rename item",
|
||||
"download": "Download",
|
||||
"openExternalEditor": "Open externally",
|
||||
"chooseExternalEditor": "Choose external editor",
|
||||
"externalEditorSelected": "External editor selected",
|
||||
"externalEditorDesktopOnly": "External editor is only available in the desktop app",
|
||||
"externalEditorOpened": "Opened in external editor. Saving there will upload changes back to the server.",
|
||||
"failedToOpenExternalEditor": "Failed to open external editor",
|
||||
"failedToSelectExternalEditor": "Failed to select external editor",
|
||||
"permissions": "Permissions",
|
||||
"size": "Size",
|
||||
"modified": "Modified",
|
||||
@@ -1562,6 +1710,8 @@
|
||||
"cpuUsage": "CPU Usage",
|
||||
"memoryUsage": "Memory Usage",
|
||||
"diskUsage": "Disk Usage",
|
||||
"temperature": "Temperature",
|
||||
"highestTemperature": "Highest temperature",
|
||||
"failedToFetchHostConfig": "Failed to fetch host configuration",
|
||||
"serverOffline": "Server Offline",
|
||||
"cannotFetchMetrics": "Cannot fetch metrics from offline server",
|
||||
@@ -1616,6 +1766,7 @@
|
||||
"retry": "Retry",
|
||||
"customize": "Customize layout",
|
||||
"reset": "Reset",
|
||||
"tabLive": "Live",
|
||||
"editModeInstructions": "Drag cards to rearrange, drag the bottom edge to resize, and use the width button to change a card's span. Add or remove cards below.",
|
||||
"managers": {
|
||||
"services": "Services",
|
||||
@@ -1691,7 +1842,40 @@
|
||||
"logCustomPath": "Custom path under /var/log (optional)",
|
||||
"logGrep": "Filter lines...",
|
||||
"firewallPersist": "Persist rules",
|
||||
"firewallPersisted": "Firewall rules persisted"
|
||||
"firewallPersisted": "Firewall rules persisted",
|
||||
"wireguard": "WireGuard",
|
||||
"tailscale": "Tailscale",
|
||||
"wgNotInstalled": "WireGuard is not installed on this host",
|
||||
"wgNoInterfaces": "No WireGuard interfaces configured",
|
||||
"wgInterfaceUp": "Bring up",
|
||||
"wgInterfaceDown": "Bring down",
|
||||
"wgBringingUp": "Bringing {{name}} up...",
|
||||
"wgBringingDown": "Bringing {{name}} down...",
|
||||
"wgInterfaceUpDone": "{{name}} is up",
|
||||
"wgInterfaceDownDone": "{{name}} is down",
|
||||
"wgListenPort": "Port",
|
||||
"wgPublicKey": "Public key",
|
||||
"wgEndpoint": "Endpoint",
|
||||
"wgAllowedIPs": "Allowed IPs",
|
||||
"wgLastHandshake": "Last handshake",
|
||||
"wgHandshakeNever": "Never",
|
||||
"wgTransfer": "Transfer",
|
||||
"tsNotInstalled": "Tailscale is not installed on this host",
|
||||
"tsRunning": "Running",
|
||||
"tsStopped": "Stopped",
|
||||
"tsEnable": "Connect",
|
||||
"tsDisable": "Disconnect",
|
||||
"tsEnabling": "Connecting to Tailscale...",
|
||||
"tsDisabling": "Disconnecting from Tailscale...",
|
||||
"tsEnabled": "Tailscale connected",
|
||||
"tsDisabled": "Tailscale disconnected",
|
||||
"tsIPs": "Tailscale IPs",
|
||||
"tsPeers": "Peers",
|
||||
"tsOnline": "Online",
|
||||
"tsOffline": "Offline",
|
||||
"tsExitNode": "Exit node",
|
||||
"tsExitNodeActive": "Exit node active",
|
||||
"tsHostname": "Hostname"
|
||||
}
|
||||
},
|
||||
"auth": {
|
||||
@@ -1748,7 +1932,9 @@
|
||||
"dataLossWarning": "Resetting your password this way will delete all your saved SSH hosts, credentials, and other encrypted data. This action cannot be undone. Only use this if you have forgotten your password and are not logged in.",
|
||||
"authenticationDisabled": "Authentication Disabled",
|
||||
"authenticationDisabledDesc": "All authentication methods are currently disabled. Please contact your administrator.",
|
||||
"passwordLoginDisabledDesc": "Password login is disabled. Please use an external authentication provider below.",
|
||||
"passwordLoginDisabledDesc": "Password login is disabled. Use a passkey or an external authentication provider.",
|
||||
"signInWithPasskey": "Sign in with passkey",
|
||||
"passkeyLoginFailed": "Passkey login failed",
|
||||
"attemptsRemaining": "{{count}} attempts remaining"
|
||||
},
|
||||
"hostKey": {
|
||||
@@ -1879,7 +2065,8 @@
|
||||
"panelMain": "Main",
|
||||
"panelSide": "Side",
|
||||
"justNow": "just now",
|
||||
"serviceLinks": "Service Links"
|
||||
"serviceLinks": "Service Links",
|
||||
"homepagePreview": "Homepage Preview"
|
||||
},
|
||||
"dashboardTab": {
|
||||
"stable": "STABLE",
|
||||
@@ -1893,6 +2080,7 @@
|
||||
"noHostsConfigured": "No hosts configured",
|
||||
"online": "ONLINE",
|
||||
"offline": "OFFLINE",
|
||||
"checking": "CHECKING",
|
||||
"onlineLower": "Online",
|
||||
"nodes": "{{count}} nodes",
|
||||
"add": "Add:",
|
||||
@@ -1908,7 +2096,8 @@
|
||||
"serviceLinksAdd": "Add",
|
||||
"serviceLinksLabelPlaceholder": "My Service",
|
||||
"serviceLinksUrlPlaceholder": "http://192.168.1.10:8080",
|
||||
"serviceLinksInvalidUrl": "Must be a valid http or https URL",
|
||||
"serviceLinksInvalidUrl": "Enter a valid web address",
|
||||
"serviceLinksAddFailed": "Failed to add service link",
|
||||
"disk": "Disk",
|
||||
"viewServerDetails": "View server details"
|
||||
},
|
||||
@@ -2326,6 +2515,9 @@
|
||||
"monitoringIntervalInvalid": "Invalid interval values",
|
||||
"monitoringSaved": "Monitoring settings saved",
|
||||
"monitoringSaveFailed": "Failed to save monitoring settings",
|
||||
"metricsHistoryRetention": "Metrics History Retention",
|
||||
"metricsHistoryRetentionRange": "1 to 90 days",
|
||||
"days": "days",
|
||||
"guacamoleSaved": "Guacamole settings saved",
|
||||
"guacamoleSaveFailed": "Failed to save Guacamole settings",
|
||||
"guacamoleUpdateFailed": "Failed to update Guacamole setting",
|
||||
@@ -2413,6 +2605,9 @@
|
||||
"noTerminalTabsOpen": "No terminal tabs open",
|
||||
"selectTerminalsAbove": "Select terminals above",
|
||||
"broadcastInputPlaceholder": "Type here to broadcast keystrokes...",
|
||||
"fillPassword": "Fill password",
|
||||
"fillPasswordSuccess": "Filled password into {{count}} terminal(s)",
|
||||
"fillPasswordMissing": "No saved password for {{count}} selected terminal(s)",
|
||||
"stopRecording": "Stop Recording",
|
||||
"startRecording": "Start Recording",
|
||||
"settingsTitle": "Settings",
|
||||
@@ -2596,6 +2791,8 @@
|
||||
"statusColorsDesc": "Use green/red for online/offline status instead of the accent color",
|
||||
"pinAppRail": "Pin App Rail",
|
||||
"pinAppRailDesc": "Keep the left sidebar app rail always expanded instead of expanding on hover",
|
||||
"expandAppRailOnHover": "Expand App Rail on Hover",
|
||||
"expandAppRailOnHoverDesc": "Allow the left sidebar app rail to expand when the pointer moves over it",
|
||||
"settingsNavigation": "Navigation",
|
||||
"navigationTabsDesc": "Choose which tabs appear in the app rail",
|
||||
"settingsSnippets": "Snippets",
|
||||
@@ -2656,6 +2853,18 @@
|
||||
"totpVerifyTitle": "Verify Code",
|
||||
"totpBackupTitle": "Backup Codes",
|
||||
"totpDownloadBackup": "Download Backup Codes",
|
||||
"passkeys": "Passkeys",
|
||||
"passkeysDesc": "Use WebAuthn/FIDO2 credentials to sign in without a password",
|
||||
"passkeyName": "Passkey name",
|
||||
"passkeyUvPreferred": "Preferred",
|
||||
"passkeyUvRequired": "Required",
|
||||
"passkeyUvDiscouraged": "Discouraged",
|
||||
"addPasskey": "Add Passkey",
|
||||
"noPasskeys": "No passkeys registered.",
|
||||
"passkeyAdded": "Passkey added",
|
||||
"passkeyAddFailed": "Failed to add passkey",
|
||||
"passkeyDeleted": "Passkey deleted",
|
||||
"passkeyDeleteFailed": "Failed to delete passkey",
|
||||
"done": "Done",
|
||||
"secretCopied": "Secret copied to clipboard",
|
||||
"apiKeyNameRequired": "Key name is required",
|
||||
@@ -2786,5 +2995,347 @@
|
||||
"removeQuickKey": "Remove",
|
||||
"resetDefaults": "Reset to defaults",
|
||||
"done": "Done"
|
||||
},
|
||||
"serial": {
|
||||
"title": "Serial",
|
||||
"portLabel": "Port",
|
||||
"portPlaceholder": "/dev/ttyUSB0 or COM3",
|
||||
"baudRateLabel": "Baud Rate",
|
||||
"dataBitsLabel": "Data",
|
||||
"stopBitsLabel": "Stop",
|
||||
"parityLabel": "Parity",
|
||||
"parityNone": "None",
|
||||
"parityEven": "Even",
|
||||
"parityOdd": "Odd",
|
||||
"connect": "Connect to Serial",
|
||||
"disconnect": "Disconnect",
|
||||
"refreshPorts": "Refresh ports",
|
||||
"connected": "Connected to {{path}} at {{baud}} baud",
|
||||
"disconnected": "Serial port disconnected",
|
||||
"connectionError": "Failed to open serial port",
|
||||
"wsError": "WebSocket error",
|
||||
"errorNoServerUrl": "No server URL configured",
|
||||
"notSupportedTitle": "Serial Not Supported",
|
||||
"notSupported": "Serial connections require a browser with Web Serial API support (Chrome, Edge, or Firefox 151+), or the Termix desktop app.",
|
||||
"hideHint": "You can hide the Serial tab under User Profile > Appearance > Sidebar > Navigation.",
|
||||
"browserPickerHint": "Click Connect and your browser will open a port picker to choose the device."
|
||||
},
|
||||
"metricsHistory": {
|
||||
"title": "Metrics History",
|
||||
"historySuffix": "History",
|
||||
"cpuMemoryDisk": "CPU / Memory / Disk",
|
||||
"network": "Network",
|
||||
"download": "RX",
|
||||
"upload": "TX",
|
||||
"noData": "No history data available for this time range.",
|
||||
"custom": "Custom",
|
||||
"to": "to",
|
||||
"apply": "Apply",
|
||||
"viewHistory": "View History"
|
||||
},
|
||||
"alerts": {
|
||||
"tabFirings": "Alerts",
|
||||
"tabRules": "Rules",
|
||||
"tabChannels": "Channels",
|
||||
"noFirings": "No unacknowledged alerts",
|
||||
"noRules": "No alert rules configured",
|
||||
"noChannels": "No notification channels configured",
|
||||
"rulesDesc": "Alert rules trigger notifications",
|
||||
"channelsDesc": "Where alert notifications are sent",
|
||||
"acknowledge": "Acknowledge",
|
||||
"ackAll": "Ack All",
|
||||
"allAcknowledged": "All alerts acknowledged",
|
||||
"ackFailed": "Failed to acknowledge alert",
|
||||
"ackAllFailed": "Failed to acknowledge all alerts",
|
||||
"showAcknowledged": "Show All",
|
||||
"hideAcknowledged": "Hide Acked",
|
||||
"addChannel": "Add Channel",
|
||||
"editChannel": "Edit Channel",
|
||||
"channelName": "Name",
|
||||
"channelType": "Type",
|
||||
"channelNameRequired": "Name is required",
|
||||
"webhookUrl": "URL",
|
||||
"webhookUrlRequired": "Webhook URL is required",
|
||||
"webhookDesc": "POST JSON payload to this URL on each alert firing",
|
||||
"ntfyServer": "Server URL",
|
||||
"ntfyTopic": "Topic",
|
||||
"ntfyTopicRequired": "Topic is required",
|
||||
"ntfyToken": "Access Token (optional)",
|
||||
"channelSaveFailed": "Failed to save channel",
|
||||
"test": "Test",
|
||||
"testSent": "Test notification sent",
|
||||
"testFailed": "Test notification failed",
|
||||
"addRule": "Add Alert Rule",
|
||||
"editRule": "Edit Alert Rule",
|
||||
"ruleName": "Rule Name",
|
||||
"ruleNameRequired": "Name is required",
|
||||
"triggerType": "Trigger",
|
||||
"thresholdValue": "Threshold (%)",
|
||||
"durationSeconds": "Duration (seconds, 0 = fire immediately)",
|
||||
"cooldownMinutes": "Cooldown (minutes)",
|
||||
"channels": "Notification Channels",
|
||||
"noChannelsHint": "Add channels in the Channels tab first",
|
||||
"ruleSaveFailed": "Failed to save rule"
|
||||
},
|
||||
"homepage": {
|
||||
"title": "Homepage",
|
||||
"addWidget": "Add Widget",
|
||||
"editWidget": "Edit Widget",
|
||||
"deleteWidget": "Delete",
|
||||
"widgetTypes": "Widget Types",
|
||||
"serviceLink": "Service Link",
|
||||
"folder": "Folder",
|
||||
"clock": "Clock",
|
||||
"notes": "Notes",
|
||||
"hostStatus": "Host Status",
|
||||
"bookmarkList": "Bookmarks",
|
||||
"zoomIn": "Zoom In",
|
||||
"zoomOut": "Zoom Out",
|
||||
"resetView": "Reset View",
|
||||
"lockLayout": "Lock Layout",
|
||||
"unlockLayout": "Unlock Layout",
|
||||
"noWidgets": "Right-click or click + to add your first widget",
|
||||
"openFullView": "Open Full View",
|
||||
"previewTitle": "Homepage Preview",
|
||||
"cancel": "Cancel",
|
||||
"save": "Save",
|
||||
"title_label": "Title",
|
||||
"widgetTitlePlaceholder": "Widget title (optional)",
|
||||
"url": "URL",
|
||||
"imageUrl": "Custom Image URL",
|
||||
"imageUrlHint": "Leave blank to use the site favicon automatically",
|
||||
"showImage": "Show Image",
|
||||
"description": "Description",
|
||||
"color": "Color",
|
||||
"icon": "Icon",
|
||||
"expanded": "Expanded by default",
|
||||
"timezone": "Timezone",
|
||||
"showSeconds": "Show seconds",
|
||||
"format12h": "12-hour",
|
||||
"format24h": "24-hour",
|
||||
"content": "Content",
|
||||
"backgroundColor": "Background Color",
|
||||
"host": "Host",
|
||||
"showMetrics": "Show Metrics",
|
||||
"links": "Links",
|
||||
"addLink": "Add Link",
|
||||
"linkLabel": "Label",
|
||||
"linkUrl": "URL",
|
||||
"removeLink": "Remove",
|
||||
"categoryLinks": "Links",
|
||||
"categoryInfo": "Info",
|
||||
"categorySystem": "System",
|
||||
"widgetServiceLinkDesc": "A clickable tile linking to a service URL",
|
||||
"widgetFolderDesc": "A container to group related widgets",
|
||||
"widgetClockDesc": "A live clock with configurable timezone",
|
||||
"widgetNotesDesc": "A markdown notes widget",
|
||||
"widgetHostStatusDesc": "Shows live CPU, memory and disk for an SSH host",
|
||||
"widgetBookmarkListDesc": "A list of quick links",
|
||||
"copyLink": "Copy Link",
|
||||
"linkCopied": "Link copied!",
|
||||
"location": "Location",
|
||||
"temperatureUnit": "Temperature Unit",
|
||||
"showForecast": "Show 3-day forecast",
|
||||
"scrolling": "Allow Scrolling",
|
||||
"feedUrl": "Feed URL",
|
||||
"maxItems": "Max Items",
|
||||
"showDescription": "Show Description",
|
||||
"widgetWeatherName": "Weather",
|
||||
"widgetWeatherDesc": "Live weather for any location",
|
||||
"widgetIframeName": "iFrame Embed",
|
||||
"widgetIframeDesc": "Embed any URL in an iframe",
|
||||
"widgetRssName": "RSS Feed",
|
||||
"widgetRssDesc": "Display items from an RSS or Atom feed",
|
||||
"dragToFolder": "Drag widgets here or use + to add",
|
||||
"showDisk": "Show Disk Usage",
|
||||
"addToFolder": "Add widget to folder",
|
||||
"noHostSelected": "No host selected",
|
||||
"metricsNotAvailable": "Metrics not available",
|
||||
"selectHost": "Select a host...",
|
||||
"displayedMetrics": "Displayed Metrics",
|
||||
"metricCpu": "CPU",
|
||||
"metricMemory": "Memory",
|
||||
"metricDisk": "Disk",
|
||||
"metricUptime": "Uptime",
|
||||
"metricSystem": "System",
|
||||
"metricOs": "OS",
|
||||
"metricKernel": "Kernel",
|
||||
"metricHostname": "Hostname",
|
||||
"metricNetwork": "Network",
|
||||
"metricProcesses": "Processes",
|
||||
"metricProcessesTotal": "total",
|
||||
"metricProcessesRunning": "running",
|
||||
"categoryMonitoring": "Monitoring",
|
||||
"loading": "Loading...",
|
||||
"noData": "No data available",
|
||||
"allClear": "All clear",
|
||||
"acknowledgeAlert": "Acknowledge",
|
||||
"noPingUrls": "No URLs configured",
|
||||
"pingLabel": "Label",
|
||||
"addPingUrl": "Add URL",
|
||||
"showLatency": "Show Latency",
|
||||
"refreshInterval": "Refresh Interval",
|
||||
"seconds": "seconds",
|
||||
"filterActivityTypes": "Filter Types",
|
||||
"filterTypesHint": "Leave empty to show all",
|
||||
"showTimestamp": "Show Timestamp",
|
||||
"uptimeUnavailable": "Uptime unavailable",
|
||||
"uptimeLabel": "Uptime",
|
||||
"overviewVersion": "Version",
|
||||
"overviewUpdate": "Up to date",
|
||||
"overviewUpdateAvailable": "Update available",
|
||||
"overviewDatabase": "Database",
|
||||
"overviewUptime": "Uptime",
|
||||
"noHosts": "No hosts configured",
|
||||
"hostGridHosts": "Hosts",
|
||||
"hostGridAllHint": "Leave empty to show all hosts",
|
||||
"columns": "Columns",
|
||||
"showIp": "Show IP Address",
|
||||
"connectionType": "Connection Type",
|
||||
"layout": "Layout",
|
||||
"showStatus": "Show Status",
|
||||
"showHostName": "Show Host Name",
|
||||
"noDockerActivity": "No Docker activity",
|
||||
"noActivity": "No activity",
|
||||
"showAcknowledged": "Show Acknowledged",
|
||||
"showCurrentValue": "Show Current Value",
|
||||
"chartMetric": "Metric",
|
||||
"metricRange": "Range",
|
||||
"widgetMetricsChartName": "Metrics Chart",
|
||||
"widgetMetricsChartDesc": "Historical CPU, memory, disk or network chart for a host",
|
||||
"widgetHostGridName": "Host Grid",
|
||||
"widgetHostGridDesc": "Grid view of SSH host statuses",
|
||||
"widgetAlertFeedName": "Alert Feed",
|
||||
"widgetAlertFeedDesc": "Live alert firings with acknowledge support",
|
||||
"widgetPingStatusName": "Ping Status",
|
||||
"widgetPingStatusDesc": "HTTP ping status for one or more URLs",
|
||||
"widgetRecentActivityName": "Recent Activity",
|
||||
"widgetRecentActivityDesc": "Scrollable feed of recent Termix activity",
|
||||
"widgetTermixUptimeName": "Termix Uptime",
|
||||
"widgetTermixUptimeDesc": "Live uptime counter for the Termix server",
|
||||
"widgetSystemOverviewName": "System Overview",
|
||||
"widgetSystemOverviewDesc": "Termix version, database health and uptime at a glance",
|
||||
"widgetSshQuickConnectName": "SSH Quick Connect",
|
||||
"widgetSshQuickConnectDesc": "One-click buttons to open SSH sessions",
|
||||
"widgetDockerActivityName": "Docker Activity",
|
||||
"widgetDockerActivityDesc": "Recent Docker container events across all hosts",
|
||||
"widgetCalendarName": "Calendar",
|
||||
"widgetCalendarDesc": "A monthly calendar with today highlighted",
|
||||
"widgetCountdownName": "Countdown",
|
||||
"widgetCountdownDesc": "Countdown timer to a target date",
|
||||
"widgetSearchBarName": "Search Bar",
|
||||
"widgetSearchBarDesc": "Quick web search widget",
|
||||
"widgetTextBannerName": "Text Banner",
|
||||
"widgetTextBannerDesc": "A bold label or section header for the canvas",
|
||||
"widgetImageWidgetName": "Image",
|
||||
"widgetImageWidgetDesc": "Display an image from a URL",
|
||||
"widgetMarkdownNotesName": "Markdown Notes",
|
||||
"widgetMarkdownNotesDesc": "Rich notes with inline markdown rendering",
|
||||
"widgetCustomApiName": "Custom API",
|
||||
"widgetCustomApiDesc": "Fetch and display data from any JSON API",
|
||||
"widgetServiceGridName": "Service Grid",
|
||||
"widgetServiceGridDesc": "A configurable grid of service tile links",
|
||||
"widgetDashboardLinksName": "Dashboard Links",
|
||||
"widgetDashboardLinksDesc": "Display your configured service links from the dashboard",
|
||||
"widgetSearchLinksName": "Search Shortcuts",
|
||||
"widgetSearchLinksDesc": "Quick search shortcut buttons with inline input",
|
||||
"widgetLinkTreeName": "Link Tree",
|
||||
"widgetLinkTreeDesc": "Grouped sections of links with headings",
|
||||
"calMon": "Mo",
|
||||
"calTue": "Tu",
|
||||
"calWed": "We",
|
||||
"calThu": "Th",
|
||||
"calFri": "Fr",
|
||||
"calSat": "Sa",
|
||||
"calSun": "Su",
|
||||
"startOnMonday": "Start week on Monday",
|
||||
"countdownNoDate": "No target date set",
|
||||
"countdownPast": "Event has passed",
|
||||
"countdownDays": "days",
|
||||
"countdownHours": "hrs",
|
||||
"countdownMinutes": "min",
|
||||
"countdownSeconds": "sec",
|
||||
"countdownLabel": "Label",
|
||||
"countdownLabelPlaceholder": "e.g. Launch Day",
|
||||
"countdownShowDays": "Show Days",
|
||||
"countdownShowHours": "Show Hours",
|
||||
"targetDate": "Target Date",
|
||||
"searchEngine": "Search Engine",
|
||||
"customSearchUrl": "Custom Search URL",
|
||||
"searchPlaceholder": "Search...",
|
||||
"searchGo": "Go",
|
||||
"searchPlaceholderLabel": "Placeholder Text",
|
||||
"searchPlaceholderHint": "Text shown inside the search input",
|
||||
"openInNewTab": "Open in New Tab",
|
||||
"searchQueryPlaceholder": "Enter query...",
|
||||
"noSearchShortcuts": "No shortcuts configured",
|
||||
"addSearchShortcut": "Add Shortcut",
|
||||
"fontSize": "Font Size",
|
||||
"textAlign": "Text Align",
|
||||
"fontWeight": "Font Weight",
|
||||
"clearColor": "Clear Color",
|
||||
"imageFit": "Image Fit",
|
||||
"imageLinkUrl": "Link URL",
|
||||
"noImage": "No image URL set",
|
||||
"altText": "Alt Text",
|
||||
"altTextPlaceholder": "Describe the image",
|
||||
"renderMarkdown": "Render Markdown",
|
||||
"displayMode": "Display Mode",
|
||||
"displayField": "Display Field",
|
||||
"jsonPath": "JSON Path",
|
||||
"customApiLabel": "Label",
|
||||
"customApiLabelPlaceholder": "e.g. Temperature",
|
||||
"customApiUnit": "Unit",
|
||||
"customApiNoUrl": "No API URL configured",
|
||||
"customApiError": "Failed to fetch",
|
||||
"customApiNotArray": "Response is not an array",
|
||||
"addService": "Add Service",
|
||||
"showLabels": "Show Labels",
|
||||
"iconSize": "Icon Size",
|
||||
"noDashboardLinks": "No dashboard links configured",
|
||||
"noLimit": "No limit",
|
||||
"sectionHeading": "Section Heading",
|
||||
"addSection": "Add Section",
|
||||
"compactMode": "Compact Mode",
|
||||
"showDetailed": "Show Detailed",
|
||||
"selectHosts": "Select Hosts",
|
||||
"allHosts": "All hosts",
|
||||
"listLayout": "List",
|
||||
"gridLayout": "Grid",
|
||||
"terminal": "Terminal",
|
||||
"files": "Files",
|
||||
"docker": "Docker",
|
||||
"range15m": "15 minutes",
|
||||
"range1h": "1 hour",
|
||||
"range6h": "6 hours",
|
||||
"range24h": "24 hours",
|
||||
"metricNetRx": "Net Download",
|
||||
"metricNetTx": "Net Upload",
|
||||
"severityFilter": "Severity Filter",
|
||||
"filterAll": "All",
|
||||
"accentColor": "Accent Color",
|
||||
"widgetSshTerminalName": "SSH Terminal",
|
||||
"widgetSshTerminalDesc": "An inline SSH terminal connected to a configured host",
|
||||
"sshTerminalNoHost": "No host configured",
|
||||
"sshTerminalConnect": "Connect",
|
||||
"sshTerminalAutoConnect": "Auto-connect on load",
|
||||
"widgetQuickConnectName": "Quick Connect",
|
||||
"widgetQuickConnectDesc": "One-click launch buttons for any connection type across your hosts",
|
||||
"connectionTypes": "Connection Types",
|
||||
"connType_terminal": "Terminal",
|
||||
"connType_files": "File Manager",
|
||||
"connType_docker": "Docker",
|
||||
"connType_tunnel": "Tunnel",
|
||||
"connType_host-metrics": "Host Metrics",
|
||||
"connType_rdp": "RDP",
|
||||
"connType_vnc": "VNC",
|
||||
"connType_telnet": "Telnet",
|
||||
"widgetFileManagerName": "File Manager",
|
||||
"widgetFileManagerDesc": "Embedded SFTP file manager for a configured host",
|
||||
"widgetDockerName": "Docker Manager",
|
||||
"widgetDockerDesc": "Embedded Docker container manager for a configured host",
|
||||
"widgetTunnelName": "Tunnel Manager",
|
||||
"widgetTunnelDesc": "Embedded SSH tunnel manager for a configured host",
|
||||
"widgetNoHostSelected": "No host configured"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user