mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-11-01 08:05:23 +00:00
release-2.6.0 (#1085)
* fix: general bug fixes * fix: general qol additions * ci(deps): bump actions/setup-node in the github-actions group (#1068) Bumps the github-actions group with 1 update: [actions/setup-node](https://github.com/actions/setup-node). Updates `actions/setup-node` from 6 to 7 - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump the dev-patch-updates group with 28 updates (#1069) Bumps the dev-patch-updates group with 28 updates: | Package | From | To | | --- | --- | --- | | [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) | `2.5.2` | `2.5.4` | | [@codemirror/view](https://github.com/codemirror/view) | `6.43.5` | `6.43.6` | | [@radix-ui/react-accordion](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/accordion) | `1.2.15` | `1.2.17` | | [@radix-ui/react-alert-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/alert-dialog) | `1.1.18` | `1.1.20` | | [@radix-ui/react-checkbox](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/checkbox) | `1.3.6` | `1.3.8` | | [@radix-ui/react-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dialog) | `1.1.18` | `1.1.20` | | [@radix-ui/react-dropdown-menu](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dropdown-menu) | `2.1.19` | `2.1.21` | | [@radix-ui/react-label](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/label) | `2.1.11` | `2.1.12` | | [@radix-ui/react-popover](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/popover) | `1.1.18` | `1.1.20` | | [@radix-ui/react-progress](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/progress) | `1.1.11` | `1.1.13` | | [@radix-ui/react-scroll-area](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/scroll-area) | `1.2.13` | `1.2.15` | | [@radix-ui/react-select](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/select) | `2.3.2` | `2.3.4` | | [@radix-ui/react-separator](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/separator) | `1.1.11` | `1.1.12` | | [@radix-ui/react-slider](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/slider) | `1.4.2` | `1.4.4` | | [@radix-ui/react-switch](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/switch) | `1.3.2` | `1.3.4` | | [@radix-ui/react-tabs](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tabs) | `1.1.16` | `1.1.18` | | [@radix-ui/react-tooltip](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tooltip) | `1.2.11` | `1.2.13` | | [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite) | `4.3.2` | `4.3.3` | | [@uiw/codemirror-extensions-langs](https://github.com/uiwjs/react-codemirror) | `4.25.10` | `4.25.11` | | [@uiw/codemirror-theme-github](https://github.com/uiwjs/react-codemirror) | `4.25.10` | `4.25.11` | | [@uiw/react-codemirror](https://github.com/uiwjs/react-codemirror) | `4.25.10` | `4.25.11` | | [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) | `4.1.9` | `4.1.10` | | [@vitest/ui](https://github.com/vitest-dev/vitest/tree/HEAD/packages/ui) | `4.1.9` | `4.1.10` | | [i18next](https://github.com/i18next/i18next) | `26.3.4` | `26.3.6` | | [radix-ui](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/radix-ui) | `1.6.1` | `1.6.3` | | [react-i18next](https://github.com/i18next/react-i18next) | `17.0.8` | `17.0.10` | | [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) | `4.3.2` | `4.3.3` | | [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.9` | `4.1.10` | Updates `@biomejs/biome` from 2.5.2 to 2.5.4 - [Release notes](https://github.com/biomejs/biome/releases) - [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md) - [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.4/packages/@biomejs/biome) Updates `@codemirror/view` from 6.43.5 to 6.43.6 - [Changelog](https://github.com/codemirror/view/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/view/commits) Updates `@radix-ui/react-accordion` from 1.2.15 to 1.2.17 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/accordion/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/accordion) Updates `@radix-ui/react-alert-dialog` from 1.1.18 to 1.1.20 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/alert-dialog/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/alert-dialog) Updates `@radix-ui/react-checkbox` from 1.3.6 to 1.3.8 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/checkbox/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/checkbox) Updates `@radix-ui/react-dialog` from 1.1.18 to 1.1.20 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dialog/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dialog) Updates `@radix-ui/react-dropdown-menu` from 2.1.19 to 2.1.21 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dropdown-menu/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dropdown-menu) Updates `@radix-ui/react-label` from 2.1.11 to 2.1.12 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/label/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/label) Updates `@radix-ui/react-popover` from 1.1.18 to 1.1.20 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/popover/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/popover) Updates `@radix-ui/react-progress` from 1.1.11 to 1.1.13 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/progress/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/progress) Updates `@radix-ui/react-scroll-area` from 1.2.13 to 1.2.15 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/scroll-area/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/scroll-area) Updates `@radix-ui/react-select` from 2.3.2 to 2.3.4 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/select/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/select) Updates `@radix-ui/react-separator` from 1.1.11 to 1.1.12 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/separator/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/separator) Updates `@radix-ui/react-slider` from 1.4.2 to 1.4.4 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/slider/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/slider) Updates `@radix-ui/react-switch` from 1.3.2 to 1.3.4 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/switch/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/switch) Updates `@radix-ui/react-tabs` from 1.1.16 to 1.1.18 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tabs/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tabs) Updates `@radix-ui/react-tooltip` from 1.2.11 to 1.2.13 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tooltip/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tooltip) Updates `@tailwindcss/vite` from 4.3.2 to 4.3.3 - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.3/packages/@tailwindcss-vite) Updates `@uiw/codemirror-extensions-langs` from 4.25.10 to 4.25.11 - [Release notes](https://github.com/uiwjs/react-codemirror/releases) - [Commits](https://github.com/uiwjs/react-codemirror/compare/v4.25.10...v4.25.11) Updates `@uiw/codemirror-theme-github` from 4.25.10 to 4.25.11 - [Release notes](https://github.com/uiwjs/react-codemirror/releases) - [Commits](https://github.com/uiwjs/react-codemirror/compare/v4.25.10...v4.25.11) Updates `@uiw/react-codemirror` from 4.25.10 to 4.25.11 - [Release notes](https://github.com/uiwjs/react-codemirror/releases) - [Commits](https://github.com/uiwjs/react-codemirror/compare/v4.25.10...v4.25.11) Updates `@vitest/coverage-v8` from 4.1.9 to 4.1.10 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/coverage-v8) Updates `@vitest/ui` from 4.1.9 to 4.1.10 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/ui) Updates `i18next` from 26.3.4 to 26.3.6 - [Release notes](https://github.com/i18next/i18next/releases) - [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next/compare/v26.3.4...v26.3.6) Updates `radix-ui` from 1.6.1 to 1.6.3 - [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/radix-ui/CHANGELOG.md) - [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/radix-ui) Updates `react-i18next` from 17.0.8 to 17.0.10 - [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/react-i18next/compare/v17.0.8...v17.0.10) Updates `tailwindcss` from 4.3.2 to 4.3.3 - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.3/packages/tailwindcss) Updates `vitest` from 4.1.9 to 4.1.10 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/vitest) --- updated-dependencies: - dependency-name: "@biomejs/biome" dependency-version: 2.5.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@codemirror/view" dependency-version: 6.43.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-accordion" dependency-version: 1.2.17 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-alert-dialog" dependency-version: 1.1.20 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-checkbox" dependency-version: 1.3.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-dialog" dependency-version: 1.1.20 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-dropdown-menu" dependency-version: 2.1.21 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-label" dependency-version: 2.1.12 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-popover" dependency-version: 1.1.20 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-progress" dependency-version: 1.1.13 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-scroll-area" dependency-version: 1.2.15 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-select" dependency-version: 2.3.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-separator" dependency-version: 1.1.12 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-slider" dependency-version: 1.4.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-switch" dependency-version: 1.3.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-tabs" dependency-version: 1.1.18 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@radix-ui/react-tooltip" dependency-version: 1.2.13 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@tailwindcss/vite" dependency-version: 4.3.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@uiw/codemirror-extensions-langs" dependency-version: 4.25.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@uiw/codemirror-theme-github" dependency-version: 4.25.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@uiw/react-codemirror" dependency-version: 4.25.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@vitest/coverage-v8" dependency-version: 4.1.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@vitest/ui" dependency-version: 4.1.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: i18next dependency-version: 26.3.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: radix-ui dependency-version: 1.6.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: react-i18next dependency-version: 17.0.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: tailwindcss dependency-version: 4.3.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: vitest dependency-version: 4.1.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump ws in the prod-patch-updates group (#1071) Bumps the prod-patch-updates group with 1 update: [ws](https://github.com/websockets/ws). Updates `ws` from 8.21.0 to 8.21.1 - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/8.21.0...8.21.1) --- updated-dependencies: - dependency-name: ws dependency-version: 8.21.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump the major-updates group with 2 updates (#1072) Bumps the major-updates group with 2 updates: [nanoid](https://github.com/ai/nanoid) and [typescript](https://github.com/microsoft/TypeScript). Updates `nanoid` from 5.1.16 to 6.0.0 - [Release notes](https://github.com/ai/nanoid/releases) - [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md) - [Commits](https://github.com/ai/nanoid/compare/5.1.16...6.0.0) Updates `typescript` from 6.0.3 to 7.0.2 - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Commits](https://github.com/microsoft/TypeScript/commits) --- updated-dependencies: - dependency-name: nanoid dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-updates - dependency-name: typescript dependency-version: 7.0.2 dependency-type: direct:development update-type: version-update:semver-major dependency-group: major-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: general qol additions and new analytics/telemetrics feature * fix: incorrect version sent to posthog * feat: add multiplayer/shared sessions for terminal and guacd * feat: rework Electron desktop app to run standalone-first with optional two-way sync to a remote Termix server * Fix Guacamole tab visibility lifecycle (#1074) Co-authored-by: default-student <default-student@github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix(alerts): send channel config as object payload instead of JSON string (#1075) * fix tmux-monitor tailscale issue (#1076) * Initial plan * fix(tmux-monitor): explicitly handle tailscale auth in PanePreview hostConfig For Tailscale-auth hosts the pane-preview attach path was building the Terminal hostConfig with only the generic spread of host fields. This could omit or mismap auth-critical details and trigger a plain TCP/SSH reachability path that doesn't work with Tailscale-only SSH endpoints. The fix branches on `host.authType === "tailscale"` and: - Carries `authType: "tailscale"` explicitly so the backend always selects the Tailscale-aware PTY path regardless of how the host object evolves. - Derives `port` from `host.sshPort ?? host.port` so Tailscale SSH endpoints on a non-default SSH port are reached correctly. - Leaves all non-tailscale auth types on the unchanged code path. Reattach (bumping instanceId + attachNonce) continues to work because terminalHostConfig is recomputed on every render with the latest instanceIdRef.current value. * refactor(tmux-monitor): simplify tailscale port logic with extracted variable Address code review feedback: extract resolvedPort into a local variable to avoid the duplicated `host.sshPort ?? host.port` expression that was assigned to both `port` and `sshPort`. Restructure as an if/else block instead of an IIFE for readability. * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * chore: run prettier * chore: update beta release text * fix: cant update credential of an RDP host * feat: add custom key shortcuts * feat: add support for MFA over SSH * fix: Invalid websocket frame causing code 10006 crash triggering restart loop * fix(net): correct SSRF blocklist false-positive blocking all outbound IPv4 (#1079) * fix: correct IPv4-mapped-IPv6 blocklist entry blocking all outbound IPv4 ::ffff:0:0/96 in the IPv6 blocklist matches every IPv4 address once mapped, since Node's BlockList compares addresses in their mapped form internally regardless of the declared family. This caused safeOutboundFetch to reject all IPv4-resolved destinations as private, breaking outbound requests (e.g. ntfy/webhook notifications) whenever DNS resolved to IPv4. Replaced with individual mapped ranges mirroring the existing IPv4 blocklist. * test: cover isBlockedAddress and link the Node BlockList citation Exports isBlockedAddress so its family-crossing behavior around IPv4-mapped-IPv6 addresses can actually be asserted, instead of relying on manual container debugging to notice a regression. Also swaps the prior "Node's BlockList compares addresses in mapped form" comment for one citing the documented example in the Node docs (https://nodejs.org/api/net.html#class-netblocklist), since that behavior isn't otherwise obvious from the addSubnet/check call sites. Related: Termix-SSH/Support#1024 * refactor: derive IPv6 mirror from IPv4 list, split DNS error messages Two follow-ups from review: - The IPv6 blocklist previously hand-duplicated each IPv4 range as its IPv4-mapped-IPv6 equivalent. Nothing enforced the two stayed in sync, which is exactly how the original bug (a mismatched ::ffff:0:0/96 entry blocking all IPv4) was introduced in the first place. Now derived from a single blockedIpv4Ranges list in one loop. - The connect.lookup hook threw the same "Private destinations are not allowed" for both an empty DNS result and an actually-blocked address. An empty result is a resolution failure, not a privacy decision, and conflating the two is the same kind of opaque-error problem that made this bug slow to diagnose in production. Split into distinct messages. Also extracted the lookup hook itself (createDnsLookupHook) so it can be unit-tested against a fake resolver directly, instead of only through a real fetch()/Agent call — the bug lived entirely in this callback, and undici wraps any error thrown here as a generic "fetch failed" TypeError, which is why isolating it matters for testability. --------- Co-authored-by: brennanneoh <497569+brennanneoh@users.noreply.github.com> * fix(ssh): do not offer chacha20-poly1305 without the native ssh2 binding (#1081) The availability probe treated a working OpenSSL "chacha20" cipher as proof that chacha20-poly1305@openssh.com is usable. It is not: ssh2 pure-JS chacha20-poly1305 corrupts the transport, so the peer aborts the KEX ("incomplete message [preauth]") and the connection times out. Easy to hit on jump-host connections whose target sshd negotiates chacha20-poly1305 first. Only trust the native binding (sshcrypto.node); otherwise leave the cipher disabled so filterCiphers() drops it and AES-GCM is negotiated instead. Co-authored-by: XtraLarge <> * fix: add Swiss German server layout (#1078) * chore: update release notes * feat: continue improving desktop app 2-way sync with logic fixes and a migration dialog * fix: dekstop app showing auth form without syncing * feat: create desktop auto sessions for existing setups * feat: add electron backend killing * fix: electron login and session related bugs and updated readme for v2.6.0 * chore: finalize release notes * fix: click to expand hosts including extra bottom margin * fix: desktop auth modal failing to log users in * fix: desktop app failing to sync * fix: reverse proxy causing sync error * chore: lint, format, and bump version to 2.6.0 * chore: sync Crowdin translations for 2.6.0 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: L.H. <117188168+default-student@users.noreply.github.com> Co-authored-by: default-student <default-student@github.com> Co-authored-by: Brad Baker <xyzulu@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Brennan Neoh <brennanneoh@users.noreply.github.com> Co-authored-by: brennanneoh <497569+brennanneoh@users.noreply.github.com> Co-authored-by: XtraLarge <eMail@WilliWerres.de> Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
This commit is contained in:
232 files changed
+50585
-32016
No files matched your search
@@ -389,6 +389,45 @@
|
||||
"noSavedServers": "Geen opgeslagen servers",
|
||||
"removeServer": "Verwijderen"
|
||||
},
|
||||
"migrationNotice": {
|
||||
"title": "Termix Desktop draait nu zelfstandig.",
|
||||
"body1": "Deze app maakte voorheen rechtstreeks verbinding met uw Termix-server. Hij is herwerkt om volledig zelfstandig te werken, waarbij hosts en inloggegevens lokaal worden opgeslagen, zodat hij ook offline blijft functioneren. Tweewegsynchronisatie met een zelfgehoste Termix-server is nu optioneel.",
|
||||
"body2": "Uw bestaande hosts en inloggegevens bevinden zich nog steeds op {{url}}. Schakel externe synchronisatie in en maak opnieuw verbinding met die server om ze te herstellen en beide in de toekomst gesynchroniseerd te houden.",
|
||||
"dismiss": "Nu niet",
|
||||
"setUpSync": "Externe synchronisatie instellen"
|
||||
},
|
||||
"remoteSync": {
|
||||
"title": "Synchronisatie op afstand",
|
||||
"description": "U kunt deze desktop-app optioneel verbinden met een zelfgehoste Termix-server om uw hosts, inloggegevens en codefragmenten op verschillende apparaten te synchroniseren. De app werkt altijd volledig offline, ongeacht of u verbinding maakt of niet.",
|
||||
"notConnected": "Niet verbonden",
|
||||
"connected": "Aangesloten",
|
||||
"connectedTo": "Verbonden met {{url}}",
|
||||
"lastSynced": "Laatst gesynchroniseerd {{time}}",
|
||||
"neverSynced": "Nooit gesynchroniseerd",
|
||||
"syncError": "Synchronisatiefout: {{message}}",
|
||||
"needsReauth": "Aanmelden verlopen",
|
||||
"connectButton": "Verbinding maken met de server",
|
||||
"disconnectButton": "Verbinding verbreken",
|
||||
"syncNowButton": "Nu synchroniseren",
|
||||
"syncing": "Synchroniseren...",
|
||||
"serverUrl": "Server-URL",
|
||||
"enterServerUrl": "Voer een server-URL in.",
|
||||
"mustIncludeProtocol": "De server-URL moet beginnen met http:// of https://",
|
||||
"connectionTestFailed": "Er kon geen Termix-server worden bereikt op die URL.",
|
||||
"allowInvalidCertificate": "Ongeldig certificaat toestaan",
|
||||
"allowInvalidCertificateDesc": "Uitsluitend te gebruiken voor vertrouwde, zelfgehoste servers met zelfondertekende certificaten of IP-adrescertificaten.",
|
||||
"savedServers": "Opgeslagen servers",
|
||||
"removeServer": "Verwijderen",
|
||||
"continueButton": "Doorgaan",
|
||||
"cancelButton": "Annuleren",
|
||||
"signInTitle": "Meld je aan bij {{url}}",
|
||||
"originTitle": "Verbindingsoorsprong",
|
||||
"originDescription": "Kies de standaardlocatie voor SSH-verbindingen. Deze instelling kan per host worden gewijzigd.",
|
||||
"originLocal": "Dit apparaat (lokaal netwerk)",
|
||||
"originRemote": "Externe server",
|
||||
"bannerReconnect": "Opnieuw verbinding maken",
|
||||
"bannerMessage": "Externe synchronisatie vereist herverificatie."
|
||||
},
|
||||
"versionCheck": {
|
||||
"error": "Versiecontrolefout",
|
||||
"checkFailed": "Controleren op updates is mislukt.",
|
||||
@@ -602,6 +641,7 @@
|
||||
"overrideCredentialUsername": "Gebruikersnaam voor het overschrijven van inloggegevens",
|
||||
"overrideCredentialUsernameDesc": "Gebruik de hierboven opgegeven gebruikersnaam in plaats van de gebruikersnaam van de inloggegevens.",
|
||||
"oidcUsernameHint": "Gebruik $oidc.preferred_username om uw OIDC-inlognaam te vervangen.",
|
||||
"tailscaleUsernameHint": "Dit moet een Unix-gebruiker zijn die aan uw Tailscale-identiteit is toegekend in de SSH-toegangsregel van het tailnet, niet per se root.",
|
||||
"jumpHostChain": "Spring naar de hostketen",
|
||||
"portKnocking": "Havenkloppen",
|
||||
"addKnock": "Poort toevoegen",
|
||||
@@ -650,6 +690,11 @@
|
||||
"delayAfterMs": "Vertraging na (ms)",
|
||||
"useSocks5Proxy": "Gebruik een SOCKS5-proxy",
|
||||
"useSocks5ProxyDesc": "De verbinding wordt via een proxyserver geleid.",
|
||||
"connectionOrigin": "Verbindingsoorsprong",
|
||||
"connectionOriginDesc": "Waar de SSH-verbinding van deze host vandaan komt. Overschrijft de algemene standaardinstelling van de desktop-app.",
|
||||
"connectionOriginDefault": "Gebruik de standaardinstelling",
|
||||
"connectionOriginLocal": "Dit apparaat (lokaal netwerk)",
|
||||
"connectionOriginRemote": "Externe server",
|
||||
"proxyHost": "Proxy-host",
|
||||
"proxyPort": "Proxy-poort",
|
||||
"proxyUsername": "Proxy-gebruikersnaam",
|
||||
@@ -762,6 +807,14 @@
|
||||
"customThemeBrightCyan": "Helder cyaan",
|
||||
"customThemeBrightWhite": "Helder wit",
|
||||
"customThemeResetTooltip": "Terugzetten naar standaardinstellingen",
|
||||
"savedThemesLabel": "Opgeslagen thema's",
|
||||
"saveAsGlobalTheme": "Opslaan als globaal thema",
|
||||
"saveGlobalThemeNamePrompt": "Geef dit thema een naam.",
|
||||
"saveGlobalThemeSuccess": "Thema opgeslagen",
|
||||
"saveGlobalThemeError": "Het opslaan van het thema is mislukt.",
|
||||
"applyGlobalThemeTooltip": "Pas dit thema toe",
|
||||
"deleteGlobalThemeTooltip": "Verwijder dit thema",
|
||||
"noSavedThemes": "Nog geen opgeslagen thema's",
|
||||
"syntaxHighlightingLabel": "Syntaxmarkering",
|
||||
"syntaxHighlightingDesc": "Kleur de terminaluitvoer (fouten, paden, IP-adressen, tijdstempels) in.",
|
||||
"syntaxHighlightingCategories": "Markeer categorieën",
|
||||
@@ -791,6 +844,8 @@
|
||||
"enableAutoTmuxDesc": "Een tmux-sessie automatisch starten of eraan koppelen",
|
||||
"enableSessionLogging": "Sessieregistratie",
|
||||
"enableSessionLoggingDesc": "Sla de uitvoer van de terminalsessie op voor latere beoordeling.",
|
||||
"allowSessionSharing": "Sessiedeling toestaan",
|
||||
"allowSessionSharingDesc": "Sta toe dat live sessies op deze host via een link of met andere gebruikers worden gedeeld.",
|
||||
"enableCommandHistory": "Commandogeschiedenis",
|
||||
"enableCommandHistoryDesc": "Sla de commando's die in deze terminal worden uitgevoerd op voor de geschiedenis en automatisch aanvullen.",
|
||||
"linkClickBehaviorLabel": "Klikgedrag op links",
|
||||
@@ -895,6 +950,7 @@
|
||||
"proxmoxResultImported": "{{count}} geïmporteerd",
|
||||
"proxmoxResultUpdated": "{{count}} bijgewerkt",
|
||||
"proxmoxResultFailed": "{{count}} mislukt",
|
||||
"proxmoxResultSkippedNoIp": "{{count}} overgeslagen (geen IP-adres gevonden)",
|
||||
"proxmoxImportComplete": "Proxmox-import voltooid: {{summary}}",
|
||||
"proxmoxDiscoveryFailed": "Ontdekking mislukt",
|
||||
"proxmoxImportFailed": "Importeren mislukt",
|
||||
@@ -961,6 +1017,9 @@
|
||||
"failedToSaveCredential": "Het opslaan van de inloggegevens is mislukt.",
|
||||
"credentialNameRequired": "Voer een naam in voor de legitimatie.",
|
||||
"credentialAuthRequired": "Voeg een wachtwoord, een SSH-sleutel of beide toe.",
|
||||
"createCredentialFromHostBtn": "Een inloggegeven aanmaken",
|
||||
"createCredentialFromHostTitle": "Maak een inloggegeven aan vanuit de host.",
|
||||
"createCredentialFromHostDesc": "Maak een herbruikbare, deelbare inloggegevensvermelding aan die vooraf is ingevuld met de huidige gebruikersnaam, het wachtwoord en/of de SSH-sleutel van deze host.",
|
||||
"backToHosts": "Terug naar hosts",
|
||||
"backToCredentials": "Terug naar inloggegevens",
|
||||
"pinned": "Vastgepind",
|
||||
@@ -1000,6 +1059,9 @@
|
||||
"folderNestingHint": "Gebruik / om niveaus te scheiden en geneste mappen te maken.",
|
||||
"folderColor": "Kleur",
|
||||
"folderIcon": "Icon",
|
||||
"folderCredential": "Referentie",
|
||||
"folderCredentialNone": "Geen inloggegevens toegewezen",
|
||||
"folderCredentialHint": "Hosts in deze map die gebruikmaken van authenticatie met \"Opgeslagen referenties\" zonder hun eigen referenties te hebben geselecteerd, zullen deze referenties overnemen.",
|
||||
"folderPreview": "Voorbeeld",
|
||||
"folderNameFallback": "Naamloze map",
|
||||
"createFolderButton": "Map aanmaken",
|
||||
@@ -1181,6 +1243,10 @@
|
||||
"filterTagsGroup": "Tags",
|
||||
"shareHost": "Deel host",
|
||||
"shareHostTitle": "Delen: {{name}}",
|
||||
"shareFolder": "Map delen",
|
||||
"shareFolderTitle": "Map delen: {{name}}",
|
||||
"folderSharedSuccessfully": "Gedeelde {{count}} host(s) in map",
|
||||
"failedToShareFolder": "Map delen mislukt",
|
||||
"sharing": {
|
||||
"loadError": "Het laden van de deelgegevens is mislukt. Probeer het opnieuw.",
|
||||
"shareWithSection": "Delen met",
|
||||
@@ -1221,6 +1287,7 @@
|
||||
"shareWithCount": "Delen ({{count}})",
|
||||
"currentAccess": "Huidige toegang",
|
||||
"noAccessEntries": "Deze host is nog niet gedeeld.",
|
||||
"folderShareSummary": "Gedeelde {{shared}} van {{total}} host(s) in deze map",
|
||||
"grantedBy": "Toegekend door",
|
||||
"expires": "Verloopt",
|
||||
"expired": "Verlopen",
|
||||
@@ -1242,6 +1309,8 @@
|
||||
"authMethod": "Authenticatiemethode",
|
||||
"authTypeDirect": "Direct",
|
||||
"authTypeCredential": "Referentie",
|
||||
"authTypeNone": "Geen",
|
||||
"authTypeNoneDesc": "Er worden geen inloggegevens opgeslagen. U wordt bij elke verbinding gevraagd om een gebruikersnaam en wachtwoord; deze worden niet bewaard.",
|
||||
"selectCredential": "Selecteer een certificaat...",
|
||||
"connectionSettings": "Verbindingsinstellingen",
|
||||
"displaySettings": "Weergave-instellingen",
|
||||
@@ -1259,6 +1328,7 @@
|
||||
"rdpPort": "RDP-poort",
|
||||
"username": "Gebruikersnaam",
|
||||
"password": "Wachtwoord",
|
||||
"passwordSaved": "Wachtwoord opgeslagen, typ om te wijzigen",
|
||||
"domain": "Domein",
|
||||
"securityMode": "Beveiligingsmodus",
|
||||
"colorDepth": "Kleurdiepte",
|
||||
@@ -1424,7 +1494,60 @@
|
||||
"expiresIn": "Verloopt over {{duration}}",
|
||||
"search": "Zoek naar verbanden...",
|
||||
"noSearchResults": "Er zijn geen resultaten gevonden die overeenkomen met uw zoekopdracht.",
|
||||
"rename": "Sessie hernoemen"
|
||||
"rename": "Sessie hernoemen",
|
||||
"sectionSharedWithMe": "Met mij gedeeld",
|
||||
"sharedBy": "Gedeeld door {{username}}",
|
||||
"join": "Meedoen",
|
||||
"sharedSessionLabel": "{{hostName}} (gedeeld)"
|
||||
},
|
||||
"sessionSharing": {
|
||||
"guestView": {
|
||||
"loading": "Verbinding maken met de gedeelde sessie...",
|
||||
"linkInvalid": "Deze deelbare link is ongeldig, verlopen of ingetrokken.",
|
||||
"rateLimited": "Te veel pogingen, probeer het over een tijdje opnieuw.",
|
||||
"sessionEnded": "Deze sessie is afgelopen.",
|
||||
"readOnlyBadge": "Alleen bekijken"
|
||||
},
|
||||
"modalTitle": "Deel sessie",
|
||||
"shareButton": "Deel",
|
||||
"notReadyToShare": "De sessie is nog niet klaar om te delen.",
|
||||
"modeTab": {
|
||||
"link": "Link",
|
||||
"user": "Gebruiker"
|
||||
},
|
||||
"linkModeDescription": "Iedereen met deze link kan deelnemen, een account is niet nodig.",
|
||||
"userModeDescription": "Deel de host met een specifieke gebruiker die er al toegang toe heeft. Als die gebruiker nog geen toegang heeft, deel de host dan eerst met hem of haar, of gebruik een link. Zodra de sessie is gedeeld, verschijnt deze in het tabblad 'Verbindingen' van de gebruiker.",
|
||||
"permissionLevel": {
|
||||
"label": "Toegangsniveau",
|
||||
"readOnly": "Alleen-lezen",
|
||||
"readOnlyDescription": "Je kunt de sessie live volgen, maar je kunt niet typen of interageren.",
|
||||
"readWrite": "Lezen en schrijven",
|
||||
"readWriteDescription": "Kan typen en interactie hebben met de sessie, net als de eigenaar."
|
||||
},
|
||||
"expiryLabel": "Link verloopt",
|
||||
"createLinkButton": "Link maken",
|
||||
"createShareButton": "Delen met gebruiker",
|
||||
"searchUsersPlaceholder": "Gebruikers doorzoeken...",
|
||||
"noUsersFound": "Geen gebruikers gevonden",
|
||||
"linkCreated": "Deellink aangemaakt",
|
||||
"linkCopied": "Link gekopieerd naar het klembord.",
|
||||
"copyLink": "Kopieer link",
|
||||
"shareCreated": "De sessie is gedeeld. Deze verschijnt in hun tabblad 'Verbindingen'.",
|
||||
"shareFailed": "Aanmaken van de share is mislukt",
|
||||
"userLacksHostAccess": "Die gebruiker heeft nog geen toegang tot deze host. Deel de host eerst met hem of haar, of gebruik een link.",
|
||||
"activeShares": "Actieve aandelen",
|
||||
"noActiveShares": "Geen actieve aandelen voor deze sessie.",
|
||||
"revoke": "Herroepen",
|
||||
"revokeConfirmTitle": "Wilt u dit aandeel intrekken?",
|
||||
"revokeConfirmDescription": "Iedereen die deze gedeelde map gebruikt, verliest onmiddellijk de toegang.",
|
||||
"revoked": "Aandeel ingetrokken",
|
||||
"revokeFailed": "Het intrekken van het aandeel is mislukt.",
|
||||
"joinCount": "{{count}} join",
|
||||
"joinCount_other": "{{count}} sluit zich aan",
|
||||
"expiresAt": "Verloopt {{date}}",
|
||||
"linkShareBadge": "Link",
|
||||
"userShareBadge": "Gebruiker: {{username}}",
|
||||
"loadSharesFailed": "Het laden van actieve aandelen is mislukt."
|
||||
},
|
||||
"guacamole": {
|
||||
"connecting": "Verbinding maken met de {{type}} sessie...",
|
||||
@@ -1436,6 +1559,9 @@
|
||||
"reconnect": "Opnieuw verbinding maken",
|
||||
"retry": "Opnieuw proberen",
|
||||
"guacdUnavailable": "De service voor extern bureaublad (guacd) is niet beschikbaar. Zorg ervoor dat guacd actief en toegankelijk is en correct is geconfigureerd in de beheerdersinstellingen.",
|
||||
"credentialPromptTitle": "Voer de RDP-inloggegevens in.",
|
||||
"credentialPromptDescription": "Deze host is zo ingesteld dat er bij het verbinden om inloggegevens wordt gevraagd. Deze worden alleen voor deze sessie gebruikt en niet opgeslagen.",
|
||||
"connect": "Verbinden",
|
||||
"ctrlAltDel": "Ctrl+Alt+Del",
|
||||
"toolbar": {
|
||||
"ctrlAltDel": "Ctrl+Alt+Del",
|
||||
@@ -1461,7 +1587,9 @@
|
||||
"reconnect": "Herverbindingssessie",
|
||||
"collapse": "Werkbalk inklappen",
|
||||
"expand": "Werkbalk uitklappen",
|
||||
"dragHandle": "Sleep om te verplaatsen"
|
||||
"dragHandle": "Sleep om te verplaatsen",
|
||||
"switchToTrackpad": "Schakel over naar de trackpadmodus (sleep om de cursor te verplaatsen, tik om te klikken).",
|
||||
"switchToTouch": "Schakel over naar de aanraakmodus (tik direct op de plek waar u wilt klikken)."
|
||||
}
|
||||
},
|
||||
"terminal": {
|
||||
@@ -1508,6 +1636,11 @@
|
||||
"totpRequired": "Tweefactorauthenticatie vereist",
|
||||
"totpCodeLabel": "Verificatiecode",
|
||||
"totpVerify": "Verifiëren",
|
||||
"mfaPromptRequired": "Authenticatie vereist",
|
||||
"mfaPushRequired": "Push-authenticatie vereist",
|
||||
"mfaMenuPlaceholder": "Voer uw antwoord in",
|
||||
"mfaWaitingApproval": "Wachten op goedkeuring op uw apparaat...",
|
||||
"mfaSendRequest": "Verzoek verzenden",
|
||||
"warpgateAuthRequired": "Authenticatie via Warpgate vereist",
|
||||
"warpgateSecurityKey": "Beveiligingssleutel",
|
||||
"warpgateAuthUrl": "Authenticatie-URL",
|
||||
@@ -2277,7 +2410,8 @@
|
||||
"resetCodeRateLimited": "Snelheid beperkt: Te veel verificatiepogingen. Probeer het later opnieuw.",
|
||||
"resetCodeRateLimitedWithTime": "Snelheid beperkt: Te veel verificatiepogingen. Wacht {{time}} seconden voordat u het opnieuw probeert.",
|
||||
"authTokenSaveFailed": "Het opslaan van het authenticatietoken is mislukt.",
|
||||
"failedToLoadServer": "Server laden mislukt"
|
||||
"failedToLoadServer": "Server laden mislukt",
|
||||
"remoteServerRequired": "Externe server vereist. Verbind een externe server in de instellingen om dit verbindingstype te gebruiken."
|
||||
},
|
||||
"messages": {
|
||||
"registrationDisabled": "Het registreren van nieuwe accounts is momenteel uitgeschakeld door een beheerder. Log in of neem contact op met een beheerder.",
|
||||
@@ -2644,6 +2778,17 @@
|
||||
"sslSaveFailed": "Het opslaan van de SSL-instellingen is mislukt.",
|
||||
"sslRequiresDomain": "Domein en e-mailadres zijn verplicht.",
|
||||
"sslInfoNote": "Nadat u een certificaat hebt uitgegeven, schakelt u SSL in uw omgevingsvariabelen in (ENABLE_SSL=true) en herstart u Termix.",
|
||||
"sslManualOption": "Handmatig (certificaat uploaden)",
|
||||
"sslManualCert": "Certificaat (PEM)",
|
||||
"sslManualCertPlaceholder": "-----BEGIN CERTIFICAAT-----",
|
||||
"sslManualKey": "Privésleutel (PEM)",
|
||||
"sslManualKeyPlaceholder": "-----BEGIN PRIVÉSLEUTEL-----",
|
||||
"sslManualDesc": "Plak hier uw bestaande certificaat en privésleutel, inclusief de volledige certificaatketen indien vereist door uw certificeringsinstantie.",
|
||||
"sslManualUpload": "Certificaat uploaden en installeren",
|
||||
"sslManualUploadLoading": "Certificaat uploaden...",
|
||||
"sslManualUploadSuccess": "Certificaat succesvol geüpload en geïnstalleerd",
|
||||
"sslManualUploadFailed": "Het uploaden van het certificaat is mislukt.",
|
||||
"sslManualRequiresFields": "Certificaat en privésleutel vereist.",
|
||||
"auditLogTotal": "{{total}} totaal aantal vermeldingen",
|
||||
"auditLogEmpty": "Geen auditlogboekvermeldingen gevonden",
|
||||
"auditLogSuccess": "Succes",
|
||||
@@ -2672,6 +2817,12 @@
|
||||
"commandHistoryEnabled": "Commandogeschiedenis",
|
||||
"commandHistoryEnabledDesc": "Sta het vastleggen van de opdrachtgeschiedenis toe. Indien uitgeschakeld, wordt de geschiedenis niet opgeslagen, ongeacht de instellingen per host.",
|
||||
"updateCommandHistoryFailed": "Het bijwerken van de instelling voor de opdrachtgeschiedenis is mislukt.",
|
||||
"analyticsEnabled": "Deel anonieme gebruiksstatistieken",
|
||||
"analyticsEnabledDesc": "Verstuurt dagelijks anoniem een telling van gebruikers, hosts en functiegebruik om Termix te verbeteren. Er worden nooit persoonlijke gegevens of verbindingsdetails meegestuurd.",
|
||||
"updateAnalyticsFailed": "Het bijwerken van de analyse-instellingen is mislukt.",
|
||||
"sessionSharingGloballyEnabled": "Sessiedeling toestaan",
|
||||
"sessionSharingGloballyEnabledDesc": "Sta toe dat live terminal-, RDP-, VNC- en Telnet-sessies instantiebreed worden gedeeld. Deze functie overschrijft elke instelling voor delen per host wanneer deze is uitgeschakeld.",
|
||||
"updateSessionSharingFailed": "Het bijwerken van de instelling voor het delen van sessies is mislukt.",
|
||||
"sessionTimeout": "Sessietime-out",
|
||||
"hours": "uren",
|
||||
"sessionTimeoutRange": "Minimaal 1 uur · Maximaal 720 uur",
|
||||
@@ -3119,6 +3270,47 @@
|
||||
"executionSuccess": "Succes",
|
||||
"executionFailed": "Mislukt"
|
||||
},
|
||||
"keybindings": {
|
||||
"title": "Toetsenbord sneltoetsen",
|
||||
"description": "Pas de sneltoetsen voor kopiëren, plakken en besturing in de terminal aan, of koppel toetsen aan het verzenden van tekst of het uitvoeren van een codefragment.",
|
||||
"defaultsHeading": "Ingebouwde sneltoetsen",
|
||||
"customHeading": "Aangepaste sneltoetsen",
|
||||
"addBinding": "Snelkoppeling toevoegen",
|
||||
"addBindingTitle": "Snelkoppeling toevoegen",
|
||||
"editBindingTitle": "Snelkoppeling bewerken",
|
||||
"loading": "Laden...",
|
||||
"noCustomBindings": "Er zijn nog geen aangepaste sneltoetsen beschikbaar.",
|
||||
"defaultBadge": "Standaard",
|
||||
"customizedBadge": "Op maat gemaakt",
|
||||
"customize": "Aanpassen",
|
||||
"resetToDefault": "Terugzetten naar standaardinstellingen",
|
||||
"resetAllToDefaults": "Alles terugzetten naar de standaardinstellingen",
|
||||
"close": "Dichtbij",
|
||||
"cancel": "Annuleren",
|
||||
"saveBinding": "Snelkoppeling opslaan",
|
||||
"saveError": "Het opslaan van de sneltoetsen is mislukt.",
|
||||
"pressKeysToRecord": "Toetsencombinatie",
|
||||
"pressKeysPlaceholder": "Klik en druk op de toetsen",
|
||||
"recording": "Druk op de toetsen...",
|
||||
"comboRequiredError": "Druk eerst op een toetsencombinatie.",
|
||||
"textRequiredError": "Voer de tekst in die u wilt verzenden",
|
||||
"controlCodeRequiredError": "Voer één letter in als besturingscode.",
|
||||
"snippetRequiredError": "Selecteer een fragment",
|
||||
"conflictWarning": "Deze combinatie is al gekoppeld aan {{combo}}. Door op te slaan zullen beide vuren.",
|
||||
"actionLabel": "Actie",
|
||||
"actionCopy": "Selectie kopiëren",
|
||||
"actionPaste": "Plakken",
|
||||
"actionSendControlCode": "Verzend het Ctrl+letter-signaal",
|
||||
"actionSendText": "Sms verzenden",
|
||||
"actionRunSnippet": "Voer het bestaande codefragment uit.",
|
||||
"controlCodeLabel": "Brief",
|
||||
"textLabel": "Tekst om te verzenden",
|
||||
"appendEnterLabel": "Druk op Enter na het verzenden.",
|
||||
"snippetLabel": "Fragment",
|
||||
"selectSnippetPlaceholder": "Selecteer een fragment",
|
||||
"orphanedSnippetWarning": "fragment niet gevonden",
|
||||
"clipboardPermissionNote": "In sommige browsers kan bij het eerste gebruik om toestemming voor het gebruik van het klembord worden gevraagd."
|
||||
},
|
||||
"userProfile": {
|
||||
"donateTitle": "Houd Termix in leven",
|
||||
"donateDescription": "Termix is gratis, zelf te hosten en is ontwikkeld door slechts een paar mensen in hun vrije tijd. Als het je tijd of geld heeft bespaard, helpt een cryptodonatie om het project draaiende te houden.",
|
||||
@@ -3134,6 +3326,7 @@
|
||||
"sectionAppearance": "Verschijning",
|
||||
"sectionSecurity": "Beveiliging",
|
||||
"sectionApiKeys": "API-sleutels",
|
||||
"sectionData": "Gegevens",
|
||||
"sectionC2sTunnels": "C2S-tunnels",
|
||||
"usernameLabel": "Gebruikersnaam",
|
||||
"roleLabel": "Rol",
|
||||
@@ -3162,6 +3355,9 @@
|
||||
"settingsTerminal": "Terminal",
|
||||
"commandAutocomplete": "Opdracht automatisch aanvullen",
|
||||
"commandAutocompleteDesc": "Toon automatische aanvulling tijdens het typen",
|
||||
"keyboardShortcuts": "Toetsenbord sneltoetsen",
|
||||
"keyboardShortcutsDescription": "Pas de sneltoetsen voor kopiëren, plakken en opdrachten in de terminal aan.",
|
||||
"manageShortcuts": "Beheren",
|
||||
"terminalLinkBehavior": "Terminallink Klik",
|
||||
"terminalLinkBehaviorDesc": "Standaardgedrag bij het klikken op links in de terminal",
|
||||
"historyTracking": "Geschiedenis bijhouden",
|
||||
@@ -3228,6 +3424,22 @@
|
||||
"apiKeyUsageHint": "Voeg uw sleutel toe aan de",
|
||||
"apiKeyUsageHintHeader": "koptekst.",
|
||||
"apiKeyPermissionsHint": "Sleutels erven de machtigingen van de gebruiker die ze heeft aangemaakt.",
|
||||
"exportData": "Mijn gegevens exporteren",
|
||||
"exportDataDesc": "Download een back-up van uw hosts, inloggegevens en instellingen om deze over te zetten naar een ander apparaat.",
|
||||
"export": "Exporteren",
|
||||
"exporting": "Exporteren...",
|
||||
"importData": "Mijn gegevens importeren",
|
||||
"importDataDesc": "Herstel uw hosts, inloggegevens en instellingen vanuit een .sqlite-back-upbestand.",
|
||||
"importDataSelected": "Geselecteerd: {{name}}",
|
||||
"selectFile": "Selecteer bestand",
|
||||
"changeFile": "Wijziging",
|
||||
"import": "Importeren",
|
||||
"importing": "Importeren...",
|
||||
"exportSuccess": "Gegevens succesvol geëxporteerd",
|
||||
"exportFailed": "Gegevensexport mislukt",
|
||||
"importSelectFile": "Selecteer eerst een bestand.",
|
||||
"importCompleted": "Import voltooid: {{total}} items geïmporteerd, {{skipped}} overgeslagen",
|
||||
"importFailed": "Import mislukt: {{error}}",
|
||||
"roleUser": "Gebruiker",
|
||||
"authMethodDual": "Dubbele authenticatie",
|
||||
"authMethodOidc": "OIDC",
|
||||
@@ -3379,6 +3591,7 @@
|
||||
"pageUp": "PgUp",
|
||||
"pageDown": "PgDn",
|
||||
"delete": "Del",
|
||||
"paste": "Plakken",
|
||||
"editQuickKeys": "Sneltoetsen bewerken",
|
||||
"quickKeysTitle": "Sneltoetsen",
|
||||
"quickKeysDesc": "Tik op × om te verwijderen. Ondersteunt maximaal 8 tekens.",
|
||||
|
||||
Reference in new issue
Block a user