mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-08-30 02:41:34 +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]
L.H.
default-student
Brad Baker
copilot-swe-agent[bot]
Copilot Autofix powered by AI
Brennan Neoh
brennanneoh
XtraLarge
ZacharyZcR
parent
cf3e2cb499
commit
1a26628a48
@@ -389,6 +389,45 @@
|
||||
"noSavedServers": "Inga sparade servrar",
|
||||
"removeServer": "Ta bort"
|
||||
},
|
||||
"migrationNotice": {
|
||||
"title": "Termix Desktop körs nu fristående",
|
||||
"body1": "Den här appen brukade ansluta direkt till din Termix-server. Den har omarbetats för att köras helt självständigt och lagrar värdar och inloggningsuppgifter lokalt så att den fortsätter att fungera offline. Tvåvägssynkronisering med en egen Termix-server är nu valfritt.",
|
||||
"body2": "Dina befintliga värdar och inloggningsuppgifter finns fortfarande på {{url}}. Aktivera fjärrsynkronisering och återanslut till servern för att få tillbaka dem och hålla båda synkroniserade framöver.",
|
||||
"dismiss": "Inte nu",
|
||||
"setUpSync": "Konfigurera fjärrsynkronisering"
|
||||
},
|
||||
"remoteSync": {
|
||||
"title": "Fjärrsynkronisering",
|
||||
"description": "Anslut alternativt den här skrivbordsappen till en självhostad Termix-server för att synkronisera dina värdar, inloggningsuppgifter och kodavsnitt mellan enheter. Appen fungerar alltid helt offline oavsett om du ansluter eller inte.",
|
||||
"notConnected": "Inte ansluten",
|
||||
"connected": "Ansluten",
|
||||
"connectedTo": "Ansluten till {{url}}",
|
||||
"lastSynced": "Senast synkroniserad {{time}}",
|
||||
"neverSynced": "Aldrig synkroniserad",
|
||||
"syncError": "Synkroniseringsfel: {{message}}",
|
||||
"needsReauth": "Inloggningen har upphört",
|
||||
"connectButton": "Anslut till servern",
|
||||
"disconnectButton": "Koppla från",
|
||||
"syncNowButton": "Synkronisera nu",
|
||||
"syncing": "Synkroniserar...",
|
||||
"serverUrl": "Server-URL",
|
||||
"enterServerUrl": "Ange en server-URL",
|
||||
"mustIncludeProtocol": "Serverns URL måste börja med http:// eller https://",
|
||||
"connectionTestFailed": "Kunde inte nå en Termix-server på den URL:en",
|
||||
"allowInvalidCertificate": "Tillåt ogiltigt certifikat",
|
||||
"allowInvalidCertificateDesc": "Använd endast för betrodda, självhostade servrar med självsignerade certifikat eller IP-adresscertifikat.",
|
||||
"savedServers": "Sparade servrar",
|
||||
"removeServer": "Ta bort",
|
||||
"continueButton": "Fortsätta",
|
||||
"cancelButton": "Avboka",
|
||||
"signInTitle": "Logga in på {{url}}",
|
||||
"originTitle": "Anslutningens ursprung",
|
||||
"originDescription": "Välj var SSH-anslutningar kommer ifrån som standard. Detta kan åsidosättas per värd.",
|
||||
"originLocal": "Den här enheten (lokalt nätverk)",
|
||||
"originRemote": "Fjärrserver",
|
||||
"bannerReconnect": "Återanslut",
|
||||
"bannerMessage": "Fjärrsynkronisering behöver autentiseras på nytt"
|
||||
},
|
||||
"versionCheck": {
|
||||
"error": "Versionskontrollfel",
|
||||
"checkFailed": "Misslyckades med att söka efter uppdateringar",
|
||||
@@ -602,6 +641,7 @@
|
||||
"overrideCredentialUsername": "Åsidosätt användarnamn för inloggningsuppgifter",
|
||||
"overrideCredentialUsernameDesc": "Använd användarnamnet som anges ovan istället för användarnamnet för inloggningsuppgifterna",
|
||||
"oidcUsernameHint": "Använd $oidc.preferred_username för att ersätta ditt OIDC-inloggningsnamn.",
|
||||
"tailscaleUsernameHint": "Detta måste vara en Unix-användare som din Tailscale-identitet är beviljad i tailnätets SSH ACL, inte nödvändigtvis root.",
|
||||
"jumpHostChain": "Hoppa värdkedja",
|
||||
"portKnocking": "Port Knocking",
|
||||
"addKnock": "Lägg till port",
|
||||
@@ -650,6 +690,11 @@
|
||||
"delayAfterMs": "Fördröjning efter (ms)",
|
||||
"useSocks5Proxy": "Använd SOCKS5-proxy",
|
||||
"useSocks5ProxyDesc": "Led anslutning via en proxyserver",
|
||||
"connectionOrigin": "Anslutningens ursprung",
|
||||
"connectionOriginDesc": "Varifrån den här värdens SSH-anslutning kommer. Åsidosätter skrivbordsappens globala standardvärde.",
|
||||
"connectionOriginDefault": "Använd standard",
|
||||
"connectionOriginLocal": "Den här enheten (lokalt nätverk)",
|
||||
"connectionOriginRemote": "Fjärrserver",
|
||||
"proxyHost": "Proxyvärd",
|
||||
"proxyPort": "Proxyport",
|
||||
"proxyUsername": "Proxy-användarnamn",
|
||||
@@ -762,6 +807,14 @@
|
||||
"customThemeBrightCyan": "Ljus cyan",
|
||||
"customThemeBrightWhite": "Klarvitt",
|
||||
"customThemeResetTooltip": "Återställ till standardinställningarna",
|
||||
"savedThemesLabel": "Sparade teman",
|
||||
"saveAsGlobalTheme": "Spara som globalt tema",
|
||||
"saveGlobalThemeNamePrompt": "Ange ett namn för detta tema",
|
||||
"saveGlobalThemeSuccess": "Temat sparat",
|
||||
"saveGlobalThemeError": "Misslyckades med att spara temat",
|
||||
"applyGlobalThemeTooltip": "Använd detta tema",
|
||||
"deleteGlobalThemeTooltip": "Ta bort det här temat",
|
||||
"noSavedThemes": "Inga sparade teman ännu",
|
||||
"syntaxHighlightingLabel": "Syntaxmarkering",
|
||||
"syntaxHighlightingDesc": "Färglägg terminalutdata (fel, sökvägar, IP-adresser, tidsstämplar)",
|
||||
"syntaxHighlightingCategories": "Markera kategorier",
|
||||
@@ -791,6 +844,8 @@
|
||||
"enableAutoTmuxDesc": "Starta eller anslut automatiskt till tmux-session",
|
||||
"enableSessionLogging": "Sessionsloggning",
|
||||
"enableSessionLoggingDesc": "Spela in utdata från terminalsessionen för senare granskning",
|
||||
"allowSessionSharing": "Tillåt sessionsdelning",
|
||||
"allowSessionSharingDesc": "Tillåt att livesessioner på den här värden delas via länk eller med andra användare",
|
||||
"enableCommandHistory": "Kommandohistorik",
|
||||
"enableCommandHistoryDesc": "Record-kommandon körs i den här terminalen för historik och autofullständig ifyllning",
|
||||
"linkClickBehaviorLabel": "Länkklickbeteende",
|
||||
@@ -895,6 +950,7 @@
|
||||
"proxmoxResultImported": "{{count}} importerad",
|
||||
"proxmoxResultUpdated": "{{count}} uppdaterad",
|
||||
"proxmoxResultFailed": "{{count}} misslyckades",
|
||||
"proxmoxResultSkippedNoIp": "{{count}} hoppades över (ingen IP-adress hittades)",
|
||||
"proxmoxImportComplete": "Proxmox-import klar: {{summary}}",
|
||||
"proxmoxDiscoveryFailed": "Upptäckten misslyckades",
|
||||
"proxmoxImportFailed": "Importen misslyckades",
|
||||
@@ -961,6 +1017,9 @@
|
||||
"failedToSaveCredential": "Misslyckades med att spara inloggningsuppgifterna",
|
||||
"credentialNameRequired": "Ange ett namn för autentiseringsuppgifterna",
|
||||
"credentialAuthRequired": "Lägg till ett lösenord, en SSH-nyckel eller båda",
|
||||
"createCredentialFromHostBtn": "Skapa autentiseringsuppgifter",
|
||||
"createCredentialFromHostTitle": "Skapa autentiseringsuppgifter från värden",
|
||||
"createCredentialFromHostDesc": "Skapa en återanvändbar, delbar autentiseringsuppgift som är förifylld med värdens nuvarande användarnamn, lösenord och/eller SSH-nyckel.",
|
||||
"backToHosts": "Tillbaka till värdar",
|
||||
"backToCredentials": "Tillbaka till inloggningsuppgifter",
|
||||
"pinned": "Fäst",
|
||||
@@ -1000,6 +1059,9 @@
|
||||
"folderNestingHint": "Använd / för att separera nivåer och skapa kapslade mappar.",
|
||||
"folderColor": "Färg",
|
||||
"folderIcon": "Ikon",
|
||||
"folderCredential": "Referenser",
|
||||
"folderCredentialNone": "Ingen inloggningsuppgifter har tilldelats",
|
||||
"folderCredentialHint": "Värdar i den här mappen som använder autentiseringsuppgifterna \"Lagrad autentiseringsuppgift\" utan att ha valt sina egna autentiseringsuppgifter kommer att ärva den här.",
|
||||
"folderPreview": "Förhandsvisning",
|
||||
"folderNameFallback": "Namnlös mapp",
|
||||
"createFolderButton": "Skapa mapp",
|
||||
@@ -1181,6 +1243,10 @@
|
||||
"filterTagsGroup": "Taggar",
|
||||
"shareHost": "Dela värd",
|
||||
"shareHostTitle": "Dela: {{name}}",
|
||||
"shareFolder": "Dela mapp",
|
||||
"shareFolderTitle": "Dela mapp: {{name}}",
|
||||
"folderSharedSuccessfully": "Delade {{count}} värd(ar) i mappen",
|
||||
"failedToShareFolder": "Misslyckades med att dela mappen",
|
||||
"sharing": {
|
||||
"loadError": "Misslyckades med att ladda delningsdata. Försök igen.",
|
||||
"shareWithSection": "Dela med",
|
||||
@@ -1221,6 +1287,7 @@
|
||||
"shareWithCount": "Dela ({{count}})",
|
||||
"currentAccess": "Nuvarande åtkomst",
|
||||
"noAccessEntries": "Denna värd har inte delats ännu",
|
||||
"folderShareSummary": "Delad {{shared}} av {{total}} värd(ar) i den här mappen",
|
||||
"grantedBy": "Beviljad av",
|
||||
"expires": "Utgår",
|
||||
"expired": "Utgången",
|
||||
@@ -1242,6 +1309,8 @@
|
||||
"authMethod": "Autentiseringsmetod",
|
||||
"authTypeDirect": "Direkt",
|
||||
"authTypeCredential": "Referenser",
|
||||
"authTypeNone": "Ingen",
|
||||
"authTypeNoneDesc": "Inga inloggningsuppgifter lagras. Du kommer att bli ombedd att ange ett användarnamn och lösenord varje gång du ansluter; de sparas inte.",
|
||||
"selectCredential": "Välj en behörighetsinloggning...",
|
||||
"connectionSettings": "Anslutningsinställningar",
|
||||
"displaySettings": "Skärminställningar",
|
||||
@@ -1259,6 +1328,7 @@
|
||||
"rdpPort": "RDP-port",
|
||||
"username": "Användarnamn",
|
||||
"password": "Lösenord",
|
||||
"passwordSaved": "Lösenordet sparats, skriv för att ändra",
|
||||
"domain": "Domän",
|
||||
"securityMode": "Säkerhetsläge",
|
||||
"colorDepth": "Färgdjup",
|
||||
@@ -1424,7 +1494,60 @@
|
||||
"expiresIn": "Utgår om {{duration}}",
|
||||
"search": "Sök efter kopplingar...",
|
||||
"noSearchResults": "Inga kontakter matchar din sökning",
|
||||
"rename": "Byt namn på sessionen"
|
||||
"rename": "Byt namn på sessionen",
|
||||
"sectionSharedWithMe": "Delade med mig",
|
||||
"sharedBy": "Delat av {{username}}",
|
||||
"join": "Ansluta sig till",
|
||||
"sharedSessionLabel": "{{hostName}} (delad)"
|
||||
},
|
||||
"sessionSharing": {
|
||||
"guestView": {
|
||||
"loading": "Ansluter till delad session...",
|
||||
"linkInvalid": "Den här delningslänken är ogiltig, har löpt ut eller har återkallats",
|
||||
"rateLimited": "För många försök, försök igen snart",
|
||||
"sessionEnded": "Den här sessionen är avslutad",
|
||||
"readOnlyBadge": "Endast visning"
|
||||
},
|
||||
"modalTitle": "Dela session",
|
||||
"shareButton": "Dela",
|
||||
"notReadyToShare": "Sessionen är inte redo att delas ännu",
|
||||
"modeTab": {
|
||||
"link": "Länk",
|
||||
"user": "Användare"
|
||||
},
|
||||
"linkModeDescription": "Vem som helst med den här länken kan gå med, inget konto krävs.",
|
||||
"userModeDescription": "Dela med en specifik användare som redan har åtkomst till den här värden. Om de inte har åtkomst ännu, dela värden med dem först eller använd en länk istället. När sessionen har delats visas den på deras flik Anslutningar.",
|
||||
"permissionLevel": {
|
||||
"label": "Behörighetsnivå",
|
||||
"readOnly": "Skrivskyddad",
|
||||
"readOnlyDescription": "Kan titta på sessionen live men kan inte skriva eller interagera.",
|
||||
"readWrite": "Läs-skriv",
|
||||
"readWriteDescription": "Kan skriva och interagera med sessionen precis som ägaren."
|
||||
},
|
||||
"expiryLabel": "Länkens utgångsdatum",
|
||||
"createLinkButton": "Skapa länk",
|
||||
"createShareButton": "Dela med användaren",
|
||||
"searchUsersPlaceholder": "Sök användare...",
|
||||
"noUsersFound": "Inga användare hittades",
|
||||
"linkCreated": "Delningslänk skapad",
|
||||
"linkCopied": "Länk kopierad till urklipp",
|
||||
"copyLink": "Kopiera länk",
|
||||
"shareCreated": "Sessionen delade. Den kommer att visas på fliken Anslutningar.",
|
||||
"shareFailed": "Misslyckades med att skapa delningen",
|
||||
"userLacksHostAccess": "Den användaren har inte åtkomst till den här värden ännu. Dela värden med dem först, eller använd en länk istället.",
|
||||
"activeShares": "Aktiva aktier",
|
||||
"noActiveShares": "Inga aktiva delningar för den här sessionen",
|
||||
"revoke": "Återkalla",
|
||||
"revokeConfirmTitle": "Återkalla den här delningen?",
|
||||
"revokeConfirmDescription": "Alla som använder den här delningen kommer att förlora åtkomsten omedelbart.",
|
||||
"revoked": "Delning återkallad",
|
||||
"revokeFailed": "Misslyckades med att återkalla delningen",
|
||||
"joinCount": "{{count}} gå med",
|
||||
"joinCount_other": "{{count}} ansluter sig",
|
||||
"expiresAt": "Utgångsdatum {{date}}",
|
||||
"linkShareBadge": "Länk",
|
||||
"userShareBadge": "Användare: {{username}}",
|
||||
"loadSharesFailed": "Misslyckades med att läsa in aktiva delningar"
|
||||
},
|
||||
"guacamole": {
|
||||
"connecting": "Ansluter till {{type}} session...",
|
||||
@@ -1436,6 +1559,9 @@
|
||||
"reconnect": "Återanslut",
|
||||
"retry": "Försöka igen",
|
||||
"guacdUnavailable": "Fjärrskrivbordstjänsten (guacd) är inte tillgänglig. Se till att guacd körs, är tillgängligt och korrekt konfigurerat i administratörsinställningarna.",
|
||||
"credentialPromptTitle": "Ange RDP-inloggningsuppgifter",
|
||||
"credentialPromptDescription": "Den här värden är inställd på att be om inloggningsuppgifter vid anslutning. De används endast för den här sessionen och sparas inte.",
|
||||
"connect": "Ansluta",
|
||||
"ctrlAltDel": "Ctrl+Alt+Del",
|
||||
"toolbar": {
|
||||
"ctrlAltDel": "Ctrl+Alt+Del",
|
||||
@@ -1461,7 +1587,9 @@
|
||||
"reconnect": "Återanslut sessionen",
|
||||
"collapse": "Komprimera verktygsfältet",
|
||||
"expand": "Expandera verktygsfältet",
|
||||
"dragHandle": "Dra för att flytta"
|
||||
"dragHandle": "Dra för att flytta",
|
||||
"switchToTrackpad": "Växla till styrplatteläge (dra för att flytta markören, tryck för att klicka)",
|
||||
"switchToTouch": "Växla till pekläge (tryck direkt där du vill klicka)"
|
||||
}
|
||||
},
|
||||
"terminal": {
|
||||
@@ -1508,6 +1636,11 @@
|
||||
"totpRequired": "Tvåfaktorsautentisering krävs",
|
||||
"totpCodeLabel": "Verifieringskod",
|
||||
"totpVerify": "Kontrollera",
|
||||
"mfaPromptRequired": "Autentisering krävs",
|
||||
"mfaPushRequired": "Push-autentisering krävs",
|
||||
"mfaMenuPlaceholder": "Ange ditt svar",
|
||||
"mfaWaitingApproval": "Väntar på godkännande på din enhet...",
|
||||
"mfaSendRequest": "Skicka förfrågan",
|
||||
"warpgateAuthRequired": "Warpgate-autentisering krävs",
|
||||
"warpgateSecurityKey": "Säkerhetsnyckel",
|
||||
"warpgateAuthUrl": "Autentiserings-URL",
|
||||
@@ -2277,7 +2410,8 @@
|
||||
"resetCodeRateLimited": "Begränsad hastighet: För många verifieringsförsök. Försök igen senare.",
|
||||
"resetCodeRateLimitedWithTime": "Begränsad hastighet: För många verifieringsförsök. Vänta {{time}} sekunder innan du försöker igen.",
|
||||
"authTokenSaveFailed": "Misslyckades med att spara autentiseringstoken",
|
||||
"failedToLoadServer": "Misslyckades med att ladda servern"
|
||||
"failedToLoadServer": "Misslyckades med att ladda servern",
|
||||
"remoteServerRequired": "Fjärrserver krävs. Anslut en fjärrserver i Inställningar för att använda den här anslutningstypen."
|
||||
},
|
||||
"messages": {
|
||||
"registrationDisabled": "Registrering av nytt konto är för närvarande inaktiverat av en administratör. Vänligen logga in eller kontakta en administratör.",
|
||||
@@ -2644,6 +2778,17 @@
|
||||
"sslSaveFailed": "Kunde inte spara SSL-inställningarna",
|
||||
"sslRequiresDomain": "Domän och e-postadress krävs",
|
||||
"sslInfoNote": "Efter att du har utfärdat ett certifikat, aktivera SSL i dina miljövariabler (ENABLE_SSL=true) och starta om Termix.",
|
||||
"sslManualOption": "Manual (ladda upp certifikat)",
|
||||
"sslManualCert": "Certifikat (PEM)",
|
||||
"sslManualCertPlaceholder": "-----BEGIN CERTIFIKAT-----",
|
||||
"sslManualKey": "Privat nyckel (PEM)",
|
||||
"sslManualKeyPlaceholder": "-----BEGIN PRIVAT NYCKEL-----",
|
||||
"sslManualDesc": "Klistra in ditt befintliga certifikat och din privata nyckel, inklusive en fullständig kedja om det krävs av din CA.",
|
||||
"sslManualUpload": "Ladda upp och installera certifikat",
|
||||
"sslManualUploadLoading": "Laddar upp certifikat...",
|
||||
"sslManualUploadSuccess": "Certifikatet har laddats upp och installerats",
|
||||
"sslManualUploadFailed": "Uppladdning av certifikat misslyckades",
|
||||
"sslManualRequiresFields": "Certifikat och privat nyckel krävs",
|
||||
"auditLogTotal": "{{total}} totala antalet poster",
|
||||
"auditLogEmpty": "Inga poster i granskningsloggen hittades",
|
||||
"auditLogSuccess": "Framgång",
|
||||
@@ -2672,6 +2817,12 @@
|
||||
"commandHistoryEnabled": "Kommandohistorik",
|
||||
"commandHistoryEnabledDesc": "Tillåt inspelning av kommandohistorik. När det är inaktiverat sparas inte historiken oavsett inställningarna per värd.",
|
||||
"updateCommandHistoryFailed": "Misslyckades med att uppdatera inställningen för kommandohistorik",
|
||||
"analyticsEnabled": "Dela anonym användningsstatistik",
|
||||
"analyticsEnabledDesc": "Skickar en anonym daglig räkning av användare, värdar och funktionsanvändning för att förbättra Termix. Inga personuppgifter eller anslutningsdetaljer inkluderas någonsin.",
|
||||
"updateAnalyticsFailed": "Det gick inte att uppdatera analysinställningen",
|
||||
"sessionSharingGloballyEnabled": "Tillåt sessionsdelning",
|
||||
"sessionSharingGloballyEnabledDesc": "Tillåt att liveterminal-, RDP-, VNC- och Telnet-sessioner delas instansövergripande. Åsidosätter alla delningsknappar per värd när de är inaktiverade.",
|
||||
"updateSessionSharingFailed": "Det gick inte att uppdatera inställningen för sessionsdelning",
|
||||
"sessionTimeout": "Sessionstimeout",
|
||||
"hours": "timmar",
|
||||
"sessionTimeoutRange": "Min 1 timme · Max 720 timmar",
|
||||
@@ -3119,6 +3270,47 @@
|
||||
"executionSuccess": "Framgång",
|
||||
"executionFailed": "Misslyckades"
|
||||
},
|
||||
"keybindings": {
|
||||
"title": "Kortkommandon",
|
||||
"description": "Anpassa kortkommandon för att kopiera, klistra in och kontrollera terminalen, eller bind tangenter för att skicka text eller köra ett kodavsnitt.",
|
||||
"defaultsHeading": "Inbyggda genvägar",
|
||||
"customHeading": "Anpassade genvägar",
|
||||
"addBinding": "Lägg till genväg",
|
||||
"addBindingTitle": "Lägg till genväg",
|
||||
"editBindingTitle": "Redigera genväg",
|
||||
"loading": "Belastning...",
|
||||
"noCustomBindings": "Inga anpassade genvägar ännu",
|
||||
"defaultBadge": "Standard",
|
||||
"customizedBadge": "Anpassad",
|
||||
"customize": "Anpassa",
|
||||
"resetToDefault": "Återställ till standard",
|
||||
"resetAllToDefaults": "Återställ alla till standardinställningarna",
|
||||
"close": "Nära",
|
||||
"cancel": "Avboka",
|
||||
"saveBinding": "Spara genväg",
|
||||
"saveError": "Kunde inte spara kortkommandon",
|
||||
"pressKeysToRecord": "Tangentkombination",
|
||||
"pressKeysPlaceholder": "Klicka och tryck på tangenterna",
|
||||
"recording": "Tryck på tangenterna...",
|
||||
"comboRequiredError": "Tryck först på en tangentkombination",
|
||||
"textRequiredError": "Ange texten som ska skickas",
|
||||
"controlCodeRequiredError": "Ange en enda bokstav för kontrollkoden",
|
||||
"snippetRequiredError": "Välj ett utdrag",
|
||||
"conflictWarning": "Denna kombination är redan bunden till {{combo}}. Om du sparar den aktiveras båda.",
|
||||
"actionLabel": "Handling",
|
||||
"actionCopy": "Kopiera val",
|
||||
"actionPaste": "Klistra",
|
||||
"actionSendControlCode": "Skicka Ctrl+bokstavssignal",
|
||||
"actionSendText": "Skicka sms",
|
||||
"actionRunSnippet": "Kör befintligt kodavsnitt",
|
||||
"controlCodeLabel": "Brev",
|
||||
"textLabel": "SMS att skicka",
|
||||
"appendEnterLabel": "Tryck Enter efter att du skickat",
|
||||
"snippetLabel": "Utdrag",
|
||||
"selectSnippetPlaceholder": "Välj ett utdrag",
|
||||
"orphanedSnippetWarning": "utdraget hittades inte",
|
||||
"clipboardPermissionNote": "Kan be om behörighet för urklipp vid första användningen i vissa webbläsare."
|
||||
},
|
||||
"userProfile": {
|
||||
"donateTitle": "Håll Termix vid liv",
|
||||
"donateDescription": "Termix är gratis, självhostat och byggt av endast ett fåtal personer på sin fritid. Om det har sparat dig tid eller pengar, hjälper en kryptodonation till att hålla det igång.",
|
||||
@@ -3134,6 +3326,7 @@
|
||||
"sectionAppearance": "Utseende",
|
||||
"sectionSecurity": "Säkerhet",
|
||||
"sectionApiKeys": "API-nycklar",
|
||||
"sectionData": "Data",
|
||||
"sectionC2sTunnels": "C2S-tunnlar",
|
||||
"usernameLabel": "Användarnamn",
|
||||
"roleLabel": "Roll",
|
||||
@@ -3162,6 +3355,9 @@
|
||||
"settingsTerminal": "Terminal",
|
||||
"commandAutocomplete": "Kommando Autokomplettering",
|
||||
"commandAutocompleteDesc": "Visa autokomplettering medan du skriver",
|
||||
"keyboardShortcuts": "Kortkommandon",
|
||||
"keyboardShortcutsDescription": "Anpassa kortkommandon för terminalkopiering, klistra in och kommandon",
|
||||
"manageShortcuts": "Hantera",
|
||||
"terminalLinkBehavior": "Klicka på terminallänken",
|
||||
"terminalLinkBehaviorDesc": "Standardbeteende vid klick på länkar i terminalen",
|
||||
"historyTracking": "Historikspårning",
|
||||
@@ -3228,6 +3424,22 @@
|
||||
"apiKeyUsageHint": "Lägg till din nyckel i",
|
||||
"apiKeyUsageHintHeader": "rubrik.",
|
||||
"apiKeyPermissionsHint": "Nycklar ärver behörigheterna från den skapande användaren.",
|
||||
"exportData": "Exportera mina data",
|
||||
"exportDataDesc": "Ladda ner en säkerhetskopia av dina värdar, inloggningsuppgifter och inställningar för att överföra till en annan enhet.",
|
||||
"export": "Exportera",
|
||||
"exporting": "Exporterar...",
|
||||
"importData": "Importera mina data",
|
||||
"importDataDesc": "Återställ dina värdar, inloggningsuppgifter och inställningar från en .sqlite-säkerhetskopia",
|
||||
"importDataSelected": "Vald: {{name}}",
|
||||
"selectFile": "Välj fil",
|
||||
"changeFile": "Ändra",
|
||||
"import": "Importera",
|
||||
"importing": "Importerar...",
|
||||
"exportSuccess": "Data exporterades",
|
||||
"exportFailed": "Dataexport misslyckades",
|
||||
"importSelectFile": "Välj en fil först",
|
||||
"importCompleted": "Importen är klar: {{total}} objekt har importerats, {{skipped}} hoppades över",
|
||||
"importFailed": "Importen misslyckades: {{error}}",
|
||||
"roleUser": "Användare",
|
||||
"authMethodDual": "Dubbel autentisering",
|
||||
"authMethodOidc": "OIDC",
|
||||
@@ -3379,6 +3591,7 @@
|
||||
"pageUp": "PgUp",
|
||||
"pageDown": "PgDn",
|
||||
"delete": "Del",
|
||||
"paste": "Klistra",
|
||||
"editQuickKeys": "Redigera snabbknappar",
|
||||
"quickKeysTitle": "Snabbtangenter",
|
||||
"quickKeysDesc": "Tryck på × för att ta bort. Stöder upp till 8 tecken.",
|
||||
|
||||
Reference in New Issue
Block a user