mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-11-01 16:15:24 +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:
232 files changed
+50585
-32016
No files matched your search
@@ -389,6 +389,45 @@
|
||||
"noSavedServers": "Ei tallennettuja palvelimia",
|
||||
"removeServer": "Poistaa"
|
||||
},
|
||||
"migrationNotice": {
|
||||
"title": "Termix Desktop toimii nyt itsenäisesti",
|
||||
"body1": "Tämä sovellus muodosti aiemmin yhteyden suoraan Termix-palvelimeesi. Se on uudistettu toimimaan täysin itsenäisesti tallentaen isännät ja tunnistetiedot paikallisesti, joten se toimii edelleen offline-tilassa. Kaksisuuntainen synkronointi itse isännöidyn Termix-palvelimen kanssa on nyt valinnainen.",
|
||||
"body2": "Nykyiset isäntäsi ja tunnistetietosi ovat edelleen {{url}}. Ota etäsynkronointi käyttöön ja muodosta yhteys kyseiseen palvelimeen uudelleen palauttaaksesi ne ja pitääksesi molemmat synkronoituina jatkossa.",
|
||||
"dismiss": "Ei nyt",
|
||||
"setUpSync": "Etäsynkronoinnin määrittäminen"
|
||||
},
|
||||
"remoteSync": {
|
||||
"title": "Etäsynkronointi",
|
||||
"description": "Voit halutessasi yhdistää tämän työpöytäsovelluksen itse isännöityyn Termix-palvelimeen synkronoidaksesi isännöitsijäsi, tunnistetietosi ja koodinpätkäsi eri laitteiden välillä. Sovellus toimii aina täysin offline-tilassa riippumatta siitä, oletko yhteydessä palvelimeen vai et.",
|
||||
"notConnected": "Ei yhdistetty",
|
||||
"connected": "Yhdistetty",
|
||||
"connectedTo": "Yhdistetty kohteeseen {{url}}",
|
||||
"lastSynced": "Viimeksi synkronoitu {{time}}",
|
||||
"neverSynced": "Ei koskaan synkronoitu",
|
||||
"syncError": "Synkronointivirhe: {{message}}",
|
||||
"needsReauth": "Kirjautuminen vanhentunut",
|
||||
"connectButton": "Yhdistä palvelimeen",
|
||||
"disconnectButton": "Katkaise yhteys",
|
||||
"syncNowButton": "Synkronoi nyt",
|
||||
"syncing": "Synkronoidaan...",
|
||||
"serverUrl": "Palvelimen URL-osoite",
|
||||
"enterServerUrl": "Anna palvelimen URL-osoite",
|
||||
"mustIncludeProtocol": "Palvelimen URL-osoitteen on alettava http:// tai https://",
|
||||
"connectionTestFailed": "Termix-palvelimeen ei saatu yhteyttä kyseisessä URL-osoitteessa",
|
||||
"allowInvalidCertificate": "Salli virheellinen varmenne",
|
||||
"allowInvalidCertificateDesc": "Käytä vain luotettaville itse isännöidyille palvelimille, joissa on itse allekirjoitetut tai IP-osoitevarmenteet.",
|
||||
"savedServers": "Tallennetut palvelimet",
|
||||
"removeServer": "Poistaa",
|
||||
"continueButton": "Jatkaa",
|
||||
"cancelButton": "Peruuttaa",
|
||||
"signInTitle": "Kirjaudu sisään palveluun {{url}}",
|
||||
"originTitle": "Yhteyden alkuperä",
|
||||
"originDescription": "Valitse oletusarvoisesti SSH-yhteyksien lähtöpaikka. Tämä voidaan ohittaa isäntäkohtaisesti.",
|
||||
"originLocal": "Tämä laite (lähiverkko)",
|
||||
"originRemote": "Etäpalvelin",
|
||||
"bannerReconnect": "Yhdistä uudelleen",
|
||||
"bannerMessage": "Etäsynkronointi vaatii uudelleentunnistuksen"
|
||||
},
|
||||
"versionCheck": {
|
||||
"error": "Versiotarkistusvirhe",
|
||||
"checkFailed": "Päivitysten tarkistaminen epäonnistui",
|
||||
@@ -602,6 +641,7 @@
|
||||
"overrideCredentialUsername": "Ohita tunnistetiedot Käyttäjätunnus",
|
||||
"overrideCredentialUsernameDesc": "Käytä yllä määritettyä käyttäjätunnusta tunnistetiedon käyttäjätunnuksen sijaan.",
|
||||
"oidcUsernameHint": "Käytä OIDC-kirjautumisnimesi sijaan muotoa $oidc.preferred_username.",
|
||||
"tailscaleUsernameHint": "Tämän on oltava Unix-käyttäjä, jolle Tailscale-identiteettisi on myönnetty tailnetin SSH ACL:ssä, ei välttämättä pääkäyttäjä.",
|
||||
"jumpHostChain": "Hyppyisäntäketju",
|
||||
"portKnocking": "Portin koputus",
|
||||
"addKnock": "Lisää portti",
|
||||
@@ -650,6 +690,11 @@
|
||||
"delayAfterMs": "Viive jälkeen (ms)",
|
||||
"useSocks5Proxy": "Käytä SOCKS5-välityspalvelinta",
|
||||
"useSocks5ProxyDesc": "Reititä yhteys välityspalvelimen kautta",
|
||||
"connectionOrigin": "Yhteyden alkuperä",
|
||||
"connectionOriginDesc": "Mistä tämän isännän SSH-yhteys on peräisin. Ohittaa työpöytäsovelluksen yleisen oletusasetuksen.",
|
||||
"connectionOriginDefault": "Käytä oletusarvoa",
|
||||
"connectionOriginLocal": "Tämä laite (lähiverkko)",
|
||||
"connectionOriginRemote": "Etäpalvelin",
|
||||
"proxyHost": "Välityspalvelin",
|
||||
"proxyPort": "Välityspalvelimen portti",
|
||||
"proxyUsername": "Välityspalvelimen käyttäjätunnus",
|
||||
@@ -762,6 +807,14 @@
|
||||
"customThemeBrightCyan": "Kirkkaan syaani",
|
||||
"customThemeBrightWhite": "Kirkkaan valkoinen",
|
||||
"customThemeResetTooltip": "Palauta oletusasetukset",
|
||||
"savedThemesLabel": "Tallennetut teemat",
|
||||
"saveAsGlobalTheme": "Tallenna globaalina teemana",
|
||||
"saveGlobalThemeNamePrompt": "Anna teemalle nimi",
|
||||
"saveGlobalThemeSuccess": "Teema tallennettu",
|
||||
"saveGlobalThemeError": "Teeman tallentaminen epäonnistui",
|
||||
"applyGlobalThemeTooltip": "Käytä tätä teemaa",
|
||||
"deleteGlobalThemeTooltip": "Poista tämä teema",
|
||||
"noSavedThemes": "Ei vielä tallennettuja teemoja",
|
||||
"syntaxHighlightingLabel": "Syntaksin korostus",
|
||||
"syntaxHighlightingDesc": "Väritä päätelaitteen tuloste (virheet, polut, IP-osoitteet, aikaleimat)",
|
||||
"syntaxHighlightingCategories": "Korosta kategoriat",
|
||||
@@ -791,6 +844,8 @@
|
||||
"enableAutoTmuxDesc": "Käynnistä automaattisesti tai liitä tmux-istuntoon",
|
||||
"enableSessionLogging": "Istuntojen lokitiedot",
|
||||
"enableSessionLoggingDesc": "Tallenna pääteistunnon tuloste myöhempää tarkastelua varten",
|
||||
"allowSessionSharing": "Salli istunnon jakaminen",
|
||||
"allowSessionSharingDesc": "Salli live-istuntojen jakaminen tällä isännällä linkin kautta tai muiden käyttäjien kanssa",
|
||||
"enableCommandHistory": "Komentohistoria",
|
||||
"enableCommandHistoryDesc": "Tallenna tässä terminaalissa suoritettavat komennot historiaa ja automaattista täydennystä varten",
|
||||
"linkClickBehaviorLabel": "Linkin klikkauskäyttäytyminen",
|
||||
@@ -895,6 +950,7 @@
|
||||
"proxmoxResultImported": "{{count}} tuotu",
|
||||
"proxmoxResultUpdated": "{{count}} päivitetty",
|
||||
"proxmoxResultFailed": "{{count}} epäonnistui",
|
||||
"proxmoxResultSkippedNoIp": "{{count}} ohitettu (IP-osoitetta ei löytynyt)",
|
||||
"proxmoxImportComplete": "Proxmox-tuonti valmis: {{summary}}",
|
||||
"proxmoxDiscoveryFailed": "Löytö epäonnistui",
|
||||
"proxmoxImportFailed": "Tuonti epäonnistui",
|
||||
@@ -961,6 +1017,9 @@
|
||||
"failedToSaveCredential": "Tunnusten tallentaminen epäonnistui",
|
||||
"credentialNameRequired": "Anna tunnisteelle nimi",
|
||||
"credentialAuthRequired": "Lisää salasana, SSH-avain tai molemmat",
|
||||
"createCredentialFromHostBtn": "Luo tunnistetiedot",
|
||||
"createCredentialFromHostTitle": "Luo tunnistetiedot isännältä",
|
||||
"createCredentialFromHostDesc": "Luo uudelleenkäytettävä, jaettava tunnistetietomerkintä, joka on esitäytetty tämän isännän nykyisellä käyttäjätunnuksella, salasanalla ja/tai SSH-avaimella.",
|
||||
"backToHosts": "Takaisin isäntiin",
|
||||
"backToCredentials": "Takaisin tunnistetietoihin",
|
||||
"pinned": "Kiinnitetty",
|
||||
@@ -1000,6 +1059,9 @@
|
||||
"folderNestingHint": "Käytä /-merkkiä tasojen erottamiseen ja sisäkkäisten kansioiden luomiseen.",
|
||||
"folderColor": "Väri",
|
||||
"folderIcon": "Kuvake",
|
||||
"folderCredential": "Valtakirja",
|
||||
"folderCredentialNone": "Ei tunnistetietoja",
|
||||
"folderCredentialHint": "Tämän kansion isännät, jotka käyttävät \"Tallennetut tunnistetiedot\" -todennusta ilman omia tunnistetietojaan, perivät tämän.",
|
||||
"folderPreview": "Esikatselu",
|
||||
"folderNameFallback": "Nimetön kansio",
|
||||
"createFolderButton": "Luo kansio",
|
||||
@@ -1181,6 +1243,10 @@
|
||||
"filterTagsGroup": "Tunnisteet",
|
||||
"shareHost": "Jaa isäntä",
|
||||
"shareHostTitle": "Jaa: {{name}}",
|
||||
"shareFolder": "Jaa kansio",
|
||||
"shareFolderTitle": "Jaa kansio: {{name}}",
|
||||
"folderSharedSuccessfully": "Jaetut {{count}} isäntä(t) kansiossa",
|
||||
"failedToShareFolder": "Kansion jakaminen epäonnistui",
|
||||
"sharing": {
|
||||
"loadError": "Jakamistietojen lataaminen epäonnistui. Yritä uudelleen.",
|
||||
"shareWithSection": "Jaa kanssa",
|
||||
@@ -1221,6 +1287,7 @@
|
||||
"shareWithCount": "Jaa ({{count}})",
|
||||
"currentAccess": "Nykyinen käyttöoikeus",
|
||||
"noAccessEntries": "Tätä isäntää ei ole vielä jaettu",
|
||||
"folderShareSummary": "Jaettu {{shared}} / {{total}} isäntäkoneesta tässä kansiossa",
|
||||
"grantedBy": "Myöntänyt",
|
||||
"expires": "Vanhenee",
|
||||
"expired": "Vanhentunut",
|
||||
@@ -1242,6 +1309,8 @@
|
||||
"authMethod": "Todennustapa",
|
||||
"authTypeDirect": "Suoraan",
|
||||
"authTypeCredential": "Valtakirja",
|
||||
"authTypeNone": "Ei mitään",
|
||||
"authTypeNoneDesc": "Tunnuksia ei tallenneta. Sinulta kysytään käyttäjätunnusta ja salasanaa aina, kun muodostat yhteyden; niitä ei tallenneta.",
|
||||
"selectCredential": "Valitse tunnistetiedot...",
|
||||
"connectionSettings": "Yhteysasetukset",
|
||||
"displaySettings": "Näyttöasetukset",
|
||||
@@ -1259,6 +1328,7 @@
|
||||
"rdpPort": "RDP-portti",
|
||||
"username": "Käyttäjätunnus",
|
||||
"password": "Salasana",
|
||||
"passwordSaved": "Salasana tallennettu, kirjoita muuttaaksesi",
|
||||
"domain": "Verkkotunnus",
|
||||
"securityMode": "Suojaustila",
|
||||
"colorDepth": "Värisyvyys",
|
||||
@@ -1424,7 +1494,60 @@
|
||||
"expiresIn": "Vanhenee {{duration}} kuluttua",
|
||||
"search": "Hae yhteyksiä...",
|
||||
"noSearchResults": "Ei hakuasi vastaavia yhteyksiä",
|
||||
"rename": "Nimeä istunto uudelleen"
|
||||
"rename": "Nimeä istunto uudelleen",
|
||||
"sectionSharedWithMe": "Jaettu kanssani",
|
||||
"sharedBy": "Jakanut {{username}}",
|
||||
"join": "Liity",
|
||||
"sharedSessionLabel": "{{hostName}} (jaettu)"
|
||||
},
|
||||
"sessionSharing": {
|
||||
"guestView": {
|
||||
"loading": "Yhdistetään jaettuun istuntoon...",
|
||||
"linkInvalid": "Tämä jakolinkki on virheellinen, vanhentunut tai se on peruutettu.",
|
||||
"rateLimited": "Liikaa yrityksiä, yritä uudelleen pian",
|
||||
"sessionEnded": "Tämä istunto on päättynyt",
|
||||
"readOnlyBadge": "Vain katselu"
|
||||
},
|
||||
"modalTitle": "Jaa istunto",
|
||||
"shareButton": "Jakaa",
|
||||
"notReadyToShare": "Istunto ei ole vielä valmis jaettavaksi",
|
||||
"modeTab": {
|
||||
"link": "Linkki",
|
||||
"user": "Käyttäjä"
|
||||
},
|
||||
"linkModeDescription": "Kuka tahansa, jolla on tämä linkki, voi liittyä, tiliä ei tarvita.",
|
||||
"userModeDescription": "Jaa tietyn käyttäjän kanssa, jolla on jo pääsy tähän isäntään. Jos heillä ei vielä ole pääsyä, jaa isäntä ensin heidän kanssaan tai käytä linkkiä. Jakamisen jälkeen istunto näkyy heidän Yhteydet-välilehdellään.",
|
||||
"permissionLevel": {
|
||||
"label": "Käyttöoikeustaso",
|
||||
"readOnly": "Vain lukuoikeus",
|
||||
"readOnlyDescription": "Voit katsoa istuntoa suorana, mutta et voi kirjoittaa tai olla vuorovaikutuksessa.",
|
||||
"readWrite": "Lue ja kirjoita",
|
||||
"readWriteDescription": "Voi kirjoittaa ja olla vuorovaikutuksessa istunnon kanssa aivan kuten omistaja."
|
||||
},
|
||||
"expiryLabel": "Linkin vanheneminen",
|
||||
"createLinkButton": "Luo linkki",
|
||||
"createShareButton": "Jaa käyttäjän kanssa",
|
||||
"searchUsersPlaceholder": "Hae käyttäjiä...",
|
||||
"noUsersFound": "Ei käyttäjiä löytynyt",
|
||||
"linkCreated": "Jaa linkki luotu",
|
||||
"linkCopied": "Linkki kopioitu leikepöydälle",
|
||||
"copyLink": "Kopioi linkki",
|
||||
"shareCreated": "Istunto jaettu. Se näkyy heidän Yhteydet-välilehdellä.",
|
||||
"shareFailed": "Jaon luominen epäonnistui",
|
||||
"userLacksHostAccess": "Käyttäjällä ei ole vielä pääsyä tähän isäntään. Jaa isäntä ensin heidän kanssaan tai käytä linkkiä.",
|
||||
"activeShares": "Aktiiviset jaot",
|
||||
"noActiveShares": "Ei aktiivisia jakoja tällä istunnolla",
|
||||
"revoke": "Peruuttaa",
|
||||
"revokeConfirmTitle": "Perutaanko tämä jako?",
|
||||
"revokeConfirmDescription": "Kuka tahansa tätä jakoa käyttävä menettää käyttöoikeuden välittömästi.",
|
||||
"revoked": "Jako peruttu",
|
||||
"revokeFailed": "Jakamisen peruuttaminen epäonnistui",
|
||||
"joinCount": "{{count}} liity",
|
||||
"joinCount_other": "{{count}} liitokset",
|
||||
"expiresAt": "Vanhenee {{date}}",
|
||||
"linkShareBadge": "Linkki",
|
||||
"userShareBadge": "Käyttäjä: {{username}}",
|
||||
"loadSharesFailed": "Aktiivisten jakojen lataaminen epäonnistui"
|
||||
},
|
||||
"guacamole": {
|
||||
"connecting": "Yhdistetään {{type}} -istuntoon...",
|
||||
@@ -1436,6 +1559,9 @@
|
||||
"reconnect": "Yhdistä uudelleen",
|
||||
"retry": "Yritä uudelleen",
|
||||
"guacdUnavailable": "Etätyöpöytäpalvelu (guacd) ei ole käytettävissä. Varmista, että guacd on käynnissä, käytettävissä ja määritetty oikein järjestelmänvalvojan asetuksissa.",
|
||||
"credentialPromptTitle": "Syötä RDP-tunnistetiedot",
|
||||
"credentialPromptDescription": "Tämä isäntä on asetettu kysymään tunnistetietoja yhteyden muodostamisen yhteydessä. Niitä käytetään vain tässä istunnossa, eikä niitä tallenneta.",
|
||||
"connect": "Yhdistä",
|
||||
"ctrlAltDel": "Ctrl+Alt+Del",
|
||||
"toolbar": {
|
||||
"ctrlAltDel": "Ctrl+Alt+Del",
|
||||
@@ -1461,7 +1587,9 @@
|
||||
"reconnect": "Yhdistä istunto uudelleen",
|
||||
"collapse": "Pienennä työkalupalkki",
|
||||
"expand": "Laajenna työkalupalkkia",
|
||||
"dragHandle": "Vedä siirtääksesi"
|
||||
"dragHandle": "Vedä siirtääksesi",
|
||||
"switchToTrackpad": "Vaihda ohjauslevytilaan (vedä siirtääksesi kohdistinta, napauta napsauttamalla)",
|
||||
"switchToTouch": "Vaihda kosketustilaan (napauta suoraan haluamaasi kohtaan)"
|
||||
}
|
||||
},
|
||||
"terminal": {
|
||||
@@ -1508,6 +1636,11 @@
|
||||
"totpRequired": "Kaksivaiheinen todennus vaaditaan",
|
||||
"totpCodeLabel": "Vahvistuskoodi",
|
||||
"totpVerify": "Vahvista",
|
||||
"mfaPromptRequired": "Todennus vaaditaan",
|
||||
"mfaPushRequired": "Push-todennus vaaditaan",
|
||||
"mfaMenuPlaceholder": "Kirjoita vastauksesi",
|
||||
"mfaWaitingApproval": "Odotetaan hyväksyntää laitteellasi...",
|
||||
"mfaSendRequest": "Lähetä pyyntö",
|
||||
"warpgateAuthRequired": "Warpgate-todennus vaaditaan",
|
||||
"warpgateSecurityKey": "Suojausavain",
|
||||
"warpgateAuthUrl": "Todennus-URL-osoite",
|
||||
@@ -2277,7 +2410,8 @@
|
||||
"resetCodeRateLimited": "Nopeus rajoitettu: Liian monta vahvistusyritystä. Yritä myöhemmin uudelleen.",
|
||||
"resetCodeRateLimitedWithTime": "Nopeus rajoitettu: Liian monta vahvistusyritystä. Odota {{time}} sekuntia ennen kuin yrität uudelleen.",
|
||||
"authTokenSaveFailed": "Todennustunnuksen tallennus epäonnistui",
|
||||
"failedToLoadServer": "Palvelimen lataus epäonnistui"
|
||||
"failedToLoadServer": "Palvelimen lataus epäonnistui",
|
||||
"remoteServerRequired": "Etäpalvelin vaaditaan. Yhdistä etäpalvelin asetuksissa käyttääksesi tätä yhteystyyppiä."
|
||||
},
|
||||
"messages": {
|
||||
"registrationDisabled": "Ylläpitäjä on tällä hetkellä poistanut käytöstä uuden tilin rekisteröinnin. Kirjaudu sisään tai ota yhteyttä ylläpitäjään.",
|
||||
@@ -2644,6 +2778,17 @@
|
||||
"sslSaveFailed": "SSL-asetusten tallentaminen epäonnistui",
|
||||
"sslRequiresDomain": "Verkkotunnus ja sähköpostiosoite vaaditaan",
|
||||
"sslInfoNote": "Kun olet myöntänyt varmenteen, ota SSL käyttöön ympäristömuuttujissasi (ENABLE_SSL=true) ja käynnistä Termix uudelleen.",
|
||||
"sslManualOption": "Manuaalinen (lataa varmenne)",
|
||||
"sslManualCert": "Todistus (PEM)",
|
||||
"sslManualCertPlaceholder": "-----ALKUTODISTUS-----",
|
||||
"sslManualKey": "Yksityinen avain (PEM)",
|
||||
"sslManualKeyPlaceholder": "-----ALKU YKSITYINEN AVAIN-----",
|
||||
"sslManualDesc": "Liitä olemassa oleva varmenne ja yksityinen avaimesi, mukaan lukien koko ketju, jos varmentaja sitä vaatii.",
|
||||
"sslManualUpload": "Lataa ja asenna varmenne",
|
||||
"sslManualUploadLoading": "Varmennetta ladataan...",
|
||||
"sslManualUploadSuccess": "Varmenne ladattiin ja asennettiin onnistuneesti",
|
||||
"sslManualUploadFailed": "Varmenteen lataus epäonnistui",
|
||||
"sslManualRequiresFields": "Varmenne ja yksityinen avain vaaditaan",
|
||||
"auditLogTotal": "{{total}} merkintöjä yhteensä",
|
||||
"auditLogEmpty": "Ei tarkastuslokin merkintöjä",
|
||||
"auditLogSuccess": "Menestys",
|
||||
@@ -2672,6 +2817,12 @@
|
||||
"commandHistoryEnabled": "Komentohistoria",
|
||||
"commandHistoryEnabledDesc": "Salli komentohistorian tallennus. Kun tämä on poistettu käytöstä, historiaa ei tallenneta isäntäkohtaisista asetuksista riippumatta.",
|
||||
"updateCommandHistoryFailed": "Komentohistoria-asetuksen päivittäminen epäonnistui",
|
||||
"analyticsEnabled": "Jaa anonyymit käyttötilastot",
|
||||
"analyticsEnabledDesc": "Lähettää nimettömän päivittäisen määrän käyttäjistä, isännöistä ja ominaisuuksien käytöstä Termixin parantamiseksi. Henkilötietoja tai yhteystietoja ei koskaan sisällytetä mukaan.",
|
||||
"updateAnalyticsFailed": "Analytiikka-asetuksen päivittäminen epäonnistui",
|
||||
"sessionSharingGloballyEnabled": "Salli istunnon jakaminen",
|
||||
"sessionSharingGloballyEnabledDesc": "Salli reaaliaikaisten pääte-, RDP-, VNC- ja Telnet-istuntojen jakaminen koko instanssin kesken. Poistamalla tämän asetuksen käytöstä ohitetaan kaikki isäntäkohtaisesti jakamiseen liittyvät asetukset.",
|
||||
"updateSessionSharingFailed": "Istunnon jakamisasetuksen päivittäminen epäonnistui",
|
||||
"sessionTimeout": "Istunnon aikakatkaisu",
|
||||
"hours": "tuntia",
|
||||
"sessionTimeoutRange": "Vähintään 1 h · Enintään 720 h",
|
||||
@@ -3119,6 +3270,47 @@
|
||||
"executionSuccess": "Menestys",
|
||||
"executionFailed": "Epäonnistui"
|
||||
},
|
||||
"keybindings": {
|
||||
"title": "Pikanäppäimet",
|
||||
"description": "Mukauta päätelaitteen kopiointi-, liittämis- ja ohjauspikakuvakkeita tai sido näppäimiä tekstin lähettämiseen tai koodinpätkän suorittamiseen.",
|
||||
"defaultsHeading": "Sisäänrakennetut pikavalinnat",
|
||||
"customHeading": "Mukautetut pikavalinnat",
|
||||
"addBinding": "Lisää pikakuvake",
|
||||
"addBindingTitle": "Lisää pikakuvake",
|
||||
"editBindingTitle": "Muokkaa pikakuvaketta",
|
||||
"loading": "Ladataan...",
|
||||
"noCustomBindings": "Ei vielä mukautettuja pikanäppäimiä",
|
||||
"defaultBadge": "Oletus",
|
||||
"customizedBadge": "Räätälöity",
|
||||
"customize": "Mukauta",
|
||||
"resetToDefault": "Palauta oletusarvot",
|
||||
"resetAllToDefaults": "Palauta kaikki oletusasetuksiin",
|
||||
"close": "Lähellä",
|
||||
"cancel": "Peruuttaa",
|
||||
"saveBinding": "Tallenna pikakuvake",
|
||||
"saveError": "Pikanäppäinten tallentaminen epäonnistui",
|
||||
"pressKeysToRecord": "Näppäinyhdistelmä",
|
||||
"pressKeysPlaceholder": "Napsauta ja paina näppäimiä",
|
||||
"recording": "Paina näppäimiä...",
|
||||
"comboRequiredError": "Paina ensin näppäinyhdistelmää",
|
||||
"textRequiredError": "Kirjoita lähetettävä teksti",
|
||||
"controlCodeRequiredError": "Syötä yksi kirjain ohjauskoodille",
|
||||
"snippetRequiredError": "Valitse katkelma",
|
||||
"conflictWarning": "Tämä yhdistelmä on jo sidottu kohtaan {{combo}}. Tallentaminen käynnistää molemmat.",
|
||||
"actionLabel": "Toiminta",
|
||||
"actionCopy": "Kopioi valinta",
|
||||
"actionPaste": "Liitä",
|
||||
"actionSendControlCode": "Lähetä Ctrl+kirjain-signaali",
|
||||
"actionSendText": "Lähetä tekstiviesti",
|
||||
"actionRunSnippet": "Suorita olemassa oleva koodinpätkä",
|
||||
"controlCodeLabel": "Kirje",
|
||||
"textLabel": "Lähetettävä tekstiviesti",
|
||||
"appendEnterLabel": "Paina Enter lähetyksen jälkeen",
|
||||
"snippetLabel": "Katkelma",
|
||||
"selectSnippetPlaceholder": "Valitse katkelma",
|
||||
"orphanedSnippetWarning": "katkelmaa ei löytynyt",
|
||||
"clipboardPermissionNote": "Saattaa pyytää leikepöydän käyttöoikeutta ensimmäisellä käyttökerralla joissakin selaimissa."
|
||||
},
|
||||
"userProfile": {
|
||||
"donateTitle": "Pidä Termix hengissä",
|
||||
"donateDescription": "Termix on ilmainen, itse isännöity ja vain muutaman ihmisen vapaa-ajallaan rakentama palvelu. Jos se on säästänyt aikaasi tai rahaasi, kryptovaluutan lahjoitus auttaa pitämään sen toiminnassa.",
|
||||
@@ -3134,6 +3326,7 @@
|
||||
"sectionAppearance": "Ulkonäkö",
|
||||
"sectionSecurity": "Turvallisuus",
|
||||
"sectionApiKeys": "API-avaimet",
|
||||
"sectionData": "Data",
|
||||
"sectionC2sTunnels": "C2S-tunnelit",
|
||||
"usernameLabel": "Käyttäjätunnus",
|
||||
"roleLabel": "Rooli",
|
||||
@@ -3162,6 +3355,9 @@
|
||||
"settingsTerminal": "Terminaali",
|
||||
"commandAutocomplete": "Komennon automaattinen täydennys",
|
||||
"commandAutocompleteDesc": "Näytä automaattinen täydennys kirjoitettaessa",
|
||||
"keyboardShortcuts": "Pikanäppäimet",
|
||||
"keyboardShortcutsDescription": "Mukauta päätelaitteen kopiointi-, liittämis- ja komento-pikakuvakkeita",
|
||||
"manageShortcuts": "Hallitse",
|
||||
"terminalLinkBehavior": "Päätelinkin napsautus",
|
||||
"terminalLinkBehaviorDesc": "Oletuskäyttäytyminen linkkejä napsautettaessa terminaalissa",
|
||||
"historyTracking": "Historian seuranta",
|
||||
@@ -3228,6 +3424,22 @@
|
||||
"apiKeyUsageHint": "Sisällytä avaimesi mukaan",
|
||||
"apiKeyUsageHintHeader": "otsikko.",
|
||||
"apiKeyPermissionsHint": "Avaimet perivät luovan käyttäjän oikeudet.",
|
||||
"exportData": "Vie tietoni",
|
||||
"exportDataDesc": "Lataa varmuuskopio isännistäsi, tunnistetiedoistasi ja asetuksistasi siirtääksesi ne toiseen laitteeseen",
|
||||
"export": "Viedä",
|
||||
"exporting": "Vienti...",
|
||||
"importData": "Tuo omat tiedot",
|
||||
"importDataDesc": "Palauta isäntäpalvelimet, tunnistetiedot ja asetukset .sqlite-varmuuskopiotiedostosta",
|
||||
"importDataSelected": "Valittu: {{name}}",
|
||||
"selectFile": "Valitse tiedosto",
|
||||
"changeFile": "Muuttaa",
|
||||
"import": "Tuoda",
|
||||
"importing": "Tuodaan...",
|
||||
"exportSuccess": "Tiedot vietiin onnistuneesti",
|
||||
"exportFailed": "Tietojen vienti epäonnistui",
|
||||
"importSelectFile": "Valitse ensin tiedosto",
|
||||
"importCompleted": "Tuonti valmis: {{total}} kohdetta tuotu, {{skipped}} ohitettu",
|
||||
"importFailed": "Tuonti epäonnistui: {{error}}",
|
||||
"roleUser": "Käyttäjä",
|
||||
"authMethodDual": "Kaksoistutkimus",
|
||||
"authMethodOidc": "OIDC",
|
||||
@@ -3379,6 +3591,7 @@
|
||||
"pageUp": "Sivu ylös",
|
||||
"pageDown": "PgDn",
|
||||
"delete": "Poista",
|
||||
"paste": "Liitä",
|
||||
"editQuickKeys": "Muokkaa pikanäppäimiä",
|
||||
"quickKeysTitle": "Pikanäppäimet",
|
||||
"quickKeysDesc": "Poista napauttamalla ×. Tukee enintään 8 merkkiä.",
|
||||
|
||||
Reference in new issue
Block a user