mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-08-29 18:31:33 +00:00
release-2.6.0 (#1085)
* fix: general bug fixes * fix: general qol additions * ci(deps): bump actions/setup-node in the github-actions group (#1068) Bumps the github-actions group with 1 update: [actions/setup-node](https://github.com/actions/setup-node). Updates `actions/setup-node` from 6 to 7 - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/setup-node 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 28 updates (#1069) Bumps the dev-patch-updates group with 28 updates: | Package | From | To | | --- | --- | --- | | [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) | `2.5.2` | `2.5.4` | | [@codemirror/view](https://github.com/codemirror/view) | `6.43.5` | `6.43.6` | | [@radix-ui/react-accordion](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/accordion) | `1.2.15` | `1.2.17` | | [@radix-ui/react-alert-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/alert-dialog) | `1.1.18` | `1.1.20` | | [@radix-ui/react-checkbox](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/checkbox) | `1.3.6` | `1.3.8` | | [@radix-ui/react-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dialog) | `1.1.18` | `1.1.20` | | [@radix-ui/react-dropdown-menu](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dropdown-menu) | `2.1.19` | `2.1.21` | | [@radix-ui/react-label](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/label) | `2.1.11` | `2.1.12` | | [@radix-ui/react-popover](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/popover) | `1.1.18` | `1.1.20` | | [@radix-ui/react-progress](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/progress) | `1.1.11` | `1.1.13` | | [@radix-ui/react-scroll-area](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/scroll-area) | `1.2.13` | `1.2.15` | | [@radix-ui/react-select](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/select) | `2.3.2` | `2.3.4` | | [@radix-ui/react-separator](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/separator) | `1.1.11` | `1.1.12` | | [@radix-ui/react-slider](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/slider) | `1.4.2` | `1.4.4` | | [@radix-ui/react-switch](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/switch) | `1.3.2` | `1.3.4` | | [@radix-ui/react-tabs](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tabs) | `1.1.16` | `1.1.18` | | [@radix-ui/react-tooltip](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tooltip) | `1.2.11` | `1.2.13` | | [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite) | `4.3.2` | `4.3.3` | | [@uiw/codemirror-extensions-langs](https://github.com/uiwjs/react-codemirror) | `4.25.10` | `4.25.11` | | [@uiw/codemirror-theme-github](https://github.com/uiwjs/react-codemirror) | `4.25.10` | `4.25.11` | | [@uiw/react-codemirror](https://github.com/uiwjs/react-codemirror) | `4.25.10` | `4.25.11` | | [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) | `4.1.9` | `4.1.10` | | [@vitest/ui](https://github.com/vitest-dev/vitest/tree/HEAD/packages/ui) | `4.1.9` | `4.1.10` | | [i18next](https://github.com/i18next/i18next) | `26.3.4` | `26.3.6` | | [radix-ui](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/radix-ui) | `1.6.1` | `1.6.3` | | [react-i18next](https://github.com/i18next/react-i18next) | `17.0.8` | `17.0.10` | | [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) | `4.3.2` | `4.3.3` | | [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.9` | `4.1.10` | Updates `@biomejs/biome` from 2.5.2 to 2.5.4 - [Release notes](https://github.com/biomejs/biome/releases) - [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md) - [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.4/packages/@biomejs/biome) Updates `@codemirror/view` from 6.43.5 to 6.43.6 - [Changelog](https://github.com/codemirror/view/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/view/commits) Updates `@radix-ui/react-accordion` from 1.2.15 to 1.2.17 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/accordion/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/accordion) Updates `@radix-ui/react-alert-dialog` from 1.1.18 to 1.1.20 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/alert-dialog/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/alert-dialog) Updates `@radix-ui/react-checkbox` from 1.3.6 to 1.3.8 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/checkbox/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/checkbox) Updates `@radix-ui/react-dialog` from 1.1.18 to 1.1.20 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dialog/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dialog) Updates `@radix-ui/react-dropdown-menu` from 2.1.19 to 2.1.21 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dropdown-menu/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dropdown-menu) Updates `@radix-ui/react-label` from 2.1.11 to 2.1.12 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/label/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/label) Updates `@radix-ui/react-popover` from 1.1.18 to 1.1.20 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/popover/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/popover) Updates `@radix-ui/react-progress` from 1.1.11 to 1.1.13 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/progress/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/progress) Updates `@radix-ui/react-scroll-area` from 1.2.13 to 1.2.15 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/scroll-area/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/scroll-area) Updates `@radix-ui/react-select` from 2.3.2 to 2.3.4 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/select/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/select) Updates `@radix-ui/react-separator` from 1.1.11 to 1.1.12 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/separator/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/separator) Updates `@radix-ui/react-slider` from 1.4.2 to 1.4.4 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/slider/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/slider) Updates `@radix-ui/react-switch` from 1.3.2 to 1.3.4 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/switch/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/switch) Updates `@radix-ui/react-tabs` from 1.1.16 to 1.1.18 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tabs/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tabs) Updates `@radix-ui/react-tooltip` from 1.2.11 to 1.2.13 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tooltip/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tooltip) Updates `@tailwindcss/vite` from 4.3.2 to 4.3.3 - [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.3/packages/@tailwindcss-vite) Updates `@uiw/codemirror-extensions-langs` from 4.25.10 to 4.25.11 - [Release notes](https://github.com/uiwjs/react-codemirror/releases) - [Commits](https://github.com/uiwjs/react-codemirror/compare/v4.25.10...v4.25.11) Updates `@uiw/codemirror-theme-github` from 4.25.10 to 4.25.11 - [Release notes](https://github.com/uiwjs/react-codemirror/releases) - [Commits](https://github.com/uiwjs/react-codemirror/compare/v4.25.10...v4.25.11) Updates `@uiw/react-codemirror` from 4.25.10 to 4.25.11 - [Release notes](https://github.com/uiwjs/react-codemirror/releases) - [Commits](https://github.com/uiwjs/react-codemirror/compare/v4.25.10...v4.25.11) Updates `@vitest/coverage-v8` from 4.1.9 to 4.1.10 - [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.10/packages/coverage-v8) Updates `@vitest/ui` from 4.1.9 to 4.1.10 - [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.10/packages/ui) Updates `i18next` from 26.3.4 to 26.3.6 - [Release notes](https://github.com/i18next/i18next/releases) - [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next/compare/v26.3.4...v26.3.6) Updates `radix-ui` from 1.6.1 to 1.6.3 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/radix-ui/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/radix-ui) Updates `react-i18next` from 17.0.8 to 17.0.10 - [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/react-i18next/compare/v17.0.8...v17.0.10) Updates `tailwindcss` from 4.3.2 to 4.3.3 - [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.3/packages/tailwindcss) Updates `vitest` from 4.1.9 to 4.1.10 - [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.10/packages/vitest) --- updated-dependencies: - dependency-name: "@biomejs/biome" dependency-version: 2.5.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@codemirror/view" dependency-version: 6.43.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-accordion" dependency-version: 1.2.17 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-alert-dialog" dependency-version: 1.1.20 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-checkbox" dependency-version: 1.3.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-dialog" dependency-version: 1.1.20 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-dropdown-menu" dependency-version: 2.1.21 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-label" dependency-version: 2.1.12 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-popover" dependency-version: 1.1.20 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-progress" dependency-version: 1.1.13 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-scroll-area" dependency-version: 1.2.15 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-select" dependency-version: 2.3.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-separator" dependency-version: 1.1.12 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-slider" dependency-version: 1.4.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-switch" dependency-version: 1.3.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-tabs" dependency-version: 1.1.18 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-tooltip" dependency-version: 1.2.13 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@tailwindcss/vite" dependency-version: 4.3.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@uiw/codemirror-extensions-langs" dependency-version: 4.25.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@uiw/codemirror-theme-github" dependency-version: 4.25.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@uiw/react-codemirror" dependency-version: 4.25.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@vitest/coverage-v8" dependency-version: 4.1.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@vitest/ui" dependency-version: 4.1.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: i18next dependency-version: 26.3.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: radix-ui dependency-version: 1.6.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: react-i18next dependency-version: 17.0.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: tailwindcss dependency-version: 4.3.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: vitest dependency-version: 4.1.10 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 ws in the prod-patch-updates group (#1071) Bumps the prod-patch-updates group with 1 update: [ws](https://github.com/websockets/ws). Updates `ws` from 8.21.0 to 8.21.1 - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/8.21.0...8.21.1) --- updated-dependencies: - dependency-name: ws dependency-version: 8.21.1 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 2 updates (#1072) Bumps the major-updates group with 2 updates: [nanoid](https://github.com/ai/nanoid) and [typescript](https://github.com/microsoft/TypeScript). Updates `nanoid` from 5.1.16 to 6.0.0 - [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.16...6.0.0) Updates `typescript` from 6.0.3 to 7.0.2 - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Commits](https://github.com/microsoft/TypeScript/commits) --- updated-dependencies: - dependency-name: nanoid dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-updates - dependency-name: typescript dependency-version: 7.0.2 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> * fix: general qol additions and new analytics/telemetrics feature * fix: incorrect version sent to posthog * feat: add multiplayer/shared sessions for terminal and guacd * feat: rework Electron desktop app to run standalone-first with optional two-way sync to a remote Termix server * Fix Guacamole tab visibility lifecycle (#1074) Co-authored-by: default-student <default-student@github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix(alerts): send channel config as object payload instead of JSON string (#1075) * fix tmux-monitor tailscale issue (#1076) * Initial plan * fix(tmux-monitor): explicitly handle tailscale auth in PanePreview hostConfig For Tailscale-auth hosts the pane-preview attach path was building the Terminal hostConfig with only the generic spread of host fields. This could omit or mismap auth-critical details and trigger a plain TCP/SSH reachability path that doesn't work with Tailscale-only SSH endpoints. The fix branches on `host.authType === "tailscale"` and: - Carries `authType: "tailscale"` explicitly so the backend always selects the Tailscale-aware PTY path regardless of how the host object evolves. - Derives `port` from `host.sshPort ?? host.port` so Tailscale SSH endpoints on a non-default SSH port are reached correctly. - Leaves all non-tailscale auth types on the unchanged code path. Reattach (bumping instanceId + attachNonce) continues to work because terminalHostConfig is recomputed on every render with the latest instanceIdRef.current value. * refactor(tmux-monitor): simplify tailscale port logic with extracted variable Address code review feedback: extract resolvedPort into a local variable to avoid the duplicated `host.sshPort ?? host.port` expression that was assigned to both `port` and `sshPort`. Restructure as an if/else block instead of an IIFE for readability. * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * chore: run prettier * chore: update beta release text * fix: cant update credential of an RDP host * feat: add custom key shortcuts * feat: add support for MFA over SSH * fix: Invalid websocket frame causing code 10006 crash triggering restart loop * fix(net): correct SSRF blocklist false-positive blocking all outbound IPv4 (#1079) * fix: correct IPv4-mapped-IPv6 blocklist entry blocking all outbound IPv4 ::ffff:0:0/96 in the IPv6 blocklist matches every IPv4 address once mapped, since Node's BlockList compares addresses in their mapped form internally regardless of the declared family. This caused safeOutboundFetch to reject all IPv4-resolved destinations as private, breaking outbound requests (e.g. ntfy/webhook notifications) whenever DNS resolved to IPv4. Replaced with individual mapped ranges mirroring the existing IPv4 blocklist. * test: cover isBlockedAddress and link the Node BlockList citation Exports isBlockedAddress so its family-crossing behavior around IPv4-mapped-IPv6 addresses can actually be asserted, instead of relying on manual container debugging to notice a regression. Also swaps the prior "Node's BlockList compares addresses in mapped form" comment for one citing the documented example in the Node docs (https://nodejs.org/api/net.html#class-netblocklist), since that behavior isn't otherwise obvious from the addSubnet/check call sites. Related: Termix-SSH/Support#1024 * refactor: derive IPv6 mirror from IPv4 list, split DNS error messages Two follow-ups from review: - The IPv6 blocklist previously hand-duplicated each IPv4 range as its IPv4-mapped-IPv6 equivalent. Nothing enforced the two stayed in sync, which is exactly how the original bug (a mismatched ::ffff:0:0/96 entry blocking all IPv4) was introduced in the first place. Now derived from a single blockedIpv4Ranges list in one loop. - The connect.lookup hook threw the same "Private destinations are not allowed" for both an empty DNS result and an actually-blocked address. An empty result is a resolution failure, not a privacy decision, and conflating the two is the same kind of opaque-error problem that made this bug slow to diagnose in production. Split into distinct messages. Also extracted the lookup hook itself (createDnsLookupHook) so it can be unit-tested against a fake resolver directly, instead of only through a real fetch()/Agent call — the bug lived entirely in this callback, and undici wraps any error thrown here as a generic "fetch failed" TypeError, which is why isolating it matters for testability. --------- Co-authored-by: brennanneoh <497569+brennanneoh@users.noreply.github.com> * fix(ssh): do not offer chacha20-poly1305 without the native ssh2 binding (#1081) The availability probe treated a working OpenSSL "chacha20" cipher as proof that chacha20-poly1305@openssh.com is usable. It is not: ssh2 pure-JS chacha20-poly1305 corrupts the transport, so the peer aborts the KEX ("incomplete message [preauth]") and the connection times out. Easy to hit on jump-host connections whose target sshd negotiates chacha20-poly1305 first. Only trust the native binding (sshcrypto.node); otherwise leave the cipher disabled so filterCiphers() drops it and AES-GCM is negotiated instead. Co-authored-by: XtraLarge <> * fix: add Swiss German server layout (#1078) * chore: update release notes * feat: continue improving desktop app 2-way sync with logic fixes and a migration dialog * fix: dekstop app showing auth form without syncing * feat: create desktop auto sessions for existing setups * feat: add electron backend killing * fix: electron login and session related bugs and updated readme for v2.6.0 * chore: finalize release notes * fix: click to expand hosts including extra bottom margin * fix: desktop auth modal failing to log users in * fix: desktop app failing to sync * fix: reverse proxy causing sync error * chore: lint, format, and bump version to 2.6.0 * chore: sync Crowdin translations for 2.6.0 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: L.H. <117188168+default-student@users.noreply.github.com> Co-authored-by: default-student <default-student@github.com> Co-authored-by: Brad Baker <xyzulu@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Brennan Neoh <brennanneoh@users.noreply.github.com> Co-authored-by: brennanneoh <497569+brennanneoh@users.noreply.github.com> Co-authored-by: XtraLarge <eMail@WilliWerres.de> Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
This commit is contained in:
co-authored by
XtraLarge <>
dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
L.H.
default-student
Brad Baker
copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Copilot Autofix powered by AI
Brennan Neoh
brennanneoh
XtraLarge
ZacharyZcR
parent
cf3e2cb499
commit
1a26628a48
@@ -389,6 +389,45 @@
|
||||
"noSavedServers": "Δεν υπάρχουν αποθηκευμένοι διακομιστές",
|
||||
"removeServer": "Αφαιρώ"
|
||||
},
|
||||
"migrationNotice": {
|
||||
"title": "Το Termix Desktop λειτουργεί πλέον αυτόνομα.",
|
||||
"body1": "Αυτή η εφαρμογή συνδεόταν απευθείας με τον διακομιστή Termix. Έχει αναδιαμορφωθεί ώστε να λειτουργεί πλήρως αυτόνομα, αποθηκεύοντας τοπικά τους κεντρικούς υπολογιστές και τα διαπιστευτήρια, ώστε να συνεχίζει να λειτουργεί εκτός σύνδεσης. Ο αμφίδρομος συγχρονισμός με έναν αυτο-φιλοξενούμενο διακομιστή Termix είναι πλέον προαιρετικός.",
|
||||
"body2": "Οι υπάρχοντες κεντρικοί υπολογιστές και τα διαπιστευτήριά σας εξακολουθούν να βρίσκονται στη θέση {{url}}. Ενεργοποιήστε τον Απομακρυσμένο συγχρονισμό και συνδεθείτε ξανά σε αυτόν τον διακομιστή για να τα επαναφέρετε και να διατηρήσετε και τα δύο συγχρονισμένα στο μέλλον.",
|
||||
"dismiss": "Όχι τώρα",
|
||||
"setUpSync": "Ρύθμιση απομακρυσμένου συγχρονισμού"
|
||||
},
|
||||
"remoteSync": {
|
||||
"title": "Απομακρυσμένος συγχρονισμός",
|
||||
"description": "Προαιρετικά, συνδέστε αυτήν την εφαρμογή για υπολογιστές σε έναν αυτο-φιλοξενούμενο διακομιστή Termix για να συγχρονίσετε τους κεντρικούς υπολογιστές, τα διαπιστευτήρια και τα αποσπάσματα σε όλες τις συσκευές. Η εφαρμογή λειτουργεί πάντα πλήρως εκτός σύνδεσης, ανεξάρτητα από το αν συνδεθείτε ή όχι.",
|
||||
"notConnected": "Δεν είναι συνδεδεμένο",
|
||||
"connected": "Συνδεδεμένος",
|
||||
"connectedTo": "Συνδεδεμένο με {{url}}",
|
||||
"lastSynced": "Τελευταίος συγχρονισμός {{time}}",
|
||||
"neverSynced": "Δεν συγχρονίστηκε ποτέ",
|
||||
"syncError": "Σφάλμα συγχρονισμού: {{message}}",
|
||||
"needsReauth": "Η σύνδεση έληξε",
|
||||
"connectButton": "Σύνδεση με διακομιστή",
|
||||
"disconnectButton": "Αποσυνδέω",
|
||||
"syncNowButton": "Συγχρονισμός τώρα",
|
||||
"syncing": "Συγχρονισμός...",
|
||||
"serverUrl": "URL διακομιστή",
|
||||
"enterServerUrl": "Παρακαλώ εισάγετε μια διεύθυνση URL διακομιστή",
|
||||
"mustIncludeProtocol": "Η διεύθυνση URL του διακομιστή πρέπει να ξεκινά με http:// ή https://",
|
||||
"connectionTestFailed": "Δεν ήταν δυνατή η επικοινωνία με έναν διακομιστή Termix σε αυτήν τη διεύθυνση URL",
|
||||
"allowInvalidCertificate": "Να επιτρέπεται το μη έγκυρο πιστοποιητικό",
|
||||
"allowInvalidCertificateDesc": "Χρησιμοποιήστε μόνο για αξιόπιστους αυτο-φιλοξενούμενους διακομιστές με αυτο-υπογεγραμμένα πιστοποιητικά ή πιστοποιητικά διεύθυνσης IP.",
|
||||
"savedServers": "Αποθηκευμένοι διακομιστές",
|
||||
"removeServer": "Αφαιρώ",
|
||||
"continueButton": "Συνεχίζω",
|
||||
"cancelButton": "Ματαίωση",
|
||||
"signInTitle": "Συνδεθείτε στο {{url}}",
|
||||
"originTitle": "Προέλευση σύνδεσης",
|
||||
"originDescription": "Επιλέξτε από προεπιλογή την προέλευση των συνδέσεων SSH. Αυτό μπορεί να παρακαμφθεί ανά κεντρικό υπολογιστή.",
|
||||
"originLocal": "Αυτή η συσκευή (τοπικό δίκτυο)",
|
||||
"originRemote": "Απομακρυσμένος διακομιστής",
|
||||
"bannerReconnect": "Επανασύνδεση",
|
||||
"bannerMessage": "Ο απομακρυσμένος συγχρονισμός απαιτεί εκ νέου έλεγχο ταυτότητας"
|
||||
},
|
||||
"versionCheck": {
|
||||
"error": "Σφάλμα ελέγχου έκδοσης",
|
||||
"checkFailed": "Αποτυχία ελέγχου για ενημερώσεις",
|
||||
@@ -602,6 +641,7 @@
|
||||
"overrideCredentialUsername": "Παράκαμψη ονόματος χρήστη διαπιστευτηρίων",
|
||||
"overrideCredentialUsernameDesc": "Χρησιμοποιήστε το όνομα χρήστη που καθορίστηκε παραπάνω αντί για το όνομα χρήστη του πιστοποιητικού",
|
||||
"oidcUsernameHint": "Χρησιμοποιήστε το $oidc.preferred_username για να αντικαταστήσετε το όνομα σύνδεσης OIDC.",
|
||||
"tailscaleUsernameHint": "Αυτός πρέπει να είναι χρήστης Unix. Η ταυτότητα Tailscale σας έχει εκχωρηθεί στο SSH ACL του tailnet, όχι απαραίτητα root.",
|
||||
"jumpHostChain": "Αλυσίδα υποδοχής άλματος",
|
||||
"portKnocking": "Χτύπημα στο λιμάνι",
|
||||
"addKnock": "Προσθήκη θύρας",
|
||||
@@ -650,6 +690,11 @@
|
||||
"delayAfterMs": "Καθυστέρηση μετά (ms)",
|
||||
"useSocks5Proxy": "Χρήση διακομιστή μεσολάβησης SOCKS5",
|
||||
"useSocks5ProxyDesc": "Δρομολόγηση σύνδεσης μέσω διακομιστή μεσολάβησης",
|
||||
"connectionOrigin": "Προέλευση σύνδεσης",
|
||||
"connectionOriginDesc": "Από πού προέρχεται η σύνδεση SSH αυτού του κεντρικού υπολογιστή. Παρακάμπτει την καθολική προεπιλογή της εφαρμογής για υπολογιστές.",
|
||||
"connectionOriginDefault": "Χρήση προεπιλογής",
|
||||
"connectionOriginLocal": "Αυτή η συσκευή (τοπικό δίκτυο)",
|
||||
"connectionOriginRemote": "Απομακρυσμένος διακομιστής",
|
||||
"proxyHost": "Κεντρικός υπολογιστής μεσολάβησης",
|
||||
"proxyPort": "Θύρα διακομιστή μεσολάβησης",
|
||||
"proxyUsername": "Όνομα χρήστη διακομιστή μεσολάβησης",
|
||||
@@ -762,6 +807,14 @@
|
||||
"customThemeBrightCyan": "Φωτεινό κυανό",
|
||||
"customThemeBrightWhite": "Φωτεινό λευκό",
|
||||
"customThemeResetTooltip": "Επαναφορά στις προεπιλογές",
|
||||
"savedThemesLabel": "Αποθηκευμένα Θέματα",
|
||||
"saveAsGlobalTheme": "Αποθήκευση ως καθολικό θέμα",
|
||||
"saveGlobalThemeNamePrompt": "Εισαγάγετε ένα όνομα για αυτό το θέμα",
|
||||
"saveGlobalThemeSuccess": "Το θέμα αποθηκεύτηκε",
|
||||
"saveGlobalThemeError": "Η αποθήκευση του θέματος απέτυχε",
|
||||
"applyGlobalThemeTooltip": "Εφαρμογή αυτού του θέματος",
|
||||
"deleteGlobalThemeTooltip": "Διαγραφή αυτού του θέματος",
|
||||
"noSavedThemes": "Δεν υπάρχουν ακόμη αποθηκευμένα θέματα",
|
||||
"syntaxHighlightingLabel": "Επισήμανση σύνταξης",
|
||||
"syntaxHighlightingDesc": "Χρωματισμός εξόδου τερματικού (σφάλματα, διαδρομές, IP, χρονικές σημάνσεις)",
|
||||
"syntaxHighlightingCategories": "Επισημάνετε κατηγορίες",
|
||||
@@ -791,6 +844,8 @@
|
||||
"enableAutoTmuxDesc": "Αυτόματη εκκίνηση ή σύνδεση σε συνεδρία tmux",
|
||||
"enableSessionLogging": "Καταγραφή συνεδρίας",
|
||||
"enableSessionLoggingDesc": "Καταγραφή εξόδου συνεδρίας τερματικού για μελλοντική αναθεώρηση",
|
||||
"allowSessionSharing": "Επιτρέψτε την κοινή χρήση περιόδου σύνδεσης",
|
||||
"allowSessionSharingDesc": "Να επιτρέπεται η κοινοποίηση ζωντανών συνεδριών σε αυτόν τον πάροχο μέσω συνδέσμου ή με άλλους χρήστες",
|
||||
"enableCommandHistory": "Ιστορικό εντολών",
|
||||
"enableCommandHistoryDesc": "Οι εντολές εγγραφής εκτελούνται σε αυτό το τερματικό για ιστορικό και αυτόματη συμπλήρωση",
|
||||
"linkClickBehaviorLabel": "Συμπεριφορά κλικ σε σύνδεσμο",
|
||||
@@ -895,6 +950,7 @@
|
||||
"proxmoxResultImported": "{{count}} εισήχθη",
|
||||
"proxmoxResultUpdated": "{{count}} ενημερώθηκε",
|
||||
"proxmoxResultFailed": "{{count}} απέτυχε",
|
||||
"proxmoxResultSkippedNoIp": "{{count}} παραλείφθηκε (δεν βρέθηκε IP)",
|
||||
"proxmoxImportComplete": "Η εισαγωγή Proxmox ολοκληρώθηκε: {{summary}}",
|
||||
"proxmoxDiscoveryFailed": "Η ανακάλυψη απέτυχε",
|
||||
"proxmoxImportFailed": "Η εισαγωγή απέτυχε.",
|
||||
@@ -961,6 +1017,9 @@
|
||||
"failedToSaveCredential": "Αποτυχία αποθήκευσης διαπιστευτηρίων",
|
||||
"credentialNameRequired": "Παρακαλώ εισάγετε ένα όνομα για τα διαπιστευτήρια",
|
||||
"credentialAuthRequired": "Προσθήκη κωδικού πρόσβασης, κλειδιού SSH ή και των δύο",
|
||||
"createCredentialFromHostBtn": "Δημιουργία διαπιστευτηρίων",
|
||||
"createCredentialFromHostTitle": "Δημιουργία διαπιστευτηρίων από τον κεντρικό υπολογιστή",
|
||||
"createCredentialFromHostDesc": "Δημιουργήστε μια επαναχρησιμοποιήσιμη και κοινόχρηστη καταχώριση διαπιστευτηρίων, προσυμπληρωμένη με το τρέχον όνομα χρήστη, τον κωδικό πρόσβασης ή/και το κλειδί SSH αυτού του κεντρικού υπολογιστή.",
|
||||
"backToHosts": "Πίσω στους οικοδεσπότες",
|
||||
"backToCredentials": "Επιστροφή στα Διαπιστευτήρια",
|
||||
"pinned": "Καρφιτσωμένο",
|
||||
@@ -1000,6 +1059,9 @@
|
||||
"folderNestingHint": "Χρησιμοποιήστε τα / για να διαχωρίσετε τα επίπεδα και να δημιουργήσετε ένθετους φακέλους.",
|
||||
"folderColor": "Χρώμα",
|
||||
"folderIcon": "Εικόνισμα",
|
||||
"folderCredential": "Πιστοποιητικό",
|
||||
"folderCredentialNone": "Δεν έχουν εκχωρηθεί πιστοποιητικά",
|
||||
"folderCredentialHint": "Οι κεντρικοί υπολογιστές σε αυτόν τον φάκελο που χρησιμοποιούν έλεγχο ταυτότητας \"Αποθηκευμένα διαπιστευτήρια\" χωρίς να έχουν επιλέξει τα δικά τους διαπιστευτήρια θα κληρονομήσουν αυτό το ένα.",
|
||||
"folderPreview": "Πρεμιέρα",
|
||||
"folderNameFallback": "Φάκελος χωρίς τίτλο",
|
||||
"createFolderButton": "Δημιουργία φακέλου",
|
||||
@@ -1181,6 +1243,10 @@
|
||||
"filterTagsGroup": "Ετικέτες",
|
||||
"shareHost": "Κοινή χρήση κεντρικού υπολογιστή",
|
||||
"shareHostTitle": "Κοινή χρήση: {{name}}",
|
||||
"shareFolder": "Κοινή χρήση φακέλου",
|
||||
"shareFolderTitle": "Κοινόχρηστος φάκελος: {{name}}",
|
||||
"folderSharedSuccessfully": "Κοινόχρηστοι {{count}} κεντρικοί υπολογιστές στον φάκελο",
|
||||
"failedToShareFolder": "Αποτυχία κοινής χρήσης φακέλου",
|
||||
"sharing": {
|
||||
"loadError": "Αποτυχία φόρτωσης δεδομένων κοινής χρήσης. Δοκιμάστε ξανά.",
|
||||
"shareWithSection": "Κοινοποίηση με",
|
||||
@@ -1221,6 +1287,7 @@
|
||||
"shareWithCount": "Κοινή χρήση ({{count}})",
|
||||
"currentAccess": "Τρέχουσα πρόσβαση",
|
||||
"noAccessEntries": "Αυτός ο κεντρικός υπολογιστής δεν έχει κοινοποιηθεί ακόμη",
|
||||
"folderShareSummary": "Κοινόχρηστο {{shared}} από {{total}} κεντρικούς υπολογιστές σε αυτόν τον φάκελο",
|
||||
"grantedBy": "Χορηγήθηκε από",
|
||||
"expires": "Λήγει",
|
||||
"expired": "Λήξη",
|
||||
@@ -1242,6 +1309,8 @@
|
||||
"authMethod": "Μέθοδος Εξουσιοδότησης",
|
||||
"authTypeDirect": "Απευθείας",
|
||||
"authTypeCredential": "Πιστοποιητικό",
|
||||
"authTypeNone": "Κανένας",
|
||||
"authTypeNoneDesc": "Δεν αποθηκεύονται διαπιστευτήρια. Θα σας ζητείται όνομα χρήστη και κωδικός πρόσβασης κάθε φορά που συνδέεστε. Δεν αποθηκεύονται.",
|
||||
"selectCredential": "Επιλέξτε ένα πιστοποιητικό...",
|
||||
"connectionSettings": "Ρυθμίσεις σύνδεσης",
|
||||
"displaySettings": "Ρυθμίσεις οθόνης",
|
||||
@@ -1259,6 +1328,7 @@
|
||||
"rdpPort": "Θύρα RDP",
|
||||
"username": "Όνομα χρήστη",
|
||||
"password": "Σύνθημα",
|
||||
"passwordSaved": "Ο κωδικός πρόσβασης αποθηκεύτηκε, πληκτρολογήστε για να τον αλλάξετε",
|
||||
"domain": "Πεδίο ορισμού",
|
||||
"securityMode": "Λειτουργία ασφαλείας",
|
||||
"colorDepth": "Βάθος χρώματος",
|
||||
@@ -1424,7 +1494,60 @@
|
||||
"expiresIn": "Λήγει σε {{duration}}",
|
||||
"search": "Αναζήτηση συνδέσεων...",
|
||||
"noSearchResults": "Δεν υπάρχουν συνδέσεις που να αντιστοιχούν στην αναζήτησή σας",
|
||||
"rename": "Μετονομασία συνεδρίας"
|
||||
"rename": "Μετονομασία συνεδρίας",
|
||||
"sectionSharedWithMe": "Κοινοποιήθηκε σε εμένα",
|
||||
"sharedBy": "Κοινοποίηση από {{username}}",
|
||||
"join": "Ενώνω",
|
||||
"sharedSessionLabel": "{{hostName}} (κοινόχρηστο)"
|
||||
},
|
||||
"sessionSharing": {
|
||||
"guestView": {
|
||||
"loading": "Σύνδεση σε κοινόχρηστη συνεδρία...",
|
||||
"linkInvalid": "Αυτός ο σύνδεσμος κοινής χρήσης δεν είναι έγκυρος, έχει λήξει ή έχει ανακληθεί",
|
||||
"rateLimited": "Πάρα πολλές προσπάθειες, δοκιμάστε ξανά σύντομα.",
|
||||
"sessionEnded": "Αυτή η συνεδρία έληξε",
|
||||
"readOnlyBadge": "Μόνο προβολή"
|
||||
},
|
||||
"modalTitle": "Κοινή χρήση περιόδου σύνδεσης",
|
||||
"shareButton": "Μερίδιο",
|
||||
"notReadyToShare": "Η συνεδρία δεν είναι ακόμη έτοιμη για κοινή χρήση",
|
||||
"modeTab": {
|
||||
"link": "Σύνδεσμος",
|
||||
"user": "Μεταχειριζόμενος"
|
||||
},
|
||||
"linkModeDescription": "Οποιοσδήποτε έχει αυτόν τον σύνδεσμο μπορεί να συμμετάσχει, δεν απαιτείται λογαριασμός.",
|
||||
"userModeDescription": "Κοινοποίηση με έναν συγκεκριμένο χρήστη που έχει ήδη πρόσβαση σε αυτόν τον κεντρικό υπολογιστή. Εάν δεν έχει ακόμη πρόσβαση, μοιραστείτε πρώτα τον κεντρικό υπολογιστή μαζί του ή χρησιμοποιήστε έναν σύνδεσμο. Μόλις κοινοποιηθεί, η συνεδρία εμφανίζεται στην καρτέλα Συνδέσεις.",
|
||||
"permissionLevel": {
|
||||
"label": "Επίπεδο δικαιωμάτων",
|
||||
"readOnly": "Μόνο για ανάγνωση",
|
||||
"readOnlyDescription": "Μπορώ να παρακολουθήσω την συνεδρία ζωντανά, αλλά δεν μπορώ να πληκτρολογήσω ή να αλληλεπιδράσω.",
|
||||
"readWrite": "Ανάγνωση-εγγραφή",
|
||||
"readWriteDescription": "Μπορεί να πληκτρολογήσει και να αλληλεπιδράσει με την περίοδο λειτουργίας όπως ο κάτοχος."
|
||||
},
|
||||
"expiryLabel": "Λήξη σύνδεσης",
|
||||
"createLinkButton": "Δημιουργία συνδέσμου",
|
||||
"createShareButton": "Κοινοποίηση με χρήστη",
|
||||
"searchUsersPlaceholder": "Αναζήτηση χρηστών...",
|
||||
"noUsersFound": "Δεν βρέθηκαν χρήστες",
|
||||
"linkCreated": "Ο σύνδεσμος κοινής χρήσης δημιουργήθηκε",
|
||||
"linkCopied": "Ο σύνδεσμος αντιγράφηκε στο πρόχειρο",
|
||||
"copyLink": "Αντιγραφή συνδέσμου",
|
||||
"shareCreated": "Η συνεδρία κοινοποιήθηκε. Θα εμφανιστεί στην καρτέλα \"Συνδέσεις\".",
|
||||
"shareFailed": "Η δημιουργία κοινής χρήσης απέτυχε",
|
||||
"userLacksHostAccess": "Αυτός ο χρήστης δεν έχει ακόμη πρόσβαση σε αυτόν τον κεντρικό υπολογιστή. Κοινοποιήστε πρώτα τον κεντρικό υπολογιστή μαζί του ή χρησιμοποιήστε έναν σύνδεσμο.",
|
||||
"activeShares": "Ενεργές κοινοποιήσεις",
|
||||
"noActiveShares": "Δεν υπάρχουν ενεργές κοινοποιήσεις για αυτήν την περίοδο σύνδεσης",
|
||||
"revoke": "Ανακαλώ",
|
||||
"revokeConfirmTitle": "Ανάκληση αυτής της κοινοποίησης;",
|
||||
"revokeConfirmDescription": "Όποιος χρησιμοποιεί αυτήν την κοινοποίηση θα χάσει αμέσως την πρόσβαση.",
|
||||
"revoked": "Η κοινοποίηση ανακλήθηκε",
|
||||
"revokeFailed": "Η ανάκληση της κοινής χρήσης απέτυχε",
|
||||
"joinCount": "{{count}} συμμετοχή",
|
||||
"joinCount_other": "{{count}} ενώσεις",
|
||||
"expiresAt": "Λήγει {{date}}",
|
||||
"linkShareBadge": "Σύνδεσμος",
|
||||
"userShareBadge": "Χρήστης: {{username}}",
|
||||
"loadSharesFailed": "Αποτυχία φόρτωσης ενεργών κοινόχρηστων στοιχείων"
|
||||
},
|
||||
"guacamole": {
|
||||
"connecting": "Σύνδεση σε συνεδρία {{type}}...",
|
||||
@@ -1436,6 +1559,9 @@
|
||||
"reconnect": "Επανασύνδεση",
|
||||
"retry": "Δοκιμάζω πάλι",
|
||||
"guacdUnavailable": "Η υπηρεσία απομακρυσμένης επιφάνειας εργασίας (guacd) δεν είναι διαθέσιμη. Βεβαιωθείτε ότι το guacd εκτελείται και είναι προσβάσιμο, καθώς και ότι έχει ρυθμιστεί σωστά στις ρυθμίσεις διαχειριστή.",
|
||||
"credentialPromptTitle": "Εισαγάγετε τα διαπιστευτήρια RDP",
|
||||
"credentialPromptDescription": "Αυτός ο κεντρικός υπολογιστής έχει ρυθμιστεί να ζητά διαπιστευτήρια κατά τη σύνδεση. Χρησιμοποιούνται μόνο για αυτήν την περίοδο σύνδεσης και δεν αποθηκεύονται.",
|
||||
"connect": "Συνδέω",
|
||||
"ctrlAltDel": "Ctrl+Alt+Del",
|
||||
"toolbar": {
|
||||
"ctrlAltDel": "Ctrl+Alt+Del",
|
||||
@@ -1461,7 +1587,9 @@
|
||||
"reconnect": "Επανασύνδεση περιόδου σύνδεσης",
|
||||
"collapse": "Σύμπτυξη γραμμής εργαλείων",
|
||||
"expand": "Ανάπτυξη γραμμής εργαλείων",
|
||||
"dragHandle": "Σύρετε για αλλαγή θέσης"
|
||||
"dragHandle": "Σύρετε για αλλαγή θέσης",
|
||||
"switchToTrackpad": "Μετάβαση σε λειτουργία trackpad (σύρσιμο για μετακίνηση του κέρσορα, άγγιγμα για κλικ)",
|
||||
"switchToTouch": "Μετάβαση σε λειτουργία αφής (πατήστε απευθείας εκεί που θέλετε να κάνετε κλικ)"
|
||||
}
|
||||
},
|
||||
"terminal": {
|
||||
@@ -1508,6 +1636,11 @@
|
||||
"totpRequired": "Απαιτείται έλεγχος ταυτότητας δύο παραγόντων",
|
||||
"totpCodeLabel": "Κωδικός επαλήθευσης",
|
||||
"totpVerify": "Επαληθεύω",
|
||||
"mfaPromptRequired": "Απαιτείται έλεγχος ταυτότητας",
|
||||
"mfaPushRequired": "Απαιτείται έλεγχος ταυτότητας push",
|
||||
"mfaMenuPlaceholder": "Εισαγάγετε την απάντησή σας",
|
||||
"mfaWaitingApproval": "Αναμονή για έγκριση στη συσκευή σας...",
|
||||
"mfaSendRequest": "Αποστολή αιτήματος",
|
||||
"warpgateAuthRequired": "Απαιτείται έλεγχος ταυτότητας Warpgate",
|
||||
"warpgateSecurityKey": "Κλειδί ασφαλείας",
|
||||
"warpgateAuthUrl": "URL ελέγχου ταυτότητας",
|
||||
@@ -2277,7 +2410,8 @@
|
||||
"resetCodeRateLimited": "Περιορισμένο ποσοστό: Πάρα πολλές προσπάθειες επαλήθευσης. Δοκιμάστε ξανά αργότερα.",
|
||||
"resetCodeRateLimitedWithTime": "Περιορισμένος ρυθμός: Πάρα πολλές προσπάθειες επαλήθευσης. Παρακαλώ περιμένετε {{time}} δευτερόλεπτα πριν προσπαθήσετε ξανά.",
|
||||
"authTokenSaveFailed": "Αποτυχία αποθήκευσης διακριτικού ελέγχου ταυτότητας",
|
||||
"failedToLoadServer": "Αποτυχία φόρτωσης διακομιστή"
|
||||
"failedToLoadServer": "Αποτυχία φόρτωσης διακομιστή",
|
||||
"remoteServerRequired": "Απαιτείται απομακρυσμένος διακομιστής. Συνδέστε έναν απομακρυσμένο διακομιστή στις Ρυθμίσεις για να χρησιμοποιήσετε αυτόν τον τύπο σύνδεσης."
|
||||
},
|
||||
"messages": {
|
||||
"registrationDisabled": "Η εγγραφή νέου λογαριασμού έχει απενεργοποιηθεί αυτήν τη στιγμή από έναν διαχειριστή. Συνδεθείτε ή επικοινωνήστε με έναν διαχειριστή.",
|
||||
@@ -2644,6 +2778,17 @@
|
||||
"sslSaveFailed": "Αποτυχία αποθήκευσης ρυθμίσεων SSL",
|
||||
"sslRequiresDomain": "Απαιτούνται ο τομέας και το email",
|
||||
"sslInfoNote": "Αφού εκδώσετε ένα πιστοποιητικό, ενεργοποιήστε το SSL στις μεταβλητές περιβάλλοντος (ENABLE_SSL=true) και επανεκκινήστε το Termix.",
|
||||
"sslManualOption": "Εγχειρίδιο (μεταφόρτωση πιστοποιητικού)",
|
||||
"sslManualCert": "Πιστοποιητικό (PEM)",
|
||||
"sslManualCertPlaceholder": "-----ΕΝΑΡΞΗ ΠΙΣΤΟΠΟΙΗΤΙΚΟΥ-----",
|
||||
"sslManualKey": "Ιδιωτικό Κλειδί (PEM)",
|
||||
"sslManualKeyPlaceholder": "-----ΕΝΑΡΞΗ ΙΔΙΩΤΙΚΟΥ ΚΛΕΙΔΙΟΥ-----",
|
||||
"sslManualDesc": "Επικολλήστε το υπάρχον πιστοποιητικό και το ιδιωτικό κλειδί σας, συμπεριλαμβανομένης μιας πλήρους αλυσίδας, εάν απαιτείται από την CA σας.",
|
||||
"sslManualUpload": "Μεταφόρτωση και εγκατάσταση πιστοποιητικού",
|
||||
"sslManualUploadLoading": "Μεταφόρτωση πιστοποιητικού...",
|
||||
"sslManualUploadSuccess": "Το πιστοποιητικό μεταφορτώθηκε και εγκαταστάθηκε με επιτυχία.",
|
||||
"sslManualUploadFailed": "Η μεταφόρτωση του πιστοποιητικού απέτυχε.",
|
||||
"sslManualRequiresFields": "Απαιτείται πιστοποιητικό και ιδιωτικό κλειδί",
|
||||
"auditLogTotal": "{{total}} συνολικές καταχωρήσεις",
|
||||
"auditLogEmpty": "Δεν βρέθηκαν καταχωρήσεις αρχείου καταγραφής ελέγχου",
|
||||
"auditLogSuccess": "Επιτυχία",
|
||||
@@ -2672,6 +2817,12 @@
|
||||
"commandHistoryEnabled": "Ιστορικό εντολών",
|
||||
"commandHistoryEnabledDesc": "Να επιτρέπεται η καταγραφή ιστορικού εντολών. Όταν είναι απενεργοποιημένη, το ιστορικό δεν αποθηκεύεται ανεξάρτητα από τις ρυθμίσεις ανά κεντρικό υπολογιστή.",
|
||||
"updateCommandHistoryFailed": "Αποτυχία ενημέρωσης της ρύθμισης ιστορικού εντολών",
|
||||
"analyticsEnabled": "Κοινοποίηση ανώνυμων στατιστικών χρήσης",
|
||||
"analyticsEnabledDesc": "Αποστέλλει έναν ανώνυμο ημερήσιο αριθμό χρηστών, κεντρικών υπολογιστών και χρήσης λειτουργιών για να βοηθήσει στη βελτίωση του Termix. Δεν περιλαμβάνονται ποτέ προσωπικά δεδομένα ή λεπτομέρειες σύνδεσης.",
|
||||
"updateAnalyticsFailed": "Η ενημέρωση της ρύθμισης αναλυτικών στοιχείων απέτυχε",
|
||||
"sessionSharingGloballyEnabled": "Επιτρέψτε την κοινή χρήση περιόδου σύνδεσης",
|
||||
"sessionSharingGloballyEnabledDesc": "Επιτρέπεται η κοινή χρήση των ζωντανών συνεδριών τερματικού, RDP, VNC και Telnet σε ολόκληρη την παρουσία. Παρακάμπτει κάθε εναλλαγή κοινής χρήσης ανά κεντρικό υπολογιστή όταν είναι απενεργοποιημένη.",
|
||||
"updateSessionSharingFailed": "Αποτυχία ενημέρωσης ρύθμισης κοινής χρήσης περιόδου σύνδεσης",
|
||||
"sessionTimeout": "Χρονικό όριο συνεδρίας",
|
||||
"hours": "ώρες",
|
||||
"sessionTimeoutRange": "Ελάχ. 1 ώρα · Μέγ. 720 ώρες",
|
||||
@@ -3119,6 +3270,47 @@
|
||||
"executionSuccess": "Επιτυχία",
|
||||
"executionFailed": "Αποτυχημένος"
|
||||
},
|
||||
"keybindings": {
|
||||
"title": "Συντομεύσεις πληκτρολογίου",
|
||||
"description": "Προσαρμόστε τις συντομεύσεις αντιγραφής, επικόλλησης και ελέγχου τερματικού ή συνδέστε τα πλήκτρα για αποστολή κειμένου ή εκτέλεση ενός αποσπάσματος.",
|
||||
"defaultsHeading": "Ενσωματωμένες συντομεύσεις",
|
||||
"customHeading": "Προσαρμοσμένες συντομεύσεις",
|
||||
"addBinding": "Προσθήκη συντόμευσης",
|
||||
"addBindingTitle": "Προσθήκη συντόμευσης",
|
||||
"editBindingTitle": "Επεξεργασία συντόμευσης",
|
||||
"loading": "Φόρτωση...",
|
||||
"noCustomBindings": "Δεν υπάρχουν ακόμη προσαρμοσμένες συντομεύσεις",
|
||||
"defaultBadge": "Αθέτηση",
|
||||
"customizedBadge": "Προσαρμοσμένη",
|
||||
"customize": "Προσαρμογή",
|
||||
"resetToDefault": "Επαναφορά στις προεπιλογές",
|
||||
"resetAllToDefaults": "Επαναφορά όλων στις προεπιλογές",
|
||||
"close": "Κοντά",
|
||||
"cancel": "Ματαίωση",
|
||||
"saveBinding": "Αποθήκευση συντόμευσης",
|
||||
"saveError": "Η αποθήκευση των συντομεύσεων πληκτρολογίου απέτυχε",
|
||||
"pressKeysToRecord": "Συνδυασμός πλήκτρων",
|
||||
"pressKeysPlaceholder": "Κάντε κλικ και πατήστε τα πλήκτρα",
|
||||
"recording": "Πατήστε τα πλήκτρα...",
|
||||
"comboRequiredError": "Πατήστε πρώτα έναν συνδυασμό πλήκτρων",
|
||||
"textRequiredError": "Εισαγάγετε το κείμενο που θέλετε να στείλετε",
|
||||
"controlCodeRequiredError": "Εισαγάγετε ένα μόνο γράμμα για τον κωδικό ελέγχου",
|
||||
"snippetRequiredError": "Επιλέξτε ένα απόσπασμα",
|
||||
"conflictWarning": "Αυτός ο συνδυασμός είναι ήδη συνδεδεμένος με {{combo}}. Η αποθήκευση θα ενεργοποιήσει και τα δύο.",
|
||||
"actionLabel": "Δράση",
|
||||
"actionCopy": "Αντιγραφή επιλογής",
|
||||
"actionPaste": "Πάστα",
|
||||
"actionSendControlCode": "Αποστολή σήματος Ctrl+γράμμα",
|
||||
"actionSendText": "Αποστολή κειμένου",
|
||||
"actionRunSnippet": "Εκτέλεση υπάρχοντος αποσπάσματος",
|
||||
"controlCodeLabel": "Επιστολή",
|
||||
"textLabel": "Μήνυμα προς αποστολή",
|
||||
"appendEnterLabel": "Πατήστε Enter μετά την αποστολή",
|
||||
"snippetLabel": "Απόσπασμα",
|
||||
"selectSnippetPlaceholder": "Επιλέξτε ένα απόσπασμα",
|
||||
"orphanedSnippetWarning": "το απόσπασμα δεν βρέθηκε",
|
||||
"clipboardPermissionNote": "Ενδέχεται να ζητηθεί άδεια για το πρόχειρο κατά την πρώτη χρήση σε ορισμένα προγράμματα περιήγησης."
|
||||
},
|
||||
"userProfile": {
|
||||
"donateTitle": "Κρατήστε το Termix ζωντανό",
|
||||
"donateDescription": "Το Termix είναι δωρεάν, αυτο-φιλοξενείται και δημιουργείται από λίγα μόνο άτομα στον ελεύθερο χρόνο τους. Αν σας έχει εξοικονομήσει χρόνο ή χρήματα, μια δωρεά κρυπτονομισμάτων βοηθάει στη συνέχιση της λειτουργίας του.",
|
||||
@@ -3134,6 +3326,7 @@
|
||||
"sectionAppearance": "Εμφάνιση",
|
||||
"sectionSecurity": "Ασφάλεια",
|
||||
"sectionApiKeys": "Κλειδιά API",
|
||||
"sectionData": "Δεδομένα",
|
||||
"sectionC2sTunnels": "Σήραγγες C2S",
|
||||
"usernameLabel": "Όνομα χρήστη",
|
||||
"roleLabel": "Ρόλος",
|
||||
@@ -3162,6 +3355,9 @@
|
||||
"settingsTerminal": "Τερματικό",
|
||||
"commandAutocomplete": "Αυτόματη συμπλήρωση εντολών",
|
||||
"commandAutocompleteDesc": "Εμφάνιση αυτόματης συμπλήρωσης κατά την πληκτρολόγηση",
|
||||
"keyboardShortcuts": "Συντομεύσεις πληκτρολογίου",
|
||||
"keyboardShortcutsDescription": "Προσαρμόστε τις συντομεύσεις αντιγραφής, επικόλλησης και εντολών στο τερματικό",
|
||||
"manageShortcuts": "Διαχειρίζομαι",
|
||||
"terminalLinkBehavior": "Κλικ στον σύνδεσμο τερματικού",
|
||||
"terminalLinkBehaviorDesc": "Προεπιλεγμένη συμπεριφορά κατά το κλικ σε συνδέσμους στο τερματικό",
|
||||
"historyTracking": "Παρακολούθηση ιστορικού",
|
||||
@@ -3228,6 +3424,22 @@
|
||||
"apiKeyUsageHint": "Συμπεριλάβετε το κλειδί σας στο",
|
||||
"apiKeyUsageHintHeader": "επί κεφαλής.",
|
||||
"apiKeyPermissionsHint": "Τα κλειδιά κληρονομούν τα δικαιώματα του χρήστη που τα δημιούργησε.",
|
||||
"exportData": "Εξαγωγή των δεδομένων μου",
|
||||
"exportDataDesc": "Λήψη αντιγράφου ασφαλείας των κεντρικών υπολογιστών, των διαπιστευτηρίων και των ρυθμίσεών σας για μεταφορά σε άλλη συσκευή",
|
||||
"export": "Εξαγωγή",
|
||||
"exporting": "Εξαγωγή...",
|
||||
"importData": "Εισαγωγή των δεδομένων μου",
|
||||
"importDataDesc": "Επαναφέρετε τους κεντρικούς υπολογιστές, τα διαπιστευτήρια και τις ρυθμίσεις σας από ένα αρχείο αντιγράφου ασφαλείας .sqlite",
|
||||
"importDataSelected": "Επιλεγμένα: {{name}}",
|
||||
"selectFile": "Επιλογή Αρχείου",
|
||||
"changeFile": "Αλλαγή",
|
||||
"import": "Εισαγωγή",
|
||||
"importing": "Εισαγωγή...",
|
||||
"exportSuccess": "Τα δεδομένα εξήχθησαν με επιτυχία.",
|
||||
"exportFailed": "Η εξαγωγή δεδομένων απέτυχε.",
|
||||
"importSelectFile": "Επιλέξτε πρώτα ένα αρχείο",
|
||||
"importCompleted": "Η εισαγωγή ολοκληρώθηκε: {{total}} στοιχεία εισήχθησαν, {{skipped}} παραλείφθηκαν",
|
||||
"importFailed": "Η εισαγωγή απέτυχε: {{error}}",
|
||||
"roleUser": "Μεταχειριζόμενος",
|
||||
"authMethodDual": "Διπλή Εξουσιοδότηση",
|
||||
"authMethodOidc": "OIDC",
|
||||
@@ -3379,6 +3591,7 @@
|
||||
"pageUp": "PgUp",
|
||||
"pageDown": "PgDn",
|
||||
"delete": "Διαγραφή",
|
||||
"paste": "Πάστα",
|
||||
"editQuickKeys": "Επεξεργασία γρήγορων πλήκτρων",
|
||||
"quickKeysTitle": "Γρήγορα πλήκτρα",
|
||||
"quickKeysDesc": "Πατήστε × για κατάργηση. Υποστηρίζει έως και 8 χαρακτήρες.",
|
||||
|
||||
Reference in New Issue
Block a user