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": "Ingen lagrede servere",
|
||||
"removeServer": "Fjerne"
|
||||
},
|
||||
"migrationNotice": {
|
||||
"title": "Termix Desktop kjører nå frittstående",
|
||||
"body1": "Denne appen pleide å koble seg direkte til Termix-serveren din. Den har blitt omarbeidet til å kjøre helt alene, og lagrer verter og påloggingsinformasjon lokalt, slik at den fortsetter å fungere offline. Toveis synkronisering med en selvhostet Termix-server er nå valgfritt.",
|
||||
"body2": "Dine eksisterende verter og påloggingsinformasjon er fortsatt på {{url}}. Slå på ekstern synkronisering og koble til den serveren på nytt for å få dem tilbake og holde begge synkroniserte fremover.",
|
||||
"dismiss": "Ikke nå",
|
||||
"setUpSync": "Konfigurer ekstern synkronisering"
|
||||
},
|
||||
"remoteSync": {
|
||||
"title": "Fjernsynkronisering",
|
||||
"description": "Du kan eventuelt koble denne skrivebordsappen til en selvhostet Termix-server for å synkronisere verter, påloggingsinformasjon og kodebiter på tvers av enheter. Appen fungerer alltid helt offline, enten du kobler til eller ikke.",
|
||||
"notConnected": "Ikke tilkoblet",
|
||||
"connected": "Tilkoblet",
|
||||
"connectedTo": "Koblet til {{url}}",
|
||||
"lastSynced": "Sist synkronisert {{time}}",
|
||||
"neverSynced": "Aldri synkronisert",
|
||||
"syncError": "Synkroniseringsfeil: {{message}}",
|
||||
"needsReauth": "Påloggingen er utløpt",
|
||||
"connectButton": "Koble til server",
|
||||
"disconnectButton": "Frakople",
|
||||
"syncNowButton": "Synkroniser nå",
|
||||
"syncing": "Synkroniserer...",
|
||||
"serverUrl": "Server-URL",
|
||||
"enterServerUrl": "Vennligst skriv inn en server-URL",
|
||||
"mustIncludeProtocol": "Server-URL-en må starte med http:// eller https://",
|
||||
"connectionTestFailed": "Kunne ikke nå en Termix-server på den URL-adressen",
|
||||
"allowInvalidCertificate": "Tillat ugyldig sertifikat",
|
||||
"allowInvalidCertificateDesc": "Bruk kun for klarerte, selvhostede servere med selvsignerte sertifikater eller IP-adressesertifikater.",
|
||||
"savedServers": "Lagrede servere",
|
||||
"removeServer": "Fjerne",
|
||||
"continueButton": "Fortsette",
|
||||
"cancelButton": "Kansellere",
|
||||
"signInTitle": "Logg inn på {{url}}",
|
||||
"originTitle": "Tilkoblingens opprinnelse",
|
||||
"originDescription": "Velg hvor SSH-tilkoblinger kommer fra som standard. Dette kan overstyres per vert.",
|
||||
"originLocal": "Denne enheten (lokalt nettverk)",
|
||||
"originRemote": "Ekstern server",
|
||||
"bannerReconnect": "Koble til igjen",
|
||||
"bannerMessage": "Ekstern synkronisering trenger ny autentisering"
|
||||
},
|
||||
"versionCheck": {
|
||||
"error": "Versjonssjekkfeil",
|
||||
"checkFailed": "Kunne ikke sjekke etter oppdateringer",
|
||||
@@ -602,6 +641,7 @@
|
||||
"overrideCredentialUsername": "Overstyr brukernavn for legitimasjon",
|
||||
"overrideCredentialUsernameDesc": "Bruk brukernavnet som er spesifisert ovenfor i stedet for brukernavnet til legitimasjonen",
|
||||
"oidcUsernameHint": "Bruk $oidc.preferred_username for å erstatte OIDC-påloggingsnavnet ditt.",
|
||||
"tailscaleUsernameHint": "Dette må være en Unix-bruker som Tailscale-identiteten din er gitt i tailnets SSH ACL, ikke nødvendigvis root.",
|
||||
"jumpHostChain": "Hoppvertkjede",
|
||||
"portKnocking": "Port Knocking",
|
||||
"addKnock": "Legg til port",
|
||||
@@ -650,6 +690,11 @@
|
||||
"delayAfterMs": "Forsinkelse etter (ms)",
|
||||
"useSocks5Proxy": "Bruk SOCKS5-proxyen",
|
||||
"useSocks5ProxyDesc": "Rute tilkoblingen via en proxy-server",
|
||||
"connectionOrigin": "Tilkoblingens opprinnelse",
|
||||
"connectionOriginDesc": "Hvor denne vertens SSH-tilkobling kommer fra. Overstyrer skrivebordsappens globale standard.",
|
||||
"connectionOriginDefault": "Bruk standard",
|
||||
"connectionOriginLocal": "Denne enheten (lokalt nettverk)",
|
||||
"connectionOriginRemote": "Ekstern server",
|
||||
"proxyHost": "Proxy-vert",
|
||||
"proxyPort": "Proxy-port",
|
||||
"proxyUsername": "Proxy-brukernavn",
|
||||
@@ -762,6 +807,14 @@
|
||||
"customThemeBrightCyan": "Lys cyan",
|
||||
"customThemeBrightWhite": "Klar hvit",
|
||||
"customThemeResetTooltip": "Tilbakestill til standardinnstillinger",
|
||||
"savedThemesLabel": "Lagrede temaer",
|
||||
"saveAsGlobalTheme": "Lagre som globalt tema",
|
||||
"saveGlobalThemeNamePrompt": "Skriv inn et navn for dette temaet",
|
||||
"saveGlobalThemeSuccess": "Tema lagret",
|
||||
"saveGlobalThemeError": "Kunne ikke lagre temaet",
|
||||
"applyGlobalThemeTooltip": "Bruk dette temaet",
|
||||
"deleteGlobalThemeTooltip": "Slett dette temaet",
|
||||
"noSavedThemes": "Ingen lagrede temaer ennå",
|
||||
"syntaxHighlightingLabel": "Syntaksutheving",
|
||||
"syntaxHighlightingDesc": "Fargelegg terminalutdata (feil, stier, IP-adresser, tidsstempler)",
|
||||
"syntaxHighlightingCategories": "Fremhev kategorier",
|
||||
@@ -791,6 +844,8 @@
|
||||
"enableAutoTmuxDesc": "Start eller legg til tmux-økten automatisk",
|
||||
"enableSessionLogging": "Øktlogging",
|
||||
"enableSessionLoggingDesc": "Ta opp utdata fra terminaløkten for senere gjennomgang",
|
||||
"allowSessionSharing": "Tillat øktdeling",
|
||||
"allowSessionSharingDesc": "La direktesendte økter på denne verten deles via lenke eller med andre brukere",
|
||||
"enableCommandHistory": "Kommandohistorikk",
|
||||
"enableCommandHistoryDesc": "Record-kommandoer kjøres i denne terminalen for historikk og autofullføring",
|
||||
"linkClickBehaviorLabel": "Klikkatferd på lenker",
|
||||
@@ -895,6 +950,7 @@
|
||||
"proxmoxResultImported": "{{count}} importert",
|
||||
"proxmoxResultUpdated": "{{count}} oppdatert",
|
||||
"proxmoxResultFailed": "{{count}} mislyktes",
|
||||
"proxmoxResultSkippedNoIp": "{{count}} hoppet over (ingen IP-adresse funnet)",
|
||||
"proxmoxImportComplete": "Proxmox-import fullført: {{summary}}",
|
||||
"proxmoxDiscoveryFailed": "Oppdagelsen mislyktes",
|
||||
"proxmoxImportFailed": "Importen mislyktes",
|
||||
@@ -961,6 +1017,9 @@
|
||||
"failedToSaveCredential": "Kunne ikke lagre legitimasjonen",
|
||||
"credentialNameRequired": "Vennligst skriv inn et navn for legitimasjonen",
|
||||
"credentialAuthRequired": "Legg til et passord, en SSH-nøkkel eller begge deler",
|
||||
"createCredentialFromHostBtn": "Opprett legitimasjon",
|
||||
"createCredentialFromHostTitle": "Opprett legitimasjon fra vert",
|
||||
"createCredentialFromHostDesc": "Opprett en gjenbrukbar, delbar legitimasjonsoppføring forhåndsutfylt med denne vertens nåværende brukernavn, passord og/eller SSH-nøkkel.",
|
||||
"backToHosts": "Tilbake til verter",
|
||||
"backToCredentials": "Tilbake til legitimasjon",
|
||||
"pinned": "Festet",
|
||||
@@ -1000,6 +1059,9 @@
|
||||
"folderNestingHint": "Bruk / til å skille nivåer og opprette nestede mapper.",
|
||||
"folderColor": "Farge",
|
||||
"folderIcon": "Ikon",
|
||||
"folderCredential": "Legitimasjon",
|
||||
"folderCredentialNone": "Ingen legitimasjon tildelt",
|
||||
"folderCredentialHint": "Verter i denne mappen som bruker autentiseringen «Lagret legitimasjon» uten å ha valgt sin egen legitimasjon, arver denne.",
|
||||
"folderPreview": "Forhåndsvisning",
|
||||
"folderNameFallback": "Mappe uten navn",
|
||||
"createFolderButton": "Opprett mappe",
|
||||
@@ -1181,6 +1243,10 @@
|
||||
"filterTagsGroup": "Tagger",
|
||||
"shareHost": "Del vert",
|
||||
"shareHostTitle": "Del: {{name}}",
|
||||
"shareFolder": "Del mappe",
|
||||
"shareFolderTitle": "Del mappe: {{name}}",
|
||||
"folderSharedSuccessfully": "Delte {{count}} verter i mappen",
|
||||
"failedToShareFolder": "Kunne ikke dele mappen",
|
||||
"sharing": {
|
||||
"loadError": "Kunne ikke laste inn delingsdataene. Prøv på nytt.",
|
||||
"shareWithSection": "Del med",
|
||||
@@ -1221,6 +1287,7 @@
|
||||
"shareWithCount": "Del ({{count}})",
|
||||
"currentAccess": "Nåværende tilgang",
|
||||
"noAccessEntries": "Denne verten har ikke blitt delt ennå",
|
||||
"folderShareSummary": "Delte {{shared}} av {{total}} verter i denne mappen",
|
||||
"grantedBy": "Tildelt av",
|
||||
"expires": "Utløper",
|
||||
"expired": "Utløpt",
|
||||
@@ -1242,6 +1309,8 @@
|
||||
"authMethod": "Autentiseringsmetode",
|
||||
"authTypeDirect": "Direkte",
|
||||
"authTypeCredential": "Legitimasjon",
|
||||
"authTypeNone": "Ingen",
|
||||
"authTypeNoneDesc": "Ingen påloggingsinformasjon lagres. Du blir bedt om å oppgi brukernavn og passord hver gang du kobler til; de lagres ikke.",
|
||||
"selectCredential": "Velg en legitimasjon...",
|
||||
"connectionSettings": "Tilkoblingsinnstillinger",
|
||||
"displaySettings": "Skjerminnstillinger",
|
||||
@@ -1259,6 +1328,7 @@
|
||||
"rdpPort": "RDP-port",
|
||||
"username": "Brukernavn",
|
||||
"password": "Passord",
|
||||
"passwordSaved": "Passord lagret, skriv inn for å endre",
|
||||
"domain": "Domene",
|
||||
"securityMode": "Sikkerhetsmodus",
|
||||
"colorDepth": "Fargedybde",
|
||||
@@ -1424,7 +1494,60 @@
|
||||
"expiresIn": "Utløper om {{duration}}",
|
||||
"search": "Søk etter tilkoblinger...",
|
||||
"noSearchResults": "Ingen forbindelser samsvarer med søket ditt",
|
||||
"rename": "Gi nytt navn til økten"
|
||||
"rename": "Gi nytt navn til økten",
|
||||
"sectionSharedWithMe": "Delt med meg",
|
||||
"sharedBy": "Delt av {{username}}",
|
||||
"join": "Bli med",
|
||||
"sharedSessionLabel": "{{hostName}} (delt)"
|
||||
},
|
||||
"sessionSharing": {
|
||||
"guestView": {
|
||||
"loading": "Kobler til delt økt...",
|
||||
"linkInvalid": "Denne delingslenken er ugyldig, utløpt eller har blitt tilbakekalt",
|
||||
"rateLimited": "For mange forsøk, prøv igjen snart",
|
||||
"sessionEnded": "Denne økten er avsluttet",
|
||||
"readOnlyBadge": "Kun visning"
|
||||
},
|
||||
"modalTitle": "Del økt",
|
||||
"shareButton": "Dele",
|
||||
"notReadyToShare": "Økten er ikke klar til deling ennå",
|
||||
"modeTab": {
|
||||
"link": "Lenke",
|
||||
"user": "Bruker"
|
||||
},
|
||||
"linkModeDescription": "Alle med denne lenken kan bli med, ingen konto kreves.",
|
||||
"userModeDescription": "Del med en bestemt bruker som allerede har tilgang til denne verten. Hvis de ikke har tilgang ennå, del verten med dem først eller bruk en lenke i stedet. Når økten er delt, vises den i deres Tilkoblinger-fane.",
|
||||
"permissionLevel": {
|
||||
"label": "Tillatelsesnivå",
|
||||
"readOnly": "Skrivebeskyttet",
|
||||
"readOnlyDescription": "Kan se økten direkte, men kan ikke skrive eller samhandle.",
|
||||
"readWrite": "Lese-skrive",
|
||||
"readWriteDescription": "Kan skrive og samhandle med økten akkurat som eieren."
|
||||
},
|
||||
"expiryLabel": "Utløpsdato for lenke",
|
||||
"createLinkButton": "Opprett lenke",
|
||||
"createShareButton": "Del med brukeren",
|
||||
"searchUsersPlaceholder": "Søk etter brukere...",
|
||||
"noUsersFound": "Ingen brukere funnet",
|
||||
"linkCreated": "Delingslenke opprettet",
|
||||
"linkCopied": "Lenke kopiert til utklippstavlen",
|
||||
"copyLink": "Kopier lenke",
|
||||
"shareCreated": "Økten er delt. Den vil vises i Tilkoblinger-fanen deres.",
|
||||
"shareFailed": "Kunne ikke opprette delingen",
|
||||
"userLacksHostAccess": "Den brukeren har ikke tilgang til denne verten ennå. Del verten med dem først, eller bruk en lenke i stedet.",
|
||||
"activeShares": "Aktive aksjer",
|
||||
"noActiveShares": "Ingen aktive delinger for denne økten",
|
||||
"revoke": "Tilbakekalling",
|
||||
"revokeConfirmTitle": "Tilbakekalle denne delingen?",
|
||||
"revokeConfirmDescription": "Alle som bruker denne delingen vil miste tilgangen umiddelbart.",
|
||||
"revoked": "Deling tilbakekalt",
|
||||
"revokeFailed": "Kunne ikke tilbakekalle delingen",
|
||||
"joinCount": "{{count}} bli med",
|
||||
"joinCount_other": "{{count}} blir med",
|
||||
"expiresAt": "Utløper {{date}}",
|
||||
"linkShareBadge": "Lenke",
|
||||
"userShareBadge": "Bruker: {{username}}",
|
||||
"loadSharesFailed": "Kunne ikke laste inn aktive delinger"
|
||||
},
|
||||
"guacamole": {
|
||||
"connecting": "Kobler til {{type}} økt...",
|
||||
@@ -1436,6 +1559,9 @@
|
||||
"reconnect": "Koble til igjen",
|
||||
"retry": "Prøv på nytt",
|
||||
"guacdUnavailable": "Ekstern skrivebordstjeneste (guacd) er ikke tilgjengelig. Sørg for at guacd kjører, er tilgjengelig og riktig konfigurert i administratorinnstillingene.",
|
||||
"credentialPromptTitle": "Skriv inn RDP-legitimasjon",
|
||||
"credentialPromptDescription": "Denne verten er satt til å be om påloggingsinformasjon ved tilkobling. Disse brukes kun for denne økten og lagres ikke.",
|
||||
"connect": "Koble til",
|
||||
"ctrlAltDel": "Ctrl+Alt+Del",
|
||||
"toolbar": {
|
||||
"ctrlAltDel": "Ctrl+Alt+Del",
|
||||
@@ -1461,7 +1587,9 @@
|
||||
"reconnect": "Koble til økten på nytt",
|
||||
"collapse": "Skjul verktøylinjen",
|
||||
"expand": "Utvid verktøylinjen",
|
||||
"dragHandle": "Dra for å flytte"
|
||||
"dragHandle": "Dra for å flytte",
|
||||
"switchToTrackpad": "Bytt til styreflatemodus (dra for å flytte markøren, trykk for å klikke)",
|
||||
"switchToTouch": "Bytt til berøringsmodus (trykk direkte der du vil klikke)"
|
||||
}
|
||||
},
|
||||
"terminal": {
|
||||
@@ -1508,6 +1636,11 @@
|
||||
"totpRequired": "Tofaktorautentisering kreves",
|
||||
"totpCodeLabel": "Verifiseringskode",
|
||||
"totpVerify": "Verifisere",
|
||||
"mfaPromptRequired": "Autentisering kreves",
|
||||
"mfaPushRequired": "Push-autentisering kreves",
|
||||
"mfaMenuPlaceholder": "Skriv inn svaret ditt",
|
||||
"mfaWaitingApproval": "Venter på godkjenning på enheten din ...",
|
||||
"mfaSendRequest": "Send forespørsel",
|
||||
"warpgateAuthRequired": "Warpgate-autentisering kreves",
|
||||
"warpgateSecurityKey": "Sikkerhetsnøkkel",
|
||||
"warpgateAuthUrl": "Autentiserings-URL",
|
||||
@@ -2277,7 +2410,8 @@
|
||||
"resetCodeRateLimited": "Frekvens begrenset: For mange bekreftelsesforsøk. Prøv igjen senere.",
|
||||
"resetCodeRateLimitedWithTime": "Frekvens begrenset: For mange bekreftelsesforsøk. Vent {{time}} sekunder før du prøver på nytt.",
|
||||
"authTokenSaveFailed": "Kunne ikke lagre autentiseringstokenet",
|
||||
"failedToLoadServer": "Kunne ikke laste inn serveren"
|
||||
"failedToLoadServer": "Kunne ikke laste inn serveren",
|
||||
"remoteServerRequired": "Ekstern server kreves. Koble til en ekstern server i Innstillinger for å bruke denne tilkoblingstypen."
|
||||
},
|
||||
"messages": {
|
||||
"registrationDisabled": "Registrering av ny konto er for øyeblikket deaktivert av en administrator. Vennligst logg inn eller kontakt en administrator.",
|
||||
@@ -2644,6 +2778,17 @@
|
||||
"sslSaveFailed": "Kunne ikke lagre SSL-innstillingene",
|
||||
"sslRequiresDomain": "Domene og e-post er obligatorisk",
|
||||
"sslInfoNote": "Etter at du har utstedt et sertifikat, aktiver SSL i miljøvariablene dine (ENABLE_SSL=true) og start Termix på nytt.",
|
||||
"sslManualOption": "Manual (last opp sertifikat)",
|
||||
"sslManualCert": "Sertifikat (PEM)",
|
||||
"sslManualCertPlaceholder": "-----STARTSERTIFIKAT-----",
|
||||
"sslManualKey": "Privat nøkkel (PEM)",
|
||||
"sslManualKeyPlaceholder": "-----START PRIVAT NØKKEL-----",
|
||||
"sslManualDesc": "Lim inn ditt eksisterende sertifikat og din private nøkkel, inkludert en fullstendig kjede hvis det kreves av CA-en din.",
|
||||
"sslManualUpload": "Last opp og installer sertifikat",
|
||||
"sslManualUploadLoading": "Laster opp sertifikat...",
|
||||
"sslManualUploadSuccess": "Sertifikatet er lastet opp og installert",
|
||||
"sslManualUploadFailed": "Opplasting av sertifikat mislyktes",
|
||||
"sslManualRequiresFields": "Sertifikat og privat nøkkel kreves",
|
||||
"auditLogTotal": "{{total}} totalt antall oppføringer",
|
||||
"auditLogEmpty": "Ingen oppføringer i revisjonsloggen funnet",
|
||||
"auditLogSuccess": "Suksess",
|
||||
@@ -2672,6 +2817,12 @@
|
||||
"commandHistoryEnabled": "Kommandohistorikk",
|
||||
"commandHistoryEnabledDesc": "Tillat opptak av kommandohistorikk. Når den er deaktivert, lagres ikke historikken uavhengig av innstillinger per vert.",
|
||||
"updateCommandHistoryFailed": "Kunne ikke oppdatere innstillingen for kommandohistorikk",
|
||||
"analyticsEnabled": "Del anonym bruksstatistikk",
|
||||
"analyticsEnabledDesc": "Sender en anonym daglig telling av brukere, verter og funksjonsbruk for å forbedre Termix. Ingen personopplysninger eller tilkoblingsdetaljer inkluderes.",
|
||||
"updateAnalyticsFailed": "Kunne ikke oppdatere analyseinnstillingen",
|
||||
"sessionSharingGloballyEnabled": "Tillat øktdeling",
|
||||
"sessionSharingGloballyEnabledDesc": "Tillat deling av Live Terminal-, RDP-, VNC- og Telnet-økter på tvers av hele instansen. Overstyrer alle delingsalternativer per vert når de er deaktivert.",
|
||||
"updateSessionSharingFailed": "Kunne ikke oppdatere innstillingen for deling av økt",
|
||||
"sessionTimeout": "Tidsavbrudd for økt",
|
||||
"hours": "timer",
|
||||
"sessionTimeoutRange": "Min. 1 t · Maks. 720 t",
|
||||
@@ -3119,6 +3270,47 @@
|
||||
"executionSuccess": "Suksess",
|
||||
"executionFailed": "Mislyktes"
|
||||
},
|
||||
"keybindings": {
|
||||
"title": "Tastatursnarveier",
|
||||
"description": "Tilpass snarveier for terminalkopiering, liming og kontroll, eller bind taster for å sende tekst eller kjøre et tekstutdrag.",
|
||||
"defaultsHeading": "Innebygde snarveier",
|
||||
"customHeading": "Tilpassede snarveier",
|
||||
"addBinding": "Legg til snarvei",
|
||||
"addBindingTitle": "Legg til snarvei",
|
||||
"editBindingTitle": "Rediger snarvei",
|
||||
"loading": "Laster inn...",
|
||||
"noCustomBindings": "Ingen egendefinerte snarveier ennå",
|
||||
"defaultBadge": "Misligholde",
|
||||
"customizedBadge": "Tilpasset",
|
||||
"customize": "Tilpass",
|
||||
"resetToDefault": "Tilbakestill til standard",
|
||||
"resetAllToDefaults": "Tilbakestill alle til standardinnstillinger",
|
||||
"close": "Lukke",
|
||||
"cancel": "Kansellere",
|
||||
"saveBinding": "Lagre snarvei",
|
||||
"saveError": "Kunne ikke lagre hurtigtaster",
|
||||
"pressKeysToRecord": "Tastekombinasjon",
|
||||
"pressKeysPlaceholder": "Klikk og trykk på tastene",
|
||||
"recording": "Trykk på tastene...",
|
||||
"comboRequiredError": "Trykk først på en tastekombinasjon",
|
||||
"textRequiredError": "Skriv inn teksten som skal sendes",
|
||||
"controlCodeRequiredError": "Skriv inn én bokstav for kontrollkoden",
|
||||
"snippetRequiredError": "Velg et utdrag",
|
||||
"conflictWarning": "Denne kombinasjonen er allerede bundet til {{combo}}. Lagring vil få begge til å aktiveres.",
|
||||
"actionLabel": "Handling",
|
||||
"actionCopy": "Kopier valg",
|
||||
"actionPaste": "Lim inn",
|
||||
"actionSendControlCode": "Send Ctrl+bokstavsignal",
|
||||
"actionSendText": "Send tekstmelding",
|
||||
"actionRunSnippet": "Kjør eksisterende kodebit",
|
||||
"controlCodeLabel": "Brev",
|
||||
"textLabel": "Tekst som skal sendes",
|
||||
"appendEnterLabel": "Trykk Enter etter sending",
|
||||
"snippetLabel": "Utdrag",
|
||||
"selectSnippetPlaceholder": "Velg et utdrag",
|
||||
"orphanedSnippetWarning": "utdraget ikke funnet",
|
||||
"clipboardPermissionNote": "Kan be om tillatelse til utklippstavlen ved første gangs bruk i noen nettlesere."
|
||||
},
|
||||
"userProfile": {
|
||||
"donateTitle": "Hold Termix i live",
|
||||
"donateDescription": "Termix er gratis, selvhostet og bygget av bare noen få personer på fritiden. Hvis det har spart deg tid eller penger, bidrar en kryptodonasjon til å holde det gående.",
|
||||
@@ -3134,6 +3326,7 @@
|
||||
"sectionAppearance": "Utseende",
|
||||
"sectionSecurity": "Sikkerhet",
|
||||
"sectionApiKeys": "API-nøkler",
|
||||
"sectionData": "Data",
|
||||
"sectionC2sTunnels": "C2S-tunneler",
|
||||
"usernameLabel": "Brukernavn",
|
||||
"roleLabel": "Rolle",
|
||||
@@ -3162,6 +3355,9 @@
|
||||
"settingsTerminal": "Terminal",
|
||||
"commandAutocomplete": "Kommando Autofullfør",
|
||||
"commandAutocompleteDesc": "Vis autofullføring mens du skriver",
|
||||
"keyboardShortcuts": "Tastatursnarveier",
|
||||
"keyboardShortcutsDescription": "Tilpass snarveier for terminalkopiering, -liming og -kommandoer",
|
||||
"manageShortcuts": "Administrer",
|
||||
"terminalLinkBehavior": "Klikk på terminallenken",
|
||||
"terminalLinkBehaviorDesc": "Standardoppførsel når du klikker på lenker i terminalen",
|
||||
"historyTracking": "Historikksporing",
|
||||
@@ -3228,6 +3424,22 @@
|
||||
"apiKeyUsageHint": "Ta med nøkkelen din i",
|
||||
"apiKeyUsageHintHeader": "overskrift.",
|
||||
"apiKeyPermissionsHint": "Nøkler arver tillatelsene til den opprettende brukeren.",
|
||||
"exportData": "Eksporter dataene mine",
|
||||
"exportDataDesc": "Last ned en sikkerhetskopi av vertene, påloggingsinformasjonen og innstillingene dine for å overføre dem til en annen enhet.",
|
||||
"export": "Eksport",
|
||||
"exporting": "Eksporterer...",
|
||||
"importData": "Importer dataene mine",
|
||||
"importDataDesc": "Gjenopprett verter, påloggingsinformasjon og innstillinger fra en .sqlite-sikkerhetskopifil",
|
||||
"importDataSelected": "Valgt: {{name}}",
|
||||
"selectFile": "Velg fil",
|
||||
"changeFile": "Endre",
|
||||
"import": "Import",
|
||||
"importing": "Importerer...",
|
||||
"exportSuccess": "Dataene ble eksportert",
|
||||
"exportFailed": "Dataeksport mislyktes",
|
||||
"importSelectFile": "Vennligst velg en fil først",
|
||||
"importCompleted": "Import fullført: {{total}} elementer importert, {{skipped}} hoppet over",
|
||||
"importFailed": "Importen mislyktes: {{error}}",
|
||||
"roleUser": "Bruker",
|
||||
"authMethodDual": "Dobbel autentisering",
|
||||
"authMethodOidc": "OIDC",
|
||||
@@ -3379,6 +3591,7 @@
|
||||
"pageUp": "PgUp",
|
||||
"pageDown": "PgDn",
|
||||
"delete": "Del",
|
||||
"paste": "Lim inn",
|
||||
"editQuickKeys": "Rediger hurtigtaster",
|
||||
"quickKeysTitle": "Hurtigtaster",
|
||||
"quickKeysDesc": "Trykk på × for å fjerne. Støtter opptil 8 tegn.",
|
||||
|
||||
Reference in New Issue
Block a user