mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-31 23:55: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": "Cap servidor desat",
|
||||
"removeServer": "Elimina"
|
||||
},
|
||||
"migrationNotice": {
|
||||
"title": "Termix Desktop ara funciona de manera autònoma",
|
||||
"body1": "Aquesta aplicació abans es connectava directament al vostre servidor Termix. S'ha reelaborat per funcionar completament per si sola, emmagatzemant els hosts i les credencials localment per tal que continuï funcionant fora de línia. La sincronització bidireccional amb un servidor Termix autoallotjat ara és opcional.",
|
||||
"body2": "Els vostres amfitrions i credencials existents encara són a {{url}}. Activeu la sincronització remota i torneu a connectar-vos a aquest servidor per tornar-los a sincronitzar i mantenir-los tots dos sincronitzats en el futur.",
|
||||
"dismiss": "Ara no",
|
||||
"setUpSync": "Configura la sincronització remota"
|
||||
},
|
||||
"remoteSync": {
|
||||
"title": "Sincronització remota",
|
||||
"description": "Opcionalment, podeu connectar aquesta aplicació d'escriptori a un servidor Termix autoallotjat per sincronitzar els vostres hosts, credencials i fragments entre dispositius. L'aplicació sempre funciona completament fora de línia, tant si us connecteu com si no.",
|
||||
"notConnected": "No connectat",
|
||||
"connected": "Connectat",
|
||||
"connectedTo": "Connectat a {{url}}",
|
||||
"lastSynced": "Última sincronització {{time}}",
|
||||
"neverSynced": "Mai sincronitzat",
|
||||
"syncError": "Error de sincronització: {{message}}",
|
||||
"needsReauth": "L'inici de sessió ha caducat",
|
||||
"connectButton": "Connecta't al servidor",
|
||||
"disconnectButton": "Desconnecta",
|
||||
"syncNowButton": "Sincronitza ara",
|
||||
"syncing": "Sincronitzant...",
|
||||
"serverUrl": "URL del servidor",
|
||||
"enterServerUrl": "Si us plau, introduïu una URL de servidor",
|
||||
"mustIncludeProtocol": "L'URL del servidor ha de començar per http:// o https://",
|
||||
"connectionTestFailed": "No s'ha pogut connectar amb un servidor Termix en aquesta URL.",
|
||||
"allowInvalidCertificate": "Permetre certificat no vàlid",
|
||||
"allowInvalidCertificateDesc": "Utilitzeu-ho només per a servidors autoallotjats de confiança amb certificats autosignats o d'adreça IP.",
|
||||
"savedServers": "Servidors desats",
|
||||
"removeServer": "Elimina",
|
||||
"continueButton": "Continua",
|
||||
"cancelButton": "Cancel·la",
|
||||
"signInTitle": "Inicia la sessió a {{url}}",
|
||||
"originTitle": "Origen de la connexió",
|
||||
"originDescription": "Trieu l'origen de les connexions SSH per defecte. Això es pot anul·lar per cada host.",
|
||||
"originLocal": "Aquest dispositiu (xarxa local)",
|
||||
"originRemote": "Servidor remot",
|
||||
"bannerReconnect": "Reconnecta",
|
||||
"bannerMessage": "La sincronització remota necessita una reautenticació"
|
||||
},
|
||||
"versionCheck": {
|
||||
"error": "Error de comprovació de versió",
|
||||
"checkFailed": "No s'ha pogut comprovar si hi ha actualitzacions",
|
||||
@@ -602,6 +641,7 @@
|
||||
"overrideCredentialUsername": "Substitueix les credencials i el nom d'usuari",
|
||||
"overrideCredentialUsernameDesc": "Feu servir el nom d'usuari especificat anteriorment en comptes del nom d'usuari de la credencial",
|
||||
"oidcUsernameHint": "Feu servir $oidc.preferred_username per substituir el vostre nom d'usuari d'inici de sessió OIDC.",
|
||||
"tailscaleUsernameHint": "Aquest ha de ser un usuari d'Unix; la teva identitat Tailscale està atorgada a l'ACL SSH de la xarxa principal, no necessàriament un usuari root.",
|
||||
"jumpHostChain": "Cadena d'amfitrió de salt",
|
||||
"portKnocking": "Cop de port",
|
||||
"addKnock": "Afegeix un port",
|
||||
@@ -650,6 +690,11 @@
|
||||
"delayAfterMs": "Retard després (ms)",
|
||||
"useSocks5Proxy": "Utilitza el servidor intermediari SOCKS5",
|
||||
"useSocks5ProxyDesc": "Enrutar la connexió a través d'un servidor proxy",
|
||||
"connectionOrigin": "Origen de la connexió",
|
||||
"connectionOriginDesc": "D'on s'origina la connexió SSH d'aquest amfitrió. Substitueix el valor predeterminat global de l'aplicació d'escriptori.",
|
||||
"connectionOriginDefault": "Utilitza el valor per defecte",
|
||||
"connectionOriginLocal": "Aquest dispositiu (xarxa local)",
|
||||
"connectionOriginRemote": "Servidor remot",
|
||||
"proxyHost": "Amfitrió intermediari",
|
||||
"proxyPort": "Port de proxy",
|
||||
"proxyUsername": "Nom d'usuari del proxy",
|
||||
@@ -762,6 +807,14 @@
|
||||
"customThemeBrightCyan": "Cian brillant",
|
||||
"customThemeBrightWhite": "Blanc brillant",
|
||||
"customThemeResetTooltip": "Restableix els valors predeterminats",
|
||||
"savedThemesLabel": "Temes desats",
|
||||
"saveAsGlobalTheme": "Desa com a tema global",
|
||||
"saveGlobalThemeNamePrompt": "Introdueix un nom per a aquest tema",
|
||||
"saveGlobalThemeSuccess": "Tema desat",
|
||||
"saveGlobalThemeError": "No s'ha pogut desar el tema",
|
||||
"applyGlobalThemeTooltip": "Aplica aquest tema",
|
||||
"deleteGlobalThemeTooltip": "Suprimeix aquest tema",
|
||||
"noSavedThemes": "Encara no hi ha temes desats",
|
||||
"syntaxHighlightingLabel": "Ressaltat de sintaxi",
|
||||
"syntaxHighlightingDesc": "Coloritzar la sortida del terminal (errors, camins, IP, marques de temps)",
|
||||
"syntaxHighlightingCategories": "Categories destacades",
|
||||
@@ -791,6 +844,8 @@
|
||||
"enableAutoTmuxDesc": "Inicia o connecta automàticament a la sessió de tmux",
|
||||
"enableSessionLogging": "Registre de sessions",
|
||||
"enableSessionLoggingDesc": "Enregistra la sortida de la sessió de terminal per a una revisió posterior",
|
||||
"allowSessionSharing": "Permetre la compartició de sessions",
|
||||
"allowSessionSharingDesc": "Permet que les sessions en directe d'aquest amfitrió es comparteixin mitjançant un enllaç o amb altres usuaris",
|
||||
"enableCommandHistory": "Historial de comandaments",
|
||||
"enableCommandHistoryDesc": "Enregistra les ordres executades en aquest terminal per a l'historial i l'autocompleció",
|
||||
"linkClickBehaviorLabel": "Comportament dels clics d'enllaç",
|
||||
@@ -895,6 +950,7 @@
|
||||
"proxmoxResultImported": "{{count}} importat",
|
||||
"proxmoxResultUpdated": "{{count}} actualitzat",
|
||||
"proxmoxResultFailed": "{{count}} ha fallat",
|
||||
"proxmoxResultSkippedNoIp": "{{count}} omès (no s'ha trobat cap IP)",
|
||||
"proxmoxImportComplete": "Importació de Proxmox completada: {{summary}}",
|
||||
"proxmoxDiscoveryFailed": "El descobriment ha fallat",
|
||||
"proxmoxImportFailed": "La importació ha fallat",
|
||||
@@ -961,6 +1017,9 @@
|
||||
"failedToSaveCredential": "No s'ha pogut desar la credencial",
|
||||
"credentialNameRequired": "Si us plau, introduïu un nom per a la credencial",
|
||||
"credentialAuthRequired": "Afegiu una contrasenya, una clau SSH o totes dues",
|
||||
"createCredentialFromHostBtn": "Crea credencials",
|
||||
"createCredentialFromHostTitle": "Crea credencials des de l'amfitrió",
|
||||
"createCredentialFromHostDesc": "Crea una entrada de credencials reutilitzable i compartible preomplerta amb el nom d'usuari, la contrasenya i/o la clau SSH actuals d'aquest amfitrió.",
|
||||
"backToHosts": "Torna a Amfitrions",
|
||||
"backToCredentials": "Torna a les credencials",
|
||||
"pinned": "Fixat",
|
||||
@@ -1000,6 +1059,9 @@
|
||||
"folderNestingHint": "Feu servir / per separar nivells i crear carpetes imbricades.",
|
||||
"folderColor": "Color",
|
||||
"folderIcon": "Icona",
|
||||
"folderCredential": "Credencial",
|
||||
"folderCredentialNone": "Cap credencial assignada",
|
||||
"folderCredentialHint": "Els amfitrions d'aquesta carpeta que utilitzen l'autenticació \"Credencial emmagatzemada\" sense tenir les seves pròpies credencials seleccionades heretaran aquesta.",
|
||||
"folderPreview": "Vista prèvia",
|
||||
"folderNameFallback": "Carpeta sense títol",
|
||||
"createFolderButton": "Crea una carpeta",
|
||||
@@ -1181,6 +1243,10 @@
|
||||
"filterTagsGroup": "Etiquetes",
|
||||
"shareHost": "Comparteix l'amfitrió",
|
||||
"shareHostTitle": "Comparteix: {{name}}",
|
||||
"shareFolder": "Compartir carpeta",
|
||||
"shareFolderTitle": "Compartir carpeta: {{name}}",
|
||||
"folderSharedSuccessfully": "Host(s) compartit(s) {{count}} a la carpeta",
|
||||
"failedToShareFolder": "No s'ha pogut compartir la carpeta",
|
||||
"sharing": {
|
||||
"loadError": "No s'han pogut carregar les dades de compartició. Torna-ho a provar.",
|
||||
"shareWithSection": "Comparteix amb",
|
||||
@@ -1221,6 +1287,7 @@
|
||||
"shareWithCount": "Comparteix ({{count}})",
|
||||
"currentAccess": "Accés actual",
|
||||
"noAccessEntries": "Aquest amfitrió encara no s'ha compartit",
|
||||
"folderShareSummary": "S'han compartit {{shared}} de {{total}} amfitrions en aquesta carpeta",
|
||||
"grantedBy": "Atorgat per",
|
||||
"expires": "Caduca",
|
||||
"expired": "Caducat",
|
||||
@@ -1242,6 +1309,8 @@
|
||||
"authMethod": "Mètode d'autenticació",
|
||||
"authTypeDirect": "Directe",
|
||||
"authTypeCredential": "Credencial",
|
||||
"authTypeNone": "Cap",
|
||||
"authTypeNoneDesc": "No s'emmagatzemen les credencials. Se us demanarà un nom d'usuari i una contrasenya cada vegada que us connecteu; no es desen.",
|
||||
"selectCredential": "Selecciona una credencial...",
|
||||
"connectionSettings": "Configuració de connexió",
|
||||
"displaySettings": "Configuració de la pantalla",
|
||||
@@ -1259,6 +1328,7 @@
|
||||
"rdpPort": "Port RDP",
|
||||
"username": "Nom d'usuari",
|
||||
"password": "Contrasenya",
|
||||
"passwordSaved": "Contrasenya desada, escriu per canviar-la",
|
||||
"domain": "Domini",
|
||||
"securityMode": "Mode de seguretat",
|
||||
"colorDepth": "Profunditat de color",
|
||||
@@ -1424,7 +1494,60 @@
|
||||
"expiresIn": "Caduca en {{duration}}",
|
||||
"search": "Cerca connexions...",
|
||||
"noSearchResults": "No hi ha connexions que coincideixin amb la teva cerca",
|
||||
"rename": "Canvia el nom de la sessió"
|
||||
"rename": "Canvia el nom de la sessió",
|
||||
"sectionSharedWithMe": "Compartit amb mi",
|
||||
"sharedBy": "Compartit per {{username}}",
|
||||
"join": "Uneix-te",
|
||||
"sharedSessionLabel": "{{hostName}} (compartit)"
|
||||
},
|
||||
"sessionSharing": {
|
||||
"guestView": {
|
||||
"loading": "Connectant a la sessió compartida...",
|
||||
"linkInvalid": "Aquest enllaç per compartir no és vàlid, ha caducat o s'ha revocat.",
|
||||
"rateLimited": "Massa intents, si us plau, torneu-ho a intentar en breu",
|
||||
"sessionEnded": "Aquesta sessió ha finalitzat",
|
||||
"readOnlyBadge": "Només visualització"
|
||||
},
|
||||
"modalTitle": "Comparteix la sessió",
|
||||
"shareButton": "Comparteix",
|
||||
"notReadyToShare": "La sessió encara no està a punt per compartir",
|
||||
"modeTab": {
|
||||
"link": "Enllaç",
|
||||
"user": "Usuari"
|
||||
},
|
||||
"linkModeDescription": "Qualsevol persona amb aquest enllaç s'hi pot unir, no cal tenir cap compte.",
|
||||
"userModeDescription": "Comparteix amb un usuari específic que ja tingui accés a aquest amfitrió. Si encara no hi té accés, comparteix primer l'amfitrió amb ell o utilitza un enllaç. Un cop compartida, la sessió apareix a la pestanya Connexions.",
|
||||
"permissionLevel": {
|
||||
"label": "Nivell de permís",
|
||||
"readOnly": "Només lectura",
|
||||
"readOnlyDescription": "Puc veure la sessió en directe però no puc escriure ni interactuar.",
|
||||
"readWrite": "Lectura i escriptura",
|
||||
"readWriteDescription": "Pot escriure i interactuar amb la sessió igual que el propietari."
|
||||
},
|
||||
"expiryLabel": "Caducitat de l'enllaç",
|
||||
"createLinkButton": "Crea un enllaç",
|
||||
"createShareButton": "Comparteix amb l'usuari",
|
||||
"searchUsersPlaceholder": "Cerca usuaris...",
|
||||
"noUsersFound": "No s'han trobat usuaris",
|
||||
"linkCreated": "Enllaç de compartició creat",
|
||||
"linkCopied": "Enllaç copiat al porta-retalls",
|
||||
"copyLink": "Copia l'enllaç",
|
||||
"shareCreated": "Sessió compartida. Apareixerà a la pestanya Connexions.",
|
||||
"shareFailed": "No s'ha pogut crear la compartició",
|
||||
"userLacksHostAccess": "Aquest usuari encara no té accés a aquest amfitrió. Primer comparteix l'amfitrió amb ell o utilitza un enllaç.",
|
||||
"activeShares": "Accions actives",
|
||||
"noActiveShares": "No hi ha cap compartició activa per a aquesta sessió",
|
||||
"revoke": "Revocar",
|
||||
"revokeConfirmTitle": "Voleu revocar aquesta compartició?",
|
||||
"revokeConfirmDescription": "Qualsevol persona que utilitzi aquesta opció compartida perdrà l'accés immediatament.",
|
||||
"revoked": "Compartir revocat",
|
||||
"revokeFailed": "No s'ha pogut revocar la compartició",
|
||||
"joinCount": "{{count}} uneix-te",
|
||||
"joinCount_other": "{{count}} s'uneix",
|
||||
"expiresAt": "Caduca {{date}}",
|
||||
"linkShareBadge": "Enllaç",
|
||||
"userShareBadge": "Usuari: {{username}}",
|
||||
"loadSharesFailed": "No s'han pogut carregar les comparticions actives"
|
||||
},
|
||||
"guacamole": {
|
||||
"connecting": "Connectant a la sessió {{type}}...",
|
||||
@@ -1436,6 +1559,9 @@
|
||||
"reconnect": "Reconnecta",
|
||||
"retry": "Torna-ho a intentar",
|
||||
"guacdUnavailable": "El servei d'escriptori remot (guacd) no està disponible. Assegureu-vos que guacd estigui en execució, sigui accessible i estigui configurat correctament a la configuració d'administrador.",
|
||||
"credentialPromptTitle": "Introduïu les credencials RDP",
|
||||
"credentialPromptDescription": "Aquest amfitrió està configurat per demanar credencials en connectar-se. Només s'utilitzen per a aquesta sessió i no es desen.",
|
||||
"connect": "Connecta",
|
||||
"ctrlAltDel": "Ctrl+Alt+Supr",
|
||||
"toolbar": {
|
||||
"ctrlAltDel": "Ctrl+Alt+Supr",
|
||||
@@ -1461,7 +1587,9 @@
|
||||
"reconnect": "Sessió de reconnexió",
|
||||
"collapse": "Replega la barra d'eines",
|
||||
"expand": "Expandeix la barra d'eines",
|
||||
"dragHandle": "Arrossega per reposicionar"
|
||||
"dragHandle": "Arrossega per reposicionar",
|
||||
"switchToTrackpad": "Canvia al mode trackpad (arrossega per moure el cursor, toca per fer clic)",
|
||||
"switchToTouch": "Canvia al mode tàctil (toca directament on vols fer clic)"
|
||||
}
|
||||
},
|
||||
"terminal": {
|
||||
@@ -1508,6 +1636,11 @@
|
||||
"totpRequired": "Cal autenticació de dos factors",
|
||||
"totpCodeLabel": "Codi de verificació",
|
||||
"totpVerify": "Verifica",
|
||||
"mfaPromptRequired": "Cal autenticació",
|
||||
"mfaPushRequired": "Autenticació push obligatòria",
|
||||
"mfaMenuPlaceholder": "Introdueix la teva resposta",
|
||||
"mfaWaitingApproval": "Esperant aprovació al dispositiu...",
|
||||
"mfaSendRequest": "Enviar sol·licitud",
|
||||
"warpgateAuthRequired": "Cal autenticació de Warpgate",
|
||||
"warpgateSecurityKey": "Clau de seguretat",
|
||||
"warpgateAuthUrl": "URL d'autenticació",
|
||||
@@ -2277,7 +2410,8 @@
|
||||
"resetCodeRateLimited": "Tarifa limitada: massa intents de verificació. Torna-ho a provar més tard.",
|
||||
"resetCodeRateLimitedWithTime": "Taxa limitada: massa intents de verificació. Espereu {{time}} segons abans de tornar-ho a intentar.",
|
||||
"authTokenSaveFailed": "No s'ha pogut desar el testimoni d'autenticació",
|
||||
"failedToLoadServer": "No s'ha pogut carregar el servidor"
|
||||
"failedToLoadServer": "No s'ha pogut carregar el servidor",
|
||||
"remoteServerRequired": "Cal un servidor remot. Connecteu un servidor remot a Configuració per utilitzar aquest tipus de connexió."
|
||||
},
|
||||
"messages": {
|
||||
"registrationDisabled": "El registre de comptes nous està desactivat actualment per un administrador. Si us plau, inicia la sessió o contacta amb un administrador.",
|
||||
@@ -2644,6 +2778,17 @@
|
||||
"sslSaveFailed": "No s'ha pogut desar la configuració SSL",
|
||||
"sslRequiresDomain": "Cal el domini i el correu electrònic",
|
||||
"sslInfoNote": "Després d'emetre un certificat, activeu SSL a les variables d'entorn (ENABLE_SSL=true) i reinicieu Termix.",
|
||||
"sslManualOption": "Manual (pujar certificat)",
|
||||
"sslManualCert": "Certificat (PEM)",
|
||||
"sslManualCertPlaceholder": "-----CERTIFICAT D'INICI-----",
|
||||
"sslManualKey": "Clau privada (PEM)",
|
||||
"sslManualKeyPlaceholder": "-----INICI DE LA CLAU PRIVADA-----",
|
||||
"sslManualDesc": "Enganxeu el certificat i la clau privada existents, incloent-hi una cadena completa si la vostra autoritat de certificació ho requereix.",
|
||||
"sslManualUpload": "Pujar i instal·lar el certificat",
|
||||
"sslManualUploadLoading": "S'està carregant el certificat...",
|
||||
"sslManualUploadSuccess": "El certificat s'ha carregat i instal·lat correctament",
|
||||
"sslManualUploadFailed": "Ha fallat la càrrega del certificat",
|
||||
"sslManualRequiresFields": "Cal un certificat i una clau privada",
|
||||
"auditLogTotal": "{{total}} total d'entrades",
|
||||
"auditLogEmpty": "No s'han trobat entrades del registre d'auditoria",
|
||||
"auditLogSuccess": "Èxit",
|
||||
@@ -2672,6 +2817,12 @@
|
||||
"commandHistoryEnabled": "Historial de comandaments",
|
||||
"commandHistoryEnabledDesc": "Permet l'enregistrament de l'historial d'ordres. Quan està desactivat, l'historial no es desa independentment de la configuració de cada host.",
|
||||
"updateCommandHistoryFailed": "No s'ha pogut actualitzar la configuració de l'historial d'ordres",
|
||||
"analyticsEnabled": "Comparteix estadístiques d'ús anònimes",
|
||||
"analyticsEnabledDesc": "Envia un recompte diari anònim d'usuaris, amfitrions i ús de funcions per ajudar a millorar Termix. No s'hi inclouen mai dades personals ni detalls de connexió.",
|
||||
"updateAnalyticsFailed": "No s'ha pogut actualitzar la configuració d'analítica",
|
||||
"sessionSharingGloballyEnabled": "Permetre la compartició de sessions",
|
||||
"sessionSharingGloballyEnabledDesc": "Permet que les sessions de terminal, RDP, VNC i Telnet en directe es comparteixin a tota la instància. Anul·la tots els activables i desactivables per compartir per host quan estan desactivats.",
|
||||
"updateSessionSharingFailed": "No s'ha pogut actualitzar la configuració de compartició de sessions",
|
||||
"sessionTimeout": "Temps d'espera de la sessió",
|
||||
"hours": "hores",
|
||||
"sessionTimeoutRange": "Mín 1 h · Màx 720 h",
|
||||
@@ -3119,6 +3270,47 @@
|
||||
"executionSuccess": "Èxit",
|
||||
"executionFailed": "Fallat"
|
||||
},
|
||||
"keybindings": {
|
||||
"title": "Dreceres de teclat",
|
||||
"description": "Personalitza les dreceres de copiar, enganxar i controlar del terminal, o vincula tecles per enviar text o executar un fragment.",
|
||||
"defaultsHeading": "Dreceres integrades",
|
||||
"customHeading": "Dreceres personalitzades",
|
||||
"addBinding": "Afegeix una drecera",
|
||||
"addBindingTitle": "Afegeix una drecera",
|
||||
"editBindingTitle": "Edita la drecera",
|
||||
"loading": "S'està carregant...",
|
||||
"noCustomBindings": "Encara no hi ha dreceres personalitzades",
|
||||
"defaultBadge": "Per defecte",
|
||||
"customizedBadge": "Personalitzat",
|
||||
"customize": "Personalitza",
|
||||
"resetToDefault": "Restableix els valors predeterminats",
|
||||
"resetAllToDefaults": "Restableix-ho tot als valors predeterminats",
|
||||
"close": "Tanca",
|
||||
"cancel": "Cancel·la",
|
||||
"saveBinding": "Desa la drecera",
|
||||
"saveError": "No s'han pogut desar les dreceres de teclat",
|
||||
"pressKeysToRecord": "Combinació de tecles",
|
||||
"pressKeysPlaceholder": "Feu clic i premeu les tecles",
|
||||
"recording": "Premeu les tecles...",
|
||||
"comboRequiredError": "Premeu primer una combinació de tecles",
|
||||
"textRequiredError": "Introduïu el text per enviar",
|
||||
"controlCodeRequiredError": "Introduïu una sola lletra per al codi de control",
|
||||
"snippetRequiredError": "Selecciona un fragment",
|
||||
"conflictWarning": "Aquesta combinació ja està vinculada a {{combo}}. Si deseu, totes dues es dispararan.",
|
||||
"actionLabel": "Acció",
|
||||
"actionCopy": "Copia la selecció",
|
||||
"actionPaste": "Enganxa",
|
||||
"actionSendControlCode": "Envia el senyal Ctrl+lletra",
|
||||
"actionSendText": "Enviar text",
|
||||
"actionRunSnippet": "Executa el fragment existent",
|
||||
"controlCodeLabel": "Carta",
|
||||
"textLabel": "Text per enviar",
|
||||
"appendEnterLabel": "Premeu Intro després d'enviar",
|
||||
"snippetLabel": "Fragment",
|
||||
"selectSnippetPlaceholder": "Selecciona un fragment",
|
||||
"orphanedSnippetWarning": "fragment no trobat",
|
||||
"clipboardPermissionNote": "Pot demanar permisos al porta-retalls en el primer ús en alguns navegadors."
|
||||
},
|
||||
"userProfile": {
|
||||
"donateTitle": "Mantingueu viva la Termix",
|
||||
"donateDescription": "Termix és gratuït, s'allotja per si mateix i només l'han creat unes poques persones en el seu temps lliure. Si t'ha estalviat temps o diners, una donació de criptomonedes t'ajudarà a mantenir-lo en marxa.",
|
||||
@@ -3134,6 +3326,7 @@
|
||||
"sectionAppearance": "Aspecte",
|
||||
"sectionSecurity": "Seguretat",
|
||||
"sectionApiKeys": "Claus API",
|
||||
"sectionData": "Dades",
|
||||
"sectionC2sTunnels": "Túnels C2S",
|
||||
"usernameLabel": "Nom d'usuari",
|
||||
"roleLabel": "Rol",
|
||||
@@ -3162,6 +3355,9 @@
|
||||
"settingsTerminal": "Terminal",
|
||||
"commandAutocomplete": "Autocompletar ordres",
|
||||
"commandAutocompleteDesc": "Mostra l'autocompleció mentre s'escriu",
|
||||
"keyboardShortcuts": "Dreceres de teclat",
|
||||
"keyboardShortcutsDescription": "Personalitza les dreceres de comandament i copiar, enganxar i copiar al terminal",
|
||||
"manageShortcuts": "Gestiona",
|
||||
"terminalLinkBehavior": "Clic d'enllaç del terminal",
|
||||
"terminalLinkBehaviorDesc": "Comportament predeterminat en fer clic a enllaços al terminal",
|
||||
"historyTracking": "Seguiment de l'historial",
|
||||
@@ -3228,6 +3424,22 @@
|
||||
"apiKeyUsageHint": "Inclou la teva clau a la",
|
||||
"apiKeyUsageHintHeader": "capçalera.",
|
||||
"apiKeyPermissionsHint": "Les claus hereten els permisos de l'usuari que les crea.",
|
||||
"exportData": "Exporta les meves dades",
|
||||
"exportDataDesc": "Baixeu una còpia de seguretat dels vostres amfitrions, credencials i configuració per transferir-la a un altre dispositiu",
|
||||
"export": "Exporta",
|
||||
"exporting": "Exportant...",
|
||||
"importData": "Importa les meves dades",
|
||||
"importDataDesc": "Restaura els teus hosts, credencials i configuració des d'un fitxer de còpia de seguretat .sqlite",
|
||||
"importDataSelected": "Seleccionat: {{name}}",
|
||||
"selectFile": "Selecciona un fitxer",
|
||||
"changeFile": "Canvi",
|
||||
"import": "Importa",
|
||||
"importing": "Important...",
|
||||
"exportSuccess": "Dades exportades correctament",
|
||||
"exportFailed": "L'exportació de dades ha fallat",
|
||||
"importSelectFile": "Si us plau, seleccioneu primer un fitxer",
|
||||
"importCompleted": "Importació completada: {{total}} elements importats, {{skipped}} omesos",
|
||||
"importFailed": "La importació ha fallat: {{error}}",
|
||||
"roleUser": "Usuari",
|
||||
"authMethodDual": "Doble autenticació",
|
||||
"authMethodOidc": "OIDC",
|
||||
@@ -3379,6 +3591,7 @@
|
||||
"pageUp": "Re Pàg",
|
||||
"pageDown": "Av Pàg",
|
||||
"delete": "Eliminar",
|
||||
"paste": "Enganxa",
|
||||
"editQuickKeys": "Edita les tecles ràpides",
|
||||
"quickKeysTitle": "Tecles ràpides",
|
||||
"quickKeysDesc": "Toca × per eliminar. Admet fins a 8 caràcters.",
|
||||
|
||||
Reference in new issue
Block a user