mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-29 22:55:24 +00:00
+16



![dependabot[bot]](/assets/img/avatar_default.png)





Luke Gustafson
ZacharyZcR
Angad Singh
Angad Singh
Neo
dependabot[bot]
Wali Lambert
Nasif Rahman
Claude Opus 5
vietanhtwdk
inontz
inontz
Max Serov
Max
ssmurfgg04-gif
ssmurfgg04-gif
ZacharyZcR
slsgzs-cloud
anshtsolanki-sketch
Cursor
tcezarl
Anton Priestley
Hakim M
copilot-swe-agent[bot]
Adel Alzubeir
Copilot Autofix powered by AI
fef8a5f28a
* Fix private AI custom endpoints (#1299) * Fix Proxmox credential guest imports (#1300) * Fix Fleet command results layout (#1301) * Fix synced client tunnel endpoints (#1302) * Fix Proxmox sync jump host persistence (#1303) * Fix command palette keyboard navigation (#1304) * Add accessible interface font choices (#1306) * Add selectable host temperature sensors (#1307) * Improve file manager navigation and compact layout (#1308) * Add configurable global hotkeys (#1305) * fix: restore split layout selection (#1310) * fix: support macOS VNC connections (#1311) * fix: use matching Undici fetch for private AI providers (#1309) Co-authored-by: Angad Singh <angad@singhangad.in> * feat: support additional TOTP authenticators (#1312) * feat: add VNC display zoom controls (#1314) * feat: add host context menu actions (#1315) * fix: force classic auth for macOS VNC (#1313) * fix: harden HTTP trust boundaries (#1316) * fix: harden application trust boundaries (#1317) * fix: verify OPKSSH binary integrity (#1318) * Fix remote desktop connection timeout (#1319) * chore(deps): bump node in /docker in the docker-major-updates group (#1321) Bumps the docker-major-updates group in /docker with 1 update: node. Updates `node` from 24-slim to 26-slim --- updated-dependencies: - dependency-name: node dependency-version: 26-slim dependency-type: direct:production dependency-group: docker-major-updates ... 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 15 updates (#1322) Bumps the dev-patch-updates group with 15 updates: | Package | From | To | | --- | --- | --- | | [@codemirror/view](https://github.com/codemirror/view) | `6.43.7` | `6.43.9` | | [@commitlint/cli](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/cli) | `21.2.1` | `21.2.2` | | [@commitlint/config-conventional](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/config-conventional) | `21.2.0` | `21.2.2` | | [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) | `7.0.0` | `7.0.1` | | [@testing-library/user-event](https://github.com/testing-library/user-event) | `14.6.1` | `14.6.5` | | [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) | `4.1.10` | `4.1.11` | | [@vitest/ui](https://github.com/vitest-dev/vitest/tree/HEAD/packages/ui) | `4.1.10` | `4.1.11` | | [concurrently](https://github.com/open-cli-tools/concurrently) | `10.0.4` | `10.0.5` | | [cytoscape](https://github.com/cytoscape/cytoscape.js) | `3.34.0` | `3.34.1` | | [eslint](https://github.com/eslint/eslint) | `10.8.0` | `10.8.1` | | [eslint-plugin-react-refresh](https://github.com/ArnaudBarre/eslint-plugin-react-refresh) | `0.5.3` | `0.5.4` | | [react-i18next](https://github.com/i18next/react-i18next) | `17.0.11` | `17.0.12` | | [sonner](https://github.com/emilkowalski/sonner) | `2.0.7` | `2.0.8` | | [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) | `8.2.0` | `8.2.2` | | [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.10` | `4.1.11` | Updates `@codemirror/view` from 6.43.7 to 6.43.9 - [Changelog](https://github.com/codemirror/view/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/view/commits) Updates `@commitlint/cli` from 21.2.1 to 21.2.2 - [Release notes](https://github.com/conventional-changelog/commitlint/releases) - [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/cli/CHANGELOG.md) - [Commits](https://github.com/conventional-changelog/commitlint/commits/v21.2.2/@commitlint/cli) Updates `@commitlint/config-conventional` from 21.2.0 to 21.2.2 - [Release notes](https://github.com/conventional-changelog/commitlint/releases) - [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/config-conventional/CHANGELOG.md) - [Commits](https://github.com/conventional-changelog/commitlint/commits/v21.2.2/@commitlint/config-conventional) Updates `@testing-library/jest-dom` from 7.0.0 to 7.0.1 - [Release notes](https://github.com/testing-library/jest-dom/releases) - [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md) - [Commits](https://github.com/testing-library/jest-dom/compare/v7.0.0...v7.0.1) Updates `@testing-library/user-event` from 14.6.1 to 14.6.5 - [Release notes](https://github.com/testing-library/user-event/releases) - [Changelog](https://github.com/testing-library/user-event/blob/main/CHANGELOG.md) - [Commits](https://github.com/testing-library/user-event/compare/v14.6.1...v14.6.5) Updates `@vitest/coverage-v8` from 4.1.10 to 4.1.11 - [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.11/packages/coverage-v8) Updates `@vitest/ui` from 4.1.10 to 4.1.11 - [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.11/packages/ui) Updates `concurrently` from 10.0.4 to 10.0.5 - [Release notes](https://github.com/open-cli-tools/concurrently/releases) - [Commits](https://github.com/open-cli-tools/concurrently/compare/v10.0.4...v10.0.5) Updates `cytoscape` from 3.34.0 to 3.34.1 - [Release notes](https://github.com/cytoscape/cytoscape.js/releases) - [Commits](https://github.com/cytoscape/cytoscape.js/compare/v3.34.0...v3.34.1) Updates `eslint` from 10.8.0 to 10.8.1 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](https://github.com/eslint/eslint/compare/v10.8.0...v10.8.1) Updates `eslint-plugin-react-refresh` from 0.5.3 to 0.5.4 - [Release notes](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/releases) - [Changelog](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/blob/main/CHANGELOG.md) - [Commits](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/compare/v0.5.3...v0.5.4) Updates `react-i18next` from 17.0.11 to 17.0.12 - [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/react-i18next/compare/v17.0.11...v17.0.12) Updates `sonner` from 2.0.7 to 2.0.8 - [Release notes](https://github.com/emilkowalski/sonner/releases) - [Commits](https://github.com/emilkowalski/sonner/compare/v2.0.7...v2.0.8) Updates `vite` from 8.2.0 to 8.2.2 - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v8.2.2/packages/vite) Updates `vitest` from 4.1.10 to 4.1.11 - [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.11/packages/vitest) --- updated-dependencies: - dependency-name: "@codemirror/view" dependency-version: 6.43.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@commitlint/cli" dependency-version: 21.2.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@commitlint/config-conventional" dependency-version: 21.2.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@testing-library/jest-dom" dependency-version: 7.0.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@testing-library/user-event" dependency-version: 14.6.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@vitest/coverage-v8" dependency-version: 4.1.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: "@vitest/ui" dependency-version: 4.1.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: concurrently dependency-version: 10.0.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: cytoscape dependency-version: 3.34.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: eslint dependency-version: 10.8.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: eslint-plugin-react-refresh dependency-version: 0.5.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: react-i18next dependency-version: 17.0.12 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: sonner dependency-version: 2.0.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: vite dependency-version: 8.2.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-patch-updates - dependency-name: vitest dependency-version: 4.1.11 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 the prod-patch-updates group with 5 updates (#1324) Bumps the prod-patch-updates group with 5 updates: | Package | From | To | | --- | --- | --- | | [@tanstack/react-virtual](https://github.com/TanStack/virtual/tree/HEAD/packages/react-virtual) | `3.14.9` | `3.14.10` | | [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) | `13.0.2` | `13.0.3` | | [jose](https://github.com/panva/jose) | `6.2.8` | `6.2.9` | | [mysql2](https://github.com/sidorares/node-mysql2) | `3.23.2` | `3.23.4` | | [ws](https://github.com/websockets/ws) | `8.21.1` | `8.21.3` | Updates `@tanstack/react-virtual` from 3.14.9 to 3.14.10 - [Release notes](https://github.com/TanStack/virtual/releases) - [Changelog](https://github.com/TanStack/virtual/blob/main/packages/react-virtual/CHANGELOG.md) - [Commits](https://github.com/TanStack/virtual/commits/@tanstack/react-virtual@3.14.10/packages/react-virtual) Updates `better-sqlite3` from 13.0.2 to 13.0.3 - [Release notes](https://github.com/WiseLibs/better-sqlite3/releases) - [Commits](https://github.com/WiseLibs/better-sqlite3/compare/v13.0.2...v13.0.3) Updates `jose` from 6.2.8 to 6.2.9 - [Release notes](https://github.com/panva/jose/releases) - [Changelog](https://github.com/panva/jose/blob/main/CHANGELOG.md) - [Commits](https://github.com/panva/jose/compare/v6.2.8...v6.2.9) Updates `mysql2` from 3.23.2 to 3.23.4 - [Release notes](https://github.com/sidorares/node-mysql2/releases) - [Changelog](https://github.com/sidorares/node-mysql2/blob/master/Changelog.md) - [Commits](https://github.com/sidorares/node-mysql2/compare/v3.23.2...v3.23.4) Updates `ws` from 8.21.1 to 8.21.3 - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/8.21.1...8.21.3) --- updated-dependencies: - dependency-name: "@tanstack/react-virtual" dependency-version: 3.14.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: better-sqlite3 dependency-version: 13.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: jose dependency-version: 6.2.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: mysql2 dependency-version: 3.23.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: ws dependency-version: 8.21.3 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 motion in the major-updates group (#1326) Bumps the major-updates group with 1 update: [motion](https://github.com/motiondivision/motion). Updates `motion` from 12.43.0 to 13.1.1 - [Changelog](https://github.com/motiondivision/motion/blob/main/CHANGELOG.md) - [Commits](https://github.com/motiondivision/motion/compare/v12.43.0...v13.1.1) --- updated-dependencies: - dependency-name: motion dependency-version: 13.1.1 dependency-type: direct:production 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> * feat: add semantic motion system (#1320) * feat: add semantic motion system * feat: animate session workspace transitions * feat: refine motion accessibility and transfer feedback * feat: enforce RBAC and harden collaboration features (#1327) * feat: enforce RBAC and harden collaboration features - Mount requirePermission on hosts/snippets/credentials/automations/AI routes - Seed and backfill system role permissions on every dialect at startup - Support personal credential overrides for RDP/VNC/Telnet shared hosts - Broadcast participant presence in shared terminal sessions - Make audit log forwarding configurable from the admin panel - Add role members endpoint and snippet folder sharing * fix: enforce RBAC across split routes * fix: reject malformed Guacamole tokens safely (#1329) * fix: allow approved private notification hosts (#1330) * feat: collaboration rooms with switchable presenter (#1328) * feat: add collaboration rooms with switchable presenter Rooms are a group of members watching one stage - the live SSH/RDP/VNC session the current presenter shares. Any member can take over the stage; the host can invite, force-stop and end the meeting. Stages reuse session_shares (new room share type), so gating, recording, expiry and the global sharing toggle all apply unchanged. * feat: add stage control handoff to collaboration rooms The presenter or host can grant any member write access to the live stage and take it back; members can raise a hand to ask. SSH flips the participant's permission on the live gate; RDP/VNC re-mint the viewer's join token. Control clears on every stage switch. * feat: guest links, role invites and invite awareness for collab rooms - Anonymous guest link per room (host toggles/rotates), followed by polling the public resolve endpoint; SSH guests join over the terminal WS with roomGuestToken, guac guests get read-only join tokens - Invite by role (expands to current members, snapshot semantics) - Toast when a room you were invited to appears - Stale stages are cleared lazily when the presenter is gone - Telnet presenting, expired-tab fallback, documented single-instance and guac-kick limits - Tests for the collab routes, room hub, share access and control flip * fix: keep remote desktop collaboration read-only * fix: restore RDP clipboard paste across browsers (#1331) * fix: show the full command line in the process inspector (#1334) The CMD column rendered ps's comm field, which the kernel caps at 15 characters, so anything longer looked truncated no matter how wide the column was. The full args were already collected; show them. * fix: harden collaboration room access (#1332) * fix: harden collaboration room access * fix: confirm guest link lifecycle changes * fix: make RDP drive redirection writable on the stock deployment (#1333) * fix: make RDP drive redirection writable on the stock deployment The default drive-path was /drive on the guacd side, which the official guacd image cannot create as its non-root user, so every upload was refused with guacd's raw "FAIL (CANNOT OPEN)" ack. Default to GUACD_DRIVE_PATH (set to the shared termix-data volume in compose) with one folder per user, and explain guacd's refusal in the file browser. * style: format RDP drive settings * feat: quick connect for RDP and VNC (#1335) The Quick Connect panel gets a protocol switch. RDP/VNC quick hosts are built like SSH ones (never saved) and opened as regular remote desktop tabs; GuacamoleApp mints their token from the typed fields through the existing /guacamole/token endpoint instead of a host-row lookup. * fix: authenticate unwatched hosts during the status probe (#1337) With metrics enabled, the status probe left SSH authentication to the metrics poll - which only runs while someone is viewing the host. An unwatched host therefore never left "reachable", while a host with metrics disabled (whose probe always authenticates) showed online. The probe now authenticates whenever no metrics poll will. * feat: compact snippet list option (#1339) A "Show Commands" toggle in the snippets settings menu hides the command text under each snippet name, for people who dock the panel on the narrow right rail and only need the names. Local preference, on by default. * fix: guide users to Auto-Tmux when a persisted session expires (#1336) * fix: guide users to Auto-Tmux when a persisted session expires A timed-out terminal session silently reconnected to a fresh shell, so people running long jobs lost them with no explanation and never learned about Auto-Tmux. Explain the expiry with a one-click Enable Auto-Tmux action, let admins default it for new hosts and tune the persistence timeout from the UI, and move the setting up with copy that says what it does. The global default stays off. * style: format terminal expiry notice * feat: improve collaboration rooms (#1338) * feat: Step CA SSH certificates as a host authentication type (#1340) * feat: Step CA SSH certificates as a host authentication type Issue short-lived SSH user certificates from a smallstep CA through its OIDC provisioner, over the CA's HTTP API rather than the step binary. Everything after issuance reuses the OPKSSH plumbing: the same encrypted per-user/host token store, WebSocket dialog and ssh2 certificate injection, with the connect paths branching on a shared usesIssuedCertificate() predicate. Instance-wide CA settings live in the admin panel, with a private-host allowlist for the SSRF guard. * fix: harden Step CA callback flow * style: format Step CA changes * feat: 1Password Connect secret sources for SSH credentials (#1341) * feat: 1Password Connect secret sources for SSH credentials Hosts and credentials can hold op://vault/item/field references instead of secrets; they are resolved at connect time from the user's secret source (1Password Connect) at the single point where every subsystem receives plaintext credentials, so terminal, SFTP, Docker, metrics and tunnels all work without per-subsystem changes. Sources are per user, optionally shared, with the access token encrypted under the owner's data key; resolved values are cached briefly in memory. * style: format secret source changes * feat: share credentials with users and roles, inherit data on account deletion (#1342) * feat: share credentials with users and roles, inherit data on account deletion Credentials can be shared at "use" or "manage" level. Recipients get a copy re-encrypted under their own data key (shared_credential_secrets), kept in step with the owner's row through the same lifecycle hooks as shared host secrets. One gate, findUsableCredential(), replaces the private-namespace lookups so a shared credential works wherever a private one does. Deleting a user now hands their hosts and credentials to a successor (the deleting admin by default) instead of revoking everything they shared. * fix: harden credential ownership transfer * feat: folder shares apply to hosts added later (#1343) * feat: folder shares apply to hosts added later Sharing a folder only fanned grants out to the hosts in it at the time. The share is now also kept as a standing rule on the folder, and a host created in or moved into it (or a subfolder) inherits the same access and secret snapshots. Rules follow folder renames and can be stopped from the share dialog. * fix: stabilize folder access migrations * fix: package sharp for both macOS architectures (#1344) * fix: prompt shared RDP users for credentials (#1345) * feat: add terminal copy-on-select option (#1346) * fix: retry protected file reads with sudo (#1349) * fix: stop SSH-authenticating hosts during routine status polling (#1347) * fix: preserve omitted host protocol settings (#1350) * fix: surface remote sync reauthentication failures (#1351) * fix: harden file reads and timer cleanup (#1352) * fix: harden file reads and timer cleanup * fix: preserve literal file path escapes * fix: enforce SSH pool connection limits (#1353) * fix: enforce SSH pool connection limits * fix: discard stale pooled connections * fix: harden connection, payload, and persisted state handling (#1354) * fix: clean up Cloudflare tunnel timeouts * fix: couple tunnel socket lifecycle * fix: validate Docker console messages * fix: bound homepage proxy responses * fix: bound reconnect and response failures * fix: harden persisted and socket state * fix: support local connections to shared hosts * fix: recover expired dashboard metrics sessions (#1355) * fix: upload files to redirected RDP drives (#1356) * fix: unify connection toolbar visibility (#1357) * fix: reset host virtualizer after editing (#1358) * test: update Guacamole toolbar display mock (#1360) * fix: reflect live SSH sessions in host status (#1359) * fix: support Vault auth in file manager (#1361) * fix: allow exec on shared hosts (#1362) * fix(file-manager): align chunked upload contract (#1371) * fix(file-manager): make bulk uploads resilient (#1373) * fix(terminal): disable local echo on alternate screen (#1372) * fix(homepage): validate clock widget timezones (#1374) An invalid timezone in a clock widget's config reached toLocaleTimeString unchecked, throwing RangeError during render and taking the homepage canvas down with it. The edit dialog accepted any string, so "America/New York" - a space where IANA wants an underscore - was easy to save, and the homepage stayed broken on every later load because the value is reloaded from the database. The edit dialog now flags an unusable zone the way FolderMetadataDialog flags a duplicate folder name: inline message, aria-invalid, and a disabled Save. Whitespace is normalized to underscores on save, so the space spelling is stored as America/New_York rather than rejected. ClockWidget falls back to local time for any config already holding an invalid zone. Related to Termix-SSH/Support#1238 * fix(hosts): preserve connection origin in editor (#1376) * fix(remote-sync): expose local login notification (#1375) * fix(auth): allow passkeys in desktop login (#1378) * fix(proxmox): elevate guest discovery commands (#1379) * Fix permanent file-transfer completion toasts (#1383) * fix(file-manager): expire completed progress toasts * test(file-manager): use valid transfer status * fix(hosts): allow clearing SSH key type (#1384) * fix(terminal): suppress local echo for contextual password prompts (#1387) * fix(desktop): surface a failed embedded backend start (#1382) * fix(desktop): surface a failed embedded backend start When the embedded backend's HTTP port was already taken, the desktop app sat on the "Loading..." spinner forever with nothing in the UI to say why. The backend logged the conflict and exited 1, and startBackendServer resolved false, but that verdict never reached the renderer: the get-embedded-server-status channel was not exposed in preload and nothing called it. The renderer, by design, treats every connection failure as "the embedded backend is still booting" and retries indefinitely -- in main.tsx's verifying phase, in Auth's desktop auto-session, and in FullScreenAppWrapper. That holds while the backend is merely slow to boot, but not once the process has exited, and nothing distinguished the two. Classify why the child died from its exit code and a bounded tail of its stderr, report it through get-embedded-server-status, and have each retry loop keep waiting only while no failure is reported. A port conflict names the port, since that is what the user has to act on -- most often a Termix container on the same ports, or a backend orphaned by a hard-kill that reapOrphanedBackendProcess could not claim. A deliberate shutdown is not reported as a crash, and a backend that is only slow to start still gets retried as before. Fixes Termix-SSH/Support#1254 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(desktop): treat every unrequested backend exit as a failure The classifier exempted a clean exit and SIGTERM/SIGINT, calling those a deliberate shutdown. It has no evidence for that: its only caller already sits behind backendStopRequested, so it is reached only for exits stopBackendServer() did not ask for. A backend that exited 0 on its own, or was terminated by the OS or an external signal, therefore reported no failure at all -- leaving all three renderer loops waiting forever for a process that is gone, which is the exact hang this change set exists to remove. Every exit reaching the classifier is now a failure, port-in-use when stderr carries EADDRINUSE and crashed otherwise, with backendStopRequested left as the sole deliberate-shutdown guard. That makes the exit code and signal irrelevant to the verdict, so the classifier now takes only the stderr tail rather than carrying two parameters it no longer reads. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * Add white label branding settings (#1386) * feat(admin): add white label branding settings Admins can configure a custom app name, logo and tagline from the Admin Settings panel. The values apply to the login screen and the browser tab title/favicon at runtime. * fix(admin): restore default icons on logo reset, validate upload MIME type Resetting the logo now restores the bundled favicon/apple-touch-icon instead of leaving the previous custom one until a reload. The admin upload also validates file.type up front instead of only failing later on save. * fix(admin): restore default favicons and reject invalid logo types Capture bundled icon hrefs before the first custom logo is applied so a reset does not leave the previous upload in the tab, and reject non-image uploads before they are read into branding state. * test(admin): cover branding routes and logo validation Add backend tests for the public GET, admin-only PATCH, unknown-field rejection, and parseBrandingLogoDataUrl so invalid images cannot land in settings without a failing test. * fix(backend): report port conflicts on the service ports (#1388) Express's app.listen(port, host, callback) registers that callback as the server's error handler as well as its listening handler: if (typeof args[args.length - 1] === 'function') { var done = args[args.length - 1] = once(args[args.length - 1]) server.once('error', done) } so a bind failure invoked the service's "started" callback with an EADDRINUSE error as its only argument and emitted nothing. None of the services read that argument, which made a failed bind indistinguishable from a successful one: the service logged that it had started, ran its initialisation, and served nothing. With one of 30003-30012 occupied the backend still reported backend_init_complete, the app loaded, and the affected feature was dead for the session with no error anywhere in the logs -- searching the backend log, the Electron main log and stdout for EADDRINUSE returned nothing, as did uncaughtException and unhandledRejection probes. This is also why only the main port behaved sensibly: database.ts does not use app.listen(), it builds the server and attaches a real error handler, so 30001 was the one port whose conflict was ever detected. listenOnServicePort() builds the server so that listening and error stay separate, and treats a conflict the way database.ts already does -- name the port, then exit -- rather than running on with one feature missing. Exiting also hands the desktop app the classified failure it already surfaces, so the user is told which port to free. Services that must own their server, such as the tunnel service with its WebSocket upgrade handler, get the same handler via attachServicePortConflictHandler(). Note that adding .on("error") to the services would not have worked: express consumes the event through once('error', done) before any later handler runs. The callback has to stop being passed to listen() at all. Fixes Termix-SSH/Support#1260 Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * feat(desktop): allow RDP/VNC/Telnet to originate from this device (#1389) The desktop pinned rdp/vnc/telnet to the remote server, so a host the user's own machine could reach but the Termix server could not was impossible to open: the app answered "Remote server required" even when no remote server was wanted. The embedded backend already runs the Guacamole websocket server and guacd's address is already configurable globally and per host, so what was missing was the choice. resolveConnectionOrigin now honours an explicit per-host origin for these protocols. Left on Default they still resolve to remote: they need a guacd, which the desktop does not ship, so originating locally only works once the user has pointed Termix at one of their own. Keeping that opt-in means an upgrade never moves a working connection onto a guacd that is not there. Serial and non-Electron behaviour are unchanged. Three call paths had the same assumption baked in and would have quietly ignored the setting: - The Guacamole call sites resolved the origin without passing the host's own override, so it could never take effect. - guacamole-api sent every token, connect-host and status call to the remote server whenever running under Electron, and remapped the host id onto the remote server's id -- which would address the wrong row, or fail outright with no server configured. - GuacamoleDisplay minted its token before resolving the origin, so the token could come from a different backend than the socket dialled. The origin is a required parameter on those API functions rather than a defaulted one. A default silently sent a missed call site to the remote server: the guacd status check in fetchToken was one, and it failed with a bare "Network Error" on a desktop with no server configured. Making it required means the compiler names every caller instead. That also covers CollabRoomTab, which now resolves from the host it already holds, so a locally-originated host stays local when presented into a room. Finally, the Connection Origin control was gated on SSH alone, so a host enabling only these protocols could never reach the setting. That gate is now a named predicate covering every protocol the control applies to. Verified end to end on Linux against a local guacd: with a host set to "This device", guacd accepted the connection and reached the target, which answered for itself. With guacd stopped, the guacd status check that has run before every connection since v2.3.0 -- now asking the backend the session will actually use -- reports it clearly before a socket is opened. Refs Termix-SSH/Support#1240 Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * feat(local-terminal): add copy/paste support (#1391) * feat(local-terminal): add copy/paste support Local terminal had no clipboard wiring, so selected text couldn't be copied. Extracted the SSH terminal's copy/paste shortcut and right-click handling into a shared terminal-clipboard module and wired it into both terminals, removing duplicated logic in the process. * fix(local-terminal): stop language changes from restarting the shell session The session effect that starts the local PTY depended on `t`, whose identity changes on every language switch (react-i18next). That tore down the running shell and spawned a new one just from changing the UI language. Read translations through a ref instead so localization stays decoupled from the PTY lifecycle. Also adds regression coverage for the extracted terminal-clipboard.ts helpers: copy with/without selection, explicit vs native paste, right-click preference, and Ctrl+right-click passthrough. * fix(file-manager): keep name column visible on narrow viewports in list view (#1402) Rebased onto dev-2.8.0 (the density refactor kept the same 3 list-view grid patterns). Use minmax(140px, 1fr) for the name track so it cannot collapse to 0px on narrow viewports; the table scrolls horizontally instead of hiding names and icons. Co-authored-by: inontz <inontz@users.noreply.github.com> * feat(desktop): local filesystem and transfer bridge for the file manager (#1392) * feat(desktop): local filesystem and transfer bridge for the file manager Adds the Electron main-process side of the upcoming Local | Remote dual-pane file manager, with no UI yet: - electron/local-files.cjs: IPC handlers to browse the local disk (home, list, mkdir, createFile, rename, trash, ensureDir, walk, reveal, open) and to stream files between the local disk and the file-manager backend (uploadLocalFile / downloadToLocal with progress events and cancellation). Streams go through Electron's `net` so the session cookie / remembered JWT is attached the same way as the renderer's own requests. - electron/preload.js: exposes them as `window.electronAPI.localFs` and `window.electronAPI.localTransfer`; the existing `invoke` allowlist is untouched. - src/types/electron.d.ts: typings for the new surface. - electron/main.cjs: registers the handlers. Follow-up PRs add the renderer side (local pane, drag-and-drop transfers, context menu). * fix(desktop): harden the local transfer bridge (origin allowlist, collision policy) Addresses the review on the transfer boundary: - The renderer no longer supplies a URL or headers. It sends `{ origin: "local" | "remote", route, deviceId }` and the main process resolves the target itself: fixed route allowlist (`uploadFileStream`, `downloadFileStream`), local = the embedded backend base, remote = the remote-sync config's URL (http/https only) with the stored JWT. Anything else is rejected before a request is made. `deviceId` is validated. - Downloads never rename or replace silently. The destination is checked first and `EEXIST` is returned unless the caller passes `overwrite: true`. Each transfer writes to its own `<dest>.<transferId>.termix-part` opened with `wx`, and publishes with `fs.link` / `COPYFILE_EXCL` (rename only when overwriting), so concurrent transfers to the same path cannot share or clobber a partial (`EBUSY` for the second). Partials are removed on failure or cancel. - New `local-fs:exists` handler so the renderer can ask before starting. - `createLocalFileHandlers` / `createTargetResolver` take their dependencies (net, shell, remote-sync getters) as parameters so the boundary is unit-testable without Electron. - src/backend/tests/electron/local-files.test.ts: target resolution and off-origin refusal, EEXIST / EBUSY / overwrite paths, unique partials and cleanup, upload multipart integrity (parsed with Busboy). * fix(desktop): Windows-safe replace for overwrite downloads `publishDownload()` used `rename(partial, dest)` for the explicit overwrite path. POSIX replaces the destination, but on Windows rename() onto an existing name commonly fails (EEXIST / EPERM, always while the file is open), so "Replace" did not actually work there. The overwrite path no longer renames onto an occupied name: 1. the current file is moved aside to a transfer-unique sibling (`<dest>.<transferId>.termix-replaced`) - renaming to a fresh name is safe on every platform; 2. the partial is published exclusively under the now-free name (the same `link` / `COPYFILE_EXCL` primitive the non-overwrite path uses); 3. the aside copy is deleted (retried once; if another process still holds it open on Windows it is left in place and logged rather than failing the transfer). Failure handling preserves the original: if step 1 fails (file in use) nothing has changed and the caller gets `EBUSY`; if step 2 fails the aside copy is moved back under its name and the error propagates. Replacing a folder with a file is refused with `EISDIR`; a destination that vanished mid-transfer falls back to the exclusive publish. The publish primitives take their filesystem operations as an injectable `publishFs` (default: real fs), and the tests drive them with a Windows-like fs whose rename() refuses to overwrite - so the strategy is verified without relying on POSIX rename-over-existing semantics: successful swap with no rename ever targeting an occupied name, original restored byte-for-byte when publishing fails, EBUSY with nothing touched when the file cannot be moved aside, EISDIR for folders, vanished destination, and the end-to-end overwrite through the download handler. --------- Co-authored-by: Max <maxim@cogitate.ai> * chore: update package lock * feat(file-manager): Termius-style Local | Remote dual pane with drag-and-drop transfers (desktop) Renderer side of the dual-pane file manager, built on the local filesystem bridge added in the previous PR. Desktop app only; the web build is unchanged (the toggle is hidden when `window.electronAPI.localFs` is absent). - New Local pane (LocalFilePane) next to the remote grid, toggled from the toolbar (Laptop icon); path, visibility and width are remembered in localStorage (`termix:file-manager:local-pane:*`). Grid and list views, hidden files toggle, breadcrumb navigation, New Folder. - Drag files/folders from the Local pane onto the remote grid to upload, and from the remote grid onto the Local pane to download. Both directions stream through the main process (`useLocalTransfers`) with a single progress toast per batch (speed, ETA, cancel). Finder drops onto the remote grid keep working as before. - Collision policy for downloads: destinations are checked first; if any exist the user is asked Replace / Skip for the batch. Skip, dismiss and timeout all mean skip - nothing is ever replaced without an explicit click, and the main process enforces the same rule (`EEXIST` unless `overwrite` is set). - Drag MIME contract: `application/x-termix-local-files` for local drags, `application/x-termix-remote-files` marker on the remote grid's internal drags, so each pane can tell the two apart from Finder drops. - Transfer targets are described as `{ origin, route, deviceId }` (`getSessionOrigin` in main-axios) - the renderer never hands the main process a URL. - i18n: new `fileManager.local*` keys in en.json only (other locales via Crowdin). - Tests: LocalFilePane rendering/navigation, local-transfer-utils (relative-path planning, size formatting). - Modified column uses the same `Mon DD HH:MM` / `Mon DD YYYY` (ls -l style) format as the remote grid, so both panes read alike. * docs: point security note to the docs root (old /security page is gone) (#1400) * chore: sync Crowdin translations * chore(deps): bump the prod-minor-updates group across 1 directory with 3 updates (#1325) Bumps the prod-minor-updates group with 3 updates in the / directory: [@anthropic-ai/sdk](https://github.com/anthropics/anthropic-sdk-typescript), [js-yaml](https://github.com/nodeca/js-yaml) and [pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg). Updates `@anthropic-ai/sdk` from 0.116.0 to 0.120.0 - [Release notes](https://github.com/anthropics/anthropic-sdk-typescript/releases) - [Changelog](https://github.com/anthropics/anthropic-sdk-typescript/blob/main/CHANGELOG.md) - [Commits](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.116.0...sdk-v0.120.0) Updates `js-yaml` from 5.2.3 to 5.3.0 - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/5.2.3...5.3.0) Updates `pg` from 8.22.0 to 8.23.0 - [Changelog](https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md) - [Commits](https://github.com/brianc/node-postgres/commits/pg@8.23.0/packages/pg) --- updated-dependencies: - dependency-name: "@anthropic-ai/sdk" dependency-version: 0.120.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: js-yaml dependency-version: 5.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: pg dependency-version: 8.23.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates ... 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-minor-updates group across 1 directory with 10 updates (#1323) Bumps the dev-minor-updates group with 10 updates in the / directory: | Package | From | To | | --- | --- | --- | | [@codemirror/commands](https://github.com/codemirror/commands) | `6.10.4` | `6.11.0` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.1.2` | `26.2.0` | | [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.0.5` | `6.1.0` | | [electron](https://github.com/electron/electron) | `43.2.0` | `43.4.1` | | [globals](https://github.com/sindresorhus/globals) | `17.9.0` | `17.11.0` | | [i18next](https://github.com/i18next/i18next) | `26.3.6` | `26.4.0` | | [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `1.28.0` | `1.33.0` | | [react-hook-form](https://github.com/react-hook-form/react-hook-form) | `7.84.0` | `7.85.0` | | [react-pdf](https://github.com/wojtekmaj/react-pdf/tree/HEAD/packages/react-pdf) | `10.4.1` | `10.5.0` | | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.66.0` | `8.67.0` | Updates `@codemirror/commands` from 6.10.4 to 6.11.0 - [Changelog](https://github.com/codemirror/commands/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/commands/commits) Updates `@types/node` from 26.1.2 to 26.2.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `@vitejs/plugin-react` from 6.0.5 to 6.1.0 - [Release notes](https://github.com/vitejs/vite-plugin-react/releases) - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.1.0/packages/plugin-react) Updates `electron` from 43.2.0 to 43.4.1 - [Release notes](https://github.com/electron/electron/releases) - [Commits](https://github.com/electron/electron/compare/v43.2.0...v43.4.1) Updates `globals` from 17.9.0 to 17.11.0 - [Release notes](https://github.com/sindresorhus/globals/releases) - [Commits](https://github.com/sindresorhus/globals/compare/v17.9.0...v17.11.0) Updates `i18next` from 26.3.6 to 26.4.0 - [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.6...v26.4.0) Updates `lucide-react` from 1.28.0 to 1.33.0 - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/1.33.0/packages/lucide-react) Updates `react-hook-form` from 7.84.0 to 7.85.0 - [Release notes](https://github.com/react-hook-form/react-hook-form/releases) - [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md) - [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.84.0...v7.85.0) Updates `react-pdf` from 10.4.1 to 10.5.0 - [Release notes](https://github.com/wojtekmaj/react-pdf/releases) - [Commits](https://github.com/wojtekmaj/react-pdf/commits/v10.5.0/packages/react-pdf) Updates `typescript-eslint` from 8.66.0 to 8.67.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.67.0/packages/typescript-eslint) --- updated-dependencies: - dependency-name: "@codemirror/commands" dependency-version: 6.11.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: "@types/node" dependency-version: 26.2.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: "@vitejs/plugin-react" dependency-version: 6.1.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: electron dependency-version: 43.4.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: globals dependency-version: 17.11.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: i18next dependency-version: 26.4.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: lucide-react dependency-version: 1.33.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: react-hook-form dependency-version: 7.85.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: react-pdf dependency-version: 10.5.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: typescript-eslint dependency-version: 8.67.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore: sync Crowdin translations * Update redirect-issues workflow configuration Updated the workflow to change the runner and modify the issue response message. * chore: sync Crowdin translations * Add Hetzner logo and referral link to README Added Hetzner logo with a referral link to README. * Fix Hetzner logo URL in README.md * docs: point security note to the feature security page The old /security page is gone and the docs root redirects to /install/, which loses the encryption context the sentence promises. Point the per-user secret and database encryption note at the canonical docs.termix.site/features/authentication/security/ page instead. Applied across all README locales. --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: ssmurfgg04-gif <232103099+ssmurfgg04-gif@users.noreply.github.com> Co-authored-by: ZacharyZcR <payasonorahc@protonmail.com> * fix: use i18n for host status tooltip labels (#1403) * chore: sync Crowdin translations * chore(deps): bump the prod-minor-updates group across 1 directory with 3 updates (#1325) Bumps the prod-minor-updates group with 3 updates in the / directory: [@anthropic-ai/sdk](https://github.com/anthropics/anthropic-sdk-typescript), [js-yaml](https://github.com/nodeca/js-yaml) and [pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg). Updates `@anthropic-ai/sdk` from 0.116.0 to 0.120.0 - [Release notes](https://github.com/anthropics/anthropic-sdk-typescript/releases) - [Changelog](https://github.com/anthropics/anthropic-sdk-typescript/blob/main/CHANGELOG.md) - [Commits](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.116.0...sdk-v0.120.0) Updates `js-yaml` from 5.2.3 to 5.3.0 - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/5.2.3...5.3.0) Updates `pg` from 8.22.0 to 8.23.0 - [Changelog](https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md) - [Commits](https://github.com/brianc/node-postgres/commits/pg@8.23.0/packages/pg) --- updated-dependencies: - dependency-name: "@anthropic-ai/sdk" dependency-version: 0.120.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: js-yaml dependency-version: 5.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: pg dependency-version: 8.23.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates ... 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-minor-updates group across 1 directory with 10 updates (#1323) Bumps the dev-minor-updates group with 10 updates in the / directory: | Package | From | To | | --- | --- | --- | | [@codemirror/commands](https://github.com/codemirror/commands) | `6.10.4` | `6.11.0` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.1.2` | `26.2.0` | | [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.0.5` | `6.1.0` | | [electron](https://github.com/electron/electron) | `43.2.0` | `43.4.1` | | [globals](https://github.com/sindresorhus/globals) | `17.9.0` | `17.11.0` | | [i18next](https://github.com/i18next/i18next) | `26.3.6` | `26.4.0` | | [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `1.28.0` | `1.33.0` | | [react-hook-form](https://github.com/react-hook-form/react-hook-form) | `7.84.0` | `7.85.0` | | [react-pdf](https://github.com/wojtekmaj/react-pdf/tree/HEAD/packages/react-pdf) | `10.4.1` | `10.5.0` | | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.66.0` | `8.67.0` | Updates `@codemirror/commands` from 6.10.4 to 6.11.0 - [Changelog](https://github.com/codemirror/commands/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/commands/commits) Updates `@types/node` from 26.1.2 to 26.2.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `@vitejs/plugin-react` from 6.0.5 to 6.1.0 - [Release notes](https://github.com/vitejs/vite-plugin-react/releases) - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.1.0/packages/plugin-react) Updates `electron` from 43.2.0 to 43.4.1 - [Release notes](https://github.com/electron/electron/releases) - [Commits](https://github.com/electron/electron/compare/v43.2.0...v43.4.1) Updates `globals` from 17.9.0 to 17.11.0 - [Release notes](https://github.com/sindresorhus/globals/releases) - [Commits](https://github.com/sindresorhus/globals/compare/v17.9.0...v17.11.0) Updates `i18next` from 26.3.6 to 26.4.0 - [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.6...v26.4.0) Updates `lucide-react` from 1.28.0 to 1.33.0 - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/1.33.0/packages/lucide-react) Updates `react-hook-form` from 7.84.0 to 7.85.0 - [Release notes](https://github.com/react-hook-form/react-hook-form/releases) - [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md) - [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.84.0...v7.85.0) Updates `react-pdf` from 10.4.1 to 10.5.0 - [Release notes](https://github.com/wojtekmaj/react-pdf/releases) - [Commits](https://github.com/wojtekmaj/react-pdf/commits/v10.5.0/packages/react-pdf) Updates `typescript-eslint` from 8.66.0 to 8.67.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.67.0/packages/typescript-eslint) --- updated-dependencies: - dependency-name: "@codemirror/commands" dependency-version: 6.11.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: "@types/node" dependency-version: 26.2.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: "@vitejs/plugin-react" dependency-version: 6.1.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: electron dependency-version: 43.4.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: globals dependency-version: 17.11.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: i18next dependency-version: 26.4.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: lucide-react dependency-version: 1.33.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: react-hook-form dependency-version: 7.85.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: react-pdf dependency-version: 10.5.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: typescript-eslint dependency-version: 8.67.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore: sync Crowdin translations * Update redirect-issues workflow configuration Updated the workflow to change the runner and modify the issue response message. * chore: sync Crowdin translations * fix: use i18n for host status tooltip labels (#1265) * fix: add missing hosts.status.* locale keys (fixes #1265) * fix: add hosts.status.* translation keys for i18n tooltip The buildStatusTooltip function calls t("hosts.status.available"), t("hosts.status.reachable"), t("hosts.status.offline"), and t("hosts.status.monitoringDisabled"), but the locale file only had "status": "Status" as a flat string. Replaced with a status object containing all four keys plus a "label" key preserving the original "Status" string. * fix: restore final newline in en.json Requested by ZacharyZcR in review feedback. * test: assert translated labels in buildStatusTooltip Per review feedback from ZacharyZcR: add focused tests that exercise buildStatusTooltip with a translator and assert the rendered labels rather than key paths. Covers all three status values, monitoring disabled, protocol list, and the no-key-path regression guard. --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: ZacharyZcR <payasonorahc@protonmail.com> * fix(workspaces): fall back when randomUUID is unavailable (#1397) * fix(terminal): preserve macOS Alt digit characters (#1398) * fix(ssh): verify resolved server host identity (#1419) * fix: add principals to Termix ID certificates (#1421) * chore: sync Crowdin translations * chore(deps): bump the prod-minor-updates group across 1 directory with 3 updates (#1325) Bumps the prod-minor-updates group with 3 updates in the / directory: [@anthropic-ai/sdk](https://github.com/anthropics/anthropic-sdk-typescript), [js-yaml](https://github.com/nodeca/js-yaml) and [pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg). Updates `@anthropic-ai/sdk` from 0.116.0 to 0.120.0 - [Release notes](https://github.com/anthropics/anthropic-sdk-typescript/releases) - [Changelog](https://github.com/anthropics/anthropic-sdk-typescript/blob/main/CHANGELOG.md) - [Commits](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.116.0...sdk-v0.120.0) Updates `js-yaml` from 5.2.3 to 5.3.0 - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/5.2.3...5.3.0) Updates `pg` from 8.22.0 to 8.23.0 - [Changelog](https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md) - [Commits](https://github.com/brianc/node-postgres/commits/pg@8.23.0/packages/pg) --- updated-dependencies: - dependency-name: "@anthropic-ai/sdk" dependency-version: 0.120.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: js-yaml dependency-version: 5.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: pg dependency-version: 8.23.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates ... 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-minor-updates group across 1 directory with 10 updates (#1323) Bumps the dev-minor-updates group with 10 updates in the / directory: | Package | From | To | | --- | --- | --- | | [@codemirror/commands](https://github.com/codemirror/commands) | `6.10.4` | `6.11.0` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.1.2` | `26.2.0` | | [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.0.5` | `6.1.0` | | [electron](https://github.com/electron/electron) | `43.2.0` | `43.4.1` | | [globals](https://github.com/sindresorhus/globals) | `17.9.0` | `17.11.0` | | [i18next](https://github.com/i18next/i18next) | `26.3.6` | `26.4.0` | | [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `1.28.0` | `1.33.0` | | [react-hook-form](https://github.com/react-hook-form/react-hook-form) | `7.84.0` | `7.85.0` | | [react-pdf](https://github.com/wojtekmaj/react-pdf/tree/HEAD/packages/react-pdf) | `10.4.1` | `10.5.0` | | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.66.0` | `8.67.0` | Updates `@codemirror/commands` from 6.10.4 to 6.11.0 - [Changelog](https://github.com/codemirror/commands/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/commands/commits) Updates `@types/node` from 26.1.2 to 26.2.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `@vitejs/plugin-react` from 6.0.5 to 6.1.0 - [Release notes](https://github.com/vitejs/vite-plugin-react/releases) - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.1.0/packages/plugin-react) Updates `electron` from 43.2.0 to 43.4.1 - [Release notes](https://github.com/electron/electron/releases) - [Commits](https://github.com/electron/electron/compare/v43.2.0...v43.4.1) Updates `globals` from 17.9.0 to 17.11.0 - [Release notes](https://github.com/sindresorhus/globals/releases) - [Commits](https://github.com/sindresorhus/globals/compare/v17.9.0...v17.11.0) Updates `i18next` from 26.3.6 to 26.4.0 - [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.6...v26.4.0) Updates `lucide-react` from 1.28.0 to 1.33.0 - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/1.33.0/packages/lucide-react) Updates `react-hook-form` from 7.84.0 to 7.85.0 - [Release notes](https://github.com/react-hook-form/react-hook-form/releases) - [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md) - [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.84.0...v7.85.0) Updates `react-pdf` from 10.4.1 to 10.5.0 - [Release notes](https://github.com/wojtekmaj/react-pdf/releases) - [Commits](https://github.com/wojtekmaj/react-pdf/commits/v10.5.0/packages/react-pdf) Updates `typescript-eslint` from 8.66.0 to 8.67.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.67.0/packages/typescript-eslint) --- updated-dependencies: - dependency-name: "@codemirror/commands" dependency-version: 6.11.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: "@types/node" dependency-version: 26.2.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: "@vitejs/plugin-react" dependency-version: 6.1.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: electron dependency-version: 43.4.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: globals dependency-version: 17.11.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: i18next dependency-version: 26.4.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: lucide-react dependency-version: 1.33.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: react-hook-form dependency-version: 7.85.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: react-pdf dependency-version: 10.5.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: typescript-eslint dependency-version: 8.67.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore: sync Crowdin translations * Update redirect-issues workflow configuration Updated the workflow to change the runner and modify the issue response message. * chore: sync Crowdin translations * Add Hetzner logo and referral link to README Added Hetzner logo with a referral link to README. * Fix Hetzner logo URL in README.md * chore: pull sponsor logos from the docs site * fix: add principals to Termix ID certificates --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: ZacharyZcR <payasonorahc@protonmail.com> * fix(deps): resolve transitive security advisories (#1412) * chore: sync Crowdin translations * chore(deps): bump the prod-minor-updates group across 1 directory with 3 updates (#1325) Bumps the prod-minor-updates group with 3 updates in the / directory: [@anthropic-ai/sdk](https://github.com/anthropics/anthropic-sdk-typescript), [js-yaml](https://github.com/nodeca/js-yaml) and [pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg). Updates `@anthropic-ai/sdk` from 0.116.0 to 0.120.0 - [Release notes](https://github.com/anthropics/anthropic-sdk-typescript/releases) - [Changelog](https://github.com/anthropics/anthropic-sdk-typescript/blob/main/CHANGELOG.md) - [Commits](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.116.0...sdk-v0.120.0) Updates `js-yaml` from 5.2.3 to 5.3.0 - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/5.2.3...5.3.0) Updates `pg` from 8.22.0 to 8.23.0 - [Changelog](https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md) - [Commits](https://github.com/brianc/node-postgres/commits/pg@8.23.0/packages/pg) --- updated-dependencies: - dependency-name: "@anthropic-ai/sdk" dependency-version: 0.120.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: js-yaml dependency-version: 5.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: pg dependency-version: 8.23.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates ... 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-minor-updates group across 1 directory with 10 updates (#1323) Bumps the dev-minor-updates group with 10 updates in the / directory: | Package | From | To | | --- | --- | --- | | [@codemirror/commands](https://github.com/codemirror/commands) | `6.10.4` | `6.11.0` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.1.2` | `26.2.0` | | [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.0.5` | `6.1.0` | | [electron](https://github.com/electron/electron) | `43.2.0` | `43.4.1` | | [globals](https://github.com/sindresorhus/globals) | `17.9.0` | `17.11.0` | | [i18next](https://github.com/i18next/i18next) | `26.3.6` | `26.4.0` | | [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `1.28.0` | `1.33.0` | | [react-hook-form](https://github.com/react-hook-form/react-hook-form) | `7.84.0` | `7.85.0` | | [react-pdf](https://github.com/wojtekmaj/react-pdf/tree/HEAD/packages/react-pdf) | `10.4.1` | `10.5.0` | | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.66.0` | `8.67.0` | Updates `@codemirror/commands` from 6.10.4 to 6.11.0 - [Changelog](https://github.com/codemirror/commands/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/commands/commits) Updates `@types/node` from 26.1.2 to 26.2.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `@vitejs/plugin-react` from 6.0.5 to 6.1.0 - [Release notes](https://github.com/vitejs/vite-plugin-react/releases) - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.1.0/packages/plugin-react) Updates `electron` from 43.2.0 to 43.4.1 - [Release notes](https://github.com/electron/electron/releases) - [Commits](https://github.com/electron/electron/compare/v43.2.0...v43.4.1) Updates `globals` from 17.9.0 to 17.11.0 - [Release notes](https://github.com/sindresorhus/globals/releases) - [Commits](https://github.com/sindresorhus/globals/compare/v17.9.0...v17.11.0) Updates `i18next` from 26.3.6 to 26.4.0 - [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.6...v26.4.0) Updates `lucide-react` from 1.28.0 to 1.33.0 - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/1.33.0/packages/lucide-react) Updates `react-hook-form` from 7.84.0 to 7.85.0 - [Release notes](https://github.com/react-hook-form/react-hook-form/releases) - [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md) - [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.84.0...v7.85.0) Updates `react-pdf` from 10.4.1 to 10.5.0 - [Release notes](https://github.com/wojtekmaj/react-pdf/releases) - [Commits](https://github.com/wojtekmaj/react-pdf/commits/v10.5.0/packages/react-pdf) Updates `typescript-eslint` from 8.66.0 to 8.67.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.67.0/packages/typescript-eslint) --- updated-dependencies: - dependency-name: "@codemirror/commands" dependency-version: 6.11.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: "@types/node" dependency-version: 26.2.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: "@vitejs/plugin-react" dependency-version: 6.1.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: electron dependency-version: 43.4.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: globals dependency-version: 17.11.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: i18next dependency-version: 26.4.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: lucide-react dependency-version: 1.33.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: react-hook-form dependency-version: 7.85.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: react-pdf dependency-version: 10.5.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: typescript-eslint dependency-version: 8.67.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore: sync Crowdin translations * Update redirect-issues workflow configuration Updated the workflow to change the runner and modify the issue response message. * chore: sync Crowdin translations * Add Hetzner logo and referral link to README Added Hetzner logo with a referral link to README. * Fix Hetzner logo URL in README.md * chore: pull sponsor logos from the docs site * fix(deps): resolve transitive security advisories --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * fix(sync): map nested host parent references (#1418) * fix(metrics): surface SSH host key changes (#1404) * fix(guacamole): coalesce VNC wheel floods and label meta keys by device (#1385) High-latency proxies like Cloudflare queue guacamole-common-js scroll clicks so the desktop keeps crawling after the user stops. Cap in-flight wheel buttons, and show Super/Cmd in the VNC toolbar on non-Windows clients. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com> * fix(file-manager): keep downloaded files inside the selected local folder Remote file names were turned into local destinations by splitting the relative remote path on "/" and concatenating each name with the platform separator. A POSIX file name may contain "\", ":" or end in a dot, so on Windows a remote "..\outside.txt" downloaded into C:\Downloads\selected was normalised to C:\Downloads\outside.txt - outside the folder the user picked, even with overwrite disabled. The main process only normalised destPath and never checked it against the selected root. Two independent layers now enforce containment: Renderer (local-transfer-utils.ts) - `assertSafeLocalComponent(name, separator)` validates each remote path component for the destination platform: never empty, "." or "..", never "/" or NUL; on Windows (separator "\") additionally no "\ : * ? " < > |", no control characters, no trailing dot/space, no reserved device names (CON, NUL, COM1...). Backslashes stay legal on macOS/Linux, where they are ordinary file-name characters and the result remains inside the folder. - `buildLocalDestination(localDir, relativePath, separator)` joins the validated components and asserts the result is strictly under localDir (case-insensitive on Windows). - useLocalTransfers builds every file and directory destination through it. Items that fail are skipped before any filesystem call and reported ("Skipped N item(s) whose names cannot be used on this computer"). Main process (electron/local-files.cjs) - `assertWithinRoot(rootPath, candidate, pathImpl)` resolves + normalises both paths and refuses anything that is the root itself, escapes it (".." after normalisation), is absolute relative to it (another drive, UNC) or contains empty/".." segments. `pathImpl` is injectable so the Windows rules run in tests on any OS. - downloadToLocal requires `rootPath` (the selected folder) and checks the destination before the request is made or any file is created; the ensure-dir handler applies the same check when a root is passed (used for the directory skeleton of downloaded trees). - LocalDownloadRequest / downloadSessionFileToLocal / ensureLocalDirectory carry the root. Tests - Renderer: ordinary nested folders on Windows; backslash traversal in a POSIX name; absolute, drive-qualified and UNC names; reserved names, trailing dots/spaces, control chars; POSIX traversal rejected while a POSIX-legal backslash name is kept inside the folder. - Main process (path.win32): nested destinations accepted incl. case differences; "selected\..\outside.txt" refused; other drive / UNC / sibling folder refused; missing root refused; end-to-end handler test that a POSIX "../outside.txt" download and an escaping ensure-dir are refused before any network traffic or disk write. * feat(file-manager): right-click context menu for the local pane Mirrors the remote grid's menu for the user's own disk. On an entry (or the current multi-selection): Open / Open folder, Upload to server, Reveal in Finder/Explorer, Rename (inline, F2), Copy Path, Move to Trash (confirmation toast, Del). On the background: New Folder, New File, Reveal, Show/Hide hidden files, Refresh (F5). Enter opens, Cmd/Ctrl+A selects all, Escape clears the selection. Deletion goes through shell.trashItem so it lands in the OS Trash and is recoverable; rename and create refuse names containing path separators and never overwrite an existing entry. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Bn6K6xNAihgWZ5fMVWt1W * feat(file-manager): resizable list-view columns in both panes Drag the boundary at the left edge of a column header (Modified, Owner, Size, Permissions on the remote grid; Modified, Size, Kind in the local pane) to change its width; the Name column takes whatever is left. Double-click a handle to reset that column. Widths are remembered per pane in localStorage. Finishing a drag over a sortable header no longer toggles the sort. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Bn6K6xNAihgWZ5fMVWt1W * feat(file-manager): pinned ".." parent entry in both panes Both the remote grid (list, grid and empty-folder states) and the local pane show a Termius-style ".." row pinned above the entries whenever the current folder has a parent. Double-clicking it goes up one level. It is also a drop target: local files dropped on it upload into the parent folder, remote rows dragged onto it move there, and remote items dropped on the local pane's ".." download into the parent folder. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Bn6K6xNAihgWZ5fMVWt1W * feat(file-manager): show/hide list-view columns from the header Right-click a list-view header (remote grid or local pane) to open a Columns menu and tick/untick Modified, Owner, Size, Permissions (remote) or Modified, Size, Kind (local). Hidden columns leave the grid template entirely so the Name column gets the space back; at least one optional column always stays on. The choice is remembered per pane alongside the column widths. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Bn6K6xNAihgWZ5fMVWt1W * feat(file-manager): sidebar toggle works on desktop too The toolbar's sidebar button now shows/hides the directories panel on desktop (persisted), while below md it still opens the mobile overlay. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Bn6K6xNAihgWZ5fMVWt1W * feat(file-manager): resizable directories sidebar The Trash/Directories sidebar can now be resized by dragging its right edge (160px minimum, up to 40% of the row); double-click the handle to restore the default 224px. The width is remembered. The same handle and persisted-width hook now also drive the local pane divider, replacing the inline implementation. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Bn6K6xNAihgWZ5fMVWt1W * fix(metrics): support macOS/WIN hosts in stats collection (#1430) * fix(metrics): support macOS hosts in stats collection Host metrics collectors only ever ran Linux commands (/proc/*, ip, GNU df flags), so any macOS host always reported 0%/null for cpu, memory, uptime, network and disk. Detect the host platform once per poll and use vm_stat, sysctl, top, ifconfig and netstat on Darwin hosts instead. * fix(metrics): support Windows hosts in stats collection RDP/VNC hosts running Windows hit the same problem as macOS did: no /proc, no BSD tools, not even uname. Route CPU, memory, uptime, network and disk through PowerShell (WMI/CIM) when the host is detected as Windows, using -EncodedCommand so there's no cmd.exe quoting to fight with. * fix(metrics): use real macOS df/mount for disk collection BSD df's -T flag filters by filesystem type instead of printing one like GNU df does, so the previous macOS disk path was still running a GNU-only command and coming back empty. Now uses df -Pk plus mount output to build the filesystem type/percent list, filtering out the noisy APFS system volumes and devfs/autofs mounts. Verified on an M4 MacBook running the latest macOS - disk usage now reports correctly. * feat(file-manager): Termius-style Local | Remote dual pane with drag-and-drop transfers (desktop) (#1413) Integrate the reviewed change and its maintainer fixes into dev-2.8.0. Validated with focused regression tests, type-check, lint, formatting, build, and the PR Check database jobs. * fix(terminal): persist Ctrl+/- font zoom so it survives option refreshes (#1399) Integrate the reviewed change and its maintainer fixes into dev-2.8.0. Validated with focused regression tests, type-check, lint, formatting, build, and the PR Check database jobs. * Fix macOS terminal packaging and keyboard shortcuts. (#1417) Integrate the reviewed change and its maintainer fixes into dev-2.8.0. Validated with focused regression tests, type-check, lint, formatting, build, and the PR Check database jobs. * fix(auth): skip TOTP only after verified WebAuthn user verification (#1420) Integrate the reviewed change and its maintainer fixes into dev-2.8.0. Validated with focused regression tests, type-check, lint, formatting, build, and the PR Check database jobs. * feat(hosts): add per-host Web Endpoints (direct or SSH-tunnelled web UIs) (#1416) * test: provide an in-memory localStorage for the vitest environment jsdom in this project ships without a localStorage global, so every suite that touched storage threw "Cannot read properties of undefined" during setup and failed wholesale -- 119 tests across 15 files, none of them actual product defects. Node only supplies localStorage with --localstorage-file, which persists to disk and is shared across test files. A per-process in-memory Storage is what tests want, so define one (plus sessionStorage) when the global is absent, alongside the existing matchMedia shim. Full suite goes from 15 failed files / 119 failed tests to 400 files and 2888 tests passing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fdjjsdaz6aFMyJr4h3Y6qj * feat(web-endpoints): add endpoint types and URL resolution First step of per-host Web Endpoints: a host declares web UIs it serves and opens them either directly at the host's address or through an SSH forward Termix establishes on demand. This commit is pure logic with no I/O, so it needs no mocks to test. resolveWebEndpointUrl expects an already-normalized path -- normalization is the storage boundary's job (a later commit), and duplicating it here would invite the two copies to drift. separatedTunnelHost is the one part that is a security control rather than a convenience. Cookies are keyed by host and ignore the port, and SameSite computes "site" as scheme + registrable domain -- also ignoring the port. A forward reached at the host string serving Termix is therefore same-site with Termix, which leaks the session both ways: the framed service receives the jwt cookie, and a Set-Cookie it returns lands in the jar Termix's own API calls read from. So a tunnel URL resolves to a different loopback spelling than the page's, and refuses outright when no alias exists. Only loopback literals qualify -- a same-registrable-domain alias could still answer Set-Cookie with a Domain attribute that reaches Termix. The cookie-separation tests were verified to fail against a resolver that returns the page host (4 failures), so they cannot pass vacuously. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(web-endpoints): validate and normalize endpoint config normalizeWebEndpoints is the enforcement point for values that reach an href and an iframe src, so the editor's constraints are UX rather than security. It drops any row it refuses instead of rejecting the whole host -- one bad endpoint must not make a host unsaveable or unlistable. Paths are checked for C0 controls and DEL by codepoint rather than by regex character class: "\t//evil.example" defeats a startsWith("//") guard, because the browser strips the control character and then follows the authority. bindHost lands both in a TCP listener and in a URL authority, so it is restricted to a bare host literal -- nothing carrying a scheme, port, path or credentials survives. bindHost and localPort are ignored on a direct endpoint, which never creates a forward. parseWebUiConfig never throws. A malformed stored value yields an empty endpoint list, so a half-written config cannot take out the whole host listing -- which is what dockerConfig's bare JSON.parse does today. The editor validator is a second implementation in a layer that cannot import backend route modules. Its accompanying test runs BOTH implementations over the same path and port samples, because drift here is invisible in the worst way: the editor accepts a row, the normalizer silently drops it, and the endpoint disappears on reload with no error. That agreement test was verified to fail (4 cases) when the editor's control-character check is removed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * chore(db): migrate the shared_credential_secrets foreign key rename Running `npm run schema:migrations` on an UNCHANGED schema emits these, so they are pre-existing drift between schema.ts and drizzle/, not something this branch introduced. Landing them alone, before the web-endpoint columns, so the feature's own migration is reviewable without an unrelated table rebuild sitting in the middle of it. Both forms are a foreign-key constraint rename only. Postgres drops and re-adds the constraint under a shorter name. SQLite has no ALTER for that, so drizzle emits the standard table rebuild -- verified data-preserving: CREATE lists 14 columns, INSERT...SELECT copies the same 14 in the same order, and both indexes are recreated. The SQLite file is in practice dead code: runRemoteMigrations throws for sqlite, which builds its schema from db/index.ts instead. It is kept rather than hand-trimmed because drizzle derives the meta snapshot from schema.ts regardless, so trimming the .sql while the snapshot advances would make the drift permanently invisible -- no future `generate` would re-emit it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(db): add enable_web_ui and web_ui_config columns Two columns on ssh_data mirroring the Docker pair. No show_web_ui_in_sidebar: every existing showXInSidebar column is vestigial -- they appear only in defaults, the export payload and tests, and gate no rendering -- so a fourth dead column plus a migration buys nothing. web_ui_config stores an object rather than a bare array so host-level web settings can be added later without a second migration. The column has to be declared in FOUR places, not one. SQLite never runs the drizzle migrations at all (runRemoteMigrations throws for sqlite), so the live default-dialect schema comes from hand-written DDL: 1. db/schema.ts, then the two generated dialect schemas and the migrations 2. db/index.ts CREATE TABLE -- fresh databases 3. db/index.ts addColumnIfNotExists -- existing databases 4. database.ts CREATE TABLE and its positional INSERT -- encrypted export Missing 2 or 3 breaks every host write on the default dialect while the migration file sits there looking correct. Two guards, both watched failing first. bootstrap-matches-schema-columns boots a real database and compares PRAGMA table_info against the drizzle definition for every table -- it reported ssh_data.enable_web_ui and ssh_data.web_ui_config missing before item 2/3 landed. A grep-based guard could not: db/index.ts names columns as snake_case strings, never the camelCase the schema uses. export-ddl-matches-schema-columns covers database.ts, which no booted database reaches. It caught a real defect while being written: the two new columns went into the INSERT list but the VALUES list still held 53 placeholders for 55 columns. Being positional, that shifts every later value by one. The placeholder-count assertion is now permanent. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(hosts): thread web endpoint config through host read and write paths A host field has to be enumerated by hand in nine places here, and "added a column, missed one update path" is this codebase's most repeated bug -- during the first attempt at this feature a field was missed at one of these points six separate times, each surfacing as a different mystery: endpoints that saved but never appeared, config that vanished on reload. Backend: host-normalizers (input type, CONNECT_LEVEL_FIELDS, boolean normalization, parse block), host.ts (create, update, both read paths, quick-connect defaults), host-bulk-routes (bulk update, import, reset). Renderer: host-export-payload, HostManagerData's sshHostToHost, tabUtils' hostToSSHHost, HostEditorData's form seed and payload builder. The three renderer mappers copy field by field, so an unlisted field is silently dropped -- which is how endpoints saved correctly and never appeared. webUiConfig is parsed with parseWebUiConfig rather than a bare JSON.parse. dockerConfig on the adjacent line uses a bare one, so a single malformed value takes out the whole host listing; that is a bug to avoid copying, not a convention to follow. All three write paths now clear webUiConfig when the feature is disabled. They disagreed before, and the export payload ships the config unconditionally -- so a host disabled without clearing still exported its endpoint list (internal hostnames, ports, paths) while the UI read as off, and re-enabling resurrected stale endpoints. webUiConfig is shared with connect-level recipients, unlike dockerConfig. A connect-level recipient is already authorized to open these tunnels, so withholding the config only breaks discovery while the flag advertises the feature. Docker's precedent does not transfer: its tab works without its config, whereas a web endpoint IS its config. The enumeration guard asserts every one of the nine files mentions the web endpoint field beside its Docker counterpart, and checks the Docker anchor is present too so it cannot pass vacuously if a file is restructured. The clear-on-disable assertion was rewritten after the first version passed with the guard deleted -- a loose regex matched unrelated sites. Both halves are now anchored on exact text and were watched failing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(tunnel): report the real bound port, support idle close, reserve web: Three changes the web endpoint open route depends on, plus the name reservation that makes the scheme safe. Real bound port. Under sourcePort 0 the kernel assigns the port, but the runtime recorded the requested value -- so it advertised 0 and any caller reusing it failed. It now records tcpServer.address().port. Idle close, behind the new tunnelConfig.idleTimeoutMs. Web endpoint tunnels are opened on demand and must not outlive their use. The timer lives inside establishDirectTunnel because the socket set is only visible from that closure, polls at min(30s, timeout) so "empty for N" means roughly that rather than "empty at the instant of one N-spaced tick", and unrefs so it cannot hold the process open. It calls cleanupTunnelResources rather than close(): close() stops the listener but leaves the entry in activeTunnelRuntimes, so the open route would keep handing out a port nothing is listening on. Reserved names skip retry. handleDisconnect returns early for a "web:" name after a forced cleanup. maxRetries: 0 would NOT achieve this -- the retry path reads `maxRetries || 3`, so 0 falls through to 3. The cleanup is forced because cleanupTunnelResources no-ops while tunnelConnecting holds the name, and a web tunnel has no retry pass to self-heal a leaked runtime. That early return carries an identity guard, which is the subtle one. sourceClient.end() only STARTS an async teardown, so the SSH "close" event lands after a reopen may already have registered a NEW runtime under the same name. Acting by name alone would tear down the successor rather than the stale tunnel -- surfacing as a 200 with a good port followed by a silent connection reset and no error anywhere. handleDisconnect now takes the closing Client and returns early when the registered runtime belongs to someone else. The idle timer carries the same guard for the same reason. /ssh/tunnel/connect now rejects a user-supplied "web:" name with 400. validateTunnelConfig is no defence here: it returns true unconditionally for any name that is not the legacy 6-part format, so an authenticated user could otherwise create a real retry-configured tunnel that collides with a live web endpoint forward and silently loses its own reconnect behaviour. The manager tests run against a real TCP listener and real timers -- mixing fake timers with real socket I/O is a known route to a hanging test. Both were watched failing: reverting the bound port fails the port test, and swapping cleanupTunnelResources for close() fails the idle test, which asserts the ENTRY is gone rather than merely that the listener stopped. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(tunnel): add the web endpoint open route POST /ssh/tunnel/web-endpoint/open { hostId, endpointId } -> { port }. The host is resolved through the user-scoped resolveHostById, so an authenticated user cannot obtain a forward to a host id they do not own. The endpoint is re-normalized out of storage rather than trusted: the stored value predates any later tightening of the rules, and this is what a forward gets built from. An enabled flag is required as well as a present endpoint -- a bulk update that sends only { webUiConfig } can leave a configured endpoint on a host whose UI reads as off everywhere. Not gated to the desktop. The forward binds wherever this backend runs, as the server tunnels feature does, and the endpoint's own bindHost decides whether that is reachable from a browser. endpointHost: "127.0.0.1" is load-bearing, not cosmetic. connectSSHTunnel picks its strategy via shouldEstablishDirectTunnel -> isSingleHostTunnel, which keys on endpointHost -- setting only targetHost selects a different path and the forward never binds locally. connectSSHTunnel never rejects, and its promise resolves right after conn.connect() -- long before the SSH "ready" event populates activeTunnelRuntimes. Awaited is not connected, so waitForTunnelSettled polls the maps the manager already exports. Polling rather than adding a promise-returning variant: every existing caller is fire-and-forget by design, and changing that contract for one new caller is the larger blast radius. A probe forwardOut runs before returning 200. Without it the route succeeds the moment listen() does, and forwardOut is only attempted per inbound socket where failure is swallowed -- so the likeliest real error, nothing listening on the endpoint's port, reached the user as a blank frame and no message. Staleness is validated at open, never on save: host save lives in the database service and the runtimes live in the tunnel service, with no push between them. On reuse the route compares a fingerprint covering the endpoint's target AND the host's SSH identity, and reopens when it differs. An absent fingerprint means reuse, not staleness -- a reserved-prefixed runtime can only have been created here. Deletion, disabling and host removal then need no handling: nothing reopens the tunnel, so it idles out. Also closes an authorization gap this feature would otherwise have created. /ssh/tunnel/disconnect and /ssh/tunnel/cancel checked ownership only inside `if (config && config.sourceHostId)`, and web tunnels are deliberately absent from tunnelConfigs -- so the check never ran for them. Host ids are small sequential integers and endpoint ids are client-supplied, so the name is guessable and any authenticated user could force-close another user's tunnel. authorizeTunnelAction recovers the host id from the name and fails closed when it cannot; the tests were watched failing against the old behaviour. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(hosts): add the web endpoint client and per-origin certificate allowance The client posts a path relative to tunnelApi's base, which already includes /ssh -- a leading "/ssh" here resolves to /ssh/ssh/... and 404s on every call. The test asserts that on the captured runtime argument rather than by scanning source, so quoting style and indirection cannot fool it. Backend error messages are preserved rather than collapsed. 502 is this route's likeliest real failure and carries the actionable cause -- SSH auth rejected, host unreachable, nothing listening on the target port -- and handleApiError would replace all three with "Server error occurred". It stays as the fallback for bodies that carry no string reason, so a body shaped { error: <object> } cannot reach the user as "[object Object]". openWebEndpointExternally applies the same refusal gate as the embedded tab. Opening in the real browser is not the safer path: the cookie jar is the browser's either way, so a tunnel URL on the page's own host string leaks the session exactly as a frame would. The refusal happens before the forward is opened -- binding the port and then declining to navigate would be no protection. Certificate allowance covers the one case Electron's existing handling misses: direct access to a HOSTNAME over https. isPrivateNetworkHost matches IP literals only and sshData.ip has no IP validation, so https://nas.local:8006 fails the check and renders blank inside an iframe with no click-through -- Chromium offers no proceed option for subframes. Three properties of that allowance are deliberate and now pinned by tests, because each would otherwise be undone by a reasonable-looking simplification: - it is NOT wired into isInvalidCertificateAllowedForUrl, which also governs this process's own outbound TLS via getTlsVerificationOptions; - it is https-only, in both the check and the IPC handler, since a non-TLS origin in a TLS-error allowlist is meaningless and file:/ftp: must never be storable; and - entries carry a five-minute TTL refreshed on each registration. Main has no host-database access and cannot verify the renderer's claim that an origin is a configured endpoint, so the residual risk has to be a momentary window rather than one lasting until the app restarts. The handler stores the parsed origin, never the caller's string, so a path or wildcard cannot widen the allowance. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(hosts): add the Web UI editor tab Mounted as a Web UI sub-tab inside the SSH group, beside Docker, Tunnels, Files and Host Metrics, and laid out as two SectionCards following the tunnels editor: settings first, then the list it governs. There is a deliberate asymmetry with the sidebar here. The sidebar entry will appear on enableWebUi alone, because a direct endpoint needs no SSH -- but Web UI is an SSH sub-tab, so a host with SSH disabled cannot configure endpoints at all. That is the accepted behaviour and both halves are pinned by tests, so neither gets "fixed" into agreement later. tunnelAvailable is enableSsh && originIsLocal, resolved inside HostWebUiTab rather than in HostEditor.tsx, which is already ~2600 lines. It is NOT gated on isElectron(): the forward binds wherever the backend runs, exactly as the server tunnels feature does. resolveConnectionOrigin is called with connectionType "ssh" deliberately -- a tunnel endpoint always rides SSH, and "ssh" avoids the guacamole special case that forces "remote" for RDP/VNC/Telnet. Three input details that each prevent a silent data loss: - the id generator falls back off crypto.randomUUID, which is undefined outside a secure context -- a plain-http web deployment is a first-class target for direct+external and would otherwise throw on "Add endpoint"; - a new row gets a de-duplicated label, since labels are what identify an endpoint in the sidebar picker; and - the port field commits only a value the normalizer would keep. Number("") is 0, which the normalizer rejects, so clearing the field would otherwise write an endpoint that vanishes on save with no error. The tunnel fields carry three warnings: a non-loopback bind exposes the target's web UI unauthenticated to anyone who can reach the port; a loopback bind on a remote backend cannot be reached from a browser at all; and a tunnel reached at Termix's own hostname would hand the tunnelled service this session. All three are shown while configuring rather than only when the tab fails to load. The unavailable-tunnel reason is shown whenever tunnelling is unavailable, not only once a row asks for it -- a disabled dropdown option with no stated reason reads as the control being broken. Copy is reused verbatim from the previous iteration's reviewed strings rather than reworded. One test was written and then removed rather than kept: its name promised that switching to tunnel access clears ignoreCert, but Radix Select needs pointer APIs jsdom lacks, so the body only asserted the control existed. The clearing is covered where it is enforced, in the normalizer. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(hosts): open web endpoints from the sidebar and in a tab One sidebar entry per host, never one per endpoint: a host may declare up to 16, and a row of 16 identical globes is unusable. With a single endpoint the entry wears its label and acts directly; with several it carries no endpointId and the click opens a picker -- a DropdownMenu in the tray, a DropdownMenuSub in the Connect submenu. The entry is gated on enableWebUi ALONE, unlike every neighbouring action, which requires enableSsh. A direct endpoint needs no SSH; SSH matters only per-endpoint, for tunnel access, which the open route enforces. openTab gains a fourth optional parameter rather than overloading `restore`, which means something else. What was actually broken for two endpoints on one host was the LABEL -- tab ids are already `${name}-${type}-${Date.now()}`, so they never collided. All existing call sites keep working. The tab is passed the endpoint ID, not the endpoint object, so one deleted while its tab is open renders a plain message instead of throwing. Reload re-resolves and REMOUNTS. A direct endpoint's URL never changes and a live tunnel returns the same port on every open, so setUrl(resolved) would be a same-value setState that React bails out of, leaving the frame untouched -- Reload would silently do nothing in the two most common cases. A generation counter folded into the iframe key fixes that and doubles as the staleness guard for two resolutions landing out of order. The test captures the DOM node before and after, and was watched failing against a url-only key. PERSISTENT_TAB_TYPES is hoisted to module scope and exported so it can be asserted on -- it was a local const inside the component and therefore untestable. web-endpoint is deliberately excluded: an idle tunnel re-binds a fresh kernel-assigned port, so a restored tab could never hold a valid URL. Two notes on verification. `tsc -p tsconfig.json` passes vacuously in this repo -- tsconfig.json is a solution file with project references and does nothing without -b -- so `npm run type-check` (tsc -b --force) is the real check; it caught two insertions that had landed in the wrong function. And the one full-suite failure seen along the way was vault-signer-core, which passes in isolation and on re-run, is untouched by this branch, and is a flake under parallel load. Lint: 0 errors, 102 warnings, identical to the baseline on a clean tree. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(tunnel): register the web endpoint route under its /ssh path Every route in routes.ts registers the full "/ssh/tunnel/..." path -- nginx proxies /ssh through with the path intact -- and the client resolves "/tunnel/web-endpoint/open" against a baseURL that already ends in /ssh. The unprefixed registration therefore 404'd every call. No handler unit test could catch this: they call handleWebEndpointOpen directly and never touch registration. It surfaced only on opening a real tunnel against a deployed build, which is why that step exists. Added a registration test that captures the paths passed to app.post, so the invariant is checked without needing a server. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(hosts): apply session-cookie isolation to direct web endpoints The cookie guard only covered tunnel access. `unreachableTunnelReason` returned null for every `access: direct` endpoint, so WebEndpointTab framed the host's own address unconditionally. With Termix served at https://termix.example/ and a direct endpoint at https://termix.example:8443/, the browser attaches Termix's `jwt` to the framed request -- cookies are keyed by host and ignore the port -- and a `Set-Cookie` from that service lands in the jar both auth middlewares read before the Authorization header. Renames the helper to `webEndpointRefusalReason` so its scope is no longer tunnel-only, and gives it the endpoint's target host. A direct endpoint is now refused in a browser when that host shares Termix's cookie site, checked BEFORE any navigation in both open paths (embedded tab and external window) -- refusing after framing would leak on the first request. `sharesCookieSiteWithPage` treats an equal host as same-site (the jwt is set host-only, so the port is irrelevant) and also a parent/sub domain, which a `Set-Cookie: Domain=` from the target crosses. The suffix test is anchored on a dot boundary so `eviltermix.example` does not pass as `termix.example`. A precise eTLD+1 test would also catch sibling subdomains, but needs a public suffix list this app does not bundle. The desktop stays exempt: its session is Bearer-only with no `jwt` in the jar. Also drops "or change this endpoint to Direct" from the tunnel refusal copy, which pointed at the path that had this same leak. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com> Co-authored-by: ZacharyZcR <payasonorahc@protonmail.com> * fix(tunnel): preserve local status when remote names collide (#1431) * fix(desktop): honor remote sync certificate setting (#1432) * fix(file-manager): interpolate preview download filename (#1433) * fix(automations): dispatch SSH login events to triggers (#1434) * fix(hosts): preserve imported settings and remap jump hosts (#1435) * fix(hosts): preserve terminal switches across JSON transfer * fix(hosts): remap imported jump-host dependencies * fix(ssh): preserve agent framing after unsupported extensions (#1436) * fix(guacamole): return tokens before awaiting the client handshake (#1437) * fix(sidebar): unmount the host tree while its panel is hidden (#1438) * fix(terminal): leave macOS Option characters enabled by default (#1439) * fix(dashboard): open the enabled remote desktop protocol (#1440) * fix(version): preserve local version when update checks fail (#1441) * fix(sftp): create uploaded directories without shell access (#1442) * fix(desktop): honor explicit GPU acceleration opt-out (#1443) * fix(desktop): exclude remote-only host IDs from local tab persistence (#1444) * Enhance SFTP and terminal flows, stabilize desktop sync (#1377) * feat: add electron sftp c2s and terminal ai flows * fix: stabilize desktop sync and c2s tunnels * Improve remote tunnels and SFTP transfer feedback * chore: sync Crowdin translations * chore(deps): bump the prod-minor-updates group across 1 directory with 3 updates (#1325) Bumps the prod-minor-updates group with 3 updates in the / directory: [@anthropic-ai/sdk](https://github.com/anthropics/anthropic-sdk-typescript), [js-yaml](https://github.com/nodeca/js-yaml) and [pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg). Updates `@anthropic-ai/sdk` from 0.116.0 to 0.120.0 - [Release notes](https://github.com/anthropics/anthropic-sdk-typescript/releases) - [Changelog](https://github.com/anthropics/anthropic-sdk-typescript/blob/main/CHANGELOG.md) - [Commits](https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.116.0...sdk-v0.120.0) Updates `js-yaml` from 5.2.3 to 5.3.0 - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/5.2.3...5.3.0) Updates `pg` from 8.22.0 to 8.23.0 - [Changelog](https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md) - [Commits](https://github.com/brianc/node-postgres/commits/pg@8.23.0/packages/pg) --- updated-dependencies: - dependency-name: "@anthropic-ai/sdk" dependency-version: 0.120.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: js-yaml dependency-version: 5.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates - dependency-name: pg dependency-version: 8.23.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod-minor-updates ... 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-minor-updates group across 1 directory with 10 updates (#1323) Bumps the dev-minor-updates group with 10 updates in the / directory: | Package | From | To | | --- | --- | --- | | [@codemirror/commands](https://github.com/codemirror/commands) | `6.10.4` | `6.11.0` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.1.2` | `26.2.0` | | [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.0.5` | `6.1.0` | | [electron](https://github.com/electron/electron) | `43.2.0` | `43.4.1` | | [globals](https://github.com/sindresorhus/globals) | `17.9.0` | `17.11.0` | | [i18next](https://github.com/i18next/i18next) | `26.3.6` | `26.4.0` | | [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `1.28.0` | `1.33.0` | | [react-hook-form](https://github.com/react-hook-form/react-hook-form) | `7.84.0` | `7.85.0` | | [react-pdf](https://github.com/wojtekmaj/react-pdf/tree/HEAD/packages/react-pdf) | `10.4.1` | `10.5.0` | | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.66.0` | `8.67.0` | Updates `@codemirror/commands` from 6.10.4 to 6.11.0 - [Changelog](https://github.com/codemirror/commands/blob/main/CHANGELOG.md) - [Commits](https://github.com/codemirror/commands/commits) Updates `@types/node` from 26.1.2 to 26.2.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `@vitejs/plugin-react` from 6.0.5 to 6.1.0 - [Release notes](https://github.com/vitejs/vite-plugin-react/releases) - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.1.0/packages/plugin-react) Updates `electron` from 43.2.0 to 43.4.1 - [Release notes](https://github.com/electron/electron/releases) - [Commits](https://github.com/electron/electron/compare/v43.2.0...v43.4.1) Updates `globals` from 17.9.0 to 17.11.0 - [Release notes](https://github.com/sindresorhus/globals/releases) - [Commits](https://github.com/sindresorhus/globals/compare/v17.9.0...v17.11.0) Updates `i18next` from 26.3.6 to 26.4.0 - [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.6...v26.4.0) Updates `lucide-react` from 1.28.0 to 1.33.0 - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/1.33.0/packages/lucide-react) Updates `react-hook-form` from 7.84.0 to 7.85.0 - [Release notes](https://github.com/react-hook-form/react-hook-form/releases) - [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md) - [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.84.0...v7.85.0) Updates `react-pdf` from 10.4.1 to 10.5.0 - [Release notes](https://github.com/wojtekmaj/react-pdf/releases) - [Commits](https://github.com/wojtekmaj/react-pdf/commits/v10.5.0/packages/react-pdf) Updates `typescript-eslint` from 8.66.0 to 8.67.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.67.0/packages/typescript-eslint) --- updated-dependencies: - dependency-name: "@codemirror/commands" dependency-version: 6.11.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: "@types/node" dependency-version: 26.2.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: "@vitejs/plugin-react" dependency-version: 6.1.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: electron dependency-version: 43.4.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: globals dependency-version: 17.11.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: i18next dependency-version: 26.4.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: lucide-react dependency-version: 1.33.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: react-hook-form dependency-version: 7.85.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: react-pdf dependency-version: 10.5.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates - dependency-name: typescript-eslint dependency-version: 8.67.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-minor-updates ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore: sync Crowdin translations * Update redirect-issues workflow configuration Updated the workflow to change the runner and modify the issue response message. * test(sftp): verify local collection limit boundaries --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: ZacharyZcR <payasonorahc@protonmail.com> * chore: increment ver * fix: allow any origin by default when CORS_ALLOWED_ORIGINS is unset * feat(file-manager): parallel local transfers (#1446) Uploads from the Local pane (and downloads to it) ran strictly one file after another. Batches of many small files were bound by per-file latency rather than bandwidth. - `runWithConcurrency(items, limit, worker, shouldStop)`: a bounded worker pool that dispatches in order, keeps at most `limit` transfers in flight, and stops dispatching once cancelled while letting in-flight items finish. Worker errors are handled by the worker (one failure never aborts the batch). - useLocalTransfers: both directions go through the pool. Remote / local directory skeletons are still created up front, so file order does not matter. The batch runner now tracks a set of in-flight transfer ids (Cancel cancels all of them), sums bytes across in-flight transfers plus settled ones for the progress bar / speed, and shows how many files are moving at once. - New preference "Simultaneous File Transfers" (1-8, default 4) in the profile settings, stored in localStorage (`termix:file-manager:transfer-concurrency`) and part of the storage snapshot. 1 restores the previous sequential behaviour; the hint suggests lowering it for servers that limit SFTP channels. - Remote directories are created with the now-idempotent mkdir (#1442) without swallowing its errors, so a real failure stops the batch up front instead of surfacing as N per-file failures. When files do fail, the summary toast carries the first underlying reason (e.g. the backend's 401 message) instead of a bare "Upload failed". - Tests: pool never exceeds the limit and drains everything, stops on cancel, tolerates a failing item, handles empty input; preference clamping and persistence; bridge-level concurrent uploads/downloads with a mid-flight cancel leave every other file intact and no partials. Co-authored-by: Max <maxim@cogitate.ai> * fix(sftp): complete streamed uploads and stop pre-parsing chunk bodies * fix(desktop): stop setting Content-Length on local download requests * fix(file-manager): keep drop overlays in view when the list is scrolled * fix(file-manager): let remote rows be dropped on the local pane * fix(desktop): authenticate local transfers with the renderer's token * chore: update release notes * chore: remove unused gitlab ci and argocd deploy configs * chore: remove unused files * feat: improve loading animation * fix(shell): stop tab reorder from resetting terminals and tab indicator Keep the tab-content portal order stable so reordering tabs doesn't retrigger React's offscreen pass and dispose live terminals. Also stop the active tab indicator from teleporting during a drag, and fix the drag ghost's size/border mismatch. * fix(shell): hand-roll the tab indicator instead of a shared layoutId Framer's layoutId could measure the wrong tab's rect during a reorder and land on an inactive tab, or leave a stray line visible mid-drag. Now it reads the active tab's own DOM rect directly and hides while dragging. * fix(hosts): fix right-click menu position and unwanted tray expand * chore: update release notes * fix(terminal): stop autosuggestion ghost text overlapping typed input Position was computed from cursorX before server echo landed, causing a stale read that overlapped just-typed characters on fast local input. * chore: update release notes for v2.8.0 * fix(sftp): rebuild transfer tab for web, fix menu offset bug Drop the electron-only local mode and dead code, i18n all strings, fix double progress toasts and a wrong pane refresh on move. Fix context menus rendering offset due to a lingering CSS transform from the tab-switch animation. Move SFTP next to SSH Tools in the rail. * fix(file-manager): shrink oversized .. entry, navigate on single click * fix: make select2 component use rounded corners * fix: rebuild terminal AI assistant on the real backend Removes the Electron-only Agent Mode/AI Command Helper that bypassed admin/user gating and ran commands with no approval step. Replaces it with a terminal-docked panel on the same gated backend as the AI tab, adds a per-host toggle (off by default), moves it into the toolbar, and fixes proposal ordering and run-in-terminal execution. * fix(file-manager): remove duplicate borders in toolbar view toggle Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix: separate registration toggle from step ca settings * fix: collab room bugs and add room deletion Accent-colored new room button, fix fullscreen guest view layout and duplicate view-only badges, self-heal stale presenter state, add delete room for persistent rooms. * refactor: move host-identity helpers to hosts core Used by docker, file-manager, and terminal alike, so it belongs at the hosts root instead of under terminal/. * refactor: move host-session-status singleton to hosts core metrics subscribed to terminal's private online/offline pub-sub module. Moved to hosts core so both sides depend on a shared module instead of metrics reaching into terminal. Marked the subscribe call with PLUGIN-EVENT for the future event bus. * refactor: split generic automation event notify out of metrics notifyAutomationInternalEvent was in hosts/metrics/automation-bridge.ts but is used by tunnel, host routes, user routes, and automations engine itself, not just metrics. Moved it to hosts/automation-events.ts so those callers depend on a shared module instead of metrics internals. Left the metrics-specific notifiers in place. * feat: add plugin system schema and repositories Adds plugins, plugin_permission_grants, plugin_registries, and plugin_install_counts tables plus their repositories. No routes or UI yet. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat: add runtime rail item and tab component registries for plugins * feat: support runtime-registered permission groups Adds register/unregister for plugin permission groups so the RBAC catalog and validation can grow beyond the static list. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat: add plugin-api nginx route and dispatcher stub * feat: add plugin manifest schema and validator * chore: update release notes * chore: update i18n for local/remote file manager * feat: add toggle to show/hide app rail pin button * feat(host-metrics): add NVIDIA GPU metrics card (#1452) * feat(host-metrics): add NVIDIA GPU metrics card Collect per-GPU utilization, VRAM, temperature, power, fan speed and the processes using each GPU over SSH with nvidia-smi. The collector exits immediately when nvidia-smi is missing, so hosts without a GPU pay almost nothing per poll. The GPU card is opt-in: it is available from the Add card tray but is not part of new-host defaults or any UI preset. It shows live sparklines for utilization and VRAM per GPU. Adaptive polling now also watches GPU readings and the GPU process count, so it no longer backs off on hosts where only the GPU is busy. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F2ctuPwiesLzhF6XQiozm8 * fix(host-metrics): draw sparklines from the first metrics sample The first sample fetched when the tab connects was shown but never added to the sparkline history, so every sparkline (CPU, memory, disk, GPU) stayed empty until the second poll, a full metrics interval later (about 35 s with the default 30 s interval). Record the first sample like every later one, so the lines appear as soon as the tab loads. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F2ctuPwiesLzhF6XQiozm8 * Fix logical condition for memory percentage calculation Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * fix: annotate local transfer plan type to fix CI type-check * fix: move connection toolbar settings to bottom of host editor general tab * chore: add debug logging for macOS sharp packaging failure Temporary diagnostic to find which phase drops @img/sharp-darwin-x64 from the packaged app. Revert once root cause is found. * fix: correct macOS sharp verify script for universal build layout electron-builder uses mergeASARs: false, so universal builds ship app-x64.asar.unpacked and app-arm64.asar.unpacked side by side instead of a single app.asar.unpacked. The verify script only checked the single-asar path, so it always failed on universal/mas artifacts even when packaging was correct. * fix: update sharp verify test fixtures for universal build layout The test built fake apps using the single app.asar.unpacked layout, which doesn't match how universal builds are actually packaged now (app-x64.asar.unpacked / app-arm64.asar.unpacked side by side). * chore: update readme * fix: guard against missing rooms array in collab list response * fix: distinct guac connection log stages, RDP black screen before failure * fix: proxy /collab routes in nginx configs * fix: stop tab-switch flash and host metrics/proxmox reconnect Tab DOM visibility now syncs before paint instead of after, and switching tabs no longer tears down live metrics connections. * fix: tab bar flashing, growing, and merged separators Terminal tabs no longer flash when switching, the enter animation no longer nudges layout size, and a stray transform on resting tabs no longer causes the border between tabs to vanish at some zoom levels. * fix: match select trigger height to inputs in web UI editor * chore: lint, format, and bump version to 2.8.0 * chore: sync Crowdin translations for 2.8.0 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com> Co-authored-by: Angad Singh <7099405+singhangadin@users.noreply.github.com> Co-authored-by: Angad Singh <angad@singhangad.in> Co-authored-by: Neo <54811660+neooriginal@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wali Lambert <98448225+YatoVoid@users.noreply.github.com> Co-authored-by: Nasif Rahman <44437976+nasif-naseef@users.noreply.github.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> Co-authored-by: vietanhtwdk <vietanhtruongwdk@gmail.com> Co-authored-by: inontz <inontz@icloud.com> Co-authored-by: inontz <inontz@users.noreply.github.com> Co-authored-by: Max Serov <133950708+maxser0v@users.noreply.github.com> Co-authored-by: Max <maxim@cogitate.ai> Co-authored-by: ssmurfgg04-gif <ssmurfgg04@gmail.com> Co-authored-by: ssmurfgg04-gif <232103099+ssmurfgg04-gif@users.noreply.github.com> Co-authored-by: ZacharyZcR <payasonorahc@protonmail.com> Co-authored-by: slsgzs-cloud <slsgzs@gmail.com> Co-authored-by: anshtsolanki-sketch <anshtsolanki@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: tcezarl <tomescu.cezar.laurentiu@gmail.com> Co-authored-by: Anton Priestley <anton@priestley.me> Co-authored-by: Hakim M <hakimmarsudi@outlook.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Adel Alzubeir <14052842+Adelzu@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
5105 lines
265 KiB
JSON
5105 lines
265 KiB
JSON
{
|
||
"connection": {
|
||
"retryingIn": "Prøver igen om {{seconds}}s ({{attempt}}/{{max}})",
|
||
"retryingNow": "Prøver igen... ({{attempt}}/{{max}})",
|
||
"disconnected": "Kan ikke oprette forbindelse",
|
||
"reconnect": "Genopret forbindelse"
|
||
},
|
||
"termixId": {
|
||
"title": "Termix-ID",
|
||
"loadFailed": "Kunne ikke indlæse Termix-ID'et",
|
||
"claimTitle": "Få dit Termix-ID",
|
||
"claimIntro": "Vælg et unikt handle. Dine offentlige SSH-nøgler vil blive offentliggjort på en offentlig URL, som du kan tilføje til enhver servers authorized_keys-fil.",
|
||
"handleLabel": "Håndtag",
|
||
"handlePlaceholder": "Alice",
|
||
"checking": "Tjekker…",
|
||
"available": "Tilgængelig",
|
||
"taken": "Allerede taget",
|
||
"invalidHandle": "Kun små bogstaver, tal, - og _",
|
||
"descriptionLabel": "Beskrivelse (valgfrit)",
|
||
"descriptionPlaceholder": "Arbejdslaptop og telefonnøgler",
|
||
"create": "Opret Termix-ID",
|
||
"created": "Termix-ID oprettet",
|
||
"createFailed": "Kunne ikke oprette Termix ID",
|
||
"deleteConfirm": "Vil du slette dit Termix-ID og alle publicerede nøgler? Servere, du har provisioneret, vil beholde nøglerne, indtil du fjerner dem manuelt.",
|
||
"deleted": "Termix-ID slettet",
|
||
"deleteFailed": "Kunne ikke slette Termix ID",
|
||
"copyFailed": "Kopiering mislykkedes",
|
||
"resolverUrlLabel": "Offentlig resolver-URL",
|
||
"provisionLabel": "Klargør en server",
|
||
"publishTitle": "Udgiv en offentlig nøgle",
|
||
"generate": "Frembringe",
|
||
"generateTooltip": "Generer et Ed25519-nøglepar — publicerer den offentlige nøgle og downloader den private nøgle til din enhed",
|
||
"saveToVault": "Gem til legitimationsoplysninger",
|
||
"keyPlaceholder": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5... bruger@vært",
|
||
"labelPlaceholder": "Etiket (valgfrit)",
|
||
"add": "Tilføje",
|
||
"importFromCredential": "Eller importer fra en gemt legitimationsoplysninger",
|
||
"keyPublished": "Nøgle udgivet",
|
||
"addKeyFailed": "Kunne ikke tilføje nøgle",
|
||
"generatedSaved": "Nøglepar genereret og gemt i din login-boks. Privat nøgle er også downloadet.",
|
||
"generatedOnly": "Nøglepar genereret — privat nøgle downloadet (vises kun én gang).",
|
||
"generateFailed": "Kunne ikke generere nøgle",
|
||
"imported": "Nøgle importeret fra legitimationsoplysninger",
|
||
"importFailed": "Nøglen kunne ikke importeres",
|
||
"noKeys": "Ingen offentlige nøgler er udgivet endnu.",
|
||
"keysTitle": "Udgivne nøgler",
|
||
"published": "Udgivet",
|
||
"hidden": "Skjult",
|
||
"keyRemoved": "Nøglen er fjernet",
|
||
"removeKeyFailed": "Kunne ikke fjerne nøglen",
|
||
"updateKeyFailed": "Nøglen kunne ikke opdateres",
|
||
"fromVault": "Fra legitimationsoplysninger-arkiv",
|
||
"linkedToTermixId": "Udgivet via Termix ID",
|
||
"selectCredential": "Vælg en legitimationsoplysninger...",
|
||
"import": "Importere",
|
||
"caTitle": "Certifikatmyndighed",
|
||
"caIntro": "Stol på denne CA på en server, og den accepterer ethvert certifikat, du underskriver. Roter for at tilbagekalde alt på én gang; certifikater udløber også af sig selv.",
|
||
"caEnable": "Aktivér CA",
|
||
"caEnabled": "CA aktiveret",
|
||
"caCreateFailed": "Kunne ikke aktivere CA",
|
||
"caPublicKeyLabel": "CA's offentlige nøgle",
|
||
"caTrustLabel": "Tillid til en server (kør som root)",
|
||
"caRotate": "Rotere",
|
||
"caRotateConfirm": "Roter CA'en? Alle certifikater, den har underskrevet, vil ikke længere blive accepteret og skal genudstedes.",
|
||
"caRotated": "CA roteret — tidligere certifikater tilbagekaldt",
|
||
"caRotateFailed": "Kunne ikke rotere CA",
|
||
"caDelete": "Fjern CA",
|
||
"caDeleteConfirm": "Fjern certifikatmyndigheden?",
|
||
"caDeleted": "CA fjernet",
|
||
"caDeleteFailed": "Kunne ikke fjerne CA",
|
||
"caValidityLabel": "Certifikatgyldighed (dage)",
|
||
"issueCert": "Certifikat",
|
||
"issueCertTooltip": "Udsted et SSH-certifikat til denne nøgle, underskrevet af din CA",
|
||
"certIssued": "Certifikat udstedt og downloadet",
|
||
"certIssueFailed": "Kunne ikke udstede certifikat"
|
||
},
|
||
"credentials": {
|
||
"folders": "Mapper",
|
||
"folder": "Folder",
|
||
"password": "Adgangskode",
|
||
"key": "Nøgle",
|
||
"sshPrivateKey": "SSH privat nøgle",
|
||
"upload": "Upload",
|
||
"keyPassword": "Nøgleadgangskode",
|
||
"sshKey": "SSH-nøgle",
|
||
"uploadPrivateKeyFile": "Upload privat nøglefil",
|
||
"searchCredentials": "Søg efter legitimationsoplysninger...",
|
||
"addCredential": "Tilføj legitimationsoplysninger",
|
||
"caCertificate": "CA-certifikat (-cert.pub)",
|
||
"caCertificateDescription": "Valgfrit: Upload eller indsæt den CA-signerede certifikatfil (f.eks. id_ed25519-cert.pub). Kræves, når din SSH-server bruger certifikatbaseret godkendelse.",
|
||
"uploadCertFile": "Upload -cert.pub-fil",
|
||
"clearCert": "Klar",
|
||
"certLoaded": "Certifikat indlæst",
|
||
"certPublicKeyLabel": "CA-certifikat",
|
||
"certTypeLabel": "Certifikattype",
|
||
"pasteOrUploadCert": "Indsæt eller upload et -cert.pub-certifikat...",
|
||
"hasCaCert": "Har CA-certifikat",
|
||
"noCaCert": "Intet CA-certifikat",
|
||
"noPublicKeyAvailable": "Ingen offentlig nøgle tilgængelig. Åbn først legitimationseditoren.",
|
||
"deployCommandCopied": "Implementeringskommando kopieret",
|
||
"sortCredentials": "Sortér legitimationsoplysninger",
|
||
"sortDefault": "Standardordre",
|
||
"sortNameAsc": "Navn (A → Å)",
|
||
"sortNameDesc": "Navn (Z → A)",
|
||
"sortUsernameAsc": "Brugernavn (A → Z)",
|
||
"sortUsernameDesc": "Brugernavn (Z → A)",
|
||
"filterCredentials": "Filtrer legitimationsoplysninger",
|
||
"filterClearAll": "Ryd filtre",
|
||
"filterTypeGroup": "Type",
|
||
"filterTypePassword": "Adgangskode",
|
||
"filterTypeKey": "SSH-nøgle",
|
||
"filterTagsGroup": "Tags",
|
||
"copyDeployCommand": "Kopiér deploy-kommandoen",
|
||
"cloneCredentialAction": "Klon legitimationsoplysninger",
|
||
"clonedCredential": "Klonet {{name}}",
|
||
"clonedCredentialName": "{{name}} (kopi)",
|
||
"shareCredentialAction": "Del legitimationsoplysninger",
|
||
"sharedBadge": "delt",
|
||
"sharedBy": "Delt af {{owner}}",
|
||
"share": {
|
||
"title": "Del \"{{name}}\"",
|
||
"description": "Modtagere får deres egen krypterede kopi af hemmelighederne. Den opdateres, når legitimationsoplysningerne ændres, og fjernes, når delingen tilbagekaldes.",
|
||
"users": "Brugere",
|
||
"roles": "Roller",
|
||
"searchPlaceholder": "Søge...",
|
||
"permission": "Tilladelse",
|
||
"levelUse": "Bruge",
|
||
"levelManage": "Styre",
|
||
"levelUseDesc": "Brug: Tilslut legitimationsoplysningerne til værter og opret forbindelse. Hemmeligheden forbliver skjult.",
|
||
"levelManageDesc": "Administrer: Rediger også legitimationsoplysningerne og del dem med andre.",
|
||
"expires": "Udløber",
|
||
"expiry": {
|
||
"never": "Aldrig",
|
||
"oneDay": "1 dag",
|
||
"sevenDays": "7 dage",
|
||
"thirtyDays": "30 dage"
|
||
},
|
||
"currentAccess": "Delt med",
|
||
"revoke": "Tilbagekald",
|
||
"shared": "Delt legitimationsoplysninger",
|
||
"shareButton": "Dele"
|
||
},
|
||
"deleteCredentialAction": "Slet legitimationsoplysninger",
|
||
"editCredentialAction": "Rediger legitimationsoplysninger",
|
||
"failedToCloneCredential": "Kunne ikke klone legitimationsoplysninger",
|
||
"failedToDeleteCredential": "Kunne ikke slette legitimationsoplysninger",
|
||
"idBadge": "ID",
|
||
"keyBadge": "NØGLE",
|
||
"passwordBadge": "Udadvendt",
|
||
"renameFolder": "Omdøb mappe",
|
||
"deleteFolder": "Slet mappe",
|
||
"deleteCredentialConfirm": "Slet legitimationsoplysninger \"{{name}}\"?",
|
||
"deletedCredential": "Slettet {{name}}",
|
||
"deploySSHKeyTitle": "Implementer nøgle til vært",
|
||
"loadingCredentials": "Indlæser loginoplysninger...",
|
||
"noCredentialsFound": "Ingen legitimationsoplysninger fundet",
|
||
"noCredentialsMatchSearch": "Ingen loginoplysninger matcher din søgning",
|
||
"addCredentialBtn": "Tilføj legitimationsoplysninger",
|
||
"failedToReorder": "Kunne ikke omarrangere legitimationsoplysninger",
|
||
"failedToMoveCredential": "Kunne ikke flytte legitimationsoplysninger",
|
||
"sortManual": "Manuel (træk for at ændre rækkefølgen)",
|
||
"customizeSidebar": "Tilpas sidebjælke",
|
||
"customizeSidebarDescription": "Vælg, hvordan legitimationslisten ser ud og opfører sig.",
|
||
"customizeDensityTitle": "Tæthed",
|
||
"densityComfortableDesc": "Én legitimationsoplysninger pr. række, med ekstra detaljer.",
|
||
"densityCompactDesc": "Én linje pr. legitimationsoplysninger for længere lister.",
|
||
"displayDensityComfortable": "Komfortabel",
|
||
"displayDensityCompact": "Kompakt",
|
||
"customizeBehaviorTitle": "Opførsel",
|
||
"showCredentialTags": "Vis tags",
|
||
"showCredentialTagsDesc": "Vis tags i legitimationslisten",
|
||
"actionsVisibility": "Handlinger for legitimationsoplysninger",
|
||
"actionsVisibilityDesc": "Når knapperne for forbindelse og administration på hver legitimationsoplysninger vises",
|
||
"actionsAlways": "Altid synlig",
|
||
"actionsOnly": "Kun forbindelse, hvile ved klik",
|
||
"actionsHover": "Vis ved at holde musen over",
|
||
"actionsClick": "Vis ved klik",
|
||
"customizeSortHint": "Sorteringsrækkefølgen findes i sorteringsmenuen i værktøjslinjen.",
|
||
"expandActions": "Udvid handlinger",
|
||
"collapseActions": "Skjul handlinger",
|
||
"backToHosts": "Tilbage til værter",
|
||
"backToCredentials": "Tilbage til legitimationsoplysninger",
|
||
"searchCredentialsPlaceholder": "Søgeoplysninger…",
|
||
"deployDialogTitle": "Implementer SSH-nøgle",
|
||
"deployDialogDesc": "Implementer {{name}} til en værts authorized_keys.",
|
||
"targetHostLabel": "Målvært",
|
||
"selectHostOption": "Vælg en vært...",
|
||
"deployingBtn": "Implementering...",
|
||
"deployBtn": "Indsætte",
|
||
"keyDeployedSuccess": "Nøglen er blevet implementeret",
|
||
"failedToDeployKey": "Nøglen kunne ikke implementeres",
|
||
"folderRenamedTo": "Mappen er omdøbt til \"{{name}}\"",
|
||
"failedToRenameFolder": "Kunne ikke omdøbe mappen",
|
||
"arrangeUnlockedSwitchedToManual": "Skiftede til manuel sortering, så din rækkefølge holder stik",
|
||
"arrangeUnlocked": "Lås op, træk for at omarrangere"
|
||
},
|
||
"homepage": {
|
||
"title": "Hjemmeside",
|
||
"addWidget": "Tilføj widget",
|
||
"editWidget": "Rediger widget",
|
||
"deleteWidget": "Slet",
|
||
"widgetTypes": "Widgettyper",
|
||
"serviceLink": "Servicelink",
|
||
"folder": "Folder",
|
||
"clock": "Ur",
|
||
"notes": "Noter",
|
||
"hostStatus": "Værtsstatus",
|
||
"bookmarkList": "Bogmærker",
|
||
"zoomIn": "Zoom ind",
|
||
"zoomOut": "Zoom ud",
|
||
"resetView": "Nulstil visning",
|
||
"lockLayout": "Låselayout",
|
||
"unlockLayout": "Lås layout op",
|
||
"noWidgets": "Højreklik eller klik på + for at tilføje din første widget",
|
||
"openFullView": "Åbn fuld visning",
|
||
"previewTitle": "Forhåndsvisning af hjemmeside",
|
||
"cancel": "Ophæve",
|
||
"save": "Spare",
|
||
"title_label": "Titel",
|
||
"widgetTitlePlaceholder": "Widgettitel (valgfrit)",
|
||
"url": "URL",
|
||
"imageUrl": "Brugerdefineret billed-URL",
|
||
"imageUrlHint": "Lad feltet stå tomt for at bruge webstedets favicon automatisk",
|
||
"showImage": "Vis billede",
|
||
"description": "Beskrivelse",
|
||
"color": "Farve",
|
||
"icon": "Ikon",
|
||
"expanded": "Udvidet som standard",
|
||
"timezone": "Tidszone",
|
||
"invalidTimezone": "Ugyldig tidszone. Brug et IANA-navn, f.eks. America/New_York.",
|
||
"showSeconds": "Vis sekunder",
|
||
"format12h": "12-timers",
|
||
"format24h": "24-timers",
|
||
"content": "Tilfreds",
|
||
"backgroundColor": "Baggrundsfarve",
|
||
"host": "Vært",
|
||
"showMetrics": "Vis metrikker",
|
||
"links": "Links",
|
||
"addLink": "Tilføj link",
|
||
"linkLabel": "Mærke",
|
||
"linkUrl": "URL",
|
||
"removeLink": "Fjerne",
|
||
"categoryLinks": "Links",
|
||
"categoryInfo": "Info",
|
||
"categorySystem": "System",
|
||
"widgetServiceLinkDesc": "En klikbar flise, der linker til en tjeneste-URL",
|
||
"widgetFolderDesc": "En container til at gruppere relaterede widgets",
|
||
"widgetClockDesc": "Et live-ur med konfigurerbar tidszone",
|
||
"widgetNotesDesc": "En widget med nedskæringsnoter",
|
||
"widgetHostStatusDesc": "Viser live CPU, hukommelse og disk for en SSH-vært",
|
||
"widgetBookmarkListDesc": "En liste over hurtige links",
|
||
"copyLink": "Kopiér link",
|
||
"linkCopied": "Link kopieret!",
|
||
"location": "Beliggenhed",
|
||
"temperatureUnit": "Temperaturenhed",
|
||
"showForecast": "Vis 3-dages vejrudsigt",
|
||
"scrolling": "Tillad rulning",
|
||
"feedUrl": "Feed-URL",
|
||
"maxItems": "Maks. antal varer",
|
||
"showDescription": "Vis beskrivelse",
|
||
"widgetWeatherName": "Vejr",
|
||
"widgetWeatherDesc": "Live vejrudsigt for enhver lokation",
|
||
"widgetIframeName": "iFrame-integrering",
|
||
"widgetIframeDesc": "Integrer en hvilken som helst URL i en iframe",
|
||
"widgetRssName": "RSS-feed",
|
||
"widgetRssDesc": "Vis elementer fra et RSS- eller Atom-feed",
|
||
"dragToFolder": "Træk widgets hertil, eller brug + for at tilføje",
|
||
"showDisk": "Vis diskforbrug",
|
||
"addToFolder": "Tilføj widget til mappe",
|
||
"noHostSelected": "Ingen vært valgt",
|
||
"metricsNotAvailable": "Målinger er ikke tilgængelige",
|
||
"selectHost": "Vælg en vært...",
|
||
"displayedMetrics": "Viste målinger",
|
||
"metricCpu": "CPU",
|
||
"metricMemory": "Hukommelse",
|
||
"metricDisk": "Disk",
|
||
"metricUptime": "Oppetid",
|
||
"metricSystem": "System",
|
||
"metricOs": "OS",
|
||
"metricKernel": "Kernen",
|
||
"metricHostname": "Værtsnavn",
|
||
"metricNetwork": "Netværk",
|
||
"metricProcesses": "Processer",
|
||
"metricProcessesTotal": "total",
|
||
"metricProcessesRunning": "løb",
|
||
"categoryMonitoring": "Overvågning",
|
||
"loading": "Indlæser...",
|
||
"noData": "Ingen data tilgængelige",
|
||
"allClear": "Alt klart",
|
||
"acknowledgeAlert": "Anerkende",
|
||
"noPingUrls": "Ingen URL'er konfigureret",
|
||
"pingLabel": "Mærke",
|
||
"addPingUrl": "Tilføj URL",
|
||
"showLatency": "Vis latenstid",
|
||
"refreshInterval": "Opdateringsinterval",
|
||
"seconds": "sekunder",
|
||
"filterActivityTypes": "Filtertyper",
|
||
"filterTypesHint": "Lad stå tomt for at vise alle",
|
||
"showTimestamp": "Vis tidsstempel",
|
||
"uptimeUnavailable": "Oppetid utilgængelig",
|
||
"uptimeLabel": "Oppetid",
|
||
"overviewVersion": "Version",
|
||
"overviewUpdate": "Opdateret",
|
||
"overviewUpdateLabel": "Opdatering",
|
||
"overviewUpdateAvailable": "Opdatering tilgængelig",
|
||
"overviewDatabase": "Database",
|
||
"overviewUptime": "Oppetid",
|
||
"noHosts": "Ingen værter konfigureret",
|
||
"hostGridHosts": "Værter",
|
||
"hostGridAllHint": "Lad stå tomt for at vise alle værter",
|
||
"columns": "Kolonner",
|
||
"showIp": "Vis IP-adresse",
|
||
"connectionType": "Forbindelsestype",
|
||
"layout": "Layout",
|
||
"showStatus": "Vis status",
|
||
"showHostName": "Vis værtsnavn",
|
||
"noDockerActivity": "Ingen Docker-aktivitet",
|
||
"noActivity": "Ingen aktivitet",
|
||
"showAcknowledged": "Vis anerkendt",
|
||
"showCurrentValue": "Vis aktuel værdi",
|
||
"chartMetric": "Metrisk",
|
||
"metricRange": "Rækkevidde",
|
||
"widgetMetricsChartName": "Metrikdiagram",
|
||
"widgetMetricsChartDesc": "Historisk CPU-, hukommelses-, disk- eller netværksdiagram for en vært",
|
||
"widgetHostGridName": "Værtgitter",
|
||
"widgetHostGridDesc": "Gittervisning af SSH-værtsstatusser",
|
||
"widgetAlertFeedName": "Alarmfeed",
|
||
"widgetAlertFeedDesc": "Live alarmudløsninger med bekræftelsesstøtte",
|
||
"widgetPingStatusName": "Ping-status",
|
||
"widgetPingStatusDesc": "HTTP-pingstatus for en eller flere URL'er",
|
||
"widgetRecentActivityName": "Seneste aktivitet",
|
||
"widgetRecentActivityDesc": "Rulbart feed af den seneste Termix-aktivitet",
|
||
"widgetTermixUptimeName": "Termix Oppetid",
|
||
"widgetTermixUptimeDesc": "Live oppetidstæller for Termix-serveren",
|
||
"widgetSystemOverviewName": "Systemoversigt",
|
||
"widgetSystemOverviewDesc": "Termix-version, databasetilstand og oppetid på et øjeblik",
|
||
"widgetSshQuickConnectName": "SSH-hurtigforbindelse",
|
||
"widgetSshQuickConnectDesc": "Knapper med ét klik til at åbne SSH-sessioner",
|
||
"widgetDockerActivityName": "Docker-aktivitet",
|
||
"widgetDockerActivityDesc": "Seneste Docker-containerhændelser på tværs af alle værter",
|
||
"widgetCalendarName": "Kalender",
|
||
"widgetCalendarDesc": "En månedlig kalender med i dag fremhævet",
|
||
"widgetCountdownName": "Nedtælling",
|
||
"widgetCountdownDesc": "Nedtællingsur til en måldato",
|
||
"widgetSearchBarName": "Søgefelt",
|
||
"widgetSearchBarDesc": "Hurtig websøgningswidget",
|
||
"widgetTextBannerName": "Tekstbanner",
|
||
"widgetTextBannerDesc": "En fed etiket eller sektionsoverskrift til lærredet",
|
||
"widgetImageWidgetName": "Billede",
|
||
"widgetImageWidgetDesc": "Vis et billede fra en URL",
|
||
"widgetMarkdownNotesName": "Noter om nedskæringer",
|
||
"widgetMarkdownNotesDesc": "Fyldige noter med indlejret markdown-gengivelse",
|
||
"widgetCustomApiName": "Brugerdefineret API",
|
||
"widgetCustomApiDesc": "Hent og vis data fra enhver JSON API",
|
||
"widgetServiceGridName": "Servicenet",
|
||
"widgetServiceGridDesc": "Et konfigurerbart gitter af servicefeltlinks",
|
||
"widgetDashboardLinksName": "Dashboard-links",
|
||
"widgetDashboardLinksDesc": "Vis dine konfigurerede servicelinks fra dashboardet",
|
||
"widgetSearchLinksName": "Søgegenveje",
|
||
"widgetSearchLinksDesc": "Genvejsknapper til hurtigsøgning med indbygget input",
|
||
"widgetLinkTreeName": "Linktræ",
|
||
"widgetLinkTreeDesc": "Grupperede sektioner af links med overskrifter",
|
||
"calMon": "Må",
|
||
"calTue": "Ti",
|
||
"calWed": "Vi",
|
||
"calThu": "To",
|
||
"calFri": "Fr",
|
||
"calSat": "Lør",
|
||
"calSun": "Sø",
|
||
"startOnMonday": "Start ugen på mandag",
|
||
"countdownNoDate": "Ingen måldato fastsat",
|
||
"countdownPast": "Begivenheden er overstået",
|
||
"countdownDays": "dage",
|
||
"countdownHours": "timer",
|
||
"countdownMinutes": "min.",
|
||
"countdownSeconds": "sek.",
|
||
"countdownLabel": "Mærke",
|
||
"countdownLabelPlaceholder": "f.eks. lanceringsdag",
|
||
"countdownShowDays": "Vis dage",
|
||
"countdownShowHours": "Åbningstider",
|
||
"targetDate": "Måldato",
|
||
"searchEngine": "Søgemaskine",
|
||
"customSearchUrl": "Tilpasset søge-URL",
|
||
"searchPlaceholder": "Søge...",
|
||
"searchGo": "Gå",
|
||
"searchPlaceholderLabel": "Pladsholdertekst",
|
||
"searchPlaceholderHint": "Tekst vist i søgefeltet",
|
||
"openInNewTab": "Åbn i ny fane",
|
||
"searchQueryPlaceholder": "Indtast forespørgsel...",
|
||
"noSearchShortcuts": "Ingen genveje konfigureret",
|
||
"addSearchShortcut": "Tilføj genvej",
|
||
"fontSize": "Skriftstørrelse",
|
||
"textAlign": "Tekstjustering",
|
||
"fontWeight": "Skriftvægt",
|
||
"clearColor": "Klar farve",
|
||
"imageFit": "Billedtilpasning",
|
||
"imageLinkUrl": "Link-URL",
|
||
"noImage": "Ingen billed-URL angivet",
|
||
"altText": "Alternativ tekst",
|
||
"altTextPlaceholder": "Beskriv billedet",
|
||
"renderMarkdown": "Render Markdown",
|
||
"displayMode": "Visningstilstand",
|
||
"displayField": "Visningsfelt",
|
||
"jsonPath": "JSON-sti",
|
||
"customApiLabel": "Mærke",
|
||
"customApiLabelPlaceholder": "f.eks. Temperatur",
|
||
"customApiUnit": "Enhed",
|
||
"customApiNoUrl": "Ingen API-URL konfigureret",
|
||
"customApiError": "Kunne ikke hente",
|
||
"customApiNotArray": "Svaret er ikke et array",
|
||
"addService": "Tilføj tjeneste",
|
||
"showLabels": "Vis etiketter",
|
||
"iconSize": "Ikonstørrelse",
|
||
"noDashboardLinks": "Ingen dashboard-links konfigureret",
|
||
"noLimit": "Ingen grænse",
|
||
"sectionHeading": "Sektionsoverskrift",
|
||
"addSection": "Tilføj sektion",
|
||
"compactMode": "Kompakt tilstand",
|
||
"showDetailed": "Vis detaljeret",
|
||
"selectHosts": "Vælg værter",
|
||
"allHosts": "Alle værter",
|
||
"listLayout": "Liste",
|
||
"gridLayout": "Gitter",
|
||
"terminal": "Terminal",
|
||
"files": "Filer",
|
||
"docker": "Docker",
|
||
"range15m": "15 minutter",
|
||
"range1h": "1 time",
|
||
"range6h": "6 timer",
|
||
"range24h": "24 timer",
|
||
"metricNetRx": "Netdownload",
|
||
"metricNetTx": "Nettoupload",
|
||
"severityFilter": "Alvorlighedsfilter",
|
||
"filterAll": "Alle",
|
||
"accentColor": "Accentfarve",
|
||
"widgetSshTerminalName": "SSH-terminal",
|
||
"widgetSshTerminalDesc": "En indbygget SSH-terminal forbundet til en konfigureret vært",
|
||
"sshTerminalNoHost": "Ingen vært konfigureret",
|
||
"sshTerminalConnect": "Forbinde",
|
||
"sshTerminalAutoConnect": "Automatisk forbindelse ved indlæsning",
|
||
"widgetQuickConnectName": "Hurtig forbindelse",
|
||
"widgetQuickConnectDesc": "Startknapper med ét klik til enhver forbindelsestype på tværs af dine værter",
|
||
"connectionTypes": "Forbindelsestyper",
|
||
"connType_terminal": "Terminal",
|
||
"connType_files": "Filhåndtering",
|
||
"connType_docker": "Docker",
|
||
"connType_tunnel": "Tunnel",
|
||
"connType_host-metrics": "Værtsmålinger",
|
||
"connType_rdp": "Landdistriktsudviklingsplan",
|
||
"connType_vnc": "VNC",
|
||
"connType_telnet": "Telnet",
|
||
"widgetFileManagerName": "Filhåndtering",
|
||
"widgetFileManagerDesc": "Indlejret SFTP-filhåndtering til en konfigureret vært",
|
||
"widgetDockerName": "Docker Manager",
|
||
"widgetDockerDesc": "Integreret Docker-containerhåndtering til en konfigureret vært",
|
||
"widgetTunnelName": "Tunnelchef",
|
||
"widgetTunnelDesc": "Indlejret SSH-tunnelmanager til en konfigureret vært",
|
||
"widgetNoHostSelected": "Ingen vært konfigureret"
|
||
},
|
||
"serverConfig": {
|
||
"title": "Serverkonfiguration",
|
||
"description": "Konfigurer Termix-serverens URL for at oprette forbindelse til dine backend-tjenester",
|
||
"serverUrl": "Server-URL",
|
||
"enterServerUrl": "Indtast venligst en server-URL",
|
||
"saveFailed": "Konfigurationen kunne ikke gemmes",
|
||
"saveError": "Fejl ved lagring af konfiguration",
|
||
"saving": "Gemmer...",
|
||
"saveConfig": "Gem konfiguration",
|
||
"helpText": "Indtast URL'en, hvor din Termix-server kører (f.eks. http://localhost:30001 eller https://your-server.com)",
|
||
"changeServer": "Skift server",
|
||
"mustIncludeProtocol": "Server-URL skal starte med http:// eller https://",
|
||
"allowInvalidCertificate": "Tillad ugyldigt certifikat",
|
||
"allowInvalidCertificateDesc": "Brug kun til betroede, selvhostede servere med selvsignerede certifikater eller IP-adressecertifikater.",
|
||
"useEmbedded": "Brug lokal server",
|
||
"embeddedDesc": "Kør Termix med den indbyggede lokale server (ingen fjernserver nødvendig)",
|
||
"embeddedConnecting": "Forbinder til lokal server...",
|
||
"embeddedNotReady": "Den lokale server er ikke klar endnu. Vent et øjeblik, og prøv igen.",
|
||
"localServer": "Lokal server",
|
||
"savedServers": "Gemte servere",
|
||
"noSavedServers": "Ingen gemte servere",
|
||
"removeServer": "Fjerne"
|
||
},
|
||
"migrationNotice": {
|
||
"title": "Termix Desktop kører nu selvstændigt",
|
||
"body1": "Denne app plejede at oprette forbindelse direkte til din Termix-server. Den er blevet omarbejdet til at køre fuldt ud alene og gemmer værter og legitimationsoplysninger lokalt, så den fortsætter med at fungere offline. Tovejssynkronisering med en selvhostet Termix-server er nu valgfri.",
|
||
"body2": "Dine eksisterende værter og loginoplysninger er stadig på {{url}}. Aktivér fjernsynkronisering, og opret forbindelse til serveren igen for at få dem tilbage og holde begge synkroniseret fremadrettet.",
|
||
"dismiss": "Ikke nu",
|
||
"setUpSync": "Opsæt fjernsynkronisering"
|
||
},
|
||
"remoteSync": {
|
||
"title": "Fjernsynkronisering",
|
||
"description": "Du kan eventuelt tilslutte denne desktop-app til en selvhostet Termix-server for at synkronisere dine værter, legitimationsoplysninger og kodestykker på tværs af enheder. Appen fungerer altid fuldt offline, uanset om du opretter forbindelse eller ej.",
|
||
"notConnected": "Ikke forbundet",
|
||
"connected": "Forbundet",
|
||
"connectedTo": "Forbundet til {{url}}",
|
||
"lastSynced": "Sidst synkroniseret {{time}}",
|
||
"neverSynced": "Aldrig synkroniseret",
|
||
"syncError": "Synkroniseringsfejl: {{message}}",
|
||
"needsReauth": "Login udløbet",
|
||
"connectButton": "Opret forbindelse til serveren",
|
||
"disconnectButton": "Afbryde",
|
||
"syncNowButton": "Synkroniser nu",
|
||
"syncing": "Synkroniserer...",
|
||
"syncSuccess": "Fjernsynkronisering fuldført",
|
||
"syncUnavailable": "Fjernsynkronisering kunne ikke startes",
|
||
"serverUrl": "Server-URL",
|
||
"enterServerUrl": "Indtast venligst en server-URL",
|
||
"mustIncludeProtocol": "Server-URL skal starte med http:// eller https://",
|
||
"connectionTestFailed": "Kunne ikke nå en Termix-server på den URL",
|
||
"allowInvalidCertificate": "Tillad ugyldigt certifikat",
|
||
"allowInvalidCertificateDesc": "Brug kun til betroede, selvhostede servere med selvsignerede certifikater eller IP-adressecertifikater.",
|
||
"savedServers": "Gemte servere",
|
||
"removeServer": "Fjerne",
|
||
"continueButton": "Fortsætte",
|
||
"cancelButton": "Ophæve",
|
||
"signInTitle": "Log ind på {{url}}",
|
||
"originTitle": "Forbindelsens oprindelse",
|
||
"originDescription": "Vælg som standard, hvor SSH-forbindelser stammer fra. Dette kan tilsidesættes pr. vært.",
|
||
"originLocal": "Denne enhed (lokalt netværk)",
|
||
"originRemote": "Fjernserver",
|
||
"bannerReconnect": "Genopret forbindelse",
|
||
"bannerMessage": "Fjernsynkronisering skal godkendes igen"
|
||
},
|
||
"versionCheck": {
|
||
"error": "Versionskontrolfejl",
|
||
"checkFailed": "Kunne ikke søge efter opdateringer",
|
||
"upToDate": "Appen er opdateret",
|
||
"currentVersion": "Du kører version {{version}}",
|
||
"updateAvailable": "Opdatering tilgængelig",
|
||
"updateLinkLabel": "Opdatering tilgængelig — åbn udgivelsesnoterne på GitHub",
|
||
"newVersionAvailable": "En ny version er tilgængelig! Du kører {{current}}, men {{latest}} er tilgængelig.",
|
||
"betaVersion": "Betaversion",
|
||
"betaVersionDesc": "Du kører {{current}}, som er nyere end den seneste stabile udgivelse {{latest}}.",
|
||
"releasedOn": "Udgivet den {{date}}",
|
||
"downloadUpdate": "Download opdatering",
|
||
"checking": "Søger efter opdateringer...",
|
||
"checkUpdates": "Tjek for opdateringer",
|
||
"checkingUpdates": "Søger efter opdateringer...",
|
||
"updateRequired": "Opdatering påkrævet"
|
||
},
|
||
"common": {
|
||
"close": "Tæt",
|
||
"minimize": "Minimer",
|
||
"online": "Online",
|
||
"offline": "Offline",
|
||
"unknown": "Ukendt",
|
||
"continue": "Fortsætte",
|
||
"maintenance": "Opretholdelse",
|
||
"degraded": "Nedbrudt",
|
||
"error": "Fejl",
|
||
"warning": "Advarsel",
|
||
"unsavedChanges": "Ikke-gemte ændringer",
|
||
"dismiss": "Afskedige",
|
||
"more": "Mere",
|
||
"loading": "Indlæser...",
|
||
"optional": "Valgfri",
|
||
"connect": "Forbinde",
|
||
"copied": "Kopieret",
|
||
"connecting": "Forbinder...",
|
||
"updateAvailable": "Opdatering tilgængelig",
|
||
"appName": "Termix",
|
||
"openInNewTab": "Åbn i ny fane",
|
||
"noReleases": "Ingen udgivelser",
|
||
"updatesAndReleases": "Opdateringer og udgivelser",
|
||
"newVersionAvailable": "En ny version ({{version}}) er tilgængelig.",
|
||
"failedToFetchUpdateInfo": "Opdateringsoplysninger kunne ikke hentes",
|
||
"preRelease": "Forudgivelse",
|
||
"noReleasesFound": "Ingen udgivelser fundet.",
|
||
"cancel": "Ophæve",
|
||
"username": "Brugernavn",
|
||
"login": "Log ind",
|
||
"logout": "Log ud",
|
||
"register": "Register",
|
||
"password": "Adgangskode",
|
||
"confirmPassword": "Bekræft adgangskode",
|
||
"back": "Tilbage",
|
||
"save": "Spare",
|
||
"saving": "Gemmer...",
|
||
"delete": "Slet",
|
||
"rename": "Omdøb",
|
||
"edit": "Redigere",
|
||
"add": "Tilføje",
|
||
"confirm": "Bekræfte",
|
||
"no": "Ingen",
|
||
"or": "ELLER",
|
||
"next": "Næste",
|
||
"previous": "Tidligere",
|
||
"refresh": "Opfriske",
|
||
"language": "Sprog",
|
||
"checking": "Tjekker...",
|
||
"checkingDatabase": "Tjekker databaseforbindelse...",
|
||
"checkingAuthentication": "Kontrollerer godkendelse...",
|
||
"backendReconnected": "Serverforbindelsen er genoprettet",
|
||
"connectionDegraded": "Serverforbindelse mistet, genopretter…",
|
||
"reload": "Genindlæs",
|
||
"remove": "Fjerne",
|
||
"create": "Skabe",
|
||
"update": "Opdatering",
|
||
"copy": "Kopi",
|
||
"copyFailed": "Kunne ikke kopiere til udklipsholder",
|
||
"maximize": "Maksimér",
|
||
"restore": "Gendan",
|
||
"of": "af",
|
||
"saved": "Gemt",
|
||
"deleted": "Slettet",
|
||
"deleteFailed": "Kunne ikke slette",
|
||
"saveFailed": "Kunne ikke gemme",
|
||
"required": "Påkrævet"
|
||
},
|
||
"onboarding": {
|
||
"stepCounter": "Trin {{current}} af {{total}}",
|
||
"skip": "Spring opsætningen over",
|
||
"next": "Næste",
|
||
"finish": "Kom i gang",
|
||
"welcomeTitle": "Velkommen til Termix",
|
||
"welcomeIntro": "Termix administrerer dine servere fra ét sted. Denne opsætning tager cirka et minut, og intet her er permanent.",
|
||
"welcome_hosts": "Gem dine servere",
|
||
"welcome_hosts_desc": "Hold styr på alle de maskiner, du administrerer, på én liste.",
|
||
"welcome_terminal": "Opret forbindelse med det samme",
|
||
"welcome_terminal_desc": "Åbn en terminal i en fane, ingen separat SSH-klient.",
|
||
"welcome_files": "Gennemse og rediger filer",
|
||
"welcome_files_desc": "Upload, download og rediger eksterne filer.",
|
||
"presetTitle": "Hvor meget vil du have på skærmen?",
|
||
"presetIntro": "Termix kan være så simpelt eller så detaljeret, som du ønsker. Vælg et udgangspunkt.",
|
||
"presetChangeLater": "Du kan skifte forudindstillinger eller ændre en enkelt indstilling senere i Indstillinger under Brugerflade.",
|
||
"appearanceTitle": "Gør det til dit eget",
|
||
"appearanceIntro": "Vælg et tema, en accentfarve og dit sprog. Alle tre kan ændres senere i Indstillinger.",
|
||
"featuresTitle": "Hvad Termix ellers gør",
|
||
"featuresIntro": "Hver server, du gemmer, kan åbnes i mere end én terminal. Her er, hvad der venter bag ikonerne til venstre.",
|
||
"feature_files": "Filhåndtering",
|
||
"feature_files_desc": "Gennemse, upload, download og rediger filer via SFTP uden at forlade appen.",
|
||
"feature_desktop": "Fjernskrivebord",
|
||
"feature_desktop_desc": "Åbn RDP-, VNC- og Telnet-sessioner i en fane, ligesom med SSH.",
|
||
"feature_tunnels": "Tunneler",
|
||
"feature_tunnels_desc": "Videresend porte via en server for at nå tjenester, der ikke er eksponerede.",
|
||
"feature_docker": "Docker",
|
||
"feature_docker_desc": "Se containere, læs logfiler og se statistikker på enhver vært, der kører Docker.",
|
||
"feature_snippets": "Uddrag",
|
||
"feature_snippets_desc": "Gem kommandoer, du kører ofte, og send dem til en terminal med et enkelt klik.",
|
||
"feature_automations": "Automatiseringer",
|
||
"feature_automations_desc": "Kør trin automatisk, når der sker noget, og få besked.",
|
||
"feature_metrics": "Målinger og advarsler",
|
||
"feature_metrics_desc": "Spor CPU, hukommelse og disk over tid, og få en advarsel, når de bliver dårlige.",
|
||
"featuresRailHint": "Har du ikke brug for en af disse? Skjul et hvilket som helst ikon fra sidebjælken i Indstillinger under Navigation.",
|
||
"workflowTitle": "Bevæg dig hurtigere rundt",
|
||
"workflowIntro": "Et par vaner, der sparer dig mest tid, når du først har et par servere.",
|
||
"workflow_palette": "Kommandopalet",
|
||
"workflow_palette_desc": "Gå til en hvilken som helst server eller handling ved at skrive. Tryk to gange på Shift for at åbne den.",
|
||
"workflow_split": "Delt skærm",
|
||
"workflow_split_desc": "Vis op til fire faner side om side for at se logfiler, mens du arbejder.",
|
||
"workflow_dock": "Sidepanel",
|
||
"workflow_dock_desc": "Klik med midten eller højre museknap på et ikon i sidepanelet for at åbne det som en fane eller fastgøre det til højre.",
|
||
"workflow_workspaces": "Arbejdsområder",
|
||
"workflow_workspaces_desc": "Gem et sæt åbne faner, og åbn hele layoutet igen senere.",
|
||
"securityTitle": "Sikker opbevaring af dine logins",
|
||
"securityIntro": "Termix gemmer legitimationsoplysninger for dig, så det er værd at se et øjeblik på, hvordan det fungerer.",
|
||
"security_credentials": "Genanvendelige legitimationsoplysninger",
|
||
"security_credentials_desc": "Gem en nøgle eller adgangskode én gang, og tilslut den til så mange servere, som du ønsker.",
|
||
"security_twofa": "To-faktor og adgangsnøgler",
|
||
"security_twofa_desc": "Tilføj TOTP eller en adgangsnøgle til din konto i Indstillinger under Sikkerhed.",
|
||
"security_identity": "Termix-ID",
|
||
"security_identity_desc": "Udsted kortlivede SSH-certifikater i stedet for at kopiere nøgler til hver server.",
|
||
"security_sharing": "Deling",
|
||
"security_sharing_desc": "Giv andre brugere adgang til en server uden at udlevere adgangskoden.",
|
||
"securityEncryptionNote": "Legitimationsoplysninger krypteres, før de gemmes, og dekrypteres kun, når en forbindelse har brug for dem.",
|
||
"doneTitle": "Du er helt klar",
|
||
"doneHeading": "Opsætningen er fuldført",
|
||
"doneDesc": "Vælg en server fra sidebjælken for at åbne en terminal, gennemse dens filer eller se dens målinger.",
|
||
"done_settings": "Ændr noget senere",
|
||
"done_settings_desc": "Temaer, layouttæthed og hvilke ikoner der vises, findes alle i Indstillinger.",
|
||
"done_rerun": "Vil du have dette igen?",
|
||
"done_rerun_desc": "Åbn Indstillinger, gå til Grænseflade, og vælg Kør opsætning for at gennemgå disse trin igen.",
|
||
"done_desktop": "Desktop-app",
|
||
"done_desktop_desc": "Termix kører som en desktop-app på Windows, macOS og Linux.",
|
||
"done_desktop_link": "Hent desktop-appen",
|
||
"done_mobile": "Mobilapp",
|
||
"done_mobile_desc": "Tag dine servere med dig på iOS og Android.",
|
||
"done_mobile_link": "Hent mobilappen",
|
||
"done_docs": "Fuld dokumentation",
|
||
"done_docs_desc": "Vejledninger til alle funktioner, inklusive dem der ikke er dækket her.",
|
||
"done_docs_link": "Åbn dokumenterne",
|
||
"done_cli": "Kommandolinjeværktøj",
|
||
"done_cli_desc": "Administrer dine servere fra en terminal, og brug Termix i dine egne scripts.",
|
||
"done_cli_link": "Åbn CLI-dokumentationen",
|
||
"aiTitle": "AI-assistent",
|
||
"aiIntro": "Termix kan inkludere en valgfri AI-assistent. Du kan ændre dette senere i dine indstillinger.",
|
||
"aiEnableTitle": "Tænd den",
|
||
"aiEnableDesc": "Tilføjer en assistent, der læser din opsætning og foreslår ændringer, du godkender. Kræver en udbyder, du angiver, f.eks. en lokal Ollama.",
|
||
"aiSkipTitle": "Lad det være slukket",
|
||
"aiSkipDesc": "Termix fungerer som den gør nu. Assistenten forbliver skjult.",
|
||
"aiNote": "Intet sendes nogen steder, før du tilføjer en udbyder og sender en besked."
|
||
},
|
||
"nav": {
|
||
"collab": "Møder",
|
||
"home": "Hjem",
|
||
"terminal": "Terminal",
|
||
"localTerminal": "Lokal terminal",
|
||
"docker": "Docker",
|
||
"tunnels": "Tunneler",
|
||
"fileManager": "Filhåndtering",
|
||
"serverStats": "Værtsmålinger",
|
||
"hostMetrics": "Værtsmålinger",
|
||
"admin": "Admin",
|
||
"termixId": "ID",
|
||
"userProfile": "Brugerprofil",
|
||
"splitScreen": "Delt skærm",
|
||
"confirmClose": "Lukke denne aktive session?",
|
||
"close": "Tæt",
|
||
"cancel": "Ophæve",
|
||
"sshManager": "SSH-administrator",
|
||
"cannotSplitTab": "Denne fane kan ikke opdeles",
|
||
"hostTabTitle": "{{username}}@{{ip}}:{{port}}",
|
||
"copyPassword": "Kopiér adgangskode",
|
||
"copySudoPassword": "Kopiér Sudo-adgangskode",
|
||
"passwordCopied": "Adgangskode kopieret til udklipsholder",
|
||
"noPasswordAvailable": "Ingen adgangskode tilgængelig",
|
||
"failedToCopyPassword": "Kunne ikke kopiere adgangskoden",
|
||
"refreshTab": "Opdater forbindelse",
|
||
"renameTab": "Omdøb faneblad",
|
||
"openFileManager": "Åbn Filhåndtering",
|
||
"dashboard": "Dashboard",
|
||
"networkGraph": "Netværksgraf",
|
||
"tmuxMonitor": "Tmux-skærm",
|
||
"homepage": "Hjemmeside",
|
||
"quickConnect": "Hurtig forbindelse",
|
||
"sshTools": "SSH-værktøjer",
|
||
"history": "Historie",
|
||
"sessionLogs": "Sessionslogfiler",
|
||
"openAsTabHint": "Ctrl+klik eller midterste klik for at åbne som faneblad",
|
||
"openAsTab": "Åbn som faneblad",
|
||
"openInRightDock": "Åbn i højre dock",
|
||
"closeRightDock": "Luk højre dock",
|
||
"toggleRightDock": "Slå højre dock til/fra",
|
||
"multiPanelHintTitle": "Arbejd med mere end ét panel",
|
||
"multiPanelHintBody": "Hold dette panel åbent, mens sidebjælken bruges til noget andet. Der er to måder at flytte den på:",
|
||
"multiPanelHintTabHow": "Ctrl+klik på dens skinneikon, eller brug knappen i denne header.",
|
||
"multiPanelHintDockHow": "Højreklik på dens skinneikon, eller brug panelikonet i fanebjælken.",
|
||
"sidebarSettings": "Indstillinger for sidebjælke...",
|
||
"hosts": "Værter",
|
||
"snippets": "Uddrag",
|
||
"macros": "Makroer",
|
||
"fleets": "Flåder",
|
||
"automations": "Automatiseringer",
|
||
"workspaces": "Arbejdsområder",
|
||
"hostManager": "Værtsadministrator",
|
||
"credentials": "Akkreditiver",
|
||
"portForwarding": "Videresendelse",
|
||
"sftp": "SFTP",
|
||
"connections": "Forbindelser",
|
||
"alerts": "Advarsler",
|
||
"serial": "Seriel",
|
||
"keepSideMenuOpen": "Hold menuen åben",
|
||
"collapseSideMenu": "Skjul menu",
|
||
"roleAdministrator": "Administrator",
|
||
"roleUser": "Bruger",
|
||
"ai": "AI"
|
||
},
|
||
"hosts": {
|
||
"hosts": "Værter",
|
||
"noHosts": "Ingen SSH-værter",
|
||
"retry": "Prøv igen",
|
||
"refresh": "Opfriske",
|
||
"optional": "Valgfri",
|
||
"downloadSample": "Download eksempel",
|
||
"failedToDeleteHost": "Kunne ikke slette {{name}}",
|
||
"importSkipExisting": "Importér (spring eksisterende over)",
|
||
"importSSHConfig": "Importer fra SSH-konfiguration",
|
||
"connectionDetails": "Forbindelsesdetaljer",
|
||
"ssh": "SSH",
|
||
"telnet": "Telnet",
|
||
"remoteDesktop": "Fjernskrivebord",
|
||
"port": "Havn",
|
||
"username": "Brugernavn",
|
||
"folder": "Folder",
|
||
"tags": "Tags",
|
||
"pin": "Stift",
|
||
"addHost": "Tilføj vært",
|
||
"editHost": "Rediger vært",
|
||
"cloneHost": "Klon vært",
|
||
"enableTerminal": "Aktivér terminal",
|
||
"enableTunnel": "Aktivér tunnel",
|
||
"enableFileManager": "Aktivér Filhåndtering",
|
||
"enableDocker": "Aktivér Docker",
|
||
"defaultPath": "Standardsti",
|
||
"connection": "Forbindelse",
|
||
"upload": "Upload",
|
||
"authentication": "Godkendelse",
|
||
"password": "Adgangskode",
|
||
"passwordSaved": "Adgangskode gemt, skriv for at ændre",
|
||
"key": "Nøgle",
|
||
"credential": "Legitimationsoplysninger",
|
||
"none": "Ingen",
|
||
"sshPrivateKey": "SSH privat nøgle",
|
||
"keyType": "Nøgletype",
|
||
"uploadFile": "Upload fil",
|
||
"tabGeneral": "Generel",
|
||
"tabSsh": "SSH",
|
||
"tabTerminal": "Terminal",
|
||
"tabRdp": "Landdistriktsudviklingsplan",
|
||
"tabVnc": "VNC",
|
||
"tabTunnels": "Tunneler",
|
||
"tabDocker": "Docker",
|
||
"tabFiles": "Filer",
|
||
"tabStats": "Værtsmålinger",
|
||
"tabHostMetrics": "Værtsmålinger",
|
||
"tabTelnet": "Telnet",
|
||
"tabSharing": "Deling",
|
||
"tabAuthentication": "Godkendelse",
|
||
"terminal": "Terminal",
|
||
"tunnel": "Tunnel",
|
||
"fileManager": "Filhåndtering",
|
||
"serverStats": "Værtsmålinger",
|
||
"status": {
|
||
"available": "Tilgængelig",
|
||
"reachable": "Kan nås, ikke godkendt",
|
||
"offline": "Offline",
|
||
"monitoringDisabled": "Overvågning deaktiveret",
|
||
"label": "Status"
|
||
},
|
||
"folderRenamed": "Mappen \"{{oldName}}\" er omdøbt til \"{{newName}}\"",
|
||
"failedToRenameFolder": "Kunne ikke omdøbe mappen",
|
||
"unsavedChangesDescription": "Dine ændringer af værten er ikke blevet gemt. Vil du kassere dem?",
|
||
"keepEditing": "Fortsæt med at redigere",
|
||
"discardChanges": "Kassér ændringer",
|
||
"movedToFolder": "Flyttede {{count}} vært(er) til \"{{folder}}\"",
|
||
"editHostTooltip": "Rediger vært",
|
||
"statusChecks": "Statuskontroller",
|
||
"metricsCollection": "Metriksamling",
|
||
"metricsInterval": "Interval for indsamling af metrikker",
|
||
"metricsIntervalDesc": "Hvor ofte skal serverstatistik indsamles (5 sekunder - 1 time)",
|
||
"behavior": "Opførsel",
|
||
"themePreview": "Temaforhåndsvisning",
|
||
"theme": "Tema",
|
||
"fontFamily": "Skrifttypefamilie",
|
||
"fontSize": "Skriftstørrelse",
|
||
"letterSpacing": "Bogstavafstand",
|
||
"lineHeight": "Linjehøjde",
|
||
"cursorStyle": "Markørstil",
|
||
"cursorBlink": "Markørblink",
|
||
"scrollbackBuffer": "Scrollback-buffer",
|
||
"bellStyle": "Klokkestil",
|
||
"rightClickSelectsWord": "Højreklik markerer ord",
|
||
"fastScrollModifier": "Hurtig scroll-modifikator",
|
||
"fastScrollSensitivity": "Hurtig scrollfølsomhed",
|
||
"sshAgentForwarding": "SSH-agentvideresendelse",
|
||
"backspaceMode": "Backspace-tilstand",
|
||
"startupSnippet": "Opstartskodestykke",
|
||
"selectSnippet": "Vælg uddrag",
|
||
"forceKeyboardInteractive": "Tving tastaturinteraktivt",
|
||
"overrideCredentialUsername": "Tilsidesæt brugernavn til legitimationsoplysninger",
|
||
"overrideCredentialUsernameDesc": "Brug det ovenfor angivne brugernavn i stedet for legitimationsoplysningernes brugernavn",
|
||
"oidcUsernameHint": "Brug $oidc.preferred_username til at erstatte dit OIDC-loginnavn.",
|
||
"tailscaleUsernameHint": "Dette skal være en Unix-bruger, som din Tailscale-identitet er tildelt i tailnets SSH ACL, ikke nødvendigvis root.",
|
||
"jumpHostChain": "Jump Host Chain",
|
||
"portKnocking": "Port Knocking",
|
||
"addKnock": "Tilføj port",
|
||
"addProxyNode": "Tilføj node",
|
||
"proxyNode": "Proxy-node",
|
||
"proxyType": "Proxytype",
|
||
"quickActions": "Hurtige handlinger",
|
||
"sudoPasswordAutoFill": "Sudo-adgangskode automatisk udfyldning",
|
||
"sudoPassword": "Sudo-adgangskode",
|
||
"keepaliveInterval": "Keepalive-interval (ms)",
|
||
"moshCommand": "MOSH-kommando",
|
||
"environmentVariables": "Miljøvariabler",
|
||
"addVariable": "Tilføj variabel",
|
||
"docker": "Docker",
|
||
"copyTerminalUrl": "Kopiér terminal-URL",
|
||
"copyFileManagerUrl": "Kopiér URL til filhåndtering",
|
||
"copyRemoteDesktopUrl": "Kopiér URL til fjernskrivebord",
|
||
"failedToConnect": "Kunne ikke oprette forbindelse til konsollen",
|
||
"connect": "Forbinde",
|
||
"disconnect": "Afbryde",
|
||
"start": "Starte",
|
||
"enableStatusCheck": "Aktivér statuskontrol",
|
||
"enableMetrics": "Aktivér metrikker",
|
||
"bulkUpdateFailed": "Masseopdatering mislykkedes",
|
||
"selectAll": "Vælg alle",
|
||
"deselectAll": "Fravælg alle",
|
||
"protocols": "Protokoller",
|
||
"secureShell": "Sikker skal",
|
||
"virtualNetwork": "Virtuelt netværk",
|
||
"unencryptedShell": "Ukrypteret skal",
|
||
"addressIp": "Adresse / IP",
|
||
"friendlyName": "Venligt navn",
|
||
"macAddress": "MAC-adresse",
|
||
"wolBroadcastAddress": "WoL-udsendelsesadresse",
|
||
"wolBroadcastAddressDesc": "Valgfri rettet udsendelse til Docker/routede netværk (f.eks. 192.168.1.255). Lad feltet stå tomt for at bruge 255.255.255.255.",
|
||
"folderAndAdvanced": "Mappe og avanceret",
|
||
"showAdvancedSettings": "Vis avancerede indstillinger",
|
||
"hideAdvancedSettings": "Skjul avancerede indstillinger",
|
||
"privateNotes": "Private noter",
|
||
"privateNotesPlaceholder": "Detaljer om denne server...",
|
||
"pinToTop": "Fastgør til toppen",
|
||
"pinToTopDesc": "Vis altid denne vært øverst på listen",
|
||
"portKnockingSequence": "Port Knocking-sekvens",
|
||
"addKnockBtn": "Tilføj bank",
|
||
"noPortKnocking": "Ingen port knocking konfigureret.",
|
||
"knockPort": "Knock Port",
|
||
"protocol": "Protokol",
|
||
"delayAfterMs": "Forsinkelse efter (ms)",
|
||
"useSocks5Proxy": "Brug SOCKS5 Proxy",
|
||
"useSocks5ProxyDesc": "Rut forbindelsen via en proxyserver",
|
||
"connectionOrigin": "Forbindelsens oprindelse",
|
||
"connectionOriginDesc": "Hvor denne værts forbindelse stammer fra. Tilsidesætter desktop-appens globale standard.",
|
||
"connectionOriginGuacamoleNote": "RDP, VNC og Telnet bruger den eksterne server, medmindre du vælger \"Denne enhed\", som kræver en guacd, som denne maskine kan nå — angiv en i guacd URL-indstillingen eller pr. vært under guacd Proxy.",
|
||
"connectionOriginDefault": "Brug standard",
|
||
"connectionOriginLocal": "Denne enhed (lokalt netværk)",
|
||
"connectionOriginRemote": "Fjernserver",
|
||
"proxyHost": "Proxy-vært",
|
||
"proxyPort": "Proxyport",
|
||
"proxyUsername": "Proxy-brugernavn",
|
||
"proxyPassword": "Proxy-adgangskode",
|
||
"proxySingleMode": "Enkelt proxy",
|
||
"proxyChainMode": "Proxy-kæde",
|
||
"you": "Du",
|
||
"jumpHostChainLabel": "Jump Host Chain",
|
||
"addJumpBtn": "Tilføj hop",
|
||
"noJumpHosts": "Ingen jump-værter er konfigureret.",
|
||
"selectAServer": "Vælg en server...",
|
||
"sshPort": "SSH-port",
|
||
"authMethod": "Godkendelsesmetode",
|
||
"authenticationMethod": "Godkendelsesmetode",
|
||
"authenticationMethodDesc": "Vælg den metode, som Termix vil bruge til at godkende denne SSH-forbindelse. Andre metoder afprøves ikke automatisk.",
|
||
"storedCredential": "Gemte legitimationsoplysninger",
|
||
"selectACredential": "Vælg en legitimationsoplysninger...",
|
||
"vaultProfile": "Profil for underskriver af arkiv",
|
||
"selectAVaultProfile": "Vælg en Vault-profil...",
|
||
"vaultProfileHint": "Indstillingerne kommer fra den delte profil; du logger ind på Vault via OIDC, når du opretter forbindelse. Der gemmes ingen hemmeligheder.",
|
||
"vaultNewProfile": "Ny profil",
|
||
"secretRefHint": "Du kan indsætte en 1Password-reference (op://vault/item/field) i stedet for hemmeligheden; den hentes fra din hemmelige kilde, når du opretter forbindelse.",
|
||
"secretSourcesManage": "Administrer hemmelige kilder",
|
||
"secretSourcesTitle": "Hemmelige kilder",
|
||
"secretSourcesDesc": "Eksterne adgangskodeadministratorer. Termix læser hemmeligheder fra ved tilslutning. I øjeblikket 1Password Connect (selvhostet). Adgangstokenet gemmes krypteret med din datanøgle.",
|
||
"secretSourceNew": "Ny kilde",
|
||
"secretSourceUrlLabel": "URL til forbindelsesserver",
|
||
"secretSourceTokenLabel": "Forbind adgangstoken",
|
||
"secretSourceTokenKeep": "Lad feltet stå tomt for at beholde det aktuelle token",
|
||
"secretSourceSharedLabel": "Del med alle brugere (kun administratorer; løses, mens du er logget ind)",
|
||
"secretSourceShared": "delt",
|
||
"secretSourceTest": "Prøve",
|
||
"secretSourceTestOk": "Forbundet — {{count}} boks(er) synlige",
|
||
"secretSourceTestFailed": "Forbindelsestest mislykkedes",
|
||
"secretSourceRequired": "Navn, server-URL og token er påkrævet",
|
||
"secretSourceSaved": "Hemmelig kilde gemt",
|
||
"secretSourceDeleted": "Hemmelig kilde slettet",
|
||
"vaultManageProfiles": "Administrer Vault-profiler",
|
||
"vaultAddrLabel": "Adresse i boksen",
|
||
"vaultNamespaceLabel": "Navnerum",
|
||
"vaultOidcMountLabel": "OIDC-godkendelsesmontering",
|
||
"vaultOidcRoleLabel": "OIDC-rolle",
|
||
"vaultSshMountLabel": "SSH-hemmeligheder monteres",
|
||
"vaultSshRoleLabel": "SSH-underskriverrolle",
|
||
"vaultValidPrincipalsLabel": "Gyldige principper",
|
||
"vaultKeyTypeLabel": "Kortvarig nøgletype",
|
||
"vaultSharedLabel": "Del med alle brugere",
|
||
"vaultCreateProfile": "Opret profil",
|
||
"vaultProfileCreated": "Vault-profil oprettet",
|
||
"vaultProfileSaved": "Vault-profil gemt",
|
||
"vaultProfileDeleted": "Vault-profil slettet",
|
||
"vaultProfileSaveFailed": "Kunne ikke gemme Vault-profilen",
|
||
"vaultProfileDeleteFailed": "Kunne ikke slette Vault-profilen",
|
||
"vaultSaveProfile": "Gem profil",
|
||
"vaultProfileValidationError": "Navn, Vault-adresse og SSH-underskriverrolle er påkrævet",
|
||
"vaultNoProfiles": "Ingen Vault-profiler endnu.",
|
||
"vaultSharedBadge": "delt",
|
||
"keyTypeLabel": "Nøgletype",
|
||
"keyTypeAuto": "Automatisk registrering",
|
||
"keyPasteTab": "Indsæt",
|
||
"keyUploadTab": "Upload",
|
||
"keyFileLoaded": "Nøglefil indlæst",
|
||
"keyUploadClick": "Klik for at uploade .pem / .key / .ppk",
|
||
"clearKey": "Ryd tast",
|
||
"keySaved": "SSH-nøgle gemt",
|
||
"keyReplaceNotice": "indsæt en ny nøgle nedenfor for at erstatte den",
|
||
"keyPassphraseSaved": "Adgangskode gemt, skriv for at ændre",
|
||
"replaceKey": "Udskift nøgle",
|
||
"docsLink": "Se dokumenter",
|
||
"stepcaLabel": "Trin CA",
|
||
"stepcaDesc": "Log ind via din identitetsudbyder, og lad din Step CA udstede et kortvarigt SSH-certifikat til denne vært. CA-URL'en, root-fingeraftrykket og OIDC-provisioneren indstilles af en administrator under administratorindstillinger.",
|
||
"authTypeStepca": "Trin CA",
|
||
"opksshLabel": "OPKSSH",
|
||
"opksshDesc": "Log ind på denne vært med din identitetsudbyder i stedet for en adgangskode eller nøgle. Kræver OPKSSH-opsætning på serveren.",
|
||
"warpgateLabel": "Warpgate Gateway",
|
||
"warpgateDesc": "Denne vært opretter forbindelse via en Warpgate SSH-proxy. Termix håndterer den browserbaserede godkendelsesproces automatisk efter godkendelse.",
|
||
"agentLabel": "SSH-agent",
|
||
"agentDesc": "Godkend ved hjælp af en SSH-agent, der kører på Termix-serveren (Bitwarden, 1Password, gpg-agent, KeeAgent, ssh-agent). Agenten skal køre på den maskine, hvor Termix hostes.",
|
||
"agentAuthenticationDesc": "Brug nøgler fra en SSH-agent til at godkende denne forbindelse. Lad socket-stien være tom for at bruge SSH_AUTH_SOCK.",
|
||
"agentSocketPathLabel": "Agent Socket-sti",
|
||
"agentSocketPathPlaceholder": "Lad feltet stå tomt for at bruge SSH_AUTH_SOCK",
|
||
"agentSocketPathHint": "Lad feltet stå tomt for automatisk at detektere fra miljøvariablen SSH_AUTH_SOCK, eller indtast en brugerdefineret socket-sti (f.eks. /run/user/1000/gnupg/S.gpg-agent.ssh).",
|
||
"agentIdentityLabel": "Agentidentitet (offentlig nøgle)",
|
||
"agentIdentityPlaceholder": "Lad feltet stå tomt for at prøve alle nøgler fra agenten",
|
||
"agentIdentityHint": "Indsæt en offentlig nøgle (f.eks. ssh-ed25519 AAAA...) for kun at tilbyde den nøgle fra agenten. Anbefales, når agenten har mange nøgler, for at undgå at overskride serverens MaxAuthTries.",
|
||
"shareSshAuthLabel": "Del SSH-godkendelse",
|
||
"shareSshAuthDesc": "Giv modtagerne krypterede kopier af denne værts SSH-godkendelse. En modtagers personlige legitimationsoplysninger har stadig forrang.",
|
||
"tailscaleDeviceSelect": "Vælg Tailscale-enhed",
|
||
"tailscaleDeviceSelectPlaceholder": "Vælg en enhed...",
|
||
"tailscaleNoApiKey": "Ingen Tailscale API-nøgle konfigureret. Tilføj en i administratorindstillinger for at aktivere enhedsregistrering.",
|
||
"tailscaleDocsLink": "Se dokumenter",
|
||
"tailscaleLoadingDevices": "Indlæser enheder...",
|
||
"tailscaleDeviceLoadFailed": "Kunne ikke indlæse Tailscale-enheder. Kontroller API-URL'en og netværksforbindelsen.",
|
||
"tailscaleNoDevices": "Ingen enheder fundet i dit tailnet.",
|
||
"tailscaleDeviceAutoFill": "Hvis du vælger en enhed, udfyldes værtens IP-adresse automatisk.",
|
||
"forceKeyboardInteractiveLabel": "Tving tastaturinteraktiv",
|
||
"forceKeyboardInteractiveShortDesc": "Tving manuel adgangskodeindtastning, selvom nøgler er til stede",
|
||
"allowLegacyAlgorithmsLabel": "Tillad ældre algoritmer",
|
||
"allowLegacyAlgorithmsDesc": "Aktivér forældede SSH-algoritmer (ssh-dss, ssh-rsa, diffie-hellman-group1-sha1, hmac-md5, 3des-cbc) for forbindelser til gamle enheder, der ikke kan opgraderes.",
|
||
"insecure": "Usikker",
|
||
"terminalAppearance": "Terminalens udseende",
|
||
"colorTheme": "Farvetema",
|
||
"fontFamilyLabel": "Skrifttypefamilie",
|
||
"fontFamilyCustomOption": "Skik...",
|
||
"fontFamilyCustomPlaceholder": "Præcis skrifttypenavn, f.eks. MesloLGS NF",
|
||
"fontFamilyCustomHint": "Vælg en medfølgende skrifttype, eller vælg Brugerdefineret og skriv det nøjagtige navn på en skrifttype, der allerede er installeret på dit system (f.eks. MesloLGS NF, Noto Sans Mono). Termix kan ikke installere skrifttyper for dig, så installer det først på dit operativsystem.",
|
||
"fontSizeLabel": "Skriftstørrelse",
|
||
"cursorStyleLabel": "Markørstil",
|
||
"letterSpacingPx": "Bogstavafstand (px)",
|
||
"lineHeightLabel": "Linjehøjde",
|
||
"bellStyleLabel": "Klokkestil",
|
||
"backspaceModeLabel": "Backspace-tilstand",
|
||
"cursorBlinking": "Markøren blinker",
|
||
"cursorBlinkingDesc": "Aktivér blinkende animation for terminalmarkøren",
|
||
"rightClickSelectsWordLabel": "Højreklik markerer ord",
|
||
"rightClickSelectsWordShortDesc": "Vælg ordet under markøren ved højreklik",
|
||
"macOptionIsMetaLabel": "Alternativtast sender meta",
|
||
"macOptionIsMetaShortDesc": "Deaktiver muligheden for at skrive specialtegn (som @ eller |) med Option/Alt-tasten på macOS i stedet for at sende Meta",
|
||
"backgroundImageLabel": "URL til baggrundsbillede",
|
||
"backgroundImageDesc": "Valgfri URL til et baggrundsbillede i terminalen",
|
||
"backgroundImageOpacityLabel": "Baggrundsbilledets opacitet",
|
||
"customThemeColors": "Brugerdefinerede farver",
|
||
"customThemeBackground": "Baggrund",
|
||
"customThemeForeground": "Forgrund",
|
||
"customThemeCursor": "Markør",
|
||
"customThemeCursorAccent": "Markøraccent",
|
||
"customThemeSelection": "Udvælgelse",
|
||
"customThemeAnsiColors": "ANSI-farver",
|
||
"customThemeBlack": "Sort",
|
||
"customThemeRed": "Rød",
|
||
"customThemeGreen": "Grøn",
|
||
"customThemeYellow": "Gul",
|
||
"customThemeBlue": "Blå",
|
||
"customThemeMagenta": "Magenta",
|
||
"customThemeCyan": "Cyan",
|
||
"customThemeWhite": "Hvid",
|
||
"customThemeBrightBlack": "Klar sort",
|
||
"customThemeBrightRed": "Klar rød",
|
||
"customThemeBrightGreen": "Klargrøn",
|
||
"customThemeBrightYellow": "Klar gul",
|
||
"customThemeBrightBlue": "Klarblå",
|
||
"customThemeBrightMagenta": "Lys magenta",
|
||
"customThemeBrightCyan": "Lys cyan",
|
||
"customThemeBrightWhite": "Klar hvid",
|
||
"customThemeResetTooltip": "Nulstil til standardindstillinger",
|
||
"savedThemesLabel": "Gemte temaer",
|
||
"saveAsGlobalTheme": "Gem som globalt tema",
|
||
"saveGlobalThemeNamePrompt": "Indtast et navn til dette tema",
|
||
"saveGlobalThemeSuccess": "Tema gemt",
|
||
"saveGlobalThemeError": "Temaet kunne ikke gemmes",
|
||
"applyGlobalThemeTooltip": "Anvend dette tema",
|
||
"deleteGlobalThemeTooltip": "Slet dette tema",
|
||
"noSavedThemes": "Ingen gemte temaer endnu",
|
||
"syntaxHighlightingLabel": "Syntaksfremhævning",
|
||
"syntaxHighlightingDesc": "Farvlæg terminaloutput (fejl, stier, IP'er, tidsstempler)",
|
||
"syntaxHighlightingCategories": "Fremhæv kategorier",
|
||
"syntaxHighlightingCategoriesDesc": "Vælg hvilke typer indhold der skal farvelægges",
|
||
"syntaxCategoryLogLevels": "Logniveauer",
|
||
"syntaxCategoryLogLevelsDesc": "fejl, advarsel, info, fejlfinding, fatal",
|
||
"syntaxCategoryPaths": "Filstier",
|
||
"syntaxCategoryPathsDesc": "/usr/share/doc, ~/fil.txt",
|
||
"syntaxCategoryTimestamps": "Tidsstempler",
|
||
"syntaxCategoryTimestampsDesc": "[12:34:56], 2024-01-15",
|
||
"syntaxCategoryIpAddresses": "IP-adresser",
|
||
"syntaxCategoryIpAddressesDesc": "192.168.1.1, 10.0.0.1:8080",
|
||
"syntaxCategoryUrls": "URL'er",
|
||
"syntaxCategoryUrlsDesc": "https://eksempel.com",
|
||
"syntaxCategoryNumbers": "Mærkede tal",
|
||
"syntaxCategoryNumbersDesc": "port 8080, exit 1, status 404",
|
||
"behaviorAndAdvanced": "Adfærd og avanceret",
|
||
"scrollbackBufferLabel": "Scrollback-buffer",
|
||
"scrollbackMaxLines": "Maksimalt antal linjer gemt i historikken",
|
||
"sshAgentForwardingLabel": "SSH-agentvideresendelse",
|
||
"sshAgentForwardingShortDesc": "Tillad denne eksterne vært at bruge din lokale SSH-agent til videre forbindelser. Dette er ikke påkrævet for agentgodkendelse.",
|
||
"useSSHTitleLabel": "Brug SSH-vinduestitel",
|
||
"useSSHTitleDesc": "Opdater fanetitlen fra skallens vinduestitel i stedet for værtsnavnet",
|
||
"enableAutoMosh": "Aktivér automatisk mosh",
|
||
"enableAutoMoshDesc": "Foretræk Mosh frem for SSH, hvis det er muligt",
|
||
"enableAutoTmux": "Aktivér Auto-Tmux",
|
||
"enableAutoTmuxDesc": "Hold din shell og alt, der kører i den, i live på tværs af afbrydelser og genstart af browseren ved at køre den inde i tmux (tmux skal være installeret på værten)",
|
||
"enableSessionLogging": "Sessionslogning",
|
||
"enableSessionLoggingDesc": "Optag output fra terminalsessionen til senere gennemgang",
|
||
"allowSessionSharing": "Tillad deling af sessioner",
|
||
"allowSessionSharingDesc": "Tillad live-sessioner på denne vært at blive delt via link eller med andre brugere",
|
||
"enableCommandHistory": "Kommandohistorik",
|
||
"enableCommandHistoryDesc": "Optagelseskommandoer køres i denne terminal for historik og autofuldførelse",
|
||
"localEchoLabel": "Lokalt ekko",
|
||
"localEchoDesc": "Forudsig sikre, udskrivbare tastetryk lokalt på langsomme forbindelser. Adgangskodeprompter og kontrolinput gentages aldrig.",
|
||
"localEchoDefault": "Brug global indstilling",
|
||
"localEchoOff": "Slukket",
|
||
"localEchoAuto": "Automatisk",
|
||
"localEchoOn": "Altid tændt",
|
||
"linkClickBehaviorLabel": "Linkkliksadfærd",
|
||
"linkClickBehaviorDesc": "Styrer, hvad der sker, når du klikker på et link i terminalen. Brug 'Standard' for at følge indstillingen på appniveau.",
|
||
"linkClickBehaviorDefault": "Standard (følg app-indstilling)",
|
||
"linkClickBehaviorConfirm": "Vis pop op-vindue for at åbne eller kopiere",
|
||
"linkClickBehaviorDirect": "Åbn direkte",
|
||
"sudoPasswordAutoFillLabel": "Sudo-adgangskode automatisk udfyldning",
|
||
"sudoPasswordAutoFillShortDesc": "Angiv automatisk sudo-adgangskode, når du bliver bedt om det",
|
||
"sudoPasswordAutoFillDesc": "Gem en sudo-adgangskode, så værtsmålinger, terminalprompter og andre kan køre privilegerede kommandoer automatisk.",
|
||
"sudoPasswordLabel": "Sudo-adgangskode",
|
||
"sudoPasswordSaved": "Adgangskode gemt, skriv for at ændre",
|
||
"environmentVariablesLabel": "Miljøvariabler",
|
||
"addVariableBtn": "Tilføj variabel",
|
||
"noEnvVars": "Ingen miljøvariabler er konfigureret.",
|
||
"fastScrollModifierLabel": "Hurtig scroll-modifikator",
|
||
"fastScrollSensitivityLabel": "Hurtig scrollfølsomhed",
|
||
"moshCommandLabel": "Mosh-kommandoen",
|
||
"startupSnippetLabel": "Opstartskodestykke",
|
||
"keepaliveIntervalLabel": "Keepalive-interval (sekunder)",
|
||
"maxKeepaliveMisses": "Max Keepalive misser",
|
||
"tunnelSettings": "Tunnelindstillinger",
|
||
"enableTunneling": "Aktivér tunnelering",
|
||
"enableTunnelingDesc": "Aktivér SSH-tunnelfunktionalitet for denne vært",
|
||
"serverTunnelsSection": "Servertunneler",
|
||
"addTunnelBtn": "Tilføj tunnel",
|
||
"noTunnelsConfigured": "Ingen tunneler konfigureret.",
|
||
"tunnelLabel": "Tunnel {{number}}",
|
||
"tunnelType": "Tunneltype",
|
||
"tunnelModeLocalDesc": "Videresend en lokal port til en port på den eksterne server (eller en vært, der kan nås fra den).",
|
||
"tunnelModeRemoteDesc": "Videresend en port på den eksterne server tilbage til en lokal port på din maskine.",
|
||
"tunnelModeDynamicDesc": "Opret en SOCKS5-proxy på en lokal port til dynamisk portvideresendelse.",
|
||
"sameHost": "Denne vært (direkte tunnel)",
|
||
"endpointHost": "Endpoint-vært",
|
||
"endpointHostPlaceholder": "Samme vært, SSH-vært eller tilgængelig vært/IP",
|
||
"endpointPort": "Endepunktsport",
|
||
"bindHost": "Bind vært",
|
||
"sourcePort": "Kildeport",
|
||
"maxRetries": "Maks. antal genforsøg",
|
||
"retryIntervalS": "Gentagelsesinterval (s)",
|
||
"autoStartLabel": "Automatisk start",
|
||
"autoStartDesc": "Tilslut automatisk denne tunnel, når værten er indlæst",
|
||
"tunnelConnecting": "Tunnelforbindelse...",
|
||
"tunnelDisconnected": "Tunnelen afbrudt",
|
||
"failedToConnectTunnel": "Kunne ikke oprette forbindelse",
|
||
"failedToDisconnectTunnel": "Kunne ikke afbryde forbindelsen",
|
||
"dockerIntegration": "Docker-integration",
|
||
"enableDockerMonitor": "Aktivér Docker",
|
||
"enableDockerMonitorDesc": "Overvåg og administrer containere på denne vært via Docker",
|
||
"containerRuntime": "Containerkørselstid",
|
||
"containerRuntimeDesc": "Vælg den CLI, der bruges til containeradministration på denne vært",
|
||
"containerRuntimeDocker": "Docker",
|
||
"containerRuntimePodman": "Podman",
|
||
"enableTmuxMonitor": "Aktivér Tmux-skærm",
|
||
"enableTmuxMonitorDesc": "Vis denne vært i Tmux Monitor og tilføj dens tmux-handlinger til sidebjælken",
|
||
"enableTerminalToolbar": "Aktivér Terminalværktøjslinjen",
|
||
"enableTerminalToolbarDesc": "Vis en værktøjslinje med hurtig adgang, der er docket til den aktive terminal for denne værts værktøjer og live statistikker",
|
||
"connectionToolbar": "Forbindelsesværktøjslinje",
|
||
"showConnectionToolbar": "Vis forbindelsesværktøjslinjen",
|
||
"showConnectionToolbarDesc": "Vis værktøjslinjen i denne værts SSH-, RDP-, VNC- og Telnet-sessioner. Du kan også skjule den midlertidigt fra selve værktøjslinjen.",
|
||
"enableAiAssistant": "Aktivér AI-assistent",
|
||
"enableAiAssistantDesc": "Tillad AI-assistenten at hjælpe i denne værts terminal. Deaktiveret som standard, og kræver stadig, at AI er aktiveret for din konto.",
|
||
"tabProxmox": "Proxmox",
|
||
"proxmoxIntegration": "Proxmox-integration",
|
||
"enableProxmox": "Aktivér Proxmox",
|
||
"enableProxmoxDesc": "Marker denne vært som en Proxmox-node. Aktiverer gæsteopdagelse og import direkte fra denne vært.",
|
||
"proxmoxDefaultAuthType": "Standardgodkendelsestype",
|
||
"proxmoxDefaultAuthTypeDesc": "Godkendelsesmetode anvendt på importerede gæsteværter. Vælg den godkendelsestype, der matcher den måde, du opretter forbindelse til dine gæster.",
|
||
"authTypePassword": "Adgangskode",
|
||
"authTypeKey": "SSH-nøgle",
|
||
"authTypeCredential": "Legitimationsoplysninger",
|
||
"authTypeOpkssh": "OPKSSH",
|
||
"authTypeNone": "Ingen",
|
||
"proxmoxDefaultCredential": "Standardlegitimationsoplysninger",
|
||
"proxmoxDefaultCredentialDesc": "Legitimationsoplysninger, der bruges til importerede gæsteværter, når godkendelsestypen er indstillet til Legitimationsoplysninger.",
|
||
"proxmoxWindowsDetection": "Windows/RDP-detektion",
|
||
"proxmoxWindowsDetectionDesc": "Kommaseparerede navnemønstre, der udløser RDP i stedet for SSH (ikke-sanskel på store og små bogstaver)",
|
||
"proxmoxDockerDetection": "Docker-detektion",
|
||
"proxmoxDockerDetectionDesc": "Kommaseparerede navnemønstre, der gør det muligt for Docker at matche gæster",
|
||
"proxmoxPreferredRanges": "Foretrukne IP-intervaller",
|
||
"proxmoxPreferredRangesDesc": "Kommaseparerede præfikser i prioriteret rækkefølge for IP-valg, når en gæst har flere grænseflader",
|
||
"proxmoxAutoSync": "Automatisk synkronisering af gæster",
|
||
"proxmoxAutoSyncDesc": "Opdag periodisk denne Proxmox-node og opret eller opdater importerede gæsteværter, mens din session er låst op.",
|
||
"proxmoxSyncInterval": "Synkroniseringsinterval (minutter)",
|
||
"proxmoxSyncIntervalDesc": "Minimum 5 minutter. Planlæggeren springer låste brugersessioner over.",
|
||
"proxmoxMarkMissing": "Markér manglende gæster",
|
||
"proxmoxMarkMissingDesc": "Tilføj et proxmox-missing-tag, når en tidligere importeret gæst forsvinder, i stedet for at slette den.",
|
||
"proxmoxLastSync": "Sidste synkronisering",
|
||
"proxmoxLastSyncNever": "Ikke synkroniseret endnu",
|
||
"proxmoxLastSyncNoResult": "Ingen resultatdetaljer",
|
||
"proxmoxLastSyncSummary": "{{created}} oprettet, {{updated}} opdateret, {{markedMissing}} mangler, {{skipped}} sprunget over",
|
||
"proxmoxLastSyncStatus": {
|
||
"success": "Succes",
|
||
"error": "Mislykkedes",
|
||
"pending": "Indtil"
|
||
},
|
||
"proxmoxDiscoverAction": "Opdag og importer Proxmox-gæster",
|
||
"proxmoxImportTitle": "Importer fra Proxmox",
|
||
"proxmoxSelectHost": "Vælg en Proxmox-vært…",
|
||
"proxmoxDiscover": "Opdage",
|
||
"proxmoxDiscovering": "Opdager…",
|
||
"proxmoxDiscoverGuests": "Opdag gæster",
|
||
"proxmoxGuestsSelected_one": "{{count}} gæst — {{selected}} valgt",
|
||
"proxmoxGuestsSelected_other": "{{count}} gæster — {{selected}} valgt",
|
||
"proxmoxSelectAll": "Vælg alle",
|
||
"proxmoxDeselectAll": "Fravælg alle",
|
||
"proxmoxNoGuests": "Ingen gæster fundet på denne Proxmox-node.",
|
||
"proxmoxImportButton_one": "Importér {{count}} vært",
|
||
"proxmoxImportButton_other": "Importér {{count}} værter",
|
||
"proxmoxResultImported": "{{count}} importeret",
|
||
"proxmoxResultUpdated": "{{count}} opdateret",
|
||
"proxmoxResultFailed": "{{count}} mislykkedes",
|
||
"proxmoxResultSkippedNoIp": "{{count}} sprunget over (ingen IP fundet)",
|
||
"proxmoxImportComplete": "Proxmox-import fuldført: {{summary}}",
|
||
"proxmoxDiscoveryFailed": "Opdagelsen mislykkedes",
|
||
"proxmoxImportFailed": "Importen mislykkedes",
|
||
"enableProxmoxStats": "Aktivér Proxmox-statistik",
|
||
"enableProxmoxStatsDesc": "Vis en Proxmox Stats-faneblad for denne vært med live node-, gæst-, lager- og klyngestatistikker indsamlet via SSH.",
|
||
"proxmoxStatsPollInterval": "Afstemningsinterval (sekunder)",
|
||
"proxmoxStatsPollIntervalDesc": "Minimum 15 sekunder. Hvor ofte skal Proxmox-nodestatistikker opdateres.",
|
||
"proxmoxStatsNodeOverride": "Tilsidesættelse af nodenavn",
|
||
"proxmoxStatsNodeOverrideDesc": "Tilsidesæt automatisk detektion af Proxmox-nodenavnet (registreres som standard via værtsnavn).",
|
||
"proxmoxStatsNodeOverridePlaceholder": "Automatisk registreret fra værtsnavn",
|
||
"proxmoxStatsUrlCopied": "Proxmox Stats URL kopieret til udklipsholder",
|
||
"copyProxmoxStatsUrlAction": "Kopiér Proxmox Stats URL",
|
||
"enableFileManagerMonitor": "Aktivér Filhåndtering",
|
||
"enableFileManagerMonitorDesc": "Gennemse og administrer filer på denne vært via SFTP",
|
||
"scpLegacyLabel": "SCP Legacy-tilstand",
|
||
"scpLegacyDesc": "Brug ældre filoverførsel til servere, der ikke understøtter SFTP-undersystemet (f.eks. integrerede eller minimale SSH-servere).",
|
||
"defaultPathLabel": "Standardsti",
|
||
"fileManagerPathHint": "Den mappe, der skal åbnes, når filhåndteringen starter for denne vært.",
|
||
"statusChecksLabel": "Statuskontroller",
|
||
"enableStatusChecks": "Aktivér statuskontroller",
|
||
"enableStatusChecksDesc": "Ping denne vært regelmæssigt for at bekræfte tilgængelighed",
|
||
"useGlobalInterval": "Brug globalt interval",
|
||
"useGlobalIntervalDesc": "Tilsidesæt med det serveromfattende statuskontrolinterval",
|
||
"checkIntervalS": "Kontrolinterval (s)",
|
||
"checkIntervalDesc": "Sekunder mellem hver forbindelsesping",
|
||
"metricsCollectionLabel": "Metriksamling",
|
||
"enableMetricsLabel": "Aktivér metrikker",
|
||
"enableMetricsDesc": "Indsaml CPU-, RAM-, disk- og andre målinger fra denne vært",
|
||
"useGlobalMetrics": "Brug globalt interval",
|
||
"useGlobalMetricsDesc": "Tilsidesæt med det serveromfattende metrikinterval",
|
||
"metricsIntervalS": "Målinger Interval (s)",
|
||
"metricsIntervalDesc2": "Sekunder mellem metriske snapshots",
|
||
"excludedMountsLabel": "Ekskluderede monteringer",
|
||
"monitoredMountsLabel": "Brugerdefinerede overvågede stier",
|
||
"monitoredMountsDesc": "Tilføj stier, der ikke er eksponeret som separate monteringer, herunder bind-monterede Home Assistant-stier såsom /config.",
|
||
"monitoredMountPathPlaceholder": "Sti (/config, /mnt/data)",
|
||
"monitoredMountLabelPlaceholder": "Etiket (valgfrit)",
|
||
"addMonitoredMount": "Tilføj sti",
|
||
"excludedMountsDesc": "Skjul specifikke monteringspunkter eller filsystemtyper (f.eks. nfs, cifs) fra diskbrug og advarsler for denne vært.",
|
||
"excludedMountsPlaceholder": "Monteringssti (/mnt/nas) eller filsystemtype (nfs, cifs)",
|
||
"excludedMountsEmpty": "Ingen monteringer er udelukket. Alle detekterede filsystemer vises.",
|
||
"addExcludedMount": "Tilføje",
|
||
"visibleWidgets": "Synlige widgets",
|
||
"widgetsMovedToHostMetrics": "Kort tilføjes, arrangeres og skaleres nu direkte i fanen Værtsmål. Åbn Værtsmål for denne vært, og brug Tilpas til at vælge, hvilke kort der vises.",
|
||
"cpuUsageLabel": "CPU-forbrug",
|
||
"cpuUsageDesc": "CPU-procent, gennemsnitsbelastning, sparkline-graf",
|
||
"memoryLabel": "Hukommelsesforbrug",
|
||
"memoryDesc": "RAM-forbrug, swap, cachelagret",
|
||
"storageLabel": "Diskforbrug",
|
||
"storageDesc": "Diskforbrug pr. monteringspunkt",
|
||
"networkLabel": "Netværksgrænseflader",
|
||
"networkDesc": "Grænsefladeliste og båndbredde",
|
||
"uptimeLabel": "Oppetid",
|
||
"uptimeDesc": "Systemoppetid og opstartstid",
|
||
"systemInfoLabel": "Systemoplysninger",
|
||
"systemInfoDesc": "OS, kerne, værtsnavn, arkitektur",
|
||
"recentLoginsLabel": "Seneste logins",
|
||
"recentLoginsDesc": "Vellykkede og mislykkede loginhændelser",
|
||
"topProcessesLabel": "Topprocesser",
|
||
"topProcessesDesc": "PID, CPU%, MEM%, kommando",
|
||
"listeningPortsLabel": "Lytteporte",
|
||
"listeningPortsDesc": "Åbn porte med proces og tilstand",
|
||
"firewallLabel": "Firewall",
|
||
"firewallDesc": "Firewall, AppArmor, SELinux-status",
|
||
"quickActionsLabel": "Hurtige handlinger",
|
||
"quickActionsToolbar": "Hurtige handlinger vises som knapper i værktøjslinjen Host Metrics til udførelse af kommandoer med et enkelt klik.",
|
||
"noQuickActions": "Ingen hurtige handlinger endnu.",
|
||
"buttonLabel": "Knapmærke",
|
||
"selectSnippetPlaceholder": "Vælg uddrag...",
|
||
"addActionBtn": "Tilføj handling",
|
||
"hostSharedSuccessfully": "Værten er blevet delt",
|
||
"failedToShareHost": "Kunne ikke dele værten",
|
||
"accessRevoked": "Adgang tilbagekaldt",
|
||
"failedToRevokeAccess": "Adgang kunne ikke tilbagekaldes",
|
||
"cancelBtn": "Ophæve",
|
||
"savingBtn": "Gemmer...",
|
||
"addHostBtn": "Tilføj vært",
|
||
"hostUpdated": "Værten er opdateret",
|
||
"hostCreated": "Vært oprettet",
|
||
"failedToSave": "Kunne ikke gemme værten",
|
||
"credentialUpdated": "Legitimationsoplysninger opdateret",
|
||
"credentialCreated": "Legitimationsoplysninger oprettet",
|
||
"failedToSaveCredential": "Kunne ikke gemme legitimationsoplysninger",
|
||
"credentialNameRequired": "Indtast venligst et navn til legitimationsoplysningerne",
|
||
"credentialAuthRequired": "Tilføj en adgangskode, en SSH-nøgle eller begge dele",
|
||
"createCredentialFromHostBtn": "Opret legitimationsoplysninger",
|
||
"createCredentialFromHostTitle": "Opret legitimationsoplysninger fra vært",
|
||
"createCredentialFromHostDesc": "Opret en genanvendelig, delbar legitimationsoplysningspost, der er forudfyldt med denne værts nuværende brugernavn, adgangskode og/eller SSH-nøgle.",
|
||
"backToHosts": "Tilbage til værter",
|
||
"pinned": "Fastgjort",
|
||
"noHostsFound": "Ingen værter fundet",
|
||
"tryDifferentTerm": "Prøv et andet udtryk",
|
||
"addFirstHost": "Tilføj din første vært for at komme i gang",
|
||
"noCredentialsFound": "Ingen legitimationsoplysninger fundet",
|
||
"addCredentialBtn": "Tilføj legitimationsoplysninger",
|
||
"updateCredentialBtn": "Opdater legitimationsoplysninger",
|
||
"editCredentialAction": "Rediger legitimationsoplysninger",
|
||
"backToHost": "Tilbage til værten",
|
||
"saveCredentialAsNewBtn": "Gem som ny",
|
||
"saveCredentialAsNewDesc": "Opretter en ny legitimationsoplysning med disse ændringer og tildeler den til denne vært. Den oprindelige legitimationsoplysning forbliver uændret.",
|
||
"credentialSavedAsNew": "Gemt som en ny legitimationsoplysninger",
|
||
"failedToSaveCredentialAsNew": "Kunne ikke gemme som en ny legitimationsoplysninger",
|
||
"features": "Funktioner",
|
||
"noFolder": "(Ingen mappe)",
|
||
"deleteSelected": "Slet",
|
||
"exitSelection": "Afslut valg",
|
||
"importSkip": "Importér (spring eksisterende over)",
|
||
"importOverwrite": "Importér (overskriv)",
|
||
"collapseBtn": "Bryde sammen",
|
||
"importExportBtn": "Import/eksport",
|
||
"hostStatusesRefreshed": "Værtsstatusser opdateret",
|
||
"failedToRefreshHosts": "Kunne ikke opdatere værter",
|
||
"movedHostTo": "Flyttet {{host}} til \"{{folder}}\"",
|
||
"failedToMoveHost": "Kunne ikke flytte værten",
|
||
"deletedFolder": "Slettede mappe \"{{name}}\"",
|
||
"failedToDeleteFolder": "Kunne ikke slette mappen",
|
||
"deleteAllInFolder": "Sletter du alle værter i \"{{name}}\"? Dette kan ikke fortrydes.",
|
||
"folderPickerPlaceholder": "Ingen mappe",
|
||
"folderPickerSearch": "Søg eller opret (brug / til undermapper)...",
|
||
"folderPickerNone": "Ingen mappe",
|
||
"folderPickerCreate": "Opret \"{{path}}\"",
|
||
"folderPickerEmpty": "Ingen matchende mapper",
|
||
"parentHost": "Forældervært",
|
||
"useFolderInstead": "Brug mappe i stedet",
|
||
"useParentHostInstead": "Brug i stedet den overordnede vært",
|
||
"parentHostPickerPlaceholder": "Ingen forældervært",
|
||
"parentHostPickerSearch": "Søg efter værter...",
|
||
"parentHostPickerNone": "Ingen forældervært",
|
||
"parentHostPickerEmpty": "Ingen matchende værter",
|
||
"collapseSubHosts": "Skjul underværter",
|
||
"expandSubHosts": "Udvid underværter",
|
||
"cannotNestUnderDescendant": "Kan ikke indlejre en vært under sin egen undervært",
|
||
"movedToParent": "Flyttede {{count}} vært(er) under \"{{parent}}\"",
|
||
"newFolder": "Ny mappe",
|
||
"createFolderTitle": "Opret mappe",
|
||
"editFolderTitle": "Rediger mappe",
|
||
"folderDialogDescription": "Vælg et navn, en farve og et ikon. Brug / til at indlejre mapper.",
|
||
"folderNameLabel": "Mappenavn",
|
||
"folderNamePlaceholder": "f.eks. Produktion/Web",
|
||
"folderNestingHint": "Brug / til at adskille niveauer og oprette indbyggede mapper.",
|
||
"folderNameDuplicate": "En mappe med dette navn findes allerede her.",
|
||
"folderColor": "Farve",
|
||
"folderIcon": "Ikon",
|
||
"folderCredential": "Legitimationsoplysninger",
|
||
"folderCredentialNone": "Ingen legitimationsoplysninger tildelt",
|
||
"folderCredentialHint": "Værter i denne mappe, der bruger godkendelsen \"Gemte legitimationsoplysninger\" uden at have valgt deres egne legitimationsoplysninger, arver denne.",
|
||
"folderPreview": "Forhåndsvisning",
|
||
"folderNameFallback": "Unavngivet mappe",
|
||
"createFolderButton": "Opret mappe",
|
||
"saveFolderButton": "Gem mappe",
|
||
"cancel": "Ophæve",
|
||
"iconSearchPlaceholder": "Søgeikoner...",
|
||
"openAllSessions": "Åbn alle sessioner",
|
||
"editFolder": "Rediger mappe",
|
||
"deleteFolder": "Slet mappe",
|
||
"selectFolder": "Vælg alle værter i mappen",
|
||
"deselectFolder": "Fravælg alle værter i mappen",
|
||
"folderSaved": "Mappen er gemt",
|
||
"failedToSaveFolder": "Mappen kunne ikke gemmes",
|
||
"folderDeleted": "Slettede mappe \"{{name}}\"",
|
||
"deleteFolderConfirm": "Sletter du \"{{name}}\" og dens {{count}} vært(er)? Dette kan ikke fortrydes.",
|
||
"failedToMoveHosts": "Kunne ikke flytte værter",
|
||
"failedToReorder": "Kunne ikke genbestille",
|
||
"expandAll": "Udvid alle mapper",
|
||
"collapseAll": "Skjul alle mapper",
|
||
"moreActions": "Mere",
|
||
"groupBy": "Gruppér efter",
|
||
"GroupByFolder": "Folder",
|
||
"GroupByTag": "Tag",
|
||
"GroupByStatus": "Status",
|
||
"GroupByProtocol": "Protokol",
|
||
"GroupByAuth": "Godkendelsestype",
|
||
"groupUngrouped": "Ugrupperet",
|
||
"customizeSidebar": "Tilpas sidebjælken",
|
||
"customizeSidebarDescription": "Vælg, hvordan værtslisten ser ud og opfører sig.",
|
||
"customizeDensityTitle": "Tæthed",
|
||
"customizeBehaviorTitle": "Opførsel",
|
||
"customizeSortHint": "Sorteringsrækkefølge og gruppering findes i sorterings- og grupperingsmenuerne i værktøjslinjen.",
|
||
"densityComfortableDesc": "Flere detaljer pr. vært: adresse, tags og ressourceforbrug.",
|
||
"densityCompactDesc": "Én linje pr. vært, for længere lister.",
|
||
"display": "Vise",
|
||
"displayDensity": "Tæthed",
|
||
"displayDensityComfortable": "Komfortabel",
|
||
"displayDensityCompact": "Kompakt",
|
||
"displayShowTags": "Vis tags",
|
||
"displayTrayOnClick": "Åbn handlinger ved klik (i stedet for at holde musen over)",
|
||
"actionsVisibility": "Værtshandlingsvisning",
|
||
"actionsVisibilityDesc": "Vælg, hvornår værtshandlinger udvides. Vælg klik for at gendanne den tidligere klik-for-at-udvide-funktion.",
|
||
"actionsAlways": "Altid synlig",
|
||
"actionsOnly": "Kun forbindelse, hvile ved klik",
|
||
"actionsHover": "Vis ved at holde musen over",
|
||
"actionsClick": "Klik for at udvide/skjule",
|
||
"openOnDoubleClick": "Åbn ved dobbeltklik",
|
||
"openOnDoubleClickDesc": "Kræv et dobbeltklik for at åbne en værtsession i stedet for et enkelt klik",
|
||
"deletedHost": "Slettet {{name}}",
|
||
"copiedToClipboard": "Kopieret til udklipsholderen",
|
||
"terminalUrlCopied": "Terminal-URL kopieret",
|
||
"fileManagerUrlCopied": "URL'en til filhåndtering er kopieret",
|
||
"tunnelUrlCopied": "Tunnel-URL kopieret",
|
||
"dockerUrlCopied": "Docker-URL kopieret",
|
||
"hostMetricsUrlCopied": "URL til værtsmålinger kopieret",
|
||
"tmuxMonitorUrlCopied": "Tmux Monitor URL kopieret",
|
||
"rdpUrlCopied": "RDP-URL kopieret",
|
||
"openNativeRdp": "Åbn i Windows Fjernskrivebord",
|
||
"nativeRdpOpened": "Åbnet i Windows Fjernskrivebord",
|
||
"nativeRdpFailed": "Kunne ikke åbne Windows Fjernskrivebord",
|
||
"vncUrlCopied": "VNC-URL kopieret",
|
||
"telnetUrlCopied": "Telnet-URL kopieret",
|
||
"remoteDesktopUrlCopied": "URL til fjernskrivebord kopieret",
|
||
"expandActions": "Udvid handlinger",
|
||
"collapseActions": "Skjul handlinger",
|
||
"wakeOnLanAction": "Vågn på LAN",
|
||
"wakeOnLanSuccess": "Magisk pakke sendt til {{name}}",
|
||
"wakeOnLanError": "Kunne ikke sende magisk pakke",
|
||
"cloneHostAction": "Klon vært",
|
||
"copyAddress": "Kopiér adresse",
|
||
"copyLink": "Kopiér link",
|
||
"copyTerminalUrlAction": "Kopiér terminal-URL",
|
||
"copyFileManagerUrlAction": "Kopiér URL til filhåndtering",
|
||
"copyTunnelUrlAction": "Kopiér tunnel-URL",
|
||
"copyDockerUrlAction": "Kopiér Docker-URL",
|
||
"copyHostMetricsUrlAction": "Kopiér URL for værtsmålinger",
|
||
"copyTmuxMonitorUrlAction": "Kopiér Tmux Monitor URL",
|
||
"copyRdpUrlAction": "Kopiér RDP-URL",
|
||
"copyVncUrlAction": "Kopiér VNC-URL",
|
||
"copyTelnetUrlAction": "Kopiér Telnet-URL",
|
||
"copyRemoteDesktopUrlAction": "Kopiér URL til fjernskrivebord",
|
||
"deleteCredentialConfirm": "Slet legitimationsoplysninger \"{{name}}\"?",
|
||
"deletedCredential": "Slettet {{name}}",
|
||
"deleteHostsConfirm": "Slet {{count}} vært{{plural}}? Dette kan ikke fortrydes.",
|
||
"movedToRoot": "Flyttet til rod",
|
||
"enableTerminalFeature": "Aktivér terminal",
|
||
"disableTerminalFeature": "Deaktiver terminalen",
|
||
"enableFilesFeature": "Aktivér filer",
|
||
"disableFilesFeature": "Deaktiver filer",
|
||
"enableTunnelsFeature": "Aktivér tunneler",
|
||
"disableTunnelsFeature": "Deaktiver tunneler",
|
||
"enableDockerFeature": "Aktivér Docker",
|
||
"disableDockerFeature": "Deaktiver Docker",
|
||
"enableProxmoxFeature": "Aktivér Proxmox",
|
||
"disableProxmoxFeature": "Deaktiver Proxmox",
|
||
"addTagsPlaceholder": "Tilføj tags...",
|
||
"authDetails": "Godkendelsesoplysninger",
|
||
"credType": "Type",
|
||
"generateKeyPairDesc": "Generer et nyt nøglepar, både private og offentlige nøgler vil blive udfyldt automatisk.",
|
||
"generatingKey": "Genererer...",
|
||
"generateLabel": "Generer {{label}}",
|
||
"uploadFileBtn": "Upload fil",
|
||
"keyPassphraseOptional": "Nøgleadgangskode (valgfrit)",
|
||
"sshPublicKeyOptional": "Offentlig SSH-nøgle (valgfri)",
|
||
"publicKeyGenerated": "Offentlig nøgle genereret",
|
||
"failedToGeneratePublicKey": "Kunne ikke udlede den offentlige nøgle",
|
||
"publicKeyCopied": "Offentlig nøgle kopieret",
|
||
"keyPairGenerated": "{{label}} nøglepar genereret",
|
||
"failedToGenerateKeyPair": "Kunne ikke generere nøglepar",
|
||
"searchHostsPlaceholder": "Søg efter værter, adresser, tags…",
|
||
"refreshBtn": "Opfriske",
|
||
"addTag": "Tilføj tags...",
|
||
"deleteConfirmBtn": "Slet",
|
||
"tunnelRequirementsText": "SSH-serveren skal have GatewayPorts angivet ja, AllowTcpForwarding ja og PermitRootLogin ja i /etc/ssh/sshd_config.",
|
||
"deleteHostConfirm": "Slet \"{{name}}\"?",
|
||
"enableAtLeastOneProtocol": "Aktiver mindst én af ovenstående protokoller for at konfigurere godkendelses- og forbindelsesindstillinger.",
|
||
"keyPassphrase": "Nøgleadgangskode",
|
||
"connectBtn": "Forbinde",
|
||
"disconnectBtn": "Afbryde",
|
||
"basicInformation": "Grundlæggende oplysninger",
|
||
"authDetailsSection": "Godkendelsesoplysninger",
|
||
"credTypeLabel": "Type",
|
||
"hostsTab": "Værter",
|
||
"credentialsTab": "Akkreditiver",
|
||
"selectMultiple": "Vælg flere",
|
||
"selectHosts": "Vælg værter",
|
||
"connectionLabel": "Forbindelse",
|
||
"authenticationLabel": "Godkendelse",
|
||
"generateKeyPairTitle": "Generer nøglepar",
|
||
"generateKeyPairDescription": "Generer et nyt nøglepar, både private og offentlige nøgler vil blive udfyldt automatisk.",
|
||
"generateFromPrivateKey": "Generer fra privat nøgle",
|
||
"refreshBtn2": "Opfriske",
|
||
"exitSelectionTitle": "Afslut valg",
|
||
"addHostBtn2": "Tilføj vært",
|
||
"addCredentialBtn2": "Tilføj legitimationsoplysninger",
|
||
"checkingHostStatuses": "Tjekker værtsstatusser...",
|
||
"pinnedSection": "Fastgjort",
|
||
"hostsExported": "Værter eksporteret",
|
||
"export": {
|
||
"menuItem": "Eksportere...",
|
||
"title": "Eksportér værter",
|
||
"scope": "Omfang",
|
||
"scopeAll": "Alle",
|
||
"scopeSelected": "Valgt",
|
||
"searchHosts": "Søg efter værter...",
|
||
"include": "Omfatte",
|
||
"groupConnection": "Forbindelse",
|
||
"groupCredentials": "Akkreditiver",
|
||
"groupNotes": "Noter",
|
||
"groupTags": "Tags og pin",
|
||
"groupTunnels": "Tunneler",
|
||
"groupJumpHosts": "Spring værter",
|
||
"groupQuickActions": "Hurtige handlinger",
|
||
"groupFeatureFlags": "Funktionsflag",
|
||
"groupAdvanced": "Avanceret konfiguration",
|
||
"preview": "Forhåndsvisning",
|
||
"moreHosts": "... {{count}} flere værter",
|
||
"summary": "{{selected}} af {{total}} værter",
|
||
"credentialsIncluded": "legitimationsoplysninger inkluderet",
|
||
"credentialsExcluded": "legitimationsoplysninger ekskluderet",
|
||
"noneSelected": "Ingen værter valgt",
|
||
"cancel": "Ophæve",
|
||
"confirm": "Eksportere",
|
||
"fetchFailed": "Kunne ikke indlæse værter til eksport",
|
||
"bulkButton": "Eksportere"
|
||
},
|
||
"sampleDownloaded": "Eksempelfil downloadet",
|
||
"failedToDeleteCredential2": "Kunne ikke slette legitimationsoplysninger",
|
||
"noFolderOption": "(Ingen mappe)",
|
||
"nSelected": "{{count}} valgt",
|
||
"featuresMenu": "Funktioner",
|
||
"moveMenu": "Flytte",
|
||
"connectSelected": "Forbinde",
|
||
"cancelSelection": "Ophæve",
|
||
"deletedCount": "Slettede {{count}} værter",
|
||
"failedToDeleteCount": "Kunne ikke slette {{count}} værter",
|
||
"duplicatedHost": "Duplikeret \"{{name}}\"",
|
||
"failedToDuplicateHost": "Kunne ikke duplikere værten",
|
||
"updatedCount": "Opdaterede {{count}} værter",
|
||
"friendlyNameLabel": "Venligt navn",
|
||
"descriptionLabel": "Beskrivelse",
|
||
"loadingHost": "Indlæser vært...",
|
||
"loadingHosts": "Indlæser værter...",
|
||
"loadingCredentials": "Indlæser loginoplysninger...",
|
||
"noHostsYet": "Ingen værter endnu",
|
||
"noHostsYetHint": "Tilføj en server for at åbne terminaler, gennemse filer og se målinger.",
|
||
"noHostsMatchSearch": "Ingen værter matcher din søgning",
|
||
"hostNotFound": "Værten blev ikke fundet",
|
||
"searchHosts": "Søg efter værter...",
|
||
"sortHosts": "Sortér værter",
|
||
"sortDefault": "Standardordre",
|
||
"sortNameAsc": "Navn (A → Å)",
|
||
"sortNameDesc": "Navn (Z → A)",
|
||
"sortIpAsc": "IP-adresse (stigende)",
|
||
"sortIpDesc": "IP-adresse (beskrivelse)",
|
||
"sortOnlineFirst": "Online først",
|
||
"sortOfflineFirst": "Offline først",
|
||
"sortManual": "Manuel (træk for at ændre rækkefølgen)",
|
||
"sortPinnedFirst": "Fastgjort først",
|
||
"filterHosts": "Filtrer værter",
|
||
"filterClearAll": "Ryd filtre",
|
||
"filterStatusGroup": "Status",
|
||
"filterOnline": "Online",
|
||
"filterOffline": "Offline",
|
||
"filterPinned": "Fastgjort",
|
||
"filterAuthGroup": "Godkendelsestype",
|
||
"filterAuthPassword": "Adgangskode",
|
||
"filterAuthKey": "SSH-nøgle",
|
||
"filterAuthCredential": "Legitimationsoplysninger",
|
||
"filterAuthNone": "Ingen",
|
||
"filterAuthOpkssh": "OPKSSH",
|
||
"filterAuthStepca": "Trin CA",
|
||
"filterProtocolGroup": "Protokol",
|
||
"filterProtocolSsh": "SSH",
|
||
"filterProtocolRdp": "Landdistriktsudviklingsplan",
|
||
"filterProtocolVnc": "VNC",
|
||
"filterProtocolTelnet": "Telnet",
|
||
"filterFeaturesGroup": "Funktioner",
|
||
"filterFeatureTerminal": "Terminal",
|
||
"filterFeatureFileManager": "Filhåndtering",
|
||
"filterFeatureTunnel": "Tunnel",
|
||
"filterFeatureDocker": "Docker",
|
||
"filterTagsGroup": "Tags",
|
||
"connectRdp": "Landdistriktsudviklingsplan",
|
||
"connectVnc": "VNC",
|
||
"connectTelnet": "Telnet",
|
||
"editHostAction": "Rediger vært",
|
||
"moreOptions": "Flere muligheder",
|
||
"shareHost": "Del vært",
|
||
"shareHostTitle": "Del: {{name}}",
|
||
"shareFolder": "Del mappe",
|
||
"shareFolderTitle": "Del mappe: {{name}}",
|
||
"folderSharedSuccessfully": "Delte {{count}} vært(er) i mappe",
|
||
"failedToShareFolder": "Mappen kunne ikke deles",
|
||
"sharing": {
|
||
"loadError": "Delingsdataene kunne ikke indlæses. Prøv igen.",
|
||
"shareWithSection": "Del med",
|
||
"usersTab": "Brugere",
|
||
"rolesTab": "Roller",
|
||
"searchPlaceholder": "Søg efter brugere eller roller...",
|
||
"noMatches": "Ingen matches fundet",
|
||
"permissionLevelLabel": "Tilladelsesniveau",
|
||
"levels": {
|
||
"connect": {
|
||
"label": "Forbinde",
|
||
"description": "Kun åbne sessioner: terminal, fjernskrivebord, filhåndtering, tunneler og Docker. Ingen adgang til værtkonfigurationen."
|
||
},
|
||
"view": {
|
||
"label": "Udsigt",
|
||
"description": "Opret forbindelse, plus se værtkonfigurationen. Hemmeligheder vises aldrig."
|
||
},
|
||
"edit": {
|
||
"label": "Redigere",
|
||
"description": "Se og rediger ikke-godkendelseshostindstillinger. Ejerens SSH-godkendelse forbliver privat og kun for ejeren."
|
||
},
|
||
"manage": {
|
||
"label": "Styre",
|
||
"description": "Rediger, plus del værten med andre, skift tilladelsesniveauer og tilbagekald adgang."
|
||
}
|
||
},
|
||
"expiryLabel": "Udløb af adgang",
|
||
"expiry": {
|
||
"never": "Aldrig",
|
||
"oneHour": "1 time",
|
||
"oneDay": "24 timer",
|
||
"sevenDays": "7 dage",
|
||
"thirtyDays": "30 dage",
|
||
"custom": "Skik"
|
||
},
|
||
"customHoursPlaceholder": "Timer indtil adgangen udløber",
|
||
"shareButton": "Dele",
|
||
"shareWithCount": "Del ({{count}})",
|
||
"currentAccess": "Nuværende adgang",
|
||
"noAccessEntries": "Denne vært er ikke blevet delt endnu",
|
||
"folderRulesTitle": "Gælder for værter tilføjet senere",
|
||
"folderRulesHint": "Disse delinger forbliver i mappen: en vært, der er oprettet i eller flyttet til den (eller en undermappe), får automatisk den samme adgang. Fjernelse af en regel stopper kun fremtidig arv.",
|
||
"folderRuleRemove": "Stop med at arve",
|
||
"folderShareSummary": "Delte {{shared}} af {{total}} vært(er) i denne mappe",
|
||
"grantedBy": "Tildelt af",
|
||
"expires": "Udløber",
|
||
"expired": "Udløbet",
|
||
"never": "Aldrig",
|
||
"revoke": "Tilbagekald",
|
||
"accessUpdated": "Adgang opdateret",
|
||
"accessUpdateFailed": "Adgang kunne ikke opdateres",
|
||
"sharedBadge": "Delt",
|
||
"sharedBadgeTooltip": "Delt af {{owner}} ({{level}} adgang)",
|
||
"viewOnlyBanner": "Denne vært deles med dig af {{owner}} med læseadgang. Konfigurationen er skrivebeskyttet.",
|
||
"sharedEditBanner": "Denne vært deles med dig af {{owner}} med redigeringsadgang. Ændringer gælder for den rigtige vært; godkendelsesreferencer kan kun ændres af ejeren.",
|
||
"ownerOnlyControl": "Kun værtsejeren kan ændre dette",
|
||
"ownerAuthPrivate": "Host-ejerens SSH-godkendelse er privat. Brug \"Indstil personlig SSH-godkendelse\" i værtsmenuen for at vælge dine egne legitimationsoplysninger.",
|
||
"ownerAuthShared": "Ejeren af værten har delt SSH-godkendelse for denne vært. Du kan bruge den eller vælge dine egne legitimationsoplysninger under \"Angiv personlig SSH-godkendelse\".",
|
||
"authOverrideAction": "Indstil personlig SSH-godkendelse",
|
||
"authOverrideActionProtocol": "Indstil personlig {{protocol}} godkendelse",
|
||
"authOverrideTitle": "Personlig SSH-godkendelse",
|
||
"authOverrideTitleProtocol": "Personlig {{protocol}} godkendelse",
|
||
"authOverrideDescriptionPrivate": "Værtsejerens SSH-loginoplysninger forbliver private. Vælg en af dine gemte loginoplysninger til forbindelser til {{host}}.",
|
||
"authOverrideDescriptionShared": "Brug den godkendelse, der deles af værtsejeren, eller erstat den med en af dine gemte legitimationsoplysninger til forbindelser til {{host}}.",
|
||
"authOverrideCredentialLabel": "Godkendelsesoplysninger",
|
||
"useSharedAuthentication": "Brug delt værtsgodkendelse",
|
||
"noPersonalCredential": "Ingen personlig legitimation",
|
||
"authOverrideNoCredentials": "Du har endnu ingen gemte SSH-legitimationsoplysninger. Opret en i Legitimationsoplysninger for at oprette forbindelse til værter, der kræver godkendelse.",
|
||
"authOverrideRequired": "Denne vært kræver en af dine gemte loginoplysninger, før du kan oprette forbindelse.",
|
||
"authOverridePrivateHint": "Denne legitimationsoplysninger er privat for dig. Værtsejeren og andre modtagere kan ikke se eller bruge den.",
|
||
"authOverrideSaved": "Personlig SSH-godkendelse gemt",
|
||
"authOverrideCleared": "Personlig SSH-godkendelse fjernet",
|
||
"authOverrideClearedToShared": "Brug af delt værtsgodkendelse",
|
||
"authOverrideLoadError": "Din SSH-godkendelse kunne ikke indlæses. Prøv igen.",
|
||
"authOverrideSaveError": "Din SSH-godkendelse kunne ikke gemmes"
|
||
},
|
||
"guac": {
|
||
"connection": "Forbindelse",
|
||
"authentication": "Godkendelse",
|
||
"storedCredential": "Gemte legitimationsoplysninger",
|
||
"noCredential": "Ingen legitimationsoplysninger (direkte legitimationsoplysninger nedenfor)",
|
||
"authMethod": "Godkendelsesmetode",
|
||
"authTypeDirect": "Direkte",
|
||
"authTypeCredential": "Legitimationsoplysninger",
|
||
"authTypeNone": "Ingen",
|
||
"authTypeNoneDesc": "Ingen loginoplysninger gemmes. Du vil blive bedt om et brugernavn og en adgangskode, hver gang du opretter forbindelse; de gemmes ikke.",
|
||
"selectCredential": "Vælg en legitimationsoplysninger...",
|
||
"connectionSettings": "Forbindelsesindstillinger",
|
||
"displaySettings": "Skærmindstillinger",
|
||
"audioSettings": "Lydindstillinger",
|
||
"rdpPerformance": "RDP-ydeevne",
|
||
"deviceRedirection": "Omdirigering af enhed",
|
||
"session": "Session",
|
||
"gateway": "Gateway",
|
||
"remoteApp": "Fjernbetjening",
|
||
"clipboard": "Udklipsholder",
|
||
"sessionRecording": "Sessionsoptagelse",
|
||
"wakeOnLan": "Wake-on-LAN",
|
||
"vncSettings": "VNC-indstillinger",
|
||
"terminalSettings": "Terminalindstillinger",
|
||
"rdpPort": "RDP-port",
|
||
"username": "Brugernavn",
|
||
"password": "Adgangskode",
|
||
"passwordSaved": "Adgangskode gemt, skriv for at ændre",
|
||
"domain": "Domæne",
|
||
"securityMode": "Sikkerhedstilstand",
|
||
"colorDepth": "Farvedybde",
|
||
"width": "Bredde",
|
||
"height": "Højde",
|
||
"dpi": "DPI",
|
||
"resizeMethod": "Ændre størrelse-metode",
|
||
"clientName": "Klientnavn",
|
||
"initialProgram": "Indledende program",
|
||
"serverLayout": "Serverlayout",
|
||
"timezone": "Tidszone",
|
||
"loadBalanceInfo": "Oplysninger om belastningsbalance / Cookie",
|
||
"loadBalanceInfoDesc": "RD Connection Broker-cookie til belastningsbalancering af RDS-farm (f.eks. tsv://MS Terminal Services Plugin.1.CollectionName)",
|
||
"guacdProxy": "guacd Proxy",
|
||
"guacdHostname": "guacd-vært",
|
||
"guacdHostnamePlaceholder": "Global standard",
|
||
"guacdPort": "guacd Port",
|
||
"guacdProxyDesc": "Tilsidesæt den globale guacd-instans for denne forbindelse. Lad være tom for at bruge den globalt konfigurerede guacd.",
|
||
"gatewayHostname": "Gateway-værtsnavn",
|
||
"gatewayPort": "Gateway-porten",
|
||
"gatewayUsername": "Gateway-brugernavn",
|
||
"gatewayPassword": "Gateway-adgangskode",
|
||
"gatewayDomain": "Gateway-domæne",
|
||
"remoteAppProgram": "RemoteApp-programmet",
|
||
"workingDirectory": "Arbejdskatalog",
|
||
"arguments": "Argumenter",
|
||
"normalizeLineEndings": "Normaliser linjeafslutninger",
|
||
"recordingPath": "Optagelsessti",
|
||
"recordingName": "Optagelsesnavn",
|
||
"macAddress": "MAC-adresse",
|
||
"broadcastAddress": "Udsendelsesadresse",
|
||
"udpPort": "UDP-port",
|
||
"waitTimeS": "Ventetid (s)",
|
||
"driveName": "Drevnavn",
|
||
"drivePath": "Kørselssti",
|
||
"ignoreCertificate": "Ignorer certifikat",
|
||
"ignoreCertificateDesc": "Tillad forbindelser til værter med selvsignerede certifikater",
|
||
"forceLossless": "Tving tabsfri",
|
||
"forceLosslessDesc": "Tving tabsfri billedkodning (højere kvalitet, mere båndbredde)",
|
||
"disableAudio": "Deaktiver lyd",
|
||
"disableAudioDesc": "Slå al lyd fra fra fjernsessionen",
|
||
"enableAudioInput": "Aktivér lydindgang (mikrofon)",
|
||
"enableAudioInputDesc": "Videresend den lokale mikrofon til den eksterne session",
|
||
"wallpaper": "Tapet",
|
||
"wallpaperDesc": "Vis skrivebordsbaggrund (deaktivering forbedrer ydeevnen)",
|
||
"theming": "Temaer",
|
||
"themingDesc": "Aktivér visuelle temaer og stilarter",
|
||
"fontSmoothing": "Skrifttypeudjævning",
|
||
"fontSmoothingDesc": "Aktivér gengivelse af ClearType-skrifttyper",
|
||
"fullWindowDrag": "Træk i hele vinduet",
|
||
"fullWindowDragDesc": "Vis vinduesindhold under træk",
|
||
"desktopComposition": "Skrivebordskomposition",
|
||
"desktopCompositionDesc": "Aktivér Aero Glass-effekter",
|
||
"menuAnimations": "Menuanimationer",
|
||
"menuAnimationsDesc": "Aktivér menuudtoning og slideanimationer",
|
||
"disableBitmapCaching": "Deaktiver bitmap-caching",
|
||
"disableBitmapCachingDesc": "Slå bitmap-cache fra (kan muligvis hjælpe med fejl)",
|
||
"disableOffscreenCaching": "Deaktiver cachelagring uden for skærmen",
|
||
"disableOffscreenCachingDesc": "Slå cache uden for skærmen fra",
|
||
"disableGlyphCaching": "Deaktiver glyf-cachelagring",
|
||
"disableGlyphCachingDesc": "Slå glyfcache fra",
|
||
"enableGfx": "Aktivér GFX",
|
||
"enableGfxDesc": "Brug RemoteFX-grafikpipeline",
|
||
"enablePrinting": "Aktivér udskrivning",
|
||
"enablePrintingDesc": "Omdiriger lokale printere til fjernsessionen",
|
||
"enableDriveRedirection": "Aktivér drevomdirigering",
|
||
"enableDriveRedirectionDesc": "Tilknyt en lokal mappe som et drev i den eksterne session",
|
||
"createDrivePath": "Opret drevsti",
|
||
"createDrivePathDesc": "Opret mappen automatisk, hvis den ikke findes",
|
||
"disableDownload": "Deaktiver download",
|
||
"disableDownloadDesc": "Forhindr download af filer fra fjernsessionen",
|
||
"disableUpload": "Deaktiver upload",
|
||
"disableUploadDesc": "Forhindr upload af filer til fjernsessionen",
|
||
"enableTouch": "Aktivér berøring",
|
||
"enableTouchDesc": "Aktivér videresendelse af berøringsinput",
|
||
"consoleSession": "Konsolsession",
|
||
"consoleSessionDesc": "Opret forbindelse til konsollen (session 0) i stedet for en ny session",
|
||
"sendWolPacket": "Send WOL-pakke",
|
||
"sendWolPacketDesc": "Send en magisk pakke for at vække denne vært før forbindelse",
|
||
"disableCopy": "Deaktiver kopiering",
|
||
"disableCopyDesc": "Forhindr kopiering af tekst fra fjernsessionen",
|
||
"disablePaste": "Deaktiver indsætning",
|
||
"disablePasteDesc": "Forhindr indsættelse af tekst i fjernsessionen",
|
||
"createPathIfMissing": "Opret sti, hvis den mangler",
|
||
"createPathIfMissingDesc": "Opret automatisk optagelsesmappen",
|
||
"excludeOutput": "Udeluk output",
|
||
"excludeOutputDesc": "Optag ikke skærmoutput (kun metadata)",
|
||
"excludeMouse": "Udeluk mus",
|
||
"excludeMouseDesc": "Optag ikke musebevægelser",
|
||
"includeKeystrokes": "Inkluder tastetryk",
|
||
"includeKeystrokesDesc": "Optag rå tastetryk ud over skærmoutput",
|
||
"vncPort": "VNC-port",
|
||
"vncPassword": "VNC-adgangskode",
|
||
"vncUsernameOptional": "Brugernavn (valgfrit)",
|
||
"vncLeaveBlank": "Lad stå tomt, hvis det ikke er nødvendigt",
|
||
"cursorMode": "Markørtilstand",
|
||
"swapRedBlue": "Skift rød/blå",
|
||
"swapRedBlueDesc": "Byt de røde og blå farvekanaler (løser nogle farveproblemer)",
|
||
"readOnly": "Skrivebeskyttet",
|
||
"readOnlyDesc": "Se fjernskærmen uden at sende input",
|
||
"telnetPort": "Telnet-port",
|
||
"terminalType": "Terminaltype",
|
||
"fontName": "Skrifttypenavn",
|
||
"fontSize": "Skriftstørrelse",
|
||
"colorScheme": "Farveskema",
|
||
"backspaceKey": "Tilbagetast",
|
||
"saveHostFirst": "Gem værten først.",
|
||
"sharingOptionsAfterSave": "Delingsmuligheder er tilgængelige, når værten er blevet gemt.",
|
||
"permissionLevel": "Tilladelsesniveau",
|
||
"typeHeader": "Type",
|
||
"targetHeader": "Mål",
|
||
"permissionHeader": "Tilladelse",
|
||
"cancelBtn": "Ophæve",
|
||
"savingBtn": "Gemmer...",
|
||
"updateHostBtn": "Opdater vært",
|
||
"addHostBtn": "Tilføj vært"
|
||
},
|
||
"arrangeUnlockedSwitchedToManual": "Skiftede til manuel sortering, så din rækkefølge holder stik",
|
||
"dragToRearrange": "Træk for at omarrangere",
|
||
"arrangeUnlocked": "Lås op, træk for at omarrangere",
|
||
"tabWebUi": "Webgrænseflade",
|
||
"webUiEndpointLabel": "Endepunkt {{number}}",
|
||
"webUiIntegration": "Webgrænseflade",
|
||
"webUiEndpointsSection": "Endepunkter",
|
||
"webUiRequirementsText": "Et direkte slutpunkt åbnes af din browser, så dens port skal kunne nås herfra. En SSH-tunnel åbnes i stedet af Termix over denne værts SSH-forbindelse, så porten skal kun kunne nås fra værten.",
|
||
"enableWebUi": "Aktivér webslutpunkter",
|
||
"enableWebUiDesc": "Åbn denne værts webgrænseflader fra sidebjælken.",
|
||
"webUiAddEndpoint": "Tilføj slutpunkt",
|
||
"webUiAddress": "Adresse",
|
||
"webUiOpening": "Åbning",
|
||
"webUiBindHostDesc": "Hvor backend binder forward. Lad feltet 127.0.0.1 stå tomt, som kun den maskine, der kører Termix, kan nå.",
|
||
"webUiBindHostExposed": "Denne adresse kan nås ud over Termix-maskinen, så alle, der kan nå porten, får denne webgrænseflade uden login.",
|
||
"webUiBindHostUnreachable": "Din browser kan ikke nå 127.0.0.1 på den maskine, der kører Termix, så dette slutpunkt kan ikke indlæses. Brug en adresse, som maskinen svarer på, f.eks. 0.0.0.0.",
|
||
"webUiBindHostSharesSessionCookie": "Fra denne browser ville videresendelsen blive nået på det samme værtsnavn, som Termix betjenes fra, så den tunnelerede tjeneste ville modtage din Termix-session. Cookies ignorerer porten. Dette slutpunkt vil nægte at åbne her; det fungerer fra Termix-desktopappen, eller når Termix åbnes på localhost.",
|
||
"webUiLocalPort": "Lokal havn",
|
||
"webUiLocalPortAuto": "Automatisk",
|
||
"webUiLocalPortDesc": "Hvilken port videresendelsen lytter på. Lad feltet stå tomt for at lade systemet vælge, eller angiv en port, når porten skal være kendt på forhånd, f.eks. en container, der udgiver den.",
|
||
"webUiNewEndpointLabel": "Nyt slutpunkt",
|
||
"webUiErrorLabelRequired": "Slutpunktet {{row}} skal have en etiket.",
|
||
"webUiErrorLabelDuplicate": "Hvert slutpunkt skal have et forskelligt navn.",
|
||
"webUiErrorPortRange": "Endepunktet {{row}} skal have en port mellem 1 og 65535.",
|
||
"webUiErrorPathInvalid": "Slutpunktet {{row}} har en ugyldig sti. Brug en sti som /admin.",
|
||
"webUiLabel": "Mærke",
|
||
"webUiScheme": "Ordning",
|
||
"webUiPort": "Havn",
|
||
"webUiPath": "Sti",
|
||
"webUiAccess": "Adgang",
|
||
"webUiAccessDirect": "Direkte",
|
||
"webUiAccessTunnel": "SSH-tunnel",
|
||
"webUiAccessTunnelUnavailable": "En SSH-tunnel kræver, at SSH er aktiveret på denne vært, og at denne enhed har en forbindelsesoprindelse.",
|
||
"webUiRender": "Åbn om",
|
||
"webUiRenderExternal": "Isoleret skrivebordsvindue",
|
||
"webUiRenderEmbedded": "Termix-fanen",
|
||
"webUiRenderEmbeddedDesc": "Indlejring er den bedste løsning: nogle webgrænseflader nægter at indlæse i en frame, og et login, der er afhængig af cookies fra samme websted, kan gå i løkke. Den eksterne browser fungerer altid.",
|
||
"webUiIgnoreCert": "Tillad ugyldigt certifikat",
|
||
"webUiIgnoreCertDesc": "Kun direkte slutpunkter. Loopback er allerede undtaget, så dette har ingen effekt på tunnelslutpunkter.",
|
||
"webUiRemoveEndpoint": "Fjern slutpunkt",
|
||
"webUiOpenFailed": "Kunne ikke åbne web-slutpunktet"
|
||
},
|
||
"commandPalette": {
|
||
"searchPlaceholder": "Søg efter værter, kommandoer eller indstillinger...",
|
||
"quickActions": "Hurtige handlinger",
|
||
"navigation": "Navigation",
|
||
"orShortcut": "eller",
|
||
"hostManager": "Værtsadministrator",
|
||
"hostManagerDesc": "Administrer, tilføj eller rediger værter",
|
||
"addNewHost": "Tilføj ny vært",
|
||
"addNewHostDesc": "Registrer en ny vært",
|
||
"adminSettings": "Administratorindstillinger",
|
||
"adminSettingsDesc": "Konfigurer systemindstillinger og brugere",
|
||
"userProfile": "Brugerprofil",
|
||
"userProfileDesc": "Administrer din konto og dine præferencer",
|
||
"addCredential": "Tilføj legitimationsoplysninger",
|
||
"addCredentialDesc": "Gem SSH-nøgler eller adgangskoder",
|
||
"tmuxMonitor": "Tmux-skærm",
|
||
"tmuxMonitorDesc": "Overvåg tmux-sessioner på tværs af dine værter",
|
||
"snippets": "Uddrag",
|
||
"runSnippetDesc": "Kør i den aktive terminalfane",
|
||
"noSnippetsFound": "Ingen uddrag fundet, der matcher \"{{search}}\"",
|
||
"recentActivity": "Seneste aktivitet",
|
||
"serversAndHosts": "Servere og værter",
|
||
"noHostsFound": "Ingen værter fundet, der matcher \"{{search}}\"",
|
||
"links": "Links",
|
||
"navigate": "Navigere",
|
||
"select": "Vælge",
|
||
"toggleWith": "Skift med",
|
||
"localTerminal": "Lokal terminal",
|
||
"localTerminalDesc": "Åbn en shell på denne computer"
|
||
},
|
||
"splitScreen": {
|
||
"paneEmpty": "Panel {{index}} - tom",
|
||
"noTabAssigned": "Ingen faneblad tildelt",
|
||
"focusedPane": "Aktiv rude"
|
||
},
|
||
"connections": {
|
||
"noConnections": "Ingen forbindelser",
|
||
"noConnectionsDesc": "Åbn en terminal, filhåndtering eller fjernskrivebord for at se forbindelser her",
|
||
"connectedFor": "Forbundet for {{duration}}",
|
||
"connected": "Forbundet",
|
||
"disconnected": "Afbrudt",
|
||
"closeTab": "Luk faneblad",
|
||
"closeConnection": "Luk forbindelse",
|
||
"forgetTab": "Glemme",
|
||
"removeBackground": "Fjerne",
|
||
"reconnect": "Genopret forbindelse",
|
||
"reopenTab": "Genåbn",
|
||
"sectionOpen": "Åben",
|
||
"sectionBackground": "Baggrund",
|
||
"backgroundDesc": "Sessioner fortsætter i {{minutes}} minutter efter afbrydelse og kan genoprettes.",
|
||
"persisted": "Fortsatte i baggrunden",
|
||
"expiresIn": "Udløber om {{duration}}",
|
||
"search": "Søg efter forbindelser...",
|
||
"noSearchResults": "Ingen forbindelser matcher din søgning",
|
||
"rename": "Omdøb session",
|
||
"sectionSharedWithMe": "Delt med mig",
|
||
"sharedBy": "Delt af {{username}}",
|
||
"join": "Deltag",
|
||
"sharedSessionLabel": "{{hostName}} (delt)"
|
||
},
|
||
"collab": {
|
||
"createRoom": "Nyt værelse",
|
||
"roomName": "Værelsesnavn",
|
||
"persistentRoom": "Permanent rum",
|
||
"persistentRoomHint": "Permanente rum forbliver på listen efter mødets afslutning og kan genbruges.",
|
||
"noRooms": "Ingen rum endnu. Opret et for at starte et møde.",
|
||
"openRoom": "Åben",
|
||
"endRoom": "Afslut mødet",
|
||
"leaveRoom": "Forlade",
|
||
"deleteMember": "Fjerne",
|
||
"removeMember": "Fjern {{name}}",
|
||
"removeMemberTitle": "Fjern dette medlem?",
|
||
"removeMemberDescription": "{{name}} mister adgangen til dette rum med det samme. Enhver aktiv SSH-seer vil blive afbrudt.",
|
||
"invite": "Invitere",
|
||
"inviteTitle": "Inviter medlemmer",
|
||
"members": "Medlemmer",
|
||
"membersPanel": "Rummedlemmer og kontrolanmodninger",
|
||
"membersWithCount": "Medlemmer ({{count}})",
|
||
"online": "online",
|
||
"offline": "offline",
|
||
"you": "(du)",
|
||
"hostBadge": "Vært",
|
||
"presenterBadge": "Præsentation",
|
||
"present": "Nuværende",
|
||
"presentTitle": "Indtag scenen",
|
||
"presentHost": "Vært",
|
||
"searchHosts": "Søg efter værter",
|
||
"noHostsFound": "Ingen tilgængelige værter fundet.",
|
||
"presentProtocol": "Protokol",
|
||
"stopPresenting": "Stop med at præsentere",
|
||
"takeOver": "Overtag",
|
||
"takeOverConfirmTitle": "Erstat den nuværende præsentation?",
|
||
"takeOverDescription": "{{name}} præsenterer nu. Overtagelse vil afbryde alles forbindelse til den scene.",
|
||
"emptyStage": "Ingen præsenterer. Gå på scenen for at dele en session.",
|
||
"stageLoading": "Forbinder sig til scenen...",
|
||
"stageEnded": "Præsentationen sluttede",
|
||
"roomEnded": "Dette møde er afsluttet",
|
||
"presenterLabel": "{{name}} præsenterer",
|
||
"guestLink": "Gæstelink",
|
||
"guestLinkOn": "Gæstelinket er aktiveret. Alle med linket kan se scenen.",
|
||
"guestLinkOff": "Gæstelinket er slået fra.",
|
||
"copyLink": "Kopiér link",
|
||
"rotateLink": "Roter link",
|
||
"disableLink": "Deaktiver link",
|
||
"rotateLinkConfirmTitle": "Roter gæstelinket?",
|
||
"rotateLinkDescription": "Det nuværende link vil stoppe med at virke med det samme. Forbundne SSH-gæster vil blive afbrudt.",
|
||
"disableLinkConfirmTitle": "Deaktiver gæstelinket?",
|
||
"disableLinkDescription": "Anonyme SSH-seere vil blive afbrudt med det samme, og det nuværende link vil stoppe med at virke.",
|
||
"linkCopied": "Linket er kopieret",
|
||
"roles": "Roller",
|
||
"users": "Brugere",
|
||
"searchUsers": "Søg brugere",
|
||
"endConfirmTitle": "Afslutte dette møde?",
|
||
"endDescription": "{{name}} slutter for alle og kan ikke genåbnes.",
|
||
"endPersistentDescription": "Den aktive præsentation i {{name}} stopper. Rummet forbliver tilgængeligt til genbrug.",
|
||
"deleteRoom": "Slet rum",
|
||
"deleteConfirmTitle": "Slet dette rum?",
|
||
"deleteDescription": "{{name}} vil blive slettet permanent for alle og kan ikke fortrydes.",
|
||
"invitedTo": "Du blev inviteret til \"{{name}}\"",
|
||
"guest": {
|
||
"title": "Møde",
|
||
"waiting": "Venter på præsentatoren...",
|
||
"linkInvalid": "Dette gæstelink er ugyldigt, eller mødet er afsluttet"
|
||
},
|
||
"reopenFromPanel": "Denne mødefane er udløbet. Genåbn rummet fra panelet Møder.",
|
||
"requestControl": "Anmod om kontrol",
|
||
"cancelControlRequest": "Annuller anmodning",
|
||
"controlQueue": "Kontrolanmodninger",
|
||
"noControlRequests": "Ingen ventende anmodninger.",
|
||
"grantControlTo": "Giv kontrol til {{name}}",
|
||
"dismissControlRequest": "Afvis kontrolanmodningen fra {{name}}",
|
||
"releaseControl": "Slipkontrol",
|
||
"grantControl": "Giv kontrol",
|
||
"revokeControl": "Tag kontrollen tilbage",
|
||
"controlRequestedBy": "{{name}} bad om kontrol",
|
||
"grant": "Give",
|
||
"controlBadge": "I kontrol",
|
||
"youArePresenting": "Du præsenterer i en anden fane. Stop præsentationen for at overdrage scenen.",
|
||
"created": "Rum oprettet",
|
||
"invited": "Medlemmer inviteret",
|
||
"roomTab": "Møde"
|
||
},
|
||
"sessionSharing": {
|
||
"guestView": {
|
||
"loading": "Forbinder til delt session...",
|
||
"linkInvalid": "Dette delingslink er ugyldigt, udløbet eller er blevet tilbagekaldt",
|
||
"rateLimited": "For mange forsøg, prøv igen om lidt",
|
||
"sessionEnded": "Denne session er afsluttet",
|
||
"readOnlyBadge": "Kun visning",
|
||
"ownerLabel": "Værtsejer"
|
||
},
|
||
"modalTitle": "Del session",
|
||
"shareButton": "Dele",
|
||
"notReadyToShare": "Sessionen er ikke klar til deling endnu",
|
||
"modeTab": {
|
||
"link": "Forbindelse",
|
||
"user": "Bruger"
|
||
},
|
||
"linkModeDescription": "Alle med dette link kan tilmelde sig, ingen konto kræves.",
|
||
"userModeDescription": "Del med en bestemt bruger, der allerede har adgang til denne vært. Hvis de ikke har adgang endnu, skal du først dele værten med dem eller bruge et link i stedet. Når sessionen er delt, vises den under deres fane Forbindelser.",
|
||
"permissionLevel": {
|
||
"label": "Tilladelsesniveau",
|
||
"readOnly": "Skrivebeskyttet",
|
||
"readOnlyDescription": "Kan se sessionen live, men kan ikke skrive eller interagere.",
|
||
"readWrite": "Læs-skriv",
|
||
"readWriteDescription": "Kan skrive og interagere med sessionen ligesom ejeren."
|
||
},
|
||
"expiryLabel": "Linkudløb",
|
||
"createLinkButton": "Opret link",
|
||
"createShareButton": "Del med brugeren",
|
||
"searchUsersPlaceholder": "Søg efter brugere...",
|
||
"noUsersFound": "Ingen brugere fundet",
|
||
"linkCreated": "Delingslink oprettet",
|
||
"linkCopied": "Link kopieret til udklipsholder",
|
||
"copyLink": "Kopiér link",
|
||
"shareCreated": "Session delt. Den vises i fanen Forbindelser.",
|
||
"shareFailed": "Kunne ikke oprette deling",
|
||
"userLacksHostAccess": "Den bruger har endnu ikke adgang til denne vært. Del værten med dem først, eller brug et link i stedet.",
|
||
"activeShares": "Aktive aktier",
|
||
"noActiveShares": "Ingen aktive delinger for denne session",
|
||
"revoke": "Tilbagekald",
|
||
"revokeConfirmTitle": "Tilbagekald denne deling?",
|
||
"revokeConfirmDescription": "Enhver, der bruger denne deling, mister adgangen med det samme.",
|
||
"revoked": "Deling tilbagekaldt",
|
||
"revokeFailed": "Delingen kunne ikke tilbagekaldes",
|
||
"joinCount": "{{count}} tilmeld dig",
|
||
"joinCount_other": "{{count}} deltager",
|
||
"expiresAt": "Udløber {{date}}",
|
||
"linkShareBadge": "Forbindelse",
|
||
"userShareBadge": "Bruger: {{username}}",
|
||
"loadSharesFailed": "Kunne ikke indlæse aktive delinger"
|
||
},
|
||
"guacamole": {
|
||
"connecting": "Forbinder til {{type}} session...",
|
||
"checkingGuacd": "Tjekker fjernskrivebordstjeneste...",
|
||
"requestingToken": "Anmoder om {{type}} forbindelsestoken...",
|
||
"openingSession": "Åbner {{type}} session...",
|
||
"negotiating": "Forhandler {{type}} håndtryk...",
|
||
"sessionReady": "{{type}} session klar",
|
||
"connectionError": "Forbindelsesfejl",
|
||
"connectionFailed": "Forbindelsen mislykkedes",
|
||
"failedToConnect": "Kunne ikke hente forbindelsestoken",
|
||
"hostNotFound": "Værten blev ikke fundet",
|
||
"noHostSelected": "Ingen vært valgt",
|
||
"reconnect": "Genopret forbindelse",
|
||
"retry": "Prøv igen",
|
||
"guacdUnavailable": "Fjernskrivebordstjenesten (guacd) er ikke tilgængelig. Sørg for, at guacd kører, er tilgængelig og konfigureret korrekt i administratorindstillingerne.",
|
||
"credentialPromptTitle": "Indtast RDP-legitimationsoplysninger",
|
||
"credentialPromptDescription": "Denne vært er indstillet til at bede om legitimationsoplysninger ved forbindelse. De bruges kun til denne session og gemmes ikke.",
|
||
"connect": "Forbinde",
|
||
"ctrlAltDel": "Ctrl+Alt+Del",
|
||
"files": {
|
||
"title": "Drev-filer",
|
||
"parent": "Forældreregister",
|
||
"refresh": "Opfriske",
|
||
"empty": "Denne mappe er tom",
|
||
"listFailed": "Kunne ikke læse denne mappe",
|
||
"download": "Download",
|
||
"downloadFailed": "Kunne ikke downloade {{name}}",
|
||
"upload": "Upload filer",
|
||
"uploading": "Uploader {{name}}...",
|
||
"uploaded": "Uploadet {{name}}",
|
||
"uploadFailed": "Kunne ikke uploade {{name}}",
|
||
"uploadDisabled": "Uploads er deaktiveret for denne forbindelse",
|
||
"driveUnavailable": "Aktivér omdirigering af RDP-drev før upload af filer",
|
||
"driveNotWritable": "guacd kan ikke skrive til drevmappen. Kontroller GUACD_DRIVE_PATH (eller værtens drevsti) og dens tilladelser.",
|
||
"dropToUpload": "Slip filer for at uploade"
|
||
},
|
||
"toolbar": {
|
||
"ctrlAltDel": "Ctrl+Alt+Del",
|
||
"winL": "Win+L (Låseskærm)",
|
||
"winKey": "Windows-nøgle",
|
||
"superL": "Super+L (Låseskærm)",
|
||
"superKey": "Supernøgle",
|
||
"super": "Super",
|
||
"cmdL": "Cmd+L (Låseskærm)",
|
||
"cmdKey": "Kommandotast",
|
||
"cmd": "Kommando",
|
||
"ctrl": "Ctrl",
|
||
"alt": "Alt",
|
||
"shift": "Flytte",
|
||
"win": "Vinde",
|
||
"stickyActive": "{{key}} (låst - klik for at slippe)",
|
||
"stickyInactive": "{{key}} (klik for at låse)",
|
||
"esc": "Flugt",
|
||
"tab": "Faneblad",
|
||
"home": "Hjem",
|
||
"end": "Ende",
|
||
"pageUp": "Side op",
|
||
"pageDown": "Side ned",
|
||
"arrowUp": "Pil op",
|
||
"arrowDown": "Pil ned",
|
||
"arrowLeft": "Pil til venstre",
|
||
"arrowRight": "Pil til højre",
|
||
"fnToggle": "Funktionstaster",
|
||
"reconnect": "Genopret forbindelse til sessionen",
|
||
"collapse": "Skjul værktøjslinjen",
|
||
"expand": "Udvid værktøjslinjen",
|
||
"dragHandle": "Træk for at flytte",
|
||
"hide": "Skjul for denne session. For at deaktivere det permanent skal du åbne Værtsindstillinger → Generelt → Forbindelsesværktøjslinje.",
|
||
"zoomIn": "Zoom ind",
|
||
"zoomOut": "Zoom ud",
|
||
"resetZoom": "Nulstil zoom",
|
||
"fitToScreen": "Tilpas til skærm",
|
||
"switchToTrackpad": "Skift til trackpad-tilstand (træk for at flytte markøren, tryk for at klikke)",
|
||
"switchToTouch": "Skift til berøringstilstand (tryk direkte der, hvor du vil klikke)"
|
||
}
|
||
},
|
||
"terminal": {
|
||
"sessionExpiredNotice": "Din forrige session på {{host}} udløb efter {{minutes}} minutters afbrydelse; shell'en og alt, der kører i den, er væk. Aktiver Auto-Tmux på denne vært for at holde sessionerne aktive.",
|
||
"sessionExpiredNoticeNoMinutes": "Din forrige session på {{host}} udløb, mens forbindelsen var afbrudt; skallen og alt, der kørte i den, er væk. Aktiver Auto-Tmux på denne vært for at holde sessionerne aktive.",
|
||
"enableAutoTmuxAction": "Aktivér Auto-Tmux",
|
||
"autoTmuxEnabled": "Auto-Tmux aktiveret for {{host}}. Det gælder fra den næste forbindelse.",
|
||
"autoTmuxEnableFailed": "Kunne ikke aktivere Auto-Tmux",
|
||
"connect": "Opret forbindelse til vært",
|
||
"clear": "Klar",
|
||
"paste": "Indsæt",
|
||
"reconnect": "Genopret forbindelse",
|
||
"connectionLost": "Forbindelse tabt",
|
||
"connected": "Forbundet",
|
||
"clipboardWriteFailed": "Kunne ikke kopiere til udklipsholder. Sørg for, at siden serveres via HTTPS eller localhost.",
|
||
"clipboardReadFailed": "Kunne ikke læse fra udklipsholderen. Sørg for, at der er givet tilladelse til udklipsholderen.",
|
||
"clipboardHttpWarning": "Kunne ikke læse udklipsholderen. Nogle browsere begrænser adgang til udklipsholderen uden for HTTPS - prøv Ctrl+V i stedet, eller server Termix via HTTPS.",
|
||
"passwordPromptFillTitle": "Udfyld den gemte adgangskode i denne prompt?",
|
||
"unknownError": "Der opstod en ukendt fejl",
|
||
"websocketError": "WebSocket-forbindelsesfejl",
|
||
"connecting": "Forbinder...",
|
||
"noHostSelected": "Ingen vært valgt",
|
||
"reconnecting": "Genopretter forbindelse... ({{attempt}}/{{max}})",
|
||
"reconnected": "Genoprettet forbindelse",
|
||
"tmuxSessionCreated": "tmux-session oprettet: {{name}}",
|
||
"tmuxSessionAttached": "tmux-session vedhæftet: {{name}}",
|
||
"tmuxUnavailable": "tmux er ikke installeret på den eksterne vært, og bruger standardshell",
|
||
"tmuxSessionPickerTitle": "tmux-sessioner",
|
||
"tmuxSessionPickerDesc": "Eksisterende tmux-sessioner fundet på denne vært. Vælg en for at gentilknytte eller opret en ny session.",
|
||
"tmuxWindows": "Vinduer",
|
||
"tmuxWindowCount": "{{count}} vindue",
|
||
"tmuxAttached": "Tilknyttede klienter",
|
||
"tmuxAttachedCount": "{{count}} vedhæftet",
|
||
"tmuxLastActivity": "Sidste aktivitet",
|
||
"tmuxTimeJustNow": "lige nu",
|
||
"tmuxTimeMinutes": "For {{count}}minutter siden",
|
||
"tmuxTimeHours": "For {{count}}timer siden",
|
||
"tmuxTimeDays": "for {{count}}dage siden",
|
||
"tmuxCreateNew": "Start en ny session",
|
||
"tmuxCopyHint": "Juster valget, og tryk på Enter for at kopiere til udklipsholderen",
|
||
"tmuxDetach": "Afbryd forbindelsen til tmux-sessionen",
|
||
"tmuxDetached": "Afkoblet fra tmux-session",
|
||
"searchPlaceholder": "Finde",
|
||
"searchCaseSensitive": "Match-sag",
|
||
"searchWholeWord": "Match hele ordet",
|
||
"searchRegex": "Brug regulært udtryk",
|
||
"searchNoResults": "Ingen resultater",
|
||
"searchResultCount": "{{index}} af {{count}}",
|
||
"searchNext": "Næste kamp (Enter)",
|
||
"searchPrevious": "Forrige match (Shift+Enter)",
|
||
"searchClose": "Luk (Escape)",
|
||
"maxReconnectAttemptsReached": "Maksimalt antal forsøg på genoprettelse nået",
|
||
"closeTab": "Tæt",
|
||
"connectionTimeout": "Forbindelsestimeout",
|
||
"terminalTitle": "Terminal - {{host}}",
|
||
"terminalWithPath": "Terminal - {{host}}:{{path}}",
|
||
"runTitle": "Kører {{command}} - {{host}}",
|
||
"totpRequired": "Tofaktorgodkendelse påkrævet",
|
||
"totpCodeLabel": "Bekræftelseskode",
|
||
"totpVerify": "Verificere",
|
||
"mfaPromptRequired": "Godkendelse påkrævet",
|
||
"mfaPushRequired": "Push-godkendelse påkrævet",
|
||
"mfaMenuPlaceholder": "Indtast dit svar",
|
||
"mfaWaitingApproval": "Venter på godkendelse på din enhed...",
|
||
"mfaSendRequest": "Send anmodning",
|
||
"warpgateAuthRequired": "Warpgate-godkendelse påkrævet",
|
||
"warpgateSecurityKey": "Sikkerhedsnøgle",
|
||
"warpgateAuthUrl": "Godkendelses-URL",
|
||
"warpgateOpenBrowser": "Åbn i browser",
|
||
"warpgateContinue": "Jeg har gennemført godkendelsen",
|
||
"certAuthRequired": "{{provider}} Log ind påkrævet",
|
||
"opksshAuthRequired": "OPKSSH-godkendelse påkrævet",
|
||
"opksshAuthDescription": "Fuldfør godkendelsen i din browser for at fortsætte. Denne session forbliver gyldig i 24 timer.",
|
||
"opksshOpenBrowser": "Åbn browseren for at godkende",
|
||
"opksshWaitingForAuth": "Venter på godkendelse i browseren...",
|
||
"opksshAuthenticating": "Behandler godkendelse...",
|
||
"opksshTimeout": "Godkendelsen udløb. Prøv igen.",
|
||
"opksshAuthFailed": "Godkendelse mislykkedes. Tjek dine loginoplysninger, og prøv igen.",
|
||
"opksshSignInWith": "Log ind med {{provider}}",
|
||
"tailscaleCheckRequired": "Tailscale-godkendelse påkrævet",
|
||
"tailscaleCheckDescription": "Tailscale SSH kræver en yderligere kontrol. Godkend i din browser for at fortsætte.",
|
||
"tailscaleCheckOpenBrowser": "Åbn browseren for at godkende",
|
||
"tailscaleCheckWaiting": "Venter på Tailscale-godkendelse...",
|
||
"tailscaleCheckTimeout": "Tailscale-godkendelsen er udløbet. Prøv igen.",
|
||
"vaultAuthTitle": "Login til Vault kræves",
|
||
"vaultAuthDescription": "Et vindue er åbnet, hvor du kan logge ind på HashiCorp Vault. Fuldfør loginprocessen der; forbindelsen fortsætter automatisk.",
|
||
"vaultAuthFailed": "Godkendelse af arkiv mislykkedes. Prøv igen.",
|
||
"vaultReopen": "Genåbn loginvinduet",
|
||
"sudoPasswordPopupTitle": "Indsæt adgangskode?",
|
||
"linkDialogTitle": "Åbn link",
|
||
"linkDialogOpen": "Åben",
|
||
"linkDialogCopy": "Kopi",
|
||
"websocketAbnormalClose": "Forbindelsen blev lukket uventet. Dette kan skyldes et problem med reverse proxy eller SSL-konfigurationen. Tjek venligst serverlogfilerne.",
|
||
"connectionLogTitle": "Forbindelseslog",
|
||
"connectionLogCopy": "Kopiér logfiler til udklipsholder",
|
||
"connectionLogEmpty": "Ingen forbindelseslogfiler endnu",
|
||
"connectionLogWaiting": "Venter på forbindelseslogfiler...",
|
||
"connectionLogCopied": "Forbindelseslogfiler kopieret til udklipsholder",
|
||
"connectionLogCopyFailed": "Kunne ikke kopiere logfiler til udklipsholderen",
|
||
"connectionRejected": "Forbindelsen blev afvist af serveren. Kontroller din godkendelse og netværkskonfiguration.",
|
||
"hostKeyRejected": "SSH-værtsnøglebekræftelse afvist. Forbindelse afbrudt.",
|
||
"sessionTakenOver": "Sessionen blev åbnet i en anden fane. Genopretter forbindelse...",
|
||
"split": {
|
||
"splitTab": "Opdel faneblad",
|
||
"addToSplit": "Tilføj til Opdeling",
|
||
"removeFromSplit": "Fjern fra Split"
|
||
}
|
||
},
|
||
"fileManager": {
|
||
"noHostSelected": "Ingen vært valgt",
|
||
"initializingEditor": "Initialiserer editor...",
|
||
"file": "Fil",
|
||
"folder": "Folder",
|
||
"uploadFile": "Upload fil",
|
||
"downloadFile": "Download",
|
||
"extractArchive": "Uddrag af arkivet",
|
||
"extractingArchive": "Udtrækker {{name}}...",
|
||
"archiveExtractedSuccessfully": "{{name}} blev udpakket",
|
||
"extractFailed": "Udpakning mislykkedes",
|
||
"compressFile": "Komprimer fil",
|
||
"compressFiles": "Komprimer filer",
|
||
"compressFilesDesc": "Komprimer {{count}} elementer til et arkiv",
|
||
"archiveName": "Arkivnavn",
|
||
"enterArchiveName": "Indtast arkivnavn...",
|
||
"compressionFormat": "Kompressionsformat",
|
||
"selectedFiles": "Valgte filer",
|
||
"andMoreFiles": "og {{count}} mere...",
|
||
"compress": "Sammenpresse",
|
||
"compressingFiles": "Komprimerer {{count}} elementer til {{name}}...",
|
||
"filesCompressedSuccessfully": "{{name}} er oprettet",
|
||
"compressFailed": "Komprimering mislykkedes",
|
||
"edit": "Redigere",
|
||
"preview": "Forhåndsvisning",
|
||
"previous": "Tidligere",
|
||
"next": "Næste",
|
||
"pageXOfY": "Side {{current}} af {{total}}",
|
||
"zoomOut": "Zoom ud",
|
||
"zoomIn": "Zoom ind",
|
||
"newFile": "Ny fil",
|
||
"newFolder": "Ny mappe",
|
||
"rename": "Omdøb",
|
||
"uploading": "Uploader...",
|
||
"uploadingFile": "Uploader {{name}}...",
|
||
"fileName": "Filnavn",
|
||
"folderName": "Mappenavn",
|
||
"fileUploadedSuccessfully": "Filen \"{{name}}\" er blevet uploadet",
|
||
"failedToUploadFile": "Kunne ikke uploade filen",
|
||
"uploadingFolderFiles": "Uploader {{count}} fil(er)...",
|
||
"uploadedFolderFiles": "Uploadede {{count}} fil(er)",
|
||
"uploadedFolderPartial": "Upload af {{uploaded}} fil(er), {{failed}} mislykkedes",
|
||
"fileDownloadedSuccessfully": "Filen \"{{name}}\" er blevet downloadet",
|
||
"failedToDownloadFile": "Kunne ikke downloade filen",
|
||
"fileCreatedSuccessfully": "Filen \"{{name}}\" er blevet oprettet",
|
||
"folderCreatedSuccessfully": "Mappen \"{{name}}\" er blevet oprettet",
|
||
"failedToCreateItem": "Kunne ikke oprette elementet",
|
||
"operationFailed": "{{operation}} handling mislykkedes for {{name}}: {{error}}",
|
||
"failedToResolveSymlink": "Kunne ikke løse symbolsk link",
|
||
"itemsDeletedSuccessfully": "{{count}} elementer er blevet slettet",
|
||
"failedToDeleteItems": "Kunne ikke slette elementer",
|
||
"sudoPasswordRequired": "Administratoradgangskode påkrævet",
|
||
"enterSudoPassword": "Indtast sudo-adgangskoden for at fortsætte denne handling",
|
||
"sudoPassword": "Sudo-adgangskode",
|
||
"sudoOperationFailed": "Sudo-handlingen mislykkedes",
|
||
"sudoAuthFailed": "Sudo-godkendelse mislykkedes",
|
||
"dragFilesToUpload": "Slip filer her for at uploade",
|
||
"dropToUploadHere": "Slip for at uploade her",
|
||
"dropToDownloadHere": "Slip for at downloade her",
|
||
"localFiles": "Lokal",
|
||
"showLocalFiles": "Vis lokale filer (delt visning)",
|
||
"hideLocalFiles": "Skjul lokale filer",
|
||
"localHome": "Hjemmemappe",
|
||
"localPathPlaceholder": "Lokal mappesti",
|
||
"localShowHidden": "Vis skjulte filer",
|
||
"localHideHidden": "Skjul skjulte filer",
|
||
"localRevealInFileManager": "Vis i systemfilhåndtering",
|
||
"localCannotOpenFolder": "Kan ikke åbne mappen",
|
||
"localItemCount": "{{count}} elementer",
|
||
"localSelectedCount": "{{count}} valgt",
|
||
"back": "Tilbage",
|
||
"forward": "Forward",
|
||
"up": "Op",
|
||
"kind": "Slags",
|
||
"localUploadingProgress": "Uploader {{current}} af {{total}}",
|
||
"localDownloadingProgress": "Downloader {{current}} af {{total}}",
|
||
"localTransferInFlight": "{{count}} på én gang",
|
||
"localPreparingDownload": "Forbereder download...",
|
||
"localTransferCancelled": "Overførsel annulleret",
|
||
"localNothingToTransfer": "Intet at overføre",
|
||
"localUploadComplete": "Uploadede {{count}} fil(er)",
|
||
"localUploadFailed": "Upload mislykkedes",
|
||
"localUploadPartial": "Upload af {{done}} fil(er), {{failed}} mislykkedes",
|
||
"localDownloadComplete": "Downloadede {{count}} fil(er)",
|
||
"localDownloadFailed": "Download mislykkedes",
|
||
"localDownloadPartial": "Download af {{done}} fil(er), {{failed}} mislykkedes",
|
||
"localReplaceExistingPrompt": "{{count}} elementer findes allerede i denne mappe. Skal de erstattes?",
|
||
"localReplace": "Erstatte",
|
||
"localSkipExisting": "Springe",
|
||
"localSkippedExisting": "Springede {{count}} eksisterende element(er) over",
|
||
"localUnsafeNamesSkipped": "Springede {{count}} elementer over, hvis navne ikke kan bruges på denne computer",
|
||
"localOpen": "Åben",
|
||
"localOpenFolder": "Åbn mappe",
|
||
"localUploadToRemote": "Upload til server",
|
||
"localUploadToRemoteMany": "Upload {{count}} elementer til serveren",
|
||
"localMoveToTrash": "Flyt til papirkurven",
|
||
"localMoveToTrashMany": "Flyt {{count}} elementer til papirkurven",
|
||
"localTrashConfirmSingle": "Flytte \"{{name}}\" til papirkurven?",
|
||
"localTrashConfirmFolder": "Flytte mappen \"{{name}}\" og alt dens indhold til papirkurven?",
|
||
"localTrashConfirmMany": "Flytte {{count}} elementer til papirkurven?",
|
||
"localTrashed": "Flyttede {{count}} element(er) til papirkurven",
|
||
"localTrashFailed": "Kunne ikke flytte til papirkurven",
|
||
"localRenameFailed": "Omdøbning mislykkedes",
|
||
"localCreateFailed": "Kunne ikke oprette elementet",
|
||
"goToParentFolder": "Gå til overordnet mappe",
|
||
"resizeSidebar": "Træk for at ændre størrelsen på sidebjælken (dobbeltklik for at nulstille)",
|
||
"resizeLocalPane": "Træk for at ændre størrelsen på den lokale rude (dobbeltklik for at nulstille)",
|
||
"columns": "Kolonner",
|
||
"columnsHint": "Højreklik for at vælge kolonner",
|
||
"emptyFolder": "Denne mappe er tom",
|
||
"searchFiles": "Søg i filer...",
|
||
"upload": "Upload",
|
||
"selectHostToStart": "Vælg en vært for at starte filhåndtering",
|
||
"sshRequiredForFileManager": "Filhåndtering kræver SSH. Denne vært har ikke SSH aktiveret.",
|
||
"failedToConnect": "Kunne ikke oprette forbindelse til SSH",
|
||
"failedToLoadDirectory": "Kunne ikke indlæse mappen",
|
||
"noSSHConnection": "Ingen SSH-forbindelse tilgængelig",
|
||
"copy": "Kopi",
|
||
"cut": "Skære",
|
||
"paste": "Indsæt",
|
||
"copyPath": "Kopiér sti",
|
||
"copyPaths": "Kopier stier",
|
||
"delete": "Slet",
|
||
"properties": "Ejendomme",
|
||
"refresh": "Opfriske",
|
||
"downloadFiles": "Download {{count}} filer til browseren",
|
||
"copyFiles": "Kopiér {{count}} elementer",
|
||
"cutFiles": "Klip {{count}} elementer",
|
||
"deleteFiles": "Slet {{count}} elementer",
|
||
"filesCopiedToClipboard": "{{count}} elementer kopieret til udklipsholderen",
|
||
"filesCutToClipboard": "{{count}} elementer klippet til udklipsholder",
|
||
"pathCopiedToClipboard": "Sti kopieret til udklipsholder",
|
||
"pathsCopiedToClipboard": "{{count}} stier kopieret til udklipsholder",
|
||
"failedToCopyPath": "Kunne ikke kopiere stien til udklipsholderen",
|
||
"copyFolderLink": "Kopiér link til mappe",
|
||
"copyCurrentFolderLink": "Kopiér link til aktuel mappe",
|
||
"folderLinkCopied": "Mappelink kopieret til udklipsholder",
|
||
"failedToCopyFolderLink": "Kunne ikke kopiere mappelinket",
|
||
"movedItems": "Flyttede {{count}} elementer",
|
||
"failedToDeleteItem": "Kunne ikke slette elementet",
|
||
"itemRenamedSuccessfully": "{{type}} er omdøbt",
|
||
"failedToRenameItem": "Kunne ikke omdøbe elementet",
|
||
"download": "Download",
|
||
"openExternalEditor": "Åbn eksternt",
|
||
"chooseExternalEditor": "Vælg ekstern editor",
|
||
"externalEditorSelected": "Ekstern editor valgt",
|
||
"externalEditorDesktopOnly": "Ekstern editor er kun tilgængelig i desktop-appen",
|
||
"externalEditorOpened": "Åbnet i ekstern editor. Hvis du gemmer der, uploades ændringerne tilbage til serveren.",
|
||
"failedToOpenExternalEditor": "Kunne ikke åbne den eksterne editor",
|
||
"failedToSelectExternalEditor": "Kunne ikke vælge ekstern editor",
|
||
"permissions": "Tilladelser",
|
||
"size": "Størrelse",
|
||
"modified": "Ændret",
|
||
"path": "Sti",
|
||
"confirmDelete": "Er du sikker på, at du vil slette {{name}}?",
|
||
"permissionDenied": "Tilladelse nægtet",
|
||
"serverError": "Serverfejl",
|
||
"fileSavedSuccessfully": "Filen er gemt",
|
||
"failedToSaveFile": "Kunne ikke gemme filen",
|
||
"confirmDeleteSingleItem": "Er du sikker på, at du vil slette \"{{name}} \" permanent?",
|
||
"confirmDeleteMultipleItems": "Er du sikker på, at du vil slette {{count}} elementer permanent?",
|
||
"confirmDeleteMultipleItemsWithFolders": "Er du sikker på, at du vil slette {{count}} elementer permanent? Dette inkluderer mapper og deres indhold.",
|
||
"confirmDeleteFolder": "Er du sikker på, at du vil slette mappen \"{{name}}\" og alt dens indhold permanent?",
|
||
"permanentDeleteWarning": "Denne handling kan ikke fortrydes. Elementet/elementerne vil blive permanent slettet fra serveren.",
|
||
"moveToTrashWarning": "Elementet/elementerne vil blive flyttet til Termix-papirkurven og kan gendannes, inden opbevaringsperioden udløber.",
|
||
"itemsMovedToTrash": "{{count}} element(er) flyttet til papirkurven",
|
||
"trash": "Skrald",
|
||
"trashDescription": "Slettede elementer gemmes i {{days}} dag(e) på denne vært.",
|
||
"trashLoadFailed": "Kunne ikke indlæse papirkurven",
|
||
"trashEmpty": "Papirkurven er tom",
|
||
"trashRestore": "Gendan",
|
||
"trashRestored": "Gendannet {{name}}",
|
||
"trashRestoreFailed": "Elementet kunne ikke gendannes. Den oprindelige sti findes muligvis allerede.",
|
||
"trashDeletePermanently": "Slet permanent",
|
||
"trashDeleteConfirm": "Vil du slette {{name}}permanent? Dette kan ikke fortrydes.",
|
||
"trashPermanentlyDeleted": "Permanent slettet {{name}}",
|
||
"trashDeleteFailed": "Kunne ikke slette elementet permanent",
|
||
"trashEmptyAction": "Tøm papirkurven",
|
||
"trashEmptyConfirm": "Vil du slette alle elementer i papirkurven permanent? Dette kan ikke fortrydes.",
|
||
"trashEmptied": "Skraldespanden tømt",
|
||
"trashRetention": "Automatisk oprydning efter (dage)",
|
||
"trashRetentionSaved": "Papirkurvsopbevaring opdateret",
|
||
"trashRetentionFailed": "Kunne ikke opdatere opbevaring af papirkurven",
|
||
"trashUnavailableConfirm": "Dette element kan ikke flyttes til papirkurven, normalt fordi det er på et andet filsystem eller kræver forhøjede tilladelser. Slet det permanent i stedet?",
|
||
"recent": "Nylig",
|
||
"pinned": "Fastgjort",
|
||
"folderShortcuts": "Mappegenveje",
|
||
"failedToReconnectSSH": "Kunne ikke genoprette forbindelsen til SSH-sessionen",
|
||
"openTerminalHere": "Åbn terminalen her",
|
||
"run": "Løbe",
|
||
"openTerminalInFolder": "Åbn Terminal i denne mappe",
|
||
"openTerminalInFileLocation": "Åbn terminalen på filplaceringen",
|
||
"runningFile": "Løb - {{file}}",
|
||
"onlyRunExecutableFiles": "Kan kun køre eksekverbare filer",
|
||
"directories": "Kataloger",
|
||
"removedFromRecentFiles": "Fjernede \"{{name}}\" fra seneste filer",
|
||
"removeFailed": "Fjernelse mislykkedes",
|
||
"unpinnedSuccessfully": "\"{{name}}\" blev frigjort",
|
||
"unpinFailed": "Frigørelse mislykkedes",
|
||
"removedShortcut": "Fjernede genvejen \"{{name}}\"",
|
||
"removeShortcutFailed": "Fjernelse af genvej mislykkedes",
|
||
"clearedAllRecentFiles": "Rydde alle seneste filer",
|
||
"clearFailed": "Rydning mislykkedes",
|
||
"removeFromRecentFiles": "Fjern fra seneste filer",
|
||
"clearAllRecentFiles": "Ryd alle seneste filer",
|
||
"unpinFile": "Frigør fil",
|
||
"removeShortcut": "Fjern genvej",
|
||
"pinFile": "Fastgør fil",
|
||
"addToShortcuts": "Føj til genveje",
|
||
"pasteFailed": "Indsætning mislykkedes",
|
||
"noUndoableActions": "Ingen handlinger, der kan fortrydes",
|
||
"undoCopySuccess": "Fortrydt kopiering: Slettede {{count}} kopierede filer",
|
||
"undoCopyFailedDelete": "Fortryd mislykkedes: Kunne ikke slette nogen kopierede filer",
|
||
"undoCopyFailedNoInfo": "Fortryd mislykkedes: Kunne ikke finde kopierede filoplysninger",
|
||
"undoMoveSuccess": "Fortrydt flyttehandling: Flyttede {{count}} filer tilbage til den oprindelige placering",
|
||
"undoMoveFailedMove": "Fortryd mislykkedes: Kunne ikke flytte nogen filer tilbage",
|
||
"undoMoveFailedNoInfo": "Fortryd mislykkedes: Kunne ikke finde oplysninger om den flyttede fil",
|
||
"undoDeleteNotSupported": "Sletningen kan ikke fortrydes: Filerne er blevet permanent slettet fra serveren",
|
||
"undoTypeNotSupported": "Ikke-understøttet fortrydelseshandlingstype",
|
||
"undoOperationFailed": "Fortrydelseshandling mislykkedes",
|
||
"unknownError": "Ukendt fejl",
|
||
"confirm": "Bekræfte",
|
||
"find": "Finde...",
|
||
"replace": "Erstatte",
|
||
"downloadInstead": "Download i stedet",
|
||
"keyboardShortcuts": "Tastaturgenveje",
|
||
"searchAndReplace": "Søg og erstat",
|
||
"editing": "Redigering",
|
||
"search": "Søge",
|
||
"findNext": "Find næste",
|
||
"findPrevious": "Find forrige",
|
||
"save": "Spare",
|
||
"selectAll": "Vælg alle",
|
||
"undo": "Fortryd",
|
||
"redo": "Gentag",
|
||
"moveLineUp": "Flyt linje op",
|
||
"moveLineDown": "Flyt linje ned",
|
||
"toggleComment": "Slå kommentar til/fra",
|
||
"autoComplete": "Autofuldførelse",
|
||
"imageLoadError": "Billedet kunne ikke indlæses",
|
||
"startTyping": "Begynd at skrive...",
|
||
"unknownSize": "Ukendt størrelse",
|
||
"fileIsEmpty": "Filen er tom",
|
||
"largeFileWarning": "Advarsel om stor fil",
|
||
"largeFileWarningDesc": "Denne fil er {{size}} stor, hvilket kan forårsage problemer med ydeevnen, når den åbnes som tekst.",
|
||
"fileNotFoundAndRemoved": "Filen \"{{name}}\" blev ikke fundet og er blevet fjernet fra seneste/fastgjorte filer",
|
||
"failedToLoadFile": "Kunne ikke indlæse filen: {{error}}",
|
||
"serverErrorOccurred": "Der opstod en serverfejl. Prøv igen senere.",
|
||
"autoSaveFailed": "Automatisk lagring mislykkedes",
|
||
"fileAutoSaved": "Fil gemt automatisk",
|
||
"moveFileFailed": "Kunne ikke flytte {{name}}",
|
||
"moveOperationFailed": "Flytteoperationen mislykkedes",
|
||
"canOnlyCompareFiles": "Kan kun sammenligne to filer",
|
||
"comparingFiles": "Sammenligning af filer: {{file1}} og {{file2}}",
|
||
"dragFailed": "Trækhandlingen mislykkedes",
|
||
"filePinnedSuccessfully": "Filen \"{{name}}\" er blevet fastgjort",
|
||
"pinFileFailed": "Kunne ikke fastlåse filen",
|
||
"fileUnpinnedSuccessfully": "Filen \"{{name}}\" blev frigjort",
|
||
"unpinFileFailed": "Kunne ikke frigøre filen",
|
||
"shortcutAddedSuccessfully": "Mappens genvej \"{{name}}\" blev tilføjet",
|
||
"addShortcutFailed": "Kunne ikke tilføje genvej",
|
||
"operationCompletedSuccessfully": "{{operation}} {{count}} elementer er blevet genanvendt",
|
||
"operationCompleted": "{{operation}} {{count}} elementer",
|
||
"downloadFileSuccess": "Fil {{name}} er blevet downloadet",
|
||
"downloadFileFailed": "Download mislykkedes",
|
||
"downloadingFile": "Downloader {{name}}…",
|
||
"downloadProgressBytes": "{{transferred}} / {{total}}",
|
||
"moveTo": "Flyt til {{name}}",
|
||
"diffCompareWith": "Differens sammenligning med {{name}}",
|
||
"dragOutsideToDownload": "Træk uden for vinduet for at downloade ({{count}} filer)",
|
||
"newFolderDefault": "NyMappe",
|
||
"newFileDefault": "Nyfil.txt",
|
||
"successfullyMovedItems": "{{count}} elementer er flyttet til {{target}}",
|
||
"move": "Flytte",
|
||
"searchInFile": "Søg i filen (Ctrl+F)",
|
||
"showKeyboardShortcuts": "Vis tastaturgenveje",
|
||
"decreaseFontSize": "Formindsk skriftstørrelsen",
|
||
"increaseFontSize": "Øg skriftstørrelsen",
|
||
"startWritingMarkdown": "Begynd at skrive dit indhold til nedskrivning...",
|
||
"loadingFileComparison": "Indlæser filsammenligning...",
|
||
"reload": "Genindlæs",
|
||
"compare": "Sammenligne",
|
||
"sideBySide": "Side om side",
|
||
"inline": "Indlejret",
|
||
"fileComparison": "Filsammenligning: {{file1}} vs. {{file2}}",
|
||
"fileTooLarge": "Filen er for stor: {{error}}",
|
||
"sshConnectionFailed": "SSH-forbindelse mislykkedes. Kontroller venligst din forbindelse til {{name}} ({{ip}}:{{port}})",
|
||
"loadFileFailed": "Kunne ikke indlæse filen: {{error}}",
|
||
"connecting": "Forbinder...",
|
||
"connectedSuccessfully": "Forbindelsen er oprettet",
|
||
"totpVerificationFailed": "TOTP-bekræftelse mislykkedes",
|
||
"warpgateVerificationFailed": "Warpgate-godkendelse mislykkedes",
|
||
"authenticationFailed": "Godkendelse mislykkedes",
|
||
"incorrectPassphrase": "Forkert adgangskode. Prøv igen.",
|
||
"verificationCodePrompt": "Bekræftelseskode:",
|
||
"changePermissions": "Ændre tilladelser",
|
||
"currentPermissions": "Nuværende tilladelser",
|
||
"owner": "Ejer",
|
||
"group": "Gruppe",
|
||
"others": "Andre",
|
||
"read": "Læse",
|
||
"write": "Skrive",
|
||
"execute": "Udfør",
|
||
"permissionsChangedSuccessfully": "Tilladelserne er ændret",
|
||
"failedToChangePermissions": "Kunne ikke ændre tilladelser",
|
||
"name": "Navn",
|
||
"sortByName": "Navn",
|
||
"sortByDate": "Dato ændret",
|
||
"sortBySize": "Størrelse",
|
||
"ascending": "Stigende",
|
||
"descending": "Faldende",
|
||
"root": "Rod",
|
||
"new": "Ny",
|
||
"sortBy": "Sortér efter",
|
||
"items": "Varer",
|
||
"selected": "Valgt",
|
||
"editor": "Redaktør",
|
||
"octal": "Oktal",
|
||
"storage": "Opbevaring",
|
||
"disk": "Disk",
|
||
"used": "Brugt",
|
||
"of": "af",
|
||
"toggleSidebar": "Slå sidebjælken til/fra",
|
||
"compactLayout": "Brug kompakt layout",
|
||
"comfortableLayout": "Brug et komfortabelt layout",
|
||
"cannotLoadPdf": "Kan ikke indlæse PDF'en",
|
||
"pdfLoadError": "Der opstod en fejl under indlæsning af denne PDF-fil.",
|
||
"loadingPdf": "Indlæser PDF...",
|
||
"loadingPage": "Indlæser side..."
|
||
},
|
||
"transfer": {
|
||
"copyToHost": "Kopiér til vært…",
|
||
"moveToHost": "Flyt til vært…",
|
||
"copyItemsToHost": "Kopiér {{count}} elementer til at være vært for…",
|
||
"moveItemsToHost": "Flyt {{count}} elementer til at være vært for…",
|
||
"noHostsConnected": "Ingen andre filhåndteringsværter tilgængelige.",
|
||
"noHostsConnectedHint": "Tilføj en anden SSH-vært med Filhåndtering aktiveret i Værtshåndtering.",
|
||
"selectDestinationHost": "Vælg destinationsvært",
|
||
"destinationPath": "Destinationssti",
|
||
"recentDestinations": "Seneste destinationer",
|
||
"collapseRecentDestinations": "Skjul de seneste destinationer",
|
||
"expandRecentDestinations": "Udvid de seneste destinationer",
|
||
"browseFolders": "Gennemse destinationsmapper",
|
||
"browseDestination": "Gennemse eller indtast sti",
|
||
"confirmCopy": "Kopi",
|
||
"confirmMove": "Flytte",
|
||
"transferring": "Overfører…",
|
||
"progressVerifying": "Bekræfter filintegritet…",
|
||
"progressBenchmarking": "Valg af den hurtigste overførselsrute…",
|
||
"compressing": "Komprimering…",
|
||
"extracting": "Udtrækker…",
|
||
"transferringItems": "Overførsel af {{current}} af {{total}} elementer…",
|
||
"transferSuccess": "Overførsel fuldført",
|
||
"transferError": "Overførslen mislykkedes",
|
||
"transferPartial": "Overførsel fuldført med {{count}} fejl",
|
||
"transferPartialHint": "Kunne ikke overføre: {{paths}}",
|
||
"itemsSummary": "{{count}} elementer",
|
||
"destMustBeDirectory": "Destinationen skal være en mappe for overførsler af flere elementer",
|
||
"selectThisFolder": "Vælg denne mappe",
|
||
"browsePathWillBeCreated": "Denne mappe findes ikke endnu. Den vil blive oprettet, når overførslen starter.",
|
||
"browsePathError": "Kunne ikke åbne denne sti på destinationsværten.",
|
||
"goUp": "Gå op",
|
||
"copyFolderToHost": "Kopiér mappe til vært…",
|
||
"moveFolderToHost": "Flyt mappe til vært…",
|
||
"hostReady": "Parat",
|
||
"hostConnecting": "Forbinder…",
|
||
"hostDisconnected": "Ikke forbundet",
|
||
"hostAuthRequired": "Godkendelse kræves — åbn først Filhåndtering på denne vært",
|
||
"hostConnectionFailed": "Forbindelsen mislykkedes",
|
||
"metricsTitle": "Overførselstider",
|
||
"metricsPrepare": "Forbered destination: {{duration}}",
|
||
"metricsCompress": "Komprimer på kilde: {{duration}}",
|
||
"metricsHopSourceRead": "Kilde → server: {{throughput}}",
|
||
"metricsHopDestSftpWrite": "Server → destination (SFTP): {{throughput}}",
|
||
"metricsHopDestLocalWrite": "Server → destination (lokal): {{throughput}}",
|
||
"metricsTransfer": "End-to-end: {{throughput}} ({{duration}})",
|
||
"metricsExtract": "Udtræk på destination: {{duration}}",
|
||
"metricsVerify": "SHA-256 verificeret: {{duration}}",
|
||
"metricsRouteBenchmark": "Rutesonde — direkte: {{direct}}, relæ: {{relay}}",
|
||
"metricsSourceDelete": "Fjern fra kilde: {{duration}}",
|
||
"metricsTotal": "I alt: {{duration}}",
|
||
"progressCompressing": "Komprimering på kildevært…",
|
||
"progressExtracting": "Udpakning på destination…",
|
||
"progressTransferring": "Overførsel af data…",
|
||
"progressReconnecting": "Genopretter forbindelse…",
|
||
"parallelSegmentsLabel": "Parallelle overførselsbaner",
|
||
"parallelSegmentsOption": "{{count}} baner",
|
||
"parallelSegmentsHint": "Store filer opdeles i bidder på 256 MB. Flere baner bruger separate forbindelser (f.eks. at starte flere overførsler) for at opnå en højere samlet gennemløbshastighed.",
|
||
"progressTotalSpeed": "{{speed}} i alt ({{lanes}} baner)",
|
||
"progressTransferringItems": "Overførsel af filer ({{current}} af {{total}})…",
|
||
"progressBytes": "{{transferred}} / {{total}}",
|
||
"progressItems": "{{current}} / {{total}} filer",
|
||
"sourceNotDeletedPartial": "Kildefiler gemt (delvis overførsel)",
|
||
"jumpHostLimitation": "Begge værter skal kunne nås fra Termix-serveren. Direkte vært-til-vært-routing understøttes ikke.",
|
||
"cancel": "Ophæve",
|
||
"methodLabel": "Overførselsmetode",
|
||
"methodAuto": "Bil",
|
||
"methodTar": "Tar-arkiv",
|
||
"methodItemSftp": "SFTP pr. fil",
|
||
"methodAutoHint": "Vælger tar eller SFTP pr. fil baseret på antal filer, størrelse og komprimerbarhed. Enkeltfiler bruger altid streaming SFTP.",
|
||
"methodTarHint": "Komprimer ved kildekode, overfør ét arkiv, udpak ved destination. Kræver tar på begge Unix-værter.",
|
||
"methodItemSftpHint": "Overfør hver fil individuelt via SFTP. Fungerer på alle værter, inklusive Windows.",
|
||
"methodPreviewLoading": "Beregning af overførselsmetode…",
|
||
"methodPreviewError": "Kunne ikke forhåndsvise overførselsmetoden. Serveren vil stadig vælge en metode, når du starter.",
|
||
"methodPreviewWillUseTar": "Vil bruge: Tar-arkiv",
|
||
"methodPreviewWillUseItemSftp": "Vil bruge: SFTP pr. fil",
|
||
"methodPreviewScanSummary": "{{fileCount}} filer, {{totalSize}} i alt (scannet på kildevært).",
|
||
"methodItemSftpLimitation": "Hver fil bruger den samme SFTP-strøm som en enkelt filkopi, én efter én. Status kombineres på tværs af alle filer, så bjælken bevæger sig langsomt under store filer.",
|
||
"methodReason": {
|
||
"user_item_sftp": "Du valgte SFTP pr. fil.",
|
||
"user_tar": "Du valgte tar-arkivet.",
|
||
"tar_unavailable": "Tar er ikke tilgængelig på en eller begge værter — SFTP pr. fil vil blive brugt i stedet.",
|
||
"windows_host": "En Windows-vært er involveret — tar bruges ikke.",
|
||
"auto_multi_large": "Auto: flere filer inklusive en stor fil ({{largestSize}}) med komprimerbare data — tar samler filer i én overførsel.",
|
||
"auto_single_large_in_archive": "Auto: én stor fil ({{largestSize}}) i dette sæt — SFTP pr. fil.",
|
||
"auto_many_incompressible": "Auto: for det meste inkomprimerbare data — SFTP pr. fil.",
|
||
"auto_many_files": "Auto: mange filer ({{fileCount}}) — tar reducerer overhead pr. fil.",
|
||
"auto_default": "Auto: SFTP pr. fil for dette sæt."
|
||
},
|
||
"progressCancel": "Ophæve",
|
||
"progressCancelling": "Annullerer…",
|
||
"progressStalled": "Standset",
|
||
"resumedHint": "Genoprettet forbindelse til en aktiv overførsel, der er startet i et andet vindue.",
|
||
"transferCancelled": "Overførsel annulleret",
|
||
"transferCancelledCopyHint": "Delvise filer kan forblive på destinationen.",
|
||
"transferCancelledMoveHint": "Delvise filer kan forblive på destinationen. Kildefilerne blev ikke fjernet.",
|
||
"cleanupDestFiles": "Oprydningsdestination",
|
||
"cleanupDestFilesSuccess": "Fjernede delvise filer fra destinationen",
|
||
"cleanupDestFilesPartial": "Nogle delvise filer kunne ikke fjernes",
|
||
"cleanupDestFilesNothing": "Intet at rydde op på destinationen",
|
||
"cleanupDestFilesError": "Oprydning mislykkedes",
|
||
"retryTransfer": "Prøv igen",
|
||
"retryTransferError": "Genforsøg mislykkedes",
|
||
"transferFailedRetryHint": "Delvise data blev gemt på destinationen. Forsøget genoptages, når forbindelsen er tilbage."
|
||
},
|
||
"sftpTransfer": {
|
||
"title": "SFTP",
|
||
"description": "Overfør filer mellem to SSH-værter.",
|
||
"sourceServer": "Kildeserver",
|
||
"destinationServer": "Destinationsserver",
|
||
"selectHost": "Vælg vært",
|
||
"noHostSelected": "Ingen vært valgt",
|
||
"move": "Flytte",
|
||
"copy": "Kopi",
|
||
"upload": "Upload",
|
||
"itemsSelected": "{{count}} element valgt",
|
||
"itemsSelected_other": "{{count}} elementer valgt",
|
||
"ready": "Parat",
|
||
"loadingHosts": "Indlæser værter...",
|
||
"name": "Navn",
|
||
"modified": "Ændret",
|
||
"size": "Størrelse",
|
||
"noFiles": "Ingen filer",
|
||
"open": "Åben",
|
||
"up": "Op",
|
||
"refresh": "Opfriske",
|
||
"copyToTarget": "Kopiér til målmappe",
|
||
"rename": "Omdøb",
|
||
"delete": "Slet",
|
||
"editPermissions": "Rediger tilladelser",
|
||
"createNewFolder": "Opret ny mappe",
|
||
"deleteSelectedItems": "Slet valgte elementer",
|
||
"deleteConfirm": "Slet {{count}} det valgte element?",
|
||
"deleteConfirm_other": "Slet {{count}} valgte elementer?",
|
||
"cancel": "Ophæve",
|
||
"save": "Spare",
|
||
"folderCreated": "Mappe oprettet",
|
||
"itemRenamed": "Varen er omdøbt",
|
||
"actionFailed": "Handlingen mislykkedes",
|
||
"itemsDeleted": "{{count}} element slettet",
|
||
"itemsDeleted_other": "{{count}} elementer slettet",
|
||
"deleteFailed": "Sletning mislykkedes",
|
||
"permissionsUpdated": "Tilladelser opdateret",
|
||
"noRemoteSessionConnected": "Ingen fjernsession tilsluttet",
|
||
"failedToListFiles": "Kunne ikke liste filer",
|
||
"failedToRefresh": "Kunne ikke opdatere",
|
||
"destinationInsideSource": "Destinationen må ikke være inden for den valgte kildesti.",
|
||
"sameHostNoOp": "Kilde og destination er den samme mappe."
|
||
},
|
||
"tunnels": {
|
||
"noSshTunnels": "Ingen SSH-tunneler",
|
||
"createFirstTunnelMessage": "Du har endnu ikke oprettet nogen SSH-tunneler. Konfigurer tunnelforbindelser i Host Manager for at komme i gang.",
|
||
"connected": "Forbundet",
|
||
"disconnected": "Afbrudt",
|
||
"connecting": "Forbinder...",
|
||
"error": "Fejl",
|
||
"canceling": "Annullerer...",
|
||
"connect": "Forbinde",
|
||
"disconnect": "Afbryde",
|
||
"cancel": "Ophæve",
|
||
"port": "Havn",
|
||
"localPort": "Lokal havn",
|
||
"remotePort": "Fjernport",
|
||
"destinationPort": "Destinationshavn",
|
||
"currentHostPort": "Nuværende værtsport",
|
||
"endpointPort": "Endepunktsport",
|
||
"bindIp": "Lokal IP-adresse",
|
||
"localAddress": "Lokal adresse",
|
||
"remoteAddress": "Fjernadresse",
|
||
"destinationAddress": "Destinationsadresse",
|
||
"remoteBindAddress": "Fjernbindingsadresse",
|
||
"intermediateHost": "Mellemliggende vært",
|
||
"endpointSshConfig": "Slutpunkts-SSH-konfiguration",
|
||
"endpointSshHost": "Endpoint SSH-vært",
|
||
"endpointSshHostPlaceholder": "Vælg en konfigureret vært",
|
||
"endpointSshHostRequired": "Vælg en endpoint SSH-vært for hver klienttunnel.",
|
||
"attempt": "Forsøg {{current}} af {{max}}",
|
||
"nextRetryIn": "Næste forsøg om {{seconds}} sekunder",
|
||
"clientTunnels": "Klienttunneler",
|
||
"clientTunnel": "Klienttunnel",
|
||
"addClientTunnel": "Tilføj klienttunnel",
|
||
"noClientTunnels": "Ingen klienttunneller er konfigureret på dette skrivebord.",
|
||
"tunnelName": "Tunnelnavn",
|
||
"remoteHost": "Fjernvært",
|
||
"autoStart": "Automatisk start",
|
||
"clientAutoStartDesc": "Starter, når denne desktopklient åbnes og forbliver forbundet.",
|
||
"clientManualStartDesc": "Brug Start og Stop fra denne række. Termix åbner den ikke automatisk.",
|
||
"clientRemoteServerNote": "Fjernvideresendelse kan kræve AllowTcpForwarding og GatewayPorts på slutpunktets SSH-server. Fjernporten lukkes, når denne desktop afbryder forbindelsen.",
|
||
"clientTunnelStarted": "Klienttunnel startet",
|
||
"clientTunnelStopped": "Klienttunnel stoppet",
|
||
"tunnelTestSucceeded": "Tunneltesten lykkedes",
|
||
"tunnelTestFailed": "Tunneltest mislykkedes",
|
||
"localSaved": "Klienttunneler gemt",
|
||
"localSaveError": "Kunne ikke gemme lokale klienttunneller",
|
||
"invalidBindIp": "Lokal IP-adresse skal være en gyldig IPv4-adresse.",
|
||
"invalidLocalTargetIp": "Den lokale mål-IP-adresse skal være en gyldig IPv4-adresse.",
|
||
"invalidRemoteAddress": "Fjernadresse er påkrævet.",
|
||
"invalidLocalPort": "Den lokale port skal være mellem 1 og 65535.",
|
||
"invalidRemotePort": "Fjernporten skal være mellem 1 og 65535.",
|
||
"invalidLocalTargetPort": "Den lokale målport skal være mellem 1 og 65535.",
|
||
"invalidEndpointPort": "Slutpunktsporten skal være mellem 1 og 65535.",
|
||
"duplicateAutoStartBind": "Kun én autostart-klientunnel kan bruge {{bind}}.",
|
||
"manualControlError": "Kunne ikke opdatere tunnelens tilstand.",
|
||
"active": "Aktiv",
|
||
"start": "Starte",
|
||
"stop": "Stop",
|
||
"test": "Prøve",
|
||
"type": "Tunneltype",
|
||
"typeLocal": "Lokal (-L)",
|
||
"typeRemote": "Fjernbetjening (-R)",
|
||
"typeDynamic": "Dynamisk (-D)",
|
||
"typeServerLocalDesc": "Nuværende vært til slutpunkt.",
|
||
"typeServerRemoteDesc": "Slutpunkt tilbage til nuværende vært.",
|
||
"typeClientLocalDesc": "Lokal computer til slutpunkt.",
|
||
"typeClientRemoteDesc": "Slutpunkt tilbage til lokal computer.",
|
||
"typeClientDynamicDesc": "SOCKS på den lokale computer.",
|
||
"typeDynamicDesc": "Videresend SOCKS5 CONNECT-trafik via SSH",
|
||
"forwardDescriptionServerLocal": "Nuværende vært {{sourcePort}} → slutpunkt {{endpointPort}}.",
|
||
"forwardDescriptionServerRemote": "Slutpunkt {{endpointPort}} → nuværende vært {{sourcePort}}.",
|
||
"forwardDescriptionServerDynamic": "SOCKS på nuværende vært {{sourcePort}}.",
|
||
"forwardDescriptionClientLocal": "Lokal {{sourcePort}} → fjern {{endpointPort}}.",
|
||
"forwardDescriptionClientRemote": "Fjern {{sourcePort}} → lokal {{endpointPort}}.",
|
||
"forwardDescriptionClientDynamic": "SOCKS på lokal port {{sourcePort}}.",
|
||
"summaryClientLocal": "{{localHost}}:{{localPort}} → {{remoteHost}}:{{remotePort}} via {{endpoint}}",
|
||
"summaryClientRemote": "{{remoteHost}}:{{remotePort}} på {{endpoint}} → {{localHost}}:{{localPort}}",
|
||
"summaryClientDynamic": "{{localHost}}:{{localPort}} → STRØMPER via {{endpoint}}",
|
||
"autoNameClientLocal": "Lokal {{localPort}} → {{endpoint}} {{remotePort}}",
|
||
"autoNameClientRemote": "{{endpoint}} {{remotePort}} → lokal {{localPort}}",
|
||
"autoNameClientDynamic": "SOKKER {{localPort}} via {{endpoint}}",
|
||
"route": "Rute:",
|
||
"lastStarted": "Sidst startet",
|
||
"lastTested": "Sidst testet",
|
||
"lastError": "Sidste fejl",
|
||
"maxRetries": "Maks. antal genforsøg",
|
||
"maxRetriesDescription": "Maksimalt antal gentagne forsøg.",
|
||
"retryInterval": "Interval for nye forsøg (sekunder)",
|
||
"retryIntervalDescription": "Tid til at vente mellem nye forsøg.",
|
||
"local": "Lokal",
|
||
"remote": "Fjern",
|
||
"destination": "Bestemmelsessted",
|
||
"host": "Vært",
|
||
"mode": "Mode",
|
||
"noHostSelected": "Ingen vært valgt",
|
||
"working": "Arbejder..."
|
||
},
|
||
"cardGrid": {
|
||
"dragToMove": "Træk for at flytte",
|
||
"dragToResize": "Træk for at ændre størrelsen",
|
||
"changeWidth": "Skift bredde",
|
||
"removeCard": "Fjern {{label}}",
|
||
"addCard": "Tilføje",
|
||
"columns": "Kolonner",
|
||
"empty": "Ingen kort. Brug Tilføj nedenfor for at placere kort."
|
||
},
|
||
"hostMetrics": {
|
||
"cpu": "CPU",
|
||
"memory": "Hukommelse",
|
||
"disk": "Disk",
|
||
"network": "Netværk",
|
||
"uptime": "Oppetid",
|
||
"processes": "Processer",
|
||
"available": "Tilgængelig",
|
||
"free": "Gratis",
|
||
"connecting": "Forbinder...",
|
||
"connectionFailed": "Kunne ikke oprette forbindelse til serveren",
|
||
"naCpus": "Ikke tilgængelig CPU(er)",
|
||
"cpuCores_one": "{{count}} Kerne",
|
||
"cpuCores_other": "{{count}} Kerner",
|
||
"cpuUsage": "CPU-forbrug",
|
||
"memoryUsage": "Hukommelsesforbrug",
|
||
"diskUsage": "Diskforbrug",
|
||
"selectFilesystem": "Vælg filsystem",
|
||
"temperature": "Temperatur",
|
||
"highestTemperature": "Højeste temperatur",
|
||
"primaryTemperatureSensor": "Primær sensor",
|
||
"gpu": {
|
||
"title": "GPU",
|
||
"noDevice": "Ingen NVIDIA GPU fundet. Installer NVIDIA-driveren (den leverer nvidia-smi) for at se GPU-målinger.",
|
||
"driver": "Chauffør {{version}}",
|
||
"utilization": "Udnyttelse",
|
||
"memory": "VRAM",
|
||
"temperature": "Temp.",
|
||
"power": "Magt",
|
||
"fan": "Ventilator",
|
||
"processes": "GPU-processer",
|
||
"noProcesses": "Ingen processer bruger GPU'en"
|
||
},
|
||
"failedToFetchHostConfig": "Kunne ikke hente værtkonfigurationen",
|
||
"serverOffline": "Server offline",
|
||
"cannotFetchMetrics": "Kan ikke hente målinger fra offlineserveren",
|
||
"totpFailed": "TOTP-bekræftelse mislykkedes",
|
||
"noneAuthNotSupported": "Host Metrics understøtter ikke godkendelsestypen 'ingen'.",
|
||
"noHostSelected": "Ingen vært valgt",
|
||
"load": "Indlæs",
|
||
"systemInfo": "Systemoplysninger",
|
||
"hostname": "Værtsnavn",
|
||
"operatingSystem": "Operativsystem",
|
||
"kernel": "Kernen",
|
||
"seconds": "sekunder",
|
||
"networkInterfaces": "Netværksgrænseflader",
|
||
"noInterfacesFound": "Ingen netværksgrænseflader fundet",
|
||
"noProcessesFound": "Ingen processer fundet",
|
||
"processesTotal": "total",
|
||
"processesRunning": "løb",
|
||
"loginStats": "SSH-loginstatistik",
|
||
"noRecentLoginData": "Ingen nylige logindata",
|
||
"executingQuickAction": "Udfører {{name}}...",
|
||
"quickActionSuccess": "{{name}} gennemført",
|
||
"quickActionFailed": "{{name}} mislykkedes",
|
||
"quickActionError": "Kunne ikke udføre {{name}}",
|
||
"ports": {
|
||
"title": "Lytteporte",
|
||
"protocol": "Protokol",
|
||
"port": "Havn",
|
||
"address": "Adresse",
|
||
"process": "Behandle",
|
||
"search": "Søg efter porte...",
|
||
"allProtocols": "Alle",
|
||
"noData": "Ingen data om lytteporte"
|
||
},
|
||
"firewall": {
|
||
"title": "Firewall",
|
||
"inactive": "Inaktiv",
|
||
"policy": "Politik",
|
||
"rules": "regler",
|
||
"noRules": "Ingen regler i denne kæde",
|
||
"noData": "Ingen firewalldata tilgængelige",
|
||
"action": "Handling",
|
||
"protocol": "Proto",
|
||
"port": "Havn",
|
||
"source": "Kilde",
|
||
"anywhere": "Hvor som helst",
|
||
"chains": "kæder"
|
||
},
|
||
"loadAvg": "Indlæs gennemsnit",
|
||
"swap": "Byt",
|
||
"architecture": "Arkitektur",
|
||
"refresh": "Opfriske",
|
||
"retry": "Prøv igen",
|
||
"customize": "Tilpas layout",
|
||
"reset": "Nulstil",
|
||
"tabLive": "Levende",
|
||
"editModeInstructions": "Træk kort for at omarrangere, træk i den nederste kant for at ændre størrelsen, og brug breddeknappen til at ændre et korts spændvidde. Tilføj eller fjern kort nedenfor.",
|
||
"managers": {
|
||
"services": "Tjenester",
|
||
"processInspector": "Procesinspektør",
|
||
"logViewer": "Logfremviser",
|
||
"cron": "Cron-job",
|
||
"packages": "Pakker",
|
||
"ssl": "SSL-certifikater",
|
||
"firewall": "Firewall",
|
||
"users": "Brugere og tilladelser",
|
||
"healthCheck": "Sundhedstjek",
|
||
"diskBreakdown": "Disknedbrydning",
|
||
"systemdTimers": "Timere",
|
||
"topMemory": "Top efter hukommelse",
|
||
"noData": "Ingen data",
|
||
"sudoHint": "Angiv en sudo-adgangskode til denne vært i værtseditoren for at aktivere privilegerede handlinger.",
|
||
"filter": "Filter...",
|
||
"start": "Starte",
|
||
"stop": "Stop",
|
||
"restart": "Genstart",
|
||
"actionDone": "{{name}} opdateret",
|
||
"actionFailed": "Handlingen mislykkedes",
|
||
"signalSent": "Signal sendt til PID {{pid}}",
|
||
"killHint": "Klik: afslut (SIGTERM). Højreklik: tvungen afbrydelse (SIGKILL).",
|
||
"working": "Arbejder...",
|
||
"update": "Opdatering",
|
||
"upgradeAll": "Opgrader alle",
|
||
"allUpToDate": "Alt er opdateret",
|
||
"save": "Spare",
|
||
"command": "Kommando",
|
||
"enabled": "Aktiveret",
|
||
"cronSaved": "Crontab opdateret",
|
||
"clients": "Klienter",
|
||
"dryRun": "Tørløb",
|
||
"renew": "Forny",
|
||
"noAcmeClient": "Ingen ACME-klient (certbot eller acme.sh) fundet på denne vært.",
|
||
"addInputRule": "Tilføj INPUT-regel",
|
||
"firewallWarning": "Ændringer gælder kun for kørsel, indtil de bevares. Pas på ikke at låse dig selv ude.",
|
||
"ruleApplied": "Regel anvendt",
|
||
"invalidPort": "Indtast en gyldig port (1-65535)",
|
||
"newUsername": "Nyt brugernavn",
|
||
"addUser": "Tilføje",
|
||
"deleteUser": "Slet bruger",
|
||
"noHealthChecks": "Ingen sundhedstjek konfigureret endnu.",
|
||
"follow": "Følge",
|
||
"noLogData": "Ingen log-output.",
|
||
"tree": "Træ",
|
||
"enableDisable": "Aktivér/deaktiver ved opstart",
|
||
"grantSudo": "Giv sudo",
|
||
"revokeSudo": "Tilbagekald sudo",
|
||
"sslIssueCert": "Udstedelsescertifikat",
|
||
"sslExpired": "Udløbet",
|
||
"sslInDays": "i {{days}}d",
|
||
"sslNeedDomain": "Angiv mindst ét domæne",
|
||
"sslIssued": "Certifikat udstedt",
|
||
"sslDomainsPlaceholder": "eksempel.com, www.eksempel.com",
|
||
"sslHttpStandalone": "HTTP (selvstændig)",
|
||
"sslHttpWebroot": "HTTP (webroot)",
|
||
"sslDns": "DNS",
|
||
"sslDnsProvider": "DNS-udbyder (f.eks. Cloudflare)",
|
||
"sslIssueHint": "DNS-udbyderens legitimationsoplysninger skal allerede være konfigureret på værten.",
|
||
"sslRevoke": "Tilbagekald certifikat",
|
||
"sslRevoked": "Certifikat tilbagekaldt",
|
||
"sslRevokeConfirm": "Tilbagekald og fjern certifikatet \"{{name}}\"? Dette kan ikke fortrydes.",
|
||
"healthRun": "Løbe",
|
||
"healthName": "Navn",
|
||
"healthTarget": "Vært / adresse",
|
||
"healthAddCheck": "Tilføj check",
|
||
"healthSaved": "Sundhedstjek gemt",
|
||
"healthMissingFields": "Hver check skal have et navn og et mål",
|
||
"logFile": "Fil",
|
||
"logUnit": "Enhed",
|
||
"logCustomPath": "Brugerdefineret sti under /var/log (valgfrit)",
|
||
"logGrep": "Filtrer linjer...",
|
||
"firewallPersist": "Vedvarende regler",
|
||
"firewallPersisted": "Firewallregler bevares",
|
||
"wireguard": "WireGuard",
|
||
"tailscale": "Haleskala",
|
||
"wgNotInstalled": "WireGuard er ikke installeret på denne vært",
|
||
"wgNoInterfaces": "Ingen WireGuard-grænseflader konfigureret",
|
||
"wgInterfaceUp": "Bring op",
|
||
"wgInterfaceDown": "Bring ned",
|
||
"wgBringingUp": "Bringer {{name}} op...",
|
||
"wgBringingDown": "Bringer {{name}} ned...",
|
||
"wgInterfaceUpDone": "{{name}} er oppe",
|
||
"wgInterfaceDownDone": "{{name}} er nede",
|
||
"wgListenPort": "Havn",
|
||
"wgPublicKey": "Offentlig nøgle",
|
||
"wgEndpoint": "Endepunkt",
|
||
"wgAllowedIPs": "Tilladte IP-adresser",
|
||
"wgLastHandshake": "Sidste håndtryk",
|
||
"wgHandshakeNever": "Aldrig",
|
||
"wgTransfer": "Overførsel",
|
||
"tsNotInstalled": "Tailscale er ikke installeret på denne vært",
|
||
"tsRunning": "Løb",
|
||
"tsStopped": "Stoppet",
|
||
"tsEnable": "Forbinde",
|
||
"tsDisable": "Afbryde",
|
||
"tsEnabling": "Forbinder til Tailscale...",
|
||
"tsDisabling": "Afbryder forbindelsen til Tailscale...",
|
||
"tsEnabled": "Haleskala forbundet",
|
||
"tsDisabled": "Haleskalaen er afbrudt",
|
||
"tsIPs": "Haleskalerings-IP'er",
|
||
"tsPeers": "Peers",
|
||
"tsOnline": "Online",
|
||
"tsOffline": "Offline",
|
||
"tsExitNode": "Udgangsnode",
|
||
"tsExitNodeActive": "Afslut node aktiv",
|
||
"tsHostname": "Værtsnavn"
|
||
}
|
||
},
|
||
"proxmoxStats": {
|
||
"tabTitle": "Proxmox-statistik",
|
||
"cpuUsage": "CPU-forbrug",
|
||
"memoryUsage": "Hukommelsesforbrug",
|
||
"diskUsage": "Diskforbrug",
|
||
"networkInterfaces": "Netværksgrænseflader",
|
||
"uptime": "Oppetid",
|
||
"systemInfo": "Systemoplysninger",
|
||
"guestsSummary": "Gæster",
|
||
"storagePools": "Opbevaringsbassiner",
|
||
"clusterHealth": "Klyngesundhed",
|
||
"cpuCores_one": "{{count}} Kerne",
|
||
"cpuCores_other": "{{count}} Kerner",
|
||
"used": "Brugt",
|
||
"total": "Total",
|
||
"hostname": "Værtsnavn",
|
||
"kernel": "Kernen",
|
||
"pveVersion": "PVE-version",
|
||
"name": "Navn",
|
||
"status": "Status",
|
||
"type": "Type",
|
||
"cpu": "CPU",
|
||
"mem": "Mem",
|
||
"disk": "Disk",
|
||
"running": "Løb",
|
||
"stopped": "Stoppet",
|
||
"guestCounts": "{{running}}/{{total}} løber",
|
||
"inactive": "Inaktiv",
|
||
"notClustered": "Selvstændig node (ikke en del af en klynge)",
|
||
"quorate": "Kvorat",
|
||
"notQuorate": "Ikke quorable",
|
||
"nodeOnline": "Online",
|
||
"nodeOffline": "Offline",
|
||
"noHostSelected": "Ingen vært valgt",
|
||
"pveshNotFound": "pvesh ikke fundet - er dette en Proxmox-node?",
|
||
"nodeDetectionFailed": "Kan ikke bestemme et gyldigt Proxmox-nodenavn",
|
||
"connecting": "Forbinder...",
|
||
"connectionFailed": "Kunne ikke oprette forbindelse til Proxmox-noden",
|
||
"refresh": "Opfriske",
|
||
"searchGuests": "Søg gæster...",
|
||
"filterAll": "Alle",
|
||
"filterVm": "VM",
|
||
"filterLxc": "LXC",
|
||
"noGuests": "Der blev ikke fundet nogen VM'er eller LXC-containere på denne node.",
|
||
"noGuestsMatch": "Ingen gæster matcher de nuværende filtre."
|
||
},
|
||
"auth": {
|
||
"tagline": "Selvhostet SSH og fjernskrivebordsadministration",
|
||
"loginTitle": "Velkommen tilbage",
|
||
"registerTitle": "Opret konto",
|
||
"forgotPassword": "Glemt adgangskode?",
|
||
"rememberMe": "Husk enhed i 30 dage (inkluderer TOTP)",
|
||
"noAccount": "Har du ikke en konto?",
|
||
"hasAccount": "Har du allerede en konto?",
|
||
"twoFactorAuth": "Tofaktorgodkendelse",
|
||
"enterCode": "Indtast bekræftelseskode",
|
||
"backupCode": "Eller brug backupkoden",
|
||
"verifyCode": "Bekræft kode",
|
||
"redirectingToApp": "Omdirigerer til app...",
|
||
"sshAuthenticationRequired": "SSH-godkendelse påkrævet",
|
||
"sshNoKeyboardInteractive": "Tastaturinteraktiv godkendelse ikke tilgængelig",
|
||
"sshAuthenticationFailed": "Godkendelse mislykkedes",
|
||
"sshAuthenticationTimeout": "Godkendelsestimeout",
|
||
"sshNoKeyboardInteractiveDescription": "Serveren understøtter ikke tastaturinteraktiv godkendelse. Angiv venligst din adgangskode eller SSH-nøgle.",
|
||
"sshAuthFailedDescription": "De angivne loginoplysninger var forkerte. Prøv igen med gyldige loginoplysninger.",
|
||
"sshTimeoutDescription": "Godkendelsesforsøget udløb. Prøv igen.",
|
||
"sshProvideCredentialsDescription": "Angiv venligst dine SSH-legitimationsoplysninger for at oprette forbindelse til denne server.",
|
||
"sshPasswordDescription": "Indtast adgangskoden til denne SSH-forbindelse.",
|
||
"sshKeyPasswordDescription": "Hvis din SSH-nøgle er krypteret, skal du indtaste adgangskoden her.",
|
||
"passphraseRequired": "Adgangskode påkrævet",
|
||
"passphraseRequiredDescription": "SSH-nøglen er krypteret. Indtast adgangskoden for at låse den op.",
|
||
"back": "Tilbage",
|
||
"firstUser": "Første bruger",
|
||
"firstUserMessage": "Du er den første bruger og vil blive gjort til administrator. Du kan se administratorindstillinger i bruger-rullemenuen i sidebjælken. Hvis du mener, at dette er en fejl, kan du tjekke docker-loggene eller oprette en GitHub-problemsituation.",
|
||
"external": "Ekstern",
|
||
"loginWithExternal": "Log ind med ekstern udbyder",
|
||
"loginWithExternalDesc": "Log ind med din konfigurerede eksterne identitetsudbyder",
|
||
"externalNotSupportedInElectron": "Ekstern godkendelse understøttes endnu ikke i Electron-appen. Brug webversionen til OIDC-login.",
|
||
"loginWithProvider": "Log ind med {{name}}",
|
||
"orContinueWith": "eller fortsæt med",
|
||
"ldapUsername": "LDAP-brugernavn",
|
||
"ldapPassword": "LDAP-adgangskode",
|
||
"ldapSignIn": "Log ind",
|
||
"ldapLoginFailed": "LDAP-login mislykkedes",
|
||
"resetPasswordButton": "Nulstil adgangskode",
|
||
"sendResetCode": "Send nulstillingskode",
|
||
"resetCodeDesc": "Indtast dit brugernavn for at modtage en kode til nulstilling af adgangskode. Koden vil blive logget i docker-containerens logfiler.",
|
||
"resetCode": "Nulstil kode",
|
||
"verifyCodeButton": "Bekræft kode",
|
||
"enterResetCode": "Indtast den 6-cifrede kode fra docker-containerens logfiler for brugeren:",
|
||
"newPassword": "Ny adgangskode",
|
||
"confirmNewPassword": "Bekræft adgangskode",
|
||
"enterNewPassword": "Indtast din nye adgangskode til brugeren:",
|
||
"signUp": "Tilmeld dig",
|
||
"desktopApp": "Desktop-app",
|
||
"loggingInToDesktopApp": "Log ind på desktop-appen",
|
||
"loadingServer": "Indlæser server...",
|
||
"dataLossWarning": "Hvis du nulstiller din adgangskode på denne måde, slettes alle dine gemte SSH-værter, legitimationsoplysninger og andre krypterede data. Denne handling kan ikke fortrydes. Brug kun dette, hvis du har glemt din adgangskode og ikke er logget ind.",
|
||
"authenticationDisabled": "Godkendelse deaktiveret",
|
||
"authenticationDisabledDesc": "Alle godkendelsesmetoder er i øjeblikket deaktiveret. Kontakt din administrator.",
|
||
"passwordLoginDisabledDesc": "Adgangskodelogin er deaktiveret. Brug en adgangsnøgle eller en ekstern godkendelsesudbyder.",
|
||
"signInWithPasskey": "Log ind med adgangsnøgle",
|
||
"passkeyLoginFailed": "Login med adgangsnøgle mislykkedes",
|
||
"attemptsRemaining": "{{count}} forsøg tilbage",
|
||
"confirmResetDataWipe": "Denne konto er ikke logget ind siden krypteringsopgraderingen, så dens gemte data kan ikke gendannes uden den gamle adgangskode. Nulstilling vil permanent slette dens værter, legitimationsoplysninger og kodestykker. Vil du fortsætte?"
|
||
},
|
||
"hostKey": {
|
||
"verifyNewHost": "Bekræft SSH-værtsnøgle",
|
||
"keyChangedWarning": "SSH-værtsnøgle ændret",
|
||
"firstConnectionTitle": "Første gang du opretter forbindelse til denne vært",
|
||
"firstConnectionDescription": "Denne værts ægthed kan ikke fastslås. Bekræft, at fingeraftrykket stemmer overens med det, du forventer.",
|
||
"keyChangedDescription": "Værtsnøglen for denne server er ændret siden din sidste forbindelse. Dette kan indikere et sikkerhedsproblem.",
|
||
"previousKey": "Forrige nøgle",
|
||
"newFingerprint": "Nyt fingeraftryk",
|
||
"fingerprint": "Fingeraftryk",
|
||
"verifyInstructions": "Hvis du har tillid til denne vært, skal du klikke på Accepter for at fortsætte og gemme dette fingeraftryk til fremtidige forbindelser.",
|
||
"securityWarning": "Sikkerhedsadvarsel",
|
||
"acceptAndContinue": "Accepter og fortsæt",
|
||
"acceptNewKey": "Accepter ny nøgle og fortsæt"
|
||
},
|
||
"errors": {
|
||
"databaseConnection": "Kunne ikke oprette forbindelse til databasen",
|
||
"embeddedServerFailed": "Termix' lokale server kunne ikke starte",
|
||
"unknownError": "Ukendt fejl",
|
||
"loginFailed": "Login mislykkedes",
|
||
"failedPasswordReset": "Kunne ikke starte nulstilling af adgangskode",
|
||
"failedVerifyCode": "Kunne ikke bekræfte nulstillingskoden",
|
||
"failedCompleteReset": "Nulstilling af adgangskode mislykkedes",
|
||
"invalidTotpCode": "Ugyldig TOTP-kode",
|
||
"failedOidcLogin": "Kunne ikke starte OIDC-login",
|
||
"silentSigninOidcUnavailable": "Der blev anmodet om lydløs login, men OIDC-login er ikke tilgængeligt.",
|
||
"failedUserInfo": "Kunne ikke hente brugeroplysninger efter login",
|
||
"oidcAuthFailed": "OIDC-godkendelse mislykkedes",
|
||
"invalidAuthUrl": "Ugyldig godkendelses-URL modtaget fra backend",
|
||
"requiredField": "Dette felt er påkrævet",
|
||
"minLength": "Minimumslængden er {{min}}",
|
||
"passwordMismatch": "Adgangskoderne stemmer ikke overens",
|
||
"passwordLoginDisabled": "Brugernavn/adgangskode-login er i øjeblikket deaktiveret",
|
||
"sessionExpired": "Sessionen er udløbet - log venligst ind igen",
|
||
"totpRateLimited": "Begrænset hastighed: For mange TOTP-bekræftelsesforsøg. Prøv igen senere.",
|
||
"totpRateLimitedWithTime": "Hastighed begrænset: For mange TOTP-bekræftelsesforsøg. Vent venligst {{time}} sekunder, før du prøver igen.",
|
||
"resetCodeRateLimited": "Begrænset hastighed: For mange bekræftelsesforsøg. Prøv igen senere.",
|
||
"resetCodeRateLimitedWithTime": "Begrænset hastighed: For mange bekræftelsesforsøg. Vent {{time}} sekunder, før du prøver igen.",
|
||
"authTokenSaveFailed": "Kunne ikke gemme godkendelsestoken",
|
||
"authTokenMissing": "Serveren returnerede ikke et nyt godkendelsestoken. Log venligst ind igen.",
|
||
"authTokenRejected": "Fjernserveren afviste det nye godkendelsestoken",
|
||
"keyringUnavailable": "Logget ind, men sessionen kunne ikke gemmes: dette system har ingen nøglering tilgængelig til at kryptere den med. Start en hemmelig tjeneste (såsom gnome-keyring eller KWallet) og log ind igen.",
|
||
"failedToLoadServer": "Kunne ikke indlæse serveren",
|
||
"remoteServerRequired": "Fjernserver kræves. Opret forbindelse til en fjernserver i Indstillinger for at bruge denne forbindelsestype."
|
||
},
|
||
"messages": {
|
||
"registrationDisabled": "Registrering af nye kontoer er i øjeblikket deaktiveret af en administrator. Log venligst ind eller kontakt en administrator.",
|
||
"userNotAllowed": "Din konto er ikke godkendt til registrering. Kontakt venligst en administrator.",
|
||
"databaseConnectionFailed": "Kunne ikke oprette forbindelse til databaseserveren",
|
||
"embeddedServerPortInUse": "Port {{port}} er allerede i brug af et andet program. Dette er normalt en Termix Docker-container eller en resterende Termix-proces fra en tidligere session. Luk den, og genstart derefter Termix.",
|
||
"embeddedServerPortInUseUnknownPort": "En af de porte, som Termix har brug for, er allerede i brug af et andet program. Luk det program, der bruger den, og genstart derefter Termix.",
|
||
"embeddedServerCrashed": "Den lokale server stoppede uventet. Genstart Termix, og tjek skrivebordsloggen, hvis dette fortsætter.",
|
||
"resetCodeSent": "Nulstillingskode sendt til Docker-logfiler",
|
||
"codeVerified": "Koden er bekræftet",
|
||
"passwordResetSuccess": "Nulstilling af adgangskode er gennemført",
|
||
"loginSuccess": "Login lykkedes",
|
||
"registrationSuccess": "Registreringen er gennemført"
|
||
},
|
||
"profile": {
|
||
"c2sTunnelConfigDesc": "Lokale desktop-tunneller, der er målrettet mod konfigurerede SSH-værter.",
|
||
"c2sTunnelPresets": "Klienttunnelforudindstillinger",
|
||
"c2sTunnelPresetsDesc": "Gem denne desktopklients lokale tunnelliste som en navngiven serverforudindstilling, eller indlæs en forudindstilling tilbage i denne klient.",
|
||
"c2sTunnelPresetsUnavailable": "Forudindstillinger for klienttunnel er kun tilgængelige i desktopklienten.",
|
||
"c2sPresetName": "Forudindstillet navn",
|
||
"c2sPresetNamePlaceholder": "Klientens forudindstillingsnavn",
|
||
"c2sPresetToLoad": "Forudindstilling til indlæsning",
|
||
"c2sNoPresetSelected": "Ingen forudindstilling valgt",
|
||
"c2sNoPresets": "Ingen forudindstillinger gemt",
|
||
"c2sLoadPreset": "Indlæs",
|
||
"c2sCurrentLocalConfig": "{{count}} lokale klienttunneler konfigureret på dette skrivebord.",
|
||
"c2sPresetSyncNote": "Forudindstillinger er eksplicitte snapshots; indlæsning af en erstatter denne desktopklients lokale klienttunnelliste.",
|
||
"c2sPresetSaved": "Forudindstilling for klienttunnel gemt",
|
||
"c2sPresetLoaded": "Forudindstilling for klienttunnel indlæses lokalt",
|
||
"c2sPresetRenamed": "Omdøbt forudindstilling for klienttunnel",
|
||
"c2sPresetDeleted": "Forudindstilling for klienttunnel slettet",
|
||
"c2sPresetLoadError": "Kunne ikke indlæse klienttunnelforudindstillinger"
|
||
},
|
||
"placeholders": {
|
||
"maxRetries": "3",
|
||
"retryInterval": "10",
|
||
"language": "Sprog",
|
||
"keyPassword": "nøgleadgangskode",
|
||
"pastePrivateKey": "Indsæt din private nøgle her...",
|
||
"localListenerHost": "127.0.0.1 (lyt lokalt)",
|
||
"localTargetHost": "127.0.0.1 (mål på denne computer)",
|
||
"remoteTargetHost": "127.0.0.1 (mål fra slutpunkt)",
|
||
"remoteBindHost": "127.0.0.1 (lyt på slutpunkt)",
|
||
"socksListenerHost": "127.0.0.1 (SOCKS-lytter)",
|
||
"enterPassword": "Indtast din adgangskode",
|
||
"defaultPort": "22",
|
||
"defaultEndpointPort": "224"
|
||
},
|
||
"dashboard": {
|
||
"title": "Dashboard",
|
||
"loading": "Indlæser dashboard...",
|
||
"github": "GitHub",
|
||
"support": "Støtte",
|
||
"discord": "Disharmoni",
|
||
"docs": "Dokumenter",
|
||
"donate": "Donér",
|
||
"serverOverview": "Serveroversigt",
|
||
"version": "Version",
|
||
"upToDate": "Opdateret",
|
||
"updateAvailable": "Opdatering tilgængelig",
|
||
"beta": "Beta",
|
||
"uptime": "Oppetid",
|
||
"database": "Database",
|
||
"healthy": "Sund",
|
||
"error": "Fejl",
|
||
"totalHosts": "Samlet antal værter",
|
||
"totalTunnels": "Samlede tunneler",
|
||
"totalCredentials": "Samlede legitimationsoplysninger",
|
||
"recentActivity": "Seneste aktivitet",
|
||
"reset": "Nulstil",
|
||
"loadingRecentActivity": "Indlæser seneste aktivitet...",
|
||
"noRecentActivity": "Ingen nylig aktivitet",
|
||
"quickActions": "Hurtige handlinger",
|
||
"addHost": "Tilføj vært",
|
||
"addCredential": "Tilføj legitimationsoplysninger",
|
||
"adminSettings": "Administratorindstillinger",
|
||
"userProfile": "Brugerprofil",
|
||
"serverStats": "Serverstatistik",
|
||
"loadingServerStats": "Indlæser serverstatistik...",
|
||
"noServerData": "Ingen serverdata tilgængelige",
|
||
"cpu": "CPU",
|
||
"ram": "VÆDDER",
|
||
"customizeLayout": "Tilpas dashboard",
|
||
"dashboardSettings": "Dashboardindstillinger",
|
||
"enableDisableCards": "Aktivér/deaktiver kort",
|
||
"resetLayout": "Nulstil til standard",
|
||
"serverOverviewCard": "Serveroversigt",
|
||
"recentActivityCard": "Seneste aktivitet",
|
||
"networkGraphCard": "Netværksgraf",
|
||
"networkGraph": "Netværksgraf",
|
||
"quickActionsCard": "Hurtige handlinger",
|
||
"serverStatsCard": "Serverstatistik",
|
||
"panelMain": "Hoved",
|
||
"panelSide": "Side",
|
||
"justNow": "lige nu",
|
||
"serviceLinks": "Servicelinks",
|
||
"homepagePreview": "Forhåndsvisning af hjemmeside"
|
||
},
|
||
"donation": {
|
||
"title": "Kan du lide Termix?",
|
||
"body": "Termix er gratis og open source, bygget og vedligeholdt af et team på to personer i vores fritid. Hvis det erstatter et kommercielt værktøj, du ellers skulle betale for, hjælper en donation med at dække hostingomkostninger og holde udviklingen i gang. I øjeblikket er donationer kun krypto.",
|
||
"milestones": "Donationer hjælper også med at finansiere den tid, der skal bruges til at undersøge og lære, hvad der er nødvendigt for at udvikle funktioner som SAML og Kubernetes-support. Se status på donationssiden.",
|
||
"cta": "Donér",
|
||
"dismiss": "Måske senere"
|
||
},
|
||
"dashboardTab": {
|
||
"stable": "STABIL",
|
||
"hostsOnline": "Værter online",
|
||
"activeTunnels": "Aktive tunneler",
|
||
"registerNewServer": "Registrer en ny server",
|
||
"storeSshKeysOrPasswords": "Gem SSH-nøgler eller adgangskoder",
|
||
"manageUsersAndRoles": "Administrer brugere og roller",
|
||
"manageYourAccount": "Administrer din konto",
|
||
"hostStatus": "Værtsstatus",
|
||
"noHostsConfigured": "Ingen værter konfigureret",
|
||
"online": "ONLINE",
|
||
"offline": "OFFLINE",
|
||
"checking": "KONTROL",
|
||
"onlineLower": "Online",
|
||
"nodes": "{{count}} noder",
|
||
"add": "Tilføje:",
|
||
"commandPalette": "Kommandopalet",
|
||
"done": "Færdig",
|
||
"editModeInstructions": "Træk kort for at ændre rækkefølgen · Træk kolonneopdeleren for at ændre størrelsen på kolonnerne · Træk i den nederste kant af et kort for at ændre størrelsen på dets højde · Fjern i papirkurven",
|
||
"empty": "Tom",
|
||
"clear": "Klar",
|
||
"serviceLinksTitle": "Servicelinks",
|
||
"serviceLinksEmpty": "Ingen servicelinks endnu",
|
||
"serviceLinksAddLabel": "Mærke",
|
||
"serviceLinksAddUrl": "URL",
|
||
"serviceLinksAdd": "Tilføje",
|
||
"serviceLinksLabelPlaceholder": "Min tjeneste",
|
||
"serviceLinksUrlPlaceholder": "http://192.168.1.10:8080",
|
||
"serviceLinksInvalidUrl": "Indtast en gyldig webadresse",
|
||
"serviceLinksAddFailed": "Kunne ikke tilføje tjenestelink",
|
||
"disk": "Disk",
|
||
"viewServerDetails": "Se serveroplysninger"
|
||
},
|
||
"sessionLogs": {
|
||
"title": "Sessionslogfiler",
|
||
"noLogs": "Ingen sessionslogfiler endnu",
|
||
"noLogsDesc": "Aktivér sessionslogning på en vært for at starte optagelse",
|
||
"duration": "Varighed",
|
||
"viewLog": "Se log",
|
||
"downloadLog": "Download",
|
||
"downloadAsText": "Download som tekst",
|
||
"deleteLog": "Slet",
|
||
"confirmDelete": "Slet denne sessionslog?",
|
||
"confirmDeleteDesc": "Denne handling kan ikke fortrydes.",
|
||
"copyContent": "Kopi",
|
||
"copied": "Kopieret!",
|
||
"loadError": "Kunne ikke indlæse sessionslogfiler",
|
||
"deleteError": "Kunne ikke slette sessionsloggen",
|
||
"filterByHost": "Filtrer efter vært..."
|
||
},
|
||
"networkGraph": {
|
||
"addHost": "Tilføj vært",
|
||
"addGroup": "Tilføj gruppe",
|
||
"addLink": "Tilføj link",
|
||
"zoomIn": "Zoom ind",
|
||
"zoomOut": "Zoom ud",
|
||
"resetView": "Nulstil visning",
|
||
"selectHost": "Vælg vært",
|
||
"chooseHost": "Vælg en vært...",
|
||
"parentGroup": "Forældregruppe",
|
||
"noGroup": "Ingen gruppe",
|
||
"groupName": "Gruppenavn",
|
||
"color": "Farve",
|
||
"source": "Kilde",
|
||
"target": "Mål",
|
||
"moveToGroup": "Flyt til gruppe",
|
||
"selectGroup": "Vælg gruppe...",
|
||
"addConnection": "Tilføj forbindelse",
|
||
"hostDetails": "Værtsoplysninger",
|
||
"removeFromGroup": "Fjern fra gruppe",
|
||
"addHostHere": "Tilføj vært her",
|
||
"editGroup": "Rediger gruppe",
|
||
"delete": "Slet",
|
||
"add": "Tilføje",
|
||
"create": "Skabe",
|
||
"move": "Flytte",
|
||
"connect": "Forbinde",
|
||
"createGroup": "Opret gruppe",
|
||
"selectSourcePlaceholder": "Vælg kilde...",
|
||
"selectTargetPlaceholder": "Vælg mål...",
|
||
"invalidFile": "Ugyldig fil",
|
||
"hostAlreadyExists": "Værten er allerede i topologien",
|
||
"connectionExists": "Forbindelsen findes allerede",
|
||
"unknown": "Ukendt",
|
||
"name": "Navn",
|
||
"ip": "IP-adresse",
|
||
"status": "Status",
|
||
"failedToAddNode": "Kunne ikke tilføje node",
|
||
"sourceDifferentFromTarget": "Kilde og mål skal være forskellige",
|
||
"exportJSON": "Eksportér JSON",
|
||
"importJSON": "Importér JSON",
|
||
"terminal": "Terminal",
|
||
"fileManager": "Filhåndtering",
|
||
"tunnel": "Tunnel",
|
||
"docker": "Docker",
|
||
"serverStats": "Værtsmålinger",
|
||
"hostMetrics": "Værtsmålinger",
|
||
"noNodes": "Ingen noder endnu"
|
||
},
|
||
"docker": {
|
||
"notEnabled": "Docker er ikke aktiveret for denne vært",
|
||
"validating": "Validerer Docker...",
|
||
"connecting": "Forbinder...",
|
||
"error": "Fejl",
|
||
"version": "{{runtime}} {{version}}",
|
||
"connectionFailed": "Kunne ikke oprette forbindelse til Docker",
|
||
"containerStarted": "Container {{name}} startet",
|
||
"failedToStartContainer": "Kunne ikke starte containeren {{name}}",
|
||
"containerStopped": "Container {{name}} stoppet",
|
||
"failedToStopContainer": "Kunne ikke stoppe containeren {{name}}",
|
||
"containerRestarted": "Container {{name}} genstartet",
|
||
"failedToRestartContainer": "Kunne ikke genstarte containeren {{name}}",
|
||
"containerPaused": "Container {{name}} sat på pause",
|
||
"containerUnpaused": "Container {{name}} genoptaget",
|
||
"failedToTogglePauseContainer": "Kunne ikke slå pausetilstand til og fra for container {{name}}",
|
||
"containerRemoved": "Container {{name}} fjernet",
|
||
"failedToRemoveContainer": "Kunne ikke fjerne containeren {{name}}",
|
||
"image": "Billede",
|
||
"ports": "Havne",
|
||
"noPorts": "Ingen porte",
|
||
"start": "Starte",
|
||
"confirmRemoveContainer": "Er du sikker på, at du vil fjerne containeren '{{name}}'? Denne handling kan ikke fortrydes.",
|
||
"runningContainerWarning": "Advarsel: Denne container kører i øjeblikket. Fjernelse af den vil stoppe containeren først.",
|
||
"loadingContainers": "Indlæser containere...",
|
||
"manager": "Docker Manager",
|
||
"autoRefresh": "Automatisk opdatering",
|
||
"timestamps": "Tidsstempler",
|
||
"lines": "Linjer",
|
||
"filterLogs": "Filtrer logfiler...",
|
||
"refresh": "Opfriske",
|
||
"download": "Download",
|
||
"clear": "Klar",
|
||
"logsDownloaded": "Logfilerne er downloadet",
|
||
"last50": "Sidste 50",
|
||
"last100": "Sidste 100",
|
||
"last500": "Sidste 500",
|
||
"last1000": "Sidste 1000",
|
||
"allLogs": "Alle logfiler",
|
||
"noLogsMatching": "Ingen logfiler matcher \"{{query}}\"",
|
||
"noLogsAvailable": "Ingen logfiler tilgængelige",
|
||
"noContainersFound": "Ingen containere fundet",
|
||
"noContainersFoundHint": "Der er ingen Docker-containere tilgængelige på denne vært",
|
||
"searchPlaceholder": "Søg i containere...",
|
||
"allStatuses": "Alle statusser",
|
||
"stateRunning": "Løb",
|
||
"statePaused": "Pausesat",
|
||
"stateExited": "Afsluttet",
|
||
"stateRestarting": "Genstart",
|
||
"noContainersMatchFilters": "Ingen containere matcher dine filtre",
|
||
"noContainersMatchFiltersHint": "Prøv at justere dine søge- eller filterkriterier",
|
||
"failedToFetchStats": "Kunne ikke hente containerstatistik",
|
||
"containerNotRunning": "Containeren kører ikke",
|
||
"startContainerToViewStats": "Start containeren for at se statistik",
|
||
"loadingStats": "Indlæser statistik...",
|
||
"errorLoadingStats": "Fejl ved indlæsning af statistik",
|
||
"noStatsAvailable": "Ingen statistik tilgængelig",
|
||
"cpuUsage": "CPU-forbrug",
|
||
"current": "Strøm",
|
||
"memoryUsage": "Hukommelsesforbrug",
|
||
"networkIo": "Netværks-I/O",
|
||
"input": "Input",
|
||
"output": "Produktion",
|
||
"blockIo": "Blok I/O",
|
||
"read": "Læse",
|
||
"write": "Skrive",
|
||
"pids": "PID'er",
|
||
"containerInformation": "Containeroplysninger",
|
||
"name": "Navn",
|
||
"id": "ID",
|
||
"state": "Tilstand",
|
||
"containerMustBeRunning": "Containeren skal køre for at få adgang til konsollen",
|
||
"verificationCodePrompt": "Indtast bekræftelseskode",
|
||
"totpVerificationFailed": "TOTP-bekræftelse mislykkedes. Prøv igen.",
|
||
"warpgateVerificationFailed": "Warpgate-godkendelse mislykkedes. Prøv igen.",
|
||
"connectedTo": "Forbundet til {{containerName}}",
|
||
"disconnected": "Afbrudt",
|
||
"consoleError": "Konsolfejl",
|
||
"errorMessage": "Fejl: {{message}}",
|
||
"failedToConnect": "Kunne ikke oprette forbindelse til containeren",
|
||
"console": "Konsol",
|
||
"selectShell": "Vælg skal",
|
||
"bash": "Bash",
|
||
"sh": "sh",
|
||
"ash": "aske",
|
||
"connect": "Forbinde",
|
||
"disconnect": "Afbryde",
|
||
"notConnected": "Ikke forbundet",
|
||
"clickToConnect": "Klik på Opret forbindelse for at starte en shell-session",
|
||
"connectingTo": "Forbinder til {{containerName}}...",
|
||
"containerNotFound": "Beholderen blev ikke fundet",
|
||
"backToList": "Tilbage til listen",
|
||
"logs": "Logfiler",
|
||
"stats": "Statistik",
|
||
"consoleTab": "Konsol",
|
||
"startContainerToAccess": "Start containeren for at få adgang til konsollen"
|
||
},
|
||
"admin": {
|
||
"sectionGeneral": "Generel",
|
||
"sectionOidc": "OIDC",
|
||
"sectionSso": "SSO-udbydere",
|
||
"ssoAddProvider": "Tilføj udbyder",
|
||
"ssoDocsLink": "Se dokumenter",
|
||
"ssoProviderDocsLink": "Se dokumenter",
|
||
"ssoNoProviders": "Ingen SSO-udbydere er konfigureret.",
|
||
"ssoProviderName": "Vist navn",
|
||
"ssoProviderType": "Udbydertype",
|
||
"ssoDeleteProvider": "Slet udbyder",
|
||
"ssoDeleteConfirm": "Vil du slette denne udbyder? Tilknyttede brugere vil ikke kunne logge ind.",
|
||
"ssoTypeOidc": "OIDC",
|
||
"ssoTypeLdap": "LDAP",
|
||
"ssoTypeGithub": "GitHub",
|
||
"ssoTypeGoogle": "Google",
|
||
"ssoEnabled": "Aktiveret",
|
||
"ssoDisabled": "Handicappet",
|
||
"ssoSaveProvider": "Gem udbyder",
|
||
"ssoTestConnection": "Testforbindelse",
|
||
"ssoEditProvider": "Rediger udbyder",
|
||
"ldapHost": "LDAP-vært",
|
||
"ldapPort": "Havn",
|
||
"ldapUseTls": "Brug TLS (LDAPS)",
|
||
"ldapBindDn": "Bind DN",
|
||
"ldapBindPassword": "Bind adgangskode",
|
||
"ldapUserSearchBase": "Brugersøgningsbase",
|
||
"ldapUserSearchFilter": "Brugersøgningsfilter",
|
||
"ldapUsernameAttr": "Brugernavnsattribut",
|
||
"ldapDisplayNameAttr": "Visningsnavnattribut",
|
||
"ldapGroupSearchBase": "Gruppesøgningsbase",
|
||
"ldapAdminGroup": "Admingruppe",
|
||
"ldapAllowedUsers": "Tilladte brugere",
|
||
"sectionUsers": "Brugere",
|
||
"sectionSessions": "Sessioner",
|
||
"sectionRoles": "Roller",
|
||
"sectionDatabase": "Database",
|
||
"sectionApiKeys": "API-nøgler",
|
||
"sectionAuditLog": "Revisionslog",
|
||
"sectionSsl": "SSL / Lad os kryptere",
|
||
"sectionTouchInput": "Berøringsinput",
|
||
"touchEnabled": "Aktivér berøringsinput",
|
||
"touchEnabledDesc": "Tillad scrolling med én finger i terminaler",
|
||
"touchMomentumEnabled": "Aktiver momentum",
|
||
"touchMomentumEnabledDesc": "Fortsæt med at scrolle kort efter et swipe",
|
||
"touchAdvanced": "Fremskreden",
|
||
"touchDragThreshold": "Trækgrænse",
|
||
"touchMaxWheelDelta": "Maksimal hjuldelta",
|
||
"touchMomentumSampleWindow": "Momentum-eksempelvindue",
|
||
"touchReleaseGracePeriod": "Frigivelsesperiode",
|
||
"touchMinimumVelocity": "Minimumshastighed",
|
||
"touchMaximumVelocity": "Maksimal hastighed",
|
||
"touchMaximumDuration": "Maksimal varighed",
|
||
"touchMaximumTravel": "Maksimal rejse",
|
||
"touchDecayTime": "Henfaldstid",
|
||
"touchPixelsPerTick": "Pixels pr. tick",
|
||
"touchMaximumFrameInterval": "Maksimalt billedinterval",
|
||
"touchMaximumTicksPerFrame": "Maksimalt antal ticks pr. frame",
|
||
"touchResetDefaults": "Nulstil til standardindstillinger",
|
||
"touchSaved": "Indstillinger for berøringsinput gemt",
|
||
"touchSaveFailed": "Indstillinger for berøringsinput kunne ikke gemmes",
|
||
"sectionImageStorage": "Billedlagring",
|
||
"imageStorageMode": "Lagringstilstand",
|
||
"imageStorageModeDesc": "Hvor indsatte og uploadede terminalbilleder skrives. Automatiske valg efter forbindelse, lokal og fjern (SFTP) er rettet.",
|
||
"imageStorageModeAuto": "Bil",
|
||
"imageStorageModeLocal": "Lokal",
|
||
"imageStorageModeRemoteSftp": "Fjernbetjening (SFTP)",
|
||
"imageStorageLocalDir": "Lokal mappe",
|
||
"imageStorageLocalDirDesc": "Absolut sti på Termix-backend. Vises ikke efter lagring af sikkerhedsmæssige årsager.",
|
||
"imageStorageLocalDirPlaceholder": "Lad stå tomt for at holde det opdateret",
|
||
"imageStorageHostPath": "Værtssti",
|
||
"imageStorageHostPathDesc": "Værtsvisningen af den lokale mappe, som terminalagenter modtager.",
|
||
"imageStorageTtl": "TTL (ms)",
|
||
"imageStorageMaxCount": "Maksimalt antal billeder",
|
||
"imageStorageMaxBytes": "Maks. lagerplads i bytes",
|
||
"imageStorageSaved": "Indstillinger for billedlagring gemt",
|
||
"imageStorageSaveFailed": "Kunne ikke gemme indstillinger for billedlagring",
|
||
"imageStorageInstanceId": "Terminalsessionsinstans-ID",
|
||
"imageStorageInstanceIdDesc": "Instans-ID for en af dine tilsluttede terminalfaner, der bruges til at teste synligheden.",
|
||
"imageStorageInstanceIdRequired": "Indtast først et terminalsessionsinstans-ID",
|
||
"imageStorageTest": "Prøve",
|
||
"imageStorageTesting": "Testning...",
|
||
"imageStorageTestFailed": "Kunne ikke teste billedlagring",
|
||
"imageStorageTestConnected": "Terminalsessionen er forbundet.",
|
||
"imageStorageTestNotConnected": "Ingen forbundet terminalsession med dette instans-ID.",
|
||
"imageStorageTestSelectedMode": "En upload ville bruge: {{mode}}",
|
||
"imageStorageSelectedModeUnavailable": "Ikke tilgængelig",
|
||
"imageStorageTestLocalVisible": "Den lokale mappe er synlig fra den tilsluttede vært.",
|
||
"imageStorageTestLocalNotVisible": "Den lokale mappe er IKKE synlig fra den tilsluttede vært.",
|
||
"sectionBranding": "Hvid etiket",
|
||
"brandingAppName": "Applikationsnavn",
|
||
"brandingAppNameDesc": "Vises på loginskærmen og i browserfanen. Lad feltet stå tomt for at bruge \"Termix\".",
|
||
"brandingTagline": "Slogan",
|
||
"brandingTaglineDesc": "Vises under programnavnet på loginskærmen. Lad feltet stå tomt for at bruge standardsloganen.",
|
||
"brandingLogo": "Logo",
|
||
"brandingLogoDesc": "PNG, JPEG eller WEBP, op til 750 KB. Erstatter standardikonet på loginskærmen og browserfanen.",
|
||
"brandingLogoUpload": "Upload logo",
|
||
"brandingLogoReset": "Nulstil til standard",
|
||
"brandingLogoInvalid": "Ugyldigt billede. Brug en PNG-, JPEG- eller WEBP-fil på op til 750 KB.",
|
||
"brandingSaved": "Brandingindstillinger gemt",
|
||
"brandingSaveFailed": "Brandingindstillingerne kunne ikke gemmes",
|
||
"sslDescription": "Udsted og forny automatisk et betroet SSL-certifikat fra Let's Encrypt. Kræver et offentligt domæne og port 80 eller DNS-adgang.",
|
||
"sslDocsLink": "Se SSL-dokumenter",
|
||
"sslDomain": "Domæne",
|
||
"sslDomainPlaceholder": "termix.example.com",
|
||
"sslDomainDesc": "Det offentlige domænenavn for certifikatet.",
|
||
"sslEmail": "E-mail",
|
||
"sslEmailPlaceholder": "admin@eksempel.com",
|
||
"sslEmailDesc": "Kontakt-e-mailadresse for Let's Encrypt-notifikationer og konto.",
|
||
"sslChallengeType": "Udfordringstype",
|
||
"sslChallengeTypeDesc": "Sådan beviser du domæneejerskab over for Let's Encrypt.",
|
||
"sslChallengeHttp": "HTTP (webroot) - kræver port 80, der er tilgængelig fra internettet",
|
||
"sslChallengeDns": "DNS (Cloudflare) - kræver et Cloudflare API-token",
|
||
"sslCloudflareToken": "Cloudflare API-token",
|
||
"sslCloudflareTokenPlaceholder": "Indtast token...",
|
||
"sslCloudflareTokenDesc": "Scoped-token med Zone:DNS:Rediger-tilladelse for dit domæne.",
|
||
"sslCertStatus": "Certifikatstatus",
|
||
"sslCertStatusNone": "Intet certifikat",
|
||
"sslCertStatusValid": "Gyldig",
|
||
"sslCertStatusExpiring": "Udløber snart",
|
||
"sslCertStatusExpired": "Udløbet",
|
||
"sslCertExpiresAt": "Udløber {{date}}",
|
||
"sslLastIssued": "Sidst udstedt {{date}}",
|
||
"sslRequestCert": "Udstede/forny certifikat",
|
||
"sslRequestCertLoading": "Anmoder om certifikat...",
|
||
"sslRequestCertSuccess": "Certifikat udstedt og installeret",
|
||
"sslRequestCertFailed": "Certifikatanmodning mislykkedes",
|
||
"sslSave": "Gem indstillinger",
|
||
"sslSaved": "SSL-indstillinger gemt",
|
||
"sslSaveFailed": "Kunne ikke gemme SSL-indstillinger",
|
||
"sslRequiresDomain": "Domæne og e-mail er påkrævet",
|
||
"sslInfoNote": "Efter udstedelse eller upload af et certifikat vil Termix automatisk aktivere HTTPS på SSL_PORT (standard 8443) ud over den eksisterende HTTP-port. Sørg for, at porten er publiceret/tilknyttet denne container, så den er tilgængelig.",
|
||
"sslManualOption": "Manual (upload certifikat)",
|
||
"sslManualCert": "Certifikat (PEM)",
|
||
"sslManualCertPlaceholder": "-----STARTCERTIFIKAT-----",
|
||
"sslManualKey": "Privat nøgle (PEM)",
|
||
"sslManualKeyPlaceholder": "-----START PRIVAT NØGLE-----",
|
||
"sslManualDesc": "Indsæt dit eksisterende certifikat og din private nøgle, inklusive en fuld kæde, hvis det kræves af din CA.",
|
||
"sslManualUpload": "Upload og installer certifikat",
|
||
"sslManualUploadLoading": "Uploader certifikat...",
|
||
"sslManualUploadSuccess": "Certifikatet er uploadet og installeret",
|
||
"sslManualUploadFailed": "Upload af certifikat mislykkedes",
|
||
"sslManualRequiresFields": "Certifikat og privat nøgle er påkrævet",
|
||
"auditLogTotal": "{{total}} samlede poster",
|
||
"auditLogEmpty": "Ingen poster i revisionsloggen fundet",
|
||
"auditLogSuccess": "Succes",
|
||
"auditLogFailed": "Mislykkedes",
|
||
"auditLogClearFilters": "Ryd filtre",
|
||
"auditLogPage": "Side {{page}} af {{totalPages}} ({{total}} i alt)",
|
||
"auditLogIp": "IP-adresse",
|
||
"auditLogResourceId": "Ressource-ID",
|
||
"auditLogFilterUser": "Bruger",
|
||
"auditLogFilterAction": "Handling",
|
||
"auditLogFilterResourceType": "Ressourcetype",
|
||
"auditLogFilterStatus": "Status",
|
||
"auditLogFilterFrom": "Fra",
|
||
"auditLogFilterTo": "Til",
|
||
"auditLogFilterAll": "Alle",
|
||
"allowRegistration": "Tillad brugerregistrering",
|
||
"allowRegistrationDesc": "Lad nye brugere selv registrere sig med brugernavn og adgangskode",
|
||
"allowPasswordLogin": "Tillad adgangskodelogin",
|
||
"allowPasswordLoginDesc": "Brugernavn/adgangskode til login",
|
||
"oidcAutoProvision": "OIDC automatisk provisionering",
|
||
"oidcAutoProvisionDesc": "Automatisk oprettelse af konti til OIDC/SSO-brugere ved første login (uafhængigt af registreringsknappen)",
|
||
"oidcSilentLoginDefault": "Lydløs OIDC-login som standard",
|
||
"oidcSilentLoginDefaultDesc": "Omdiriger automatisk til OIDC-login ved hvert besøg, og spring loginformularen helt over",
|
||
"oidcSilentLoginDefaultLockedDesc": "Denne indstilling er låst af miljøvariablen OIDC_SILENT_LOGIN_DEFAULT og kan ikke ændres her.",
|
||
"allowPasswordReset": "Tillad nulstilling af adgangskode",
|
||
"allowPasswordResetDesc": "Nulstil kode via Docker-logfiler",
|
||
"commandHistoryEnabled": "Kommandohistorik",
|
||
"commandHistoryEnabledDesc": "Tillad optagelse af kommandohistorik. Når den er deaktiveret, gemmes historikken ikke uanset indstillingerne for den enkelte vært.",
|
||
"updateCommandHistoryFailed": "Kunne ikke opdatere indstillingen for kommandohistorik",
|
||
"analyticsEnabled": "Del anonym brugsstatistik",
|
||
"analyticsEnabledDesc": "Sender en anonym daglig optælling af brugere, værter og funktionsbrug for at forbedre Termix. Ingen personlige data eller forbindelsesoplysninger inkluderes nogensinde.",
|
||
"analyticsEnabledLockedDesc": "Denne indstilling er låst af miljøvariablen ENABLE_TELEMETRY og kan ikke ændres her.",
|
||
"updateAnalyticsFailed": "Analyseindstillingen kunne ikke opdateres",
|
||
"sessionSharingGloballyEnabled": "Tillad deling af sessioner",
|
||
"auditForwardingTitle": "Videresend til SIEM",
|
||
"auditForwardingDesc": "Send en kopi af hver revisionspost til en ekstern indsamler som NDJSON. Lokale logfiler forbliver kilden til sandheden.",
|
||
"auditForwardingEnvNotice": "En miljøvariabel konfigurerer også videresendelse; URL'en, der gemmes her, har forrang.",
|
||
"auditForwardingToken": "Bærertoken (valgfrit)",
|
||
"auditForwardingTokenStored": "Bærertoken (gemt)",
|
||
"auditForwardingSaved": "Indstillinger for videresendelse af revision gemt",
|
||
"auditForwardingSaveError": "Indstillinger for videresendelse af revision mislykkedes",
|
||
"sessionSharingGloballyEnabledDesc": "Tillad deling af live terminal-, RDP-, VNC- og Telnet-sessioner på tværs af instanser. Tilsidesætter alle delingsindstillinger pr. vært, når de er deaktiveret.",
|
||
"updateSessionSharingFailed": "Indstillingen for deling af session kunne ikke opdateres",
|
||
"sessionTimeout": "Sessionstimeout",
|
||
"hours": "timer",
|
||
"sessionTimeoutRange": "Min. 1 time · Maks. 720 timer",
|
||
"monitoringDefaults": "Overvågning af standardindstillinger",
|
||
"statusCheck": "Statuskontrol",
|
||
"metrics": "Målinger",
|
||
"sec": "sek.",
|
||
"logLevel": "Logniveau",
|
||
"enableGuacamole": "Aktivér guacamole",
|
||
"enableGuacamoleDesc": "RDP/VNC fjernskrivebord",
|
||
"enableGuacamoleDocsLink": "Se dokumenter",
|
||
"guacdUrl": "guacd-URL",
|
||
"tailscaleApiKey": "Tailscale API-nøgle",
|
||
"tailscaleApiKeyDescription": "Bruges til enhedsregistrering i værtseditoren. Understøtter Tailscale (tskey-) og Headscale (hskey-) nøgler. Generer en nøgle på tailscale.com/admin/settings/keys eller fra din Headscale-instans.",
|
||
"tailscaleApiKeyDocsLink": "Se dokumenter",
|
||
"tailscaleApiBaseUrl": "API-basis-URL",
|
||
"tailscaleApiBaseUrlDescription": "Valgfrit. Peg på en selvhostet Headscale-instans i stedet for api.tailscale.com. Lad feltet stå tomt for at bruge standardindstillingen for Tailscale.",
|
||
"oidcDescription": "Konfigurer OpenID Connect til SSO. Felter markeret med * er obligatoriske.",
|
||
"oidcDocsLink": "Se dokumenter",
|
||
"oidcClientId": "Klient-ID",
|
||
"oidcClientSecret": "Klienthemmelighed",
|
||
"oidcAuthUrl": "Autorisations-URL",
|
||
"oidcIssuerUrl": "Udsteders URL",
|
||
"oidcTokenUrl": "Token-URL",
|
||
"oidcUserIdentifier": "Brugeridentifikatorsti",
|
||
"oidcDisplayName": "Sti til visningsnavn",
|
||
"oidcScopes": "Omfang",
|
||
"oidcUserinfoUrl": "Tilsidesæt brugerinfo-URL",
|
||
"oidcAllowedUsers": "Tilladte brugere",
|
||
"oidcAllowedUsersDesc": "Én e-mail pr. linje. Lad feltet stå tomt for at tillade alle.",
|
||
"oidcAdminGroup": "Admingruppe",
|
||
"oidcAdminGroupDesc": "Brugere i denne gruppe har administratorrettigheder. Lad feltet stå tomt for at deaktivere gruppesynkronisering.",
|
||
"oidcGroupClaim": "Gruppekrav",
|
||
"oidcGroupClaimDesc": "Valgfrit. Kravsstien, der indeholder brugerens grupper. Standardindstillingen er grupper, roller og derefter gruppe. Brug dette til udbydere med et brugerdefineret krav (f.eks. Zitadel).",
|
||
"oidcCaCert": "Brugerdefineret CA-certifikat",
|
||
"oidcCaCertDesc": "Valgfrit. PEM-kodet CA-certifikat til OIDC-udbydere, der bruger en privat eller selvsigneret CA. Lad feltet stå tomt for at bruge systemets tillidslager.",
|
||
"removeOidc": "Fjerne",
|
||
"usersCount": "{{count}} brugere",
|
||
"searchUsers": "Søg efter brugere...",
|
||
"noUsers": "Ingen brugere",
|
||
"noUsersMatch": "Ingen brugere matcher din søgning",
|
||
"pageOf": "Side {{page}} af {{total}}",
|
||
"createUser": "Skabe",
|
||
"newRole": "Ny rolle",
|
||
"roleName": "Navn",
|
||
"roleDisplayName": "Vist navn",
|
||
"roleDescription": "Beskrivelse",
|
||
"rolesCount": "{{count}} roller",
|
||
"createRole": "Skabe",
|
||
"creating": "Opretter...",
|
||
"exportDatabase": "Eksportér database",
|
||
"exportDatabaseDesc": "Download en bærbar SQLite-sikkerhedskopi af alle værter, legitimationsoplysninger og indstillinger",
|
||
"export": "Eksportere",
|
||
"exporting": "Eksporterer...",
|
||
"importDatabase": "Importér database",
|
||
"importDatabaseDesc": "Gendan fra en bærbar .sqlite-backup på enhver database-backend",
|
||
"importDatabaseSelected": "Valgt: {{name}}",
|
||
"selectFile": "Vælg fil",
|
||
"changeFile": "Forandring",
|
||
"import": "Importere",
|
||
"importing": "Importerer...",
|
||
"apiKeysCount": "{{count}} nøgler",
|
||
"apiKeysDocsLink": "Se dokumenter",
|
||
"apiKeysCliHint": "Brug en API-nøgle med Termix CLI til at administrere servere fra din terminal.",
|
||
"apiKeysCliLink": "Se CLI-dokumentation",
|
||
"newApiKey": "Ny API-nøgle",
|
||
"apiKeyCreatedWarning": "Nøglen er oprettet - kopier den nu, den vises ikke igen.",
|
||
"apiKeyName": "Navn",
|
||
"apiKeyUser": "Bruger",
|
||
"apiKeySelectUser": "Vælg en bruger...",
|
||
"apiKeyExpiresAt": "Udløber kl.",
|
||
"createKey": "Opret nøgle",
|
||
"apiKeyNoExpiry": "Ingen udløbsdato",
|
||
"revokedBadge": "TILBAGETAGET",
|
||
"authTypeDual": "Dobbeltgodkendelse",
|
||
"authTypeOidc": "OIDC",
|
||
"authTypeLocal": "Lokal",
|
||
"adminStatusAdministrator": "Administrator",
|
||
"adminStatusRegularUser": "Almindelig bruger",
|
||
"adminBadge": "ADMINISTRATOR",
|
||
"systemBadge": "SYS",
|
||
"customBadge": "SKIK",
|
||
"youBadge": "DU",
|
||
"sessionsActive": "{{count}} aktiv",
|
||
"sessionActive": "Aktiv: {{time}}",
|
||
"sessionExpires": "Udløb: {{time}}",
|
||
"revokeAll": "Alle",
|
||
"revokeAllSessionsSuccess": "Alle sessioner for brugeren tilbagekaldt",
|
||
"revokeAllSessionsFailed": "Kunne ikke tilbagekalde sessioner",
|
||
"revokeSessionFailed": "Sessionen kunne ikke tilbagekaldes",
|
||
"addRole": "Tilføj rolle",
|
||
"noCustomRoles": "Ingen brugerdefinerede roller defineret",
|
||
"removeRoleFailed": "Rollen kunne ikke fjernes",
|
||
"assignRoleFailed": "Kunne ikke tildele rollen",
|
||
"deleteRoleFailed": "Rollen kunne ikke slettes",
|
||
"userAdminAccess": "Administrator",
|
||
"userAdminAccessDesc": "Fuld adgang til alle administratorindstillinger",
|
||
"userRoles": "Roller",
|
||
"revokeAllUserSessions": "Tilbagekald alle sessioner",
|
||
"revokeAllUserSessionsDesc": "Tving genlogin på alle enheder",
|
||
"revoke": "Tilbagekald",
|
||
"deleteUserWarning": "Sletning af denne bruger er permanent.",
|
||
"deleteUser": "Slet {{username}}",
|
||
"deleting": "Sletter...",
|
||
"deleteUserFailed": "Brugeren kunne ikke slettes",
|
||
"deleteUserSuccess": "Bruger \"{{username}}\" slettet",
|
||
"deleteRoleSuccess": "Rollen \"{{name}}\" slettet",
|
||
"revokeKeySuccess": "Nøglen \"{{name}}\" tilbagekaldt",
|
||
"revokeKeyFailed": "Kunne ikke tilbagekalde nøglen",
|
||
"copiedToClipboard": "Kopieret til udklipsholderen",
|
||
"done": "Færdig",
|
||
"createUserTitle": "Opret bruger",
|
||
"createUserDesc": "Opret en ny lokal konto.",
|
||
"createUserUsername": "Brugernavn",
|
||
"createUserPassword": "Adgangskode",
|
||
"createUserPasswordHint": "Minimum 6 tegn.",
|
||
"createUserEnterUsername": "Indtast brugernavn",
|
||
"createUserEnterPassword": "Indtast adgangskode",
|
||
"createUserSubmit": "Opret bruger",
|
||
"editUserTitle": "Administrer bruger: {{username}}",
|
||
"editUserDesc": "Rediger roller, administratorstatus, sessioner og kontoindstillinger.",
|
||
"editUserUsername": "Brugernavn",
|
||
"editUserAuthType": "Godkendelsestype",
|
||
"editUserAdminStatus": "Administratorstatus",
|
||
"editUserUserId": "Bruger-ID",
|
||
"linkAccountTitle": "Tilknyt konti",
|
||
"linkAccountDesc": "Flet OIDC-kontoen {{username}} med en eksisterende lokal konto.",
|
||
"linkAccountDescLocal": "Forbind en lokal konto {{username}} med en eksisterende OIDC-konto.",
|
||
"linkAccountWarningTitle": "Dette vil:",
|
||
"linkAccountEffect1": "Slet den kun-til-OIDC-konto",
|
||
"linkAccountEffect2": "Tilføj OIDC-login til målkontoen",
|
||
"linkAccountEffect3": "Tillad både OIDC- og adgangskodelogin",
|
||
"linkAccountTargetUsername": "Brugernavn for lokal konto",
|
||
"linkAccountTargetPlaceholder": "Indtast brugernavnet på den lokale konto, der skal linkes til",
|
||
"linkAccountOidcUsername": "OIDC-kontobrugernavn",
|
||
"linkAccountOidcPlaceholder": "Indtast brugernavnet til den OIDC-kun-konto, der skal flettes ind",
|
||
"linkAccountOidcNotFound": "Ingen OIDC-only-konto fundet med det brugernavn",
|
||
"linkAccounts": "Tilknyt konti",
|
||
"linkAccountSuccess": "Konti er blevet linket",
|
||
"linkAccountFailed": "Kunne ikke linke konti",
|
||
"linkAccountInProgress": "Linker...",
|
||
"unlinkAccountTitle": "Fjern OIDC-tilknytning",
|
||
"unlinkAccountDesc": "Fjern OIDC-godkendelse fra {{username}}. De vil kun kunne logge ind med deres adgangskode.",
|
||
"unlinkAccountWarning": "Dette vil fjerne OIDC-login fra denne konto. Brugeren skal have angivet en adgangskode for at fortsætte med at logge ind.",
|
||
"unlinkAccount": "Fjern OIDC-tilknytning",
|
||
"unlinkAccountInProgress": "Fjerner tilknytning...",
|
||
"unlinkAccountSuccess": "OIDC blev fjernet",
|
||
"unlinkAccountFailed": "Kunne ikke fjerne tilknytningen til OIDC",
|
||
"saving": "Gemmer...",
|
||
"updateRegistrationFailed": "Kunne ikke opdatere registreringsindstillingerne",
|
||
"updatePasswordLoginFailed": "Kunne ikke opdatere adgangskodeindstillingen for login",
|
||
"cannotDisablePasswordLoginWithTotp": "Kan ikke deaktivere adgangskodelogin, mens 2FA er aktiveret for en eller flere brugere. Deaktiver 2FA først.",
|
||
"updateOidcAutoProvisionFailed": "Kunne ikke opdatere indstillingen for automatisk provisionering af OIDC",
|
||
"updateOidcSilentLoginDefaultFailed": "Kunne ikke opdatere indstillingen for lydløs OIDC-login",
|
||
"updatePasswordResetFailed": "Indstillingen for nulstilling af adgangskode kunne ikke opdateres",
|
||
"sessionTimeoutRange2": "Sessionstimeout skal være mellem 1 og 720 timer",
|
||
"sessionTimeoutSaved": "Sessionstimeout gemt",
|
||
"sessionTimeoutSaveFailed": "Kunne ikke gemme sessionstimeout",
|
||
"monitoringIntervalInvalid": "Ugyldige intervalværdier",
|
||
"monitoringSaved": "Overvågningsindstillinger gemt",
|
||
"monitoringSaveFailed": "Kunne ikke gemme overvågningsindstillinger",
|
||
"metricsHistoryRetention": "Opbevaring af metrikhistorik",
|
||
"metricsHistoryRetentionRange": "1 til 90 dage",
|
||
"days": "dage",
|
||
"guacamoleSaved": "Guacamole-indstillinger gemt",
|
||
"guacamoleSaveFailed": "Kunne ikke gemme guacamole-indstillinger",
|
||
"guacamoleUpdateFailed": "Kunne ikke opdatere guacamole-indstillingen",
|
||
"tailscaleSettingsSaved": "Indstillinger for haleskala gemt",
|
||
"tailscaleSettingsSaveFailed": "Kunne ikke gemme Tailscale-indstillinger",
|
||
"logLevelUpdateFailed": "Kunne ikke opdatere logniveauet",
|
||
"oidcSaved": "OIDC-konfiguration gemt",
|
||
"oidcSaveFailed": "Kunne ikke gemme OIDC-konfigurationen",
|
||
"oidcRemoved": "OIDC-konfiguration fjernet",
|
||
"oidcRemoveFailed": "Kunne ikke fjerne OIDC-konfigurationen",
|
||
"createUserRequired": "Brugernavn og adgangskode er påkrævet",
|
||
"createUserPasswordTooShort": "Adgangskoden skal være mindst 6 tegn lang",
|
||
"createUserSuccess": "Bruger \"{{username}}\" blev oprettet",
|
||
"createUserFailed": "Bruger kunne ikke oprettes",
|
||
"updateAdminStatusFailed": "Kunne ikke opdatere administratorstatus",
|
||
"allSessionsRevoked": "Alle sessioner tilbagekaldt",
|
||
"revokeSessionsFailed": "Kunne ikke tilbagekalde sessioner",
|
||
"manageUserData": "Administrer brugerdata",
|
||
"backToUsers": "Tilbage til brugerne",
|
||
"manageTabAccount": "Konto",
|
||
"manageTabHosts": "Værter",
|
||
"manageTabCredentials": "Akkreditiver",
|
||
"manageTabSnippets": "Uddrag",
|
||
"manageTabSessions": "Sessioner",
|
||
"manageTabDanger": "Fare",
|
||
"manageEditorBack": "Tilbage til {{username}}s data",
|
||
"dataLockedBadge": "LÅST",
|
||
"dataLockedNotice": "{{username}}s data forbliver låst, indtil de logger ind næste gang. Deres værter, legitimationsoplysninger og kodestykker kan ikke ses eller redigeres indtil da.",
|
||
"resetPasswordTitle": "Nulstil adgangskode",
|
||
"resetPasswordOidcOnly": "Denne bruger logger ind via en ekstern udbyder og har ingen adgangskode.",
|
||
"resetPasswordPlaceholder": "Ny adgangskode",
|
||
"resetPasswordBtn": "Nulstil",
|
||
"resetPasswordWorking": "Nulstiller...",
|
||
"resetPasswordSuccess": "Nulstilling af adgangskode",
|
||
"resetPasswordSuccessWiped": "Nulstilling af adgangskode. Brugerens krypterede data blev slettet.",
|
||
"resetPasswordFailed": "Kunne ikke nulstille adgangskoden",
|
||
"resetPasswordConfirmWipe": "{{username}} har ikke logget ind siden krypteringsopgraderingen, så deres data kan ikke gendannes. Nulstilling nu vil slette deres værter, legitimationsoplysninger og kodestykker. Vil du fortsætte?",
|
||
"totpSectionTitle": "Tofaktorgodkendelse",
|
||
"totpStatusEnabled": "TOTP er aktiveret for denne bruger",
|
||
"totpStatusDisabled": "TOTP er ikke aktiveret for denne bruger",
|
||
"disableTotp": "Deaktiver",
|
||
"disableTotpConfirm": "Deaktiver tofaktorgodkendelse for {{username}}? De vil kun kunne logge ind med deres adgangskode.",
|
||
"totpDisabledSuccess": "TOTP deaktiveret",
|
||
"totpDisableFailed": "Kunne ikke deaktivere TOTP",
|
||
"manageApiKeys": "API-nøgler",
|
||
"apiKeyNamePlaceholder": "Nøglenavn",
|
||
"apiKeyCopyNotice": "Kopier denne nøgle nu, den vil ikke blive vist igen.",
|
||
"noApiKeysForUser": "Ingen API-nøgler",
|
||
"apiKeyDeleteFailed": "Kunne ikke slette API-nøglen",
|
||
"exportUserData": "Dataeksport",
|
||
"exportUserDataDesc": "Download denne brugers værter, legitimationsoplysninger og filhåndteringsdata som JSON. Hemmelighederne dekrypteres.",
|
||
"exportUserDataSuccess": "Brugerdata eksporteret",
|
||
"exportUserDataFailed": "Kunne ikke eksportere brugerdata",
|
||
"hostsCount": "{{count}} værter",
|
||
"addHostForUser": "Tilføj vært",
|
||
"noHostsForUser": "Denne bruger har ingen værter",
|
||
"connectToHost": "Forbinde",
|
||
"deleteHostConfirm": "Slet værten \"{{name}}\" der tilhører {{username}}?",
|
||
"hostDeletedSuccess": "Vært slettet",
|
||
"hostDeleteFailed": "Kunne ikke slette værten",
|
||
"credentialsCount": "{{count}} legitimationsoplysninger",
|
||
"addCredentialForUser": "Tilføj legitimationsoplysninger",
|
||
"noCredentialsForUser": "Denne bruger har ingen loginoplysninger",
|
||
"deleteCredentialConfirm": "Slet legitimationsoplysningerne \"{{name}}\", der tilhører {{username}}?",
|
||
"credentialDeletedSuccess": "Legitimationsoplysninger slettet",
|
||
"credentialDeleteFailed": "Kunne ikke slette legitimationsoplysninger",
|
||
"snippetsCount": "{{count}} uddrag",
|
||
"addSnippetForUser": "Tilføj uddrag",
|
||
"noSnippetsForUser": "Denne bruger har ingen uddrag",
|
||
"snippetRequiredFields": "Navn og indhold på uddrag er påkrævet",
|
||
"snippetNamePlaceholder": "Snippetnavn",
|
||
"snippetContentPlaceholder": "Kommandoindhold",
|
||
"snippetFolderPlaceholder": "Mappe (valgfrit)",
|
||
"snippetSaved": "Uddrag gemt",
|
||
"snippetSaveFailed": "Kunne ikke gemme uddraget",
|
||
"deleteSnippetConfirm": "Slet uddraget \"{{name}}\" der tilhører {{username}}?",
|
||
"snippetDeletedSuccess": "Uddrag slettet",
|
||
"snippetDeleteFailed": "Kunne ikke slette uddraget",
|
||
"noSessionsForUser": "Ingen aktive sessioner",
|
||
"deleteSuccessorLabel": "Overdrag værter og legitimationsoplysninger til",
|
||
"deleteSuccessorMe": "Mig (den slettende administrator)",
|
||
"deleteSuccessorNone": "Ingen — slet dem",
|
||
"deleteSuccessorDesc": "Alt, hvad denne bruger delte, fortsætter med at fungere under den nye ejer; hvis du vælger \"ingen\", fjernes deres værter, legitimationsoplysninger og delinger.",
|
||
"deleteUserDangerDesc": "Slet permanent {{username}} og alle deres data (hosts, legitimationsoplysninger, kodesnippets, historik). Dette kan ikke fortrydes.",
|
||
"deleteUserConfirm": "Vil du slette {{username}} og alle deres data permanent?",
|
||
"deleteUserAdminBlocked": "Fjern administratorstatus, før du sletter denne bruger.",
|
||
"createRoleRequired": "Navn og visningsnavn er påkrævet",
|
||
"createRoleSuccess": "Rollen \"{{name}}\" blev oprettet",
|
||
"createRoleFailed": "Kunne ikke oprette rollen",
|
||
"apiKeyNameRequired": "Nøglenavn er påkrævet",
|
||
"apiKeyUserRequired": "Bruger-ID er påkrævet",
|
||
"apiKeyCreatedSuccess": "API-nøglen \"{{name}}\" blev oprettet",
|
||
"apiKeyCreateFailed": "Kunne ikke oprette API-nøgle",
|
||
"exportSuccess": "Databasen blev eksporteret",
|
||
"exportFailed": "Databaseeksport mislykkedes",
|
||
"importSelectFile": "Vælg venligst en fil først",
|
||
"importCompleted": "Import fuldført: {{total}} elementer importeret, {{skipped}} sprunget over",
|
||
"importFailed": "Import mislykkedes: {{error}}",
|
||
"importError": "Databaseimport mislykkedes",
|
||
"sectionHostDefaults": "Værtsstandarder",
|
||
"hostDefaultsDesc": "Indstillinger anvendes automatisk, når en ny vært oprettes. Individuelle værter kan stadig tilsidesætte disse.",
|
||
"hostDefaultsSocks5": "SOCKS5 Proxy",
|
||
"hostDefaultsUseSocks5": "Aktivér SOCKS5-proxy",
|
||
"hostDefaultsUseSocks5Desc": "Udfyld SOCKS5 proxy på forhånd på alle nye værter",
|
||
"hostDefaultsSocks5Host": "Proxy-vært / -port",
|
||
"hostDefaultsSocks5Username": "Proxy-brugernavn",
|
||
"hostDefaultsSocks5Password": "Proxy-adgangskode",
|
||
"hostDefaultsMetrics": "Værtsmålinger",
|
||
"hostDefaultsMetricsEnabled": "Aktivér metrikker",
|
||
"hostDefaultsMetricsEnabledDesc": "Indsaml som standard CPU-, hukommelses- og andre statistikker på nye værter",
|
||
"hostDefaultsStatusCheckEnabled": "Aktivér statuskontrol",
|
||
"hostDefaultsStatusCheckEnabledDesc": "Afstem online/offline status på nye værter som standard",
|
||
"hostDefaultsTerminal": "Terminal",
|
||
"hostDefaultsAutoTmux": "Auto-Tmux",
|
||
"hostDefaultsAutoTmuxDesc": "Kør nye værters terminaler inde i tmux, så sessioner overlever afbrydelser (kræver tmux på værten)",
|
||
"terminalSessionTimeout": "Terminalsessionens persistens",
|
||
"terminalSessionTimeoutDesc": "Hvor længe en frakoblet terminal holdes aktiv på serveren, før den lukkes. Min. 1 · Maks. 1440 minutter. For sessioner, der skal overleve dette, skal du aktivere Auto-Tmux på værten.",
|
||
"terminalSessionTimeoutRange": "Indtast en værdi mellem 1 og 1440 minutter",
|
||
"terminalSessionTimeoutSaved": "Terminalsessionens persistens gemt",
|
||
"terminalSessionTimeoutSaveFailed": "Kunne ikke gemme terminalsessionens persistens",
|
||
"minutes": "minutter",
|
||
"hostDefaultsSessionLogging": "Sessionslogning",
|
||
"hostDefaultsSessionLoggingDesc": "Optag terminalsessioner på nye værter som standard",
|
||
"hostDefaultsCommandHistory": "Kommandohistorik",
|
||
"hostDefaultsCommandHistoryDesc": "Spor kommandohistorik på nye værter som standard",
|
||
"hostDefaultsSaved": "Værtsstandarder gemt",
|
||
"hostDefaultsSaveFailed": "Kunne ikke gemme værtens standardindstillinger",
|
||
"rolePermissions": {
|
||
"count": "{{count}} tilladelser",
|
||
"editAction": "Rediger tilladelser",
|
||
"loadError": "Kunne ikke indlæse tilladelseskataloget",
|
||
"saved": "Rolletilladelser gemt",
|
||
"saveError": "Rolletilladelser kunne ikke gemmes",
|
||
"save": "Spare",
|
||
"saving": "Gemmer..."
|
||
},
|
||
"aiGloballyEnabled": "AI-assistent",
|
||
"aiGloballyEnabledDesc": "Lad brugerne aktivere AI-assistenten. Når dette er slået fra, er assistenten skjult og blokeret for alle.",
|
||
"aiPrivateEndpoints": "Tilladte private AI-værter",
|
||
"aiPrivateEndpointsDesc": "Værter på dit private netværk, som brugerne kan henvise til en udbyder, f.eks. en selvhostet Ollama. Adskil dem med kommaer.",
|
||
"stepCa": "Trin CA",
|
||
"stepCaDesc": "Udsted kortlivede SSH-certifikater fra en smallstep CA. Indtast CA-URL'en, dens rodfingeraftryk (som vist i step ca bootstrap) og navnet på OIDC-provisioneren; vælg derefter \"Step CA\" som en værts godkendelsestype. Lad alle tre være tomme for at deaktivere.",
|
||
"stepCaFingerprint": "Rodfingeraftryk (SHA-256)",
|
||
"stepCaProvisioner": "OIDC-provisioneringsnavn",
|
||
"stepCaSaved": "Trin CA-indstillinger gemt",
|
||
"stepCaSaveFailed": "Kunne ikke gemme trin CA-indstillinger",
|
||
"secretSourcePrivateEndpoints": "Tilladte private hemmelige kildeværter",
|
||
"secretSourcePrivateEndpointsDesc": "Private værter som hemmelige kilder (1Password Connect) kan kontakte. Adskil dem med kommaer.",
|
||
"updateSecretSourceEndpointsFailed": "Kunne ikke opdatere tilladelseslisten for det hemmelige kildeslutpunkt",
|
||
"stepCaPrivateEndpoints": "Tilladte private Step CA-værter",
|
||
"stepCaPrivateEndpointsDesc": "Private værter, som Step CA-certifikatflowet kan kontakte: selve CA'en og, hvis den er intern, din identitetsudbyder. Adskil dem med kommaer.",
|
||
"updateStepCaEndpointsFailed": "Kunne ikke opdatere Step CA-slutpunktstilladelseslisten",
|
||
"notificationPrivateEndpoints": "Tilladte private notifikationsværter",
|
||
"notificationPrivateEndpointsDesc": "Præcise private værter, som notifikationskanaler kan kontakte. Adskil dem med kommaer.",
|
||
"updateNotificationEndpointsFailed": "Kunne ikke opdatere tilladelseslisten for notifikationsslutpunktet",
|
||
"updateAiEnabledFailed": "Kunne ikke opdatere AI-indstillingen",
|
||
"updateAiEndpointsFailed": "Kunne ikke opdatere de tilladte værter"
|
||
},
|
||
"newUi": {
|
||
"sidebar": {
|
||
"quickConnect": {
|
||
"hostLabel": "Vært",
|
||
"hostPlaceholder": "192.168.1.1 eller example.com",
|
||
"portLabel": "Havn",
|
||
"portPlaceholder": "22",
|
||
"usernameLabel": "Brugernavn",
|
||
"usernamePlaceholder": "brugernavn",
|
||
"authLabel": "Godkendelse",
|
||
"passwordLabel": "Adgangskode",
|
||
"passwordPlaceholder": "adgangskode",
|
||
"privateKeyLabel": "Privat nøgle",
|
||
"privateKeyPlaceholder": "Indsæt privat nøgle...",
|
||
"credentialLabel": "Legitimationsoplysninger",
|
||
"credentialPlaceholder": "Vælg en gemt legitimationsoplysninger",
|
||
"protocolLabel": "Protokol",
|
||
"domainLabel": "Domæne",
|
||
"domainPlaceholder": "valgfri",
|
||
"connectToRdp": "Opret forbindelse via RDP",
|
||
"connectToVnc": "Forbind via VNC",
|
||
"connectToTerminal": "Opret forbindelse til terminalen",
|
||
"connectToFiles": "Opret forbindelse til filer"
|
||
},
|
||
"history": {
|
||
"noTerminalSelected": "Ingen terminal valgt",
|
||
"noTerminalSelectedHint": "Åbn en SSH-terminalfane for at se dens kommandohistorik",
|
||
"searchPlaceholder": "Søgehistorik...",
|
||
"clearAll": "Ryd alt",
|
||
"noHistoryEntries": "Ingen historikposter",
|
||
"trackingDisabled": "Historiksporing er deaktiveret",
|
||
"trackingDisabledHint": "Aktivér det i værtens terminalindstillinger."
|
||
},
|
||
"sshTools": {
|
||
"keyRecordingTitle": "Nøgleoptagelse",
|
||
"recordToTerminals": "Optag til terminaler",
|
||
"selectAll": "Alle",
|
||
"selectNone": "Ingen",
|
||
"noTerminalTabsOpen": "Ingen terminalfaner åbne",
|
||
"selectTerminalsAbove": "Vælg terminaler ovenfor",
|
||
"broadcastInputPlaceholder": "Skriv her for at udsende tastetryk...",
|
||
"fillPassword": "Udfyld adgangskode",
|
||
"fillPasswordSuccess": "Udfyldt adgangskode i {{count}} terminal(er)",
|
||
"fillPasswordMissing": "Ingen gemt adgangskode til {{count}} valgte terminal(er)",
|
||
"stopRecording": "Stop optagelse",
|
||
"startRecording": "Start optagelse",
|
||
"settingsTitle": "Indstillinger",
|
||
"enableRightClickCopyPaste": "Aktivér højreklik med kopiering/indsætning",
|
||
"copyOnSelect": "Kopier automatisk den markerede tekst"
|
||
},
|
||
"splitScreen": {
|
||
"layoutTitle": "Layout",
|
||
"selectLayoutAbove": "Vælg et layout ovenfor",
|
||
"selectLayoutHint": "Vælg hvor mange ruder der skal vises",
|
||
"panesTitle": "Ruder",
|
||
"openTabsTitle": "Åbne faner",
|
||
"dragTabsHint": "Træk faner ind i ruderne ovenfor, eller brug Hurtig tildeling",
|
||
"dropHere": "Slip her",
|
||
"emptyPane": "Tom",
|
||
"dashboard": "Dashboard",
|
||
"clearSplitScreen": "Ryd delt skærm",
|
||
"quickAssign": "Hurtig tildeling",
|
||
"alreadyAssigned": "Ruden {{index}}",
|
||
"splitTab": "Opdel faneblad",
|
||
"addToSplit": "Tilføj til Opdeling",
|
||
"removeFromSplit": "Fjern fra Split",
|
||
"assignToPane": "Tildel til rude",
|
||
"hotkeysTitle": "Tastaturgenveje",
|
||
"hotkeysSplitRight": "Skift 2-vejs split",
|
||
"hotkeysSplitBelow": "Skift 3-vejs split",
|
||
"hotkeysNavigatePane": "Naviger i ruder",
|
||
"hotkeysNextTab": "Næste fane",
|
||
"hotkeysPrevTab": "Forrige fane",
|
||
"hotkeysJumpTab": "Gå til faneblad"
|
||
},
|
||
"snippets": {
|
||
"title": "Uddrag",
|
||
"createSnippetTitle": "Opret uddrag",
|
||
"createSnippetDescription": "Opret et nyt kommandosnip til hurtig udførelse",
|
||
"nameLabel": "Navn",
|
||
"namePlaceholder": "f.eks. Genstart Nginx",
|
||
"descriptionLabel": "Beskrivelse",
|
||
"descriptionPlaceholder": "Valgfri beskrivelse",
|
||
"optional": "Valgfri",
|
||
"folderLabel": "Folder",
|
||
"noFolder": "Ingen mappe (Ukategoriseret)",
|
||
"commandLabel": "Kommando",
|
||
"commandPlaceholder": "f.eks. sudo systemctl genstart nginx",
|
||
"typeLabel": "Type",
|
||
"typeCommand": "Kommando",
|
||
"typeNote": "Note",
|
||
"noteLabel": "Note",
|
||
"notePlaceholder": "f.eks. en genanvendelig prompt eller påmindelsestekst",
|
||
"cancel": "Ophæve",
|
||
"createSnippetButton": "Opret uddrag",
|
||
"createFolderTitle": "Opret mappe",
|
||
"createFolderDescription": "Organiser dine uddrag i mapper",
|
||
"folderNameLabel": "Mappenavn",
|
||
"folderNamePlaceholder": "f.eks. systemkommandoer, Docker-scripts",
|
||
"folderColorLabel": "Mappefarve",
|
||
"folderIconLabel": "Mappeikon",
|
||
"previewLabel": "Forhåndsvisning",
|
||
"folderNameFallback": "Mappenavn",
|
||
"createFolderButton": "Opret mappe",
|
||
"targetTerminals": "Target Terminals",
|
||
"selectAll": "Alle",
|
||
"selectNone": "Ingen",
|
||
"noTerminalTabsOpen": "Ingen terminalfaner åbne",
|
||
"searchPlaceholder": "Søg i uddrag...",
|
||
"newSnippet": "Nyt uddrag",
|
||
"newFolder": "Ny mappe",
|
||
"run": "Løbe",
|
||
"noSnippetsInFolder": "Ingen uddrag i denne mappe",
|
||
"uncategorized": "Ukategoriseret",
|
||
"editSnippetTitle": "Rediger uddrag",
|
||
"editSnippetDescription": "Opdater dette kommandosnip",
|
||
"saveSnippetButton": "Gem ændringer",
|
||
"createSuccess": "Kodestykket er oprettet",
|
||
"createFailed": "Kunne ikke oprette kodestykket",
|
||
"updateSuccess": "Uddraget er opdateret",
|
||
"updateFailed": "Kunne ikke opdatere uddraget",
|
||
"deleteFailed": "Kunne ikke slette uddraget",
|
||
"folderCreateSuccess": "Mappen er oprettet",
|
||
"folderCreateFailed": "Kunne ikke oprette en mappe",
|
||
"editFolderTitle": "Rediger mappe",
|
||
"editFolderDescription": "Omdøb eller skift udseende af denne mappe",
|
||
"saveFolderButton": "Gem ændringer",
|
||
"editFolder": "Rediger mappe",
|
||
"deleteFolder": "Slet mappe",
|
||
"folderDeleteSuccess": "Mappen \"{{name}}\" er slettet",
|
||
"folderDeleteFailed": "Kunne ikke slette mappen",
|
||
"folderEditSuccess": "Mappen er blevet opdateret",
|
||
"folderEditFailed": "Mappen kunne ikke opdateres",
|
||
"confirmRunMessage": "Kør \"{{name}}\"?",
|
||
"confirmRunButton": "Løbe",
|
||
"runSuccess": "Kørte \"{{name}}\" i {{count}} terminal(er)",
|
||
"pasteSuccess": "Indsatte \"{{name}}\" i {{count}} terminal(er)",
|
||
"pasteToTerminal": "Indsæt",
|
||
"copySuccess": "Kopieret \"{{name}}\" til udklipsholderen",
|
||
"shareTitle": "Del uddrag",
|
||
"shareUser": "Bruger",
|
||
"shareRole": "Rolle",
|
||
"selectUser": "Vælg en bruger...",
|
||
"selectRole": "Vælg en rolle...",
|
||
"shareSuccess": "Uddraget blev delt",
|
||
"shareFailed": "Kunne ikke dele uddraget",
|
||
"revokeSuccess": "Adgang tilbagekaldt",
|
||
"revokeFailed": "Adgang kunne ikke tilbagekaldes",
|
||
"currentAccess": "Nuværende adgang",
|
||
"shareLoadError": "Kunne ikke indlæse delingsdata",
|
||
"loading": "Indlæser...",
|
||
"close": "Tæt",
|
||
"reorderFailed": "Kunne ikke gemme rækkefølgen af uddrag",
|
||
"importExport": "Import/eksport",
|
||
"exportBtn": "Eksportér JSON",
|
||
"importBtn": "Importér JSON",
|
||
"exportSuccess": "Snippets eksporteret",
|
||
"exportFailed": "Kunne ikke eksportere uddrag",
|
||
"importTitle": "Importér uddrag",
|
||
"importDescription": "Importer snippets og mapper fra en JSON-fil eksporteret af Termix",
|
||
"importDropOrClick": "Slip en JSON-fil her, eller klik for at gennemse",
|
||
"importSelectedFile": "Valgt: {{name}}",
|
||
"importOverwrite": "Overskriv eksisterende kodestykker med samme navn og mappe",
|
||
"importStartBtn": "Importere",
|
||
"importSuccess": "Import fuldført: {{snippets}} kodestykke(r) tilføjet, {{updated}} opdateret, {{skipped}} sprunget over, {{folders}} mappe(r) tilføjet",
|
||
"importFailed": "Kunne ikke importere uddrag",
|
||
"importInvalidFile": "Ugyldig fil: forventede et JSON-objekt med snippets eller mapper",
|
||
"targetHostsLabel": "Målværter",
|
||
"targetHostsHint": "Tildel værter til at køre dette kodestykke direkte uden en åben terminal.",
|
||
"noHostsAvailable": "Ingen værter konfigureret",
|
||
"clearTargetHosts": "Ryd alt",
|
||
"hasTargetHosts": "Har målværter",
|
||
"runOnTargets": "Løb på mål",
|
||
"directRunSuccess": "Kørte \"{{name}}\" på {{count}} vært(er)",
|
||
"directRunPartialFail": "\"{{name}}\" mislykkedes på en eller flere værter",
|
||
"executionResultTitle": "Udførelsesresultater: {{name}}",
|
||
"executionResultDescription": "Output fra kørsel af kodestykket på hver målvært.",
|
||
"executionSuccess": "Succes",
|
||
"executionFailed": "Mislykkedes",
|
||
"expandAll": "Udvid alle mapper",
|
||
"collapseAll": "Skjul alle mapper",
|
||
"settings": "Indstillinger for uddrag",
|
||
"variablesHint": "Variabler: $HOST, $USER, $PORT, $NAME, ${INPUT_1:Label}",
|
||
"variablesDialogTitle": "Kør \"{{name}}\"",
|
||
"variablesDialogDescription": "Udfyld de værdier, som dette kodestykke skal bruge, før det køres.",
|
||
"variablesPreviewLabel": "Forhåndsvisning",
|
||
"variablesConfirmButton": "Løbe"
|
||
},
|
||
"automations": {
|
||
"title": "Automatiseringer",
|
||
"tabAutomations": "Automatiseringer",
|
||
"tabRuns": "Løber",
|
||
"tabChannels": "Kanaler",
|
||
"createAutomation": "Ny automatisering",
|
||
"backToAutomations": "Tilbage til Automatiseringer",
|
||
"createTitle": "Ny automatisering",
|
||
"editTitle": "Rediger automatisering",
|
||
"empty": "Ingen automatiseringer endnu. Opret en for at reagere på en metric, en tidsplan eller en begivenhed.",
|
||
"emptyRuns": "Ingen løb endnu.",
|
||
"emptyChannels": "Ingen kanaler endnu. Tilføj en for at sende notifikationer et sted hen.",
|
||
"noChannelsHint": "Ingen kanaler er konfigureret endnu. Tilføj en i fanen Kanaler.",
|
||
"addChannel": "Tilføj kanal",
|
||
"testChannel": "Prøve",
|
||
"channelTestSent": "Testnotifikation sendt",
|
||
"channelTestFailed": "Testnotifikation mislykkedes",
|
||
"channelDeleted": "Kanal slettet",
|
||
"deleteChannelConfirm": "Vil du slette denne kanal? Automatiseringer, der bruger den, vil stoppe med at sende dig notifikationer.",
|
||
"nameLabel": "Navn",
|
||
"namePlaceholder": "f.eks. Ryd op i /data når den fyldes op",
|
||
"nameRequired": "Navn er påkrævet",
|
||
"descriptionLabel": "Beskrivelse",
|
||
"descriptionPlaceholder": "Valgfri beskrivelse",
|
||
"enabledLabel": "Aktiveret",
|
||
"concurrencyLabel": "Hvis den allerede kører",
|
||
"concurrencyHint": "Hvad skal man gøre, når dette udløses igen, før den sidste kørsel er færdig.",
|
||
"concurrency": {
|
||
"skip": "Spring den nye kørsel over",
|
||
"queue": "Vent og løb efter",
|
||
"allow": "Kør begge på én gang"
|
||
},
|
||
"save": "Spare",
|
||
"created": "Automatisering skabt",
|
||
"updated": "Automatisering gemt",
|
||
"deleted": "Automatisering slettet",
|
||
"deleteConfirm": "Vil du slette denne automatisering? Dens kørselshistorik slettes også.",
|
||
"runNow": "Løb nu",
|
||
"testRun": "Testkørsel",
|
||
"testRunHint": "Kører hvert trin, men rører ikke noget uden for Termix.",
|
||
"runStarted": "Løbet startede",
|
||
"runFinished": "Kørsel færdig: {{status}}",
|
||
"trigger": "Udløser",
|
||
"steps": "Trin",
|
||
"addStep": "Tilføj trin",
|
||
"removeStep": "Fjern trin",
|
||
"moveUp": "Flyt op",
|
||
"moveDown": "Flyt ned",
|
||
"noSteps": "Ingen trin endnu. Tilføj et trin for at angive, hvad der skal ske.",
|
||
"webhookTokenTitle": "Webhook-URL",
|
||
"webhookTokenDescription": "Dette vises én gang. Gem det nu, det kan ikke hentes senere.",
|
||
"copy": "Kopi",
|
||
"copied": "Kopieret",
|
||
"viewJson": "JSON",
|
||
"viewBuilder": "Byggefirma",
|
||
"viewGraph": "Kurve",
|
||
"lastRun": "Sidste løb",
|
||
"never": "Aldrig",
|
||
"duration": "{{seconds}}s",
|
||
"stepOutput": "Produktion",
|
||
"stepError": "Fejl",
|
||
"dryRunBadge": "Testkørsel",
|
||
"hostSelector": {
|
||
"trigger": "Udløsende vært",
|
||
"host": "Specifik vært",
|
||
"fleet": "Flåde",
|
||
"all": "Alle værter"
|
||
},
|
||
"triggerKinds": {
|
||
"metric_threshold": "Metrisk tærskel",
|
||
"host_status": "Værten går op eller ned",
|
||
"health_check": "Ændringer i sundhedstjek",
|
||
"schedule": "På en tidsplan",
|
||
"docker_event": "Containerhændelse",
|
||
"internal_event": "Termix-begivenhed",
|
||
"webhook": "Indgående webhook"
|
||
},
|
||
"stepTypes": {
|
||
"notify": "Send en notifikation",
|
||
"http": "Kald en URL",
|
||
"run_snippet": "Kør et uddrag",
|
||
"run_command": "Kør en kommando",
|
||
"docker": "Styr en container",
|
||
"tunnel": "Kontroller en tunnel",
|
||
"wol": "Væk en vært",
|
||
"wait": "Vente",
|
||
"set_var": "Angiv en variabel",
|
||
"if": "Hvis / ellers",
|
||
"run_automation": "Kør en anden automatisering",
|
||
"stop": "Stop"
|
||
},
|
||
"statuses": {
|
||
"running": "Løb",
|
||
"success": "Succes",
|
||
"failed": "Mislykkedes",
|
||
"timeout": "Timeout",
|
||
"skipped": "Springet over",
|
||
"cancelled": "Annulleret"
|
||
},
|
||
"fields": {
|
||
"host": "Vært",
|
||
"metric": "Metrisk",
|
||
"mount": "Monteringspunkt",
|
||
"operator": "Er",
|
||
"value": "Værdi",
|
||
"forSeconds": "Vedvarende i (sekunder)",
|
||
"cooldown": "Nedkølingstid (minutter)",
|
||
"cron": "Cron-udtryk",
|
||
"intervalSeconds": "Hvert (sekund)",
|
||
"timezone": "Tidszone",
|
||
"timezoneServer": "Servertid",
|
||
"timezoneHint": "Cron-tider aflæses i denne zone. Gælder ikke for intervalplaner.",
|
||
"container": "Beholder",
|
||
"command": "Kommando",
|
||
"url": "URL",
|
||
"method": "Metode",
|
||
"body": "Legeme",
|
||
"channels": "Kanaler",
|
||
"title": "Titel",
|
||
"message": "Besked",
|
||
"snippet": "Uddrag",
|
||
"seconds": "Sekunder",
|
||
"conditionLeftPlaceholder": "Værdi at kontrollere",
|
||
"conditionRightPlaceholder": "Sammenlign med",
|
||
"variableName": "Variabelnavn",
|
||
"variableValue": "Værdi",
|
||
"elevated": "Kør med sudo",
|
||
"onError": "Hvis dette mislykkes",
|
||
"allowPrivateNetwork": "Tillad lokale netværksadresser",
|
||
"allowPrivateNetworkHint": "Nødvendig for en selvhostet tjeneste på dit LAN. Deaktiveret som standard for at forhindre anmodninger til interne adresser."
|
||
},
|
||
"onError": {
|
||
"stop": "Stop løbet",
|
||
"continue": "Fortsæt"
|
||
}
|
||
},
|
||
"fleets": {
|
||
"title": "Flåder",
|
||
"createFleet": "Opret flåde",
|
||
"createFleetTitle": "Opret flåde",
|
||
"editFleetTitle": "Rediger flåde",
|
||
"createFleetDescription": "En flåde er en navngiven gruppe af værter, som du kan udføre handlinger mod som en enhed.",
|
||
"nameLabel": "Navn",
|
||
"namePlaceholder": "f.eks. webservere",
|
||
"nameRequired": "Flådenavn er påkrævet",
|
||
"descriptionLabel": "Beskrivelse",
|
||
"descriptionPlaceholder": "Valgfri beskrivelse",
|
||
"colorLabel": "Farve",
|
||
"tagRulesLabel": "Tagregler",
|
||
"tagRulesPlaceholder": "prod-web, kant",
|
||
"tagRulesHint": "Værter med et af disse tags inkluderes automatisk, udover værter, der tilføjes manuelt.",
|
||
"fleetCreated": "Flåde oprettet",
|
||
"fleetUpdated": "Flåden er opdateret",
|
||
"fleetDeleted": "Flåden slettet",
|
||
"saveFailed": "Kunne ikke redde flåden",
|
||
"deleteFailed": "Kunne ikke slette flåden",
|
||
"loadFailed": "Kunne ikke indlæse flåder",
|
||
"deleteFleetTitle": "Slet flåde",
|
||
"deleteFleetDescription": "Er du sikker på, at du vil slette \"{{name}}\"? Dette sletter ikke selve medlemsværterne.",
|
||
"searchFleets": "Søg efter flåder...",
|
||
"noFleets": "Ingen flåder endnu. Opret en for at komme i gang.",
|
||
"memberCount": "{{count}} vært",
|
||
"memberCount_other": "{{count}} værter",
|
||
"manageMembers": "Administrer medlemmer",
|
||
"manageMembersTitle": "Administrer flådemedlemmer",
|
||
"manageMembersDescription": "Slå værter til eller fra af denne flådes statiske medlemskab. Værter, der matches af tagregler, er altid inkluderet.",
|
||
"searchHosts": "Søg efter værter...",
|
||
"noHostsFound": "Ingen værter fundet",
|
||
"noMembers": "Denne flåde har endnu ingen medlemmer. Tilføj værter eller angiv en tagregel.",
|
||
"membersLoadFailed": "Kunne ikke indlæse flådemedlemmer",
|
||
"memberUpdateFailed": "Kunne ikke opdatere flådemedlemskab",
|
||
"tabRun": "Kør kommando",
|
||
"tabTransfer": "Overfør filer",
|
||
"tabInventory": "Inventar",
|
||
"openInventoryTab": "Åbn i fuld fane",
|
||
"tabPackages": "Pakker",
|
||
"runOnFleet": "Kør på flåden",
|
||
"commandPlaceholder": "oppetid && df -h",
|
||
"commandRequired": "En kommando er påkrævet",
|
||
"commandInputsLabel": "Kommandoindgange",
|
||
"commandSucceeded": "Kommandoen lykkedes på alle værter",
|
||
"commandPartialFailure": "{{failed}} af {{total}} værter mislykkedes",
|
||
"commandFailed": "Kunne ikke køre kommandoen",
|
||
"resultSuccess": "Succes",
|
||
"resultFailed": "Mislykkedes",
|
||
"push": "Skubbe",
|
||
"pull": "Træk",
|
||
"remotePathLabel": "Fjernsti",
|
||
"remotePathRequired": "En fjernsti er påkrævet",
|
||
"fileLabel": "Fil",
|
||
"fileRequired": "En fil er påkrævet",
|
||
"pushHint": "Den valgte fil skrives til præcis denne sti på alle værter i flåden.",
|
||
"pullHint": "Filen på denne sti læses fra hver vært og downloades som en enkelt zip-fil, én mappe pr. vært.",
|
||
"transferComplete": "Overførsel fuldført",
|
||
"transferFailed": "Overførslen mislykkedes",
|
||
"refreshInventory": "Opdater lagerbeholdning",
|
||
"inventoryLoadFailed": "Kunne ikke indlæse lagerbeholdningen",
|
||
"inventoryRefreshed": "Opdateret lagerbeholdning",
|
||
"inventoryRefreshFailed": "Kunne ikke opdatere lagerbeholdningen",
|
||
"inventoryNoData": "Ingen lagerdata endnu - opdater for at indsamle dem.",
|
||
"inventoryHost": "Vært",
|
||
"inventoryCollectedCount": "{{count}}/{{total}} indsamlet",
|
||
"inventoryOs": "OS",
|
||
"inventoryKernel": "Kernen",
|
||
"inventoryArch": "Buen",
|
||
"inventoryUptime": "Oppetid",
|
||
"inventoryPackageManager": "Pakkehåndtering",
|
||
"inventoryCollectedAt": "Indsamlet",
|
||
"packageActionLabel": "Handling",
|
||
"packageInstall": "Installere",
|
||
"packageRemove": "Fjerne",
|
||
"packageUpgradeAll": "Opgrader alle pakker",
|
||
"packageNameLabel": "Pakkenavn",
|
||
"packageNameRequired": "Et pakkenavn er påkrævet",
|
||
"packageHint": "Kræver adgang på administratorniveau pr. vært og hæver ved hjælp af værtens gemte sudo-adgangskode."
|
||
},
|
||
"workspaces": {
|
||
"title": "Arbejdsområder",
|
||
"saveCurrent": "Gem nuværende",
|
||
"saveCurrentTitle": "Gem nuværende arbejdsområde",
|
||
"saveCurrentDescription": "Gem alle åbne faner, opdelte layouts og rudearrangementer som et nyt navngivet arbejdsområde.",
|
||
"nameLabel": "Navn",
|
||
"namePlaceholder": "f.eks. produktfejlfinding",
|
||
"nameRequired": "Arbejdsområdenavn er påkrævet",
|
||
"colorLabel": "Farve",
|
||
"workspaceCreated": "Arbejdsområdet er gemt",
|
||
"workspaceUpdated": "Arbejdsområdet er opdateret",
|
||
"workspaceDeleted": "Arbejdsområdet er slettet",
|
||
"workspaceDuplicated": "Arbejdsområdet er duplikeret",
|
||
"saveFailed": "Kunne ikke gemme arbejdsområdet",
|
||
"updateFailed": "Kunne ikke opdatere arbejdsområdet",
|
||
"deleteFailed": "Kunne ikke slette arbejdsområdet",
|
||
"duplicateFailed": "Kunne ikke duplikere arbejdsområdet",
|
||
"loadFailed": "Kunne ikke indlæse arbejdsområder",
|
||
"applyFailed": "Kunne ikke anvende arbejdsområdet",
|
||
"deleteWorkspaceTitle": "Slet arbejdsområde",
|
||
"deleteWorkspaceDescription": "Er du sikker på, at du vil slette \"{{name}}\"? Dette kan ikke fortrydes.",
|
||
"noWorkspaces": "Ingen gemte arbejdsområder endnu. Gem din nuværende faneopstilling for at komme i gang.",
|
||
"tabCount": "{{count}} faneblad",
|
||
"tabCount_other": "{{count}} faner",
|
||
"apply": "Anvende",
|
||
"applyConfirmTitle": "Anvend arbejdsområde",
|
||
"applyConfirmDescription": "Hvis du anvender \"{{name}}\", lukkes dine nuværende faner og erstattes med dette arbejdsområdes gemte arrangement. Ændringer af dit nuværende layout, der ikke er gemt, vil gå tabt.",
|
||
"applyConfirmButton": "Anvend arbejdsområde",
|
||
"updateWithCurrent": "Opdater med aktuel",
|
||
"updateWithCurrentConfirm": "Vil du overskrive \"{{name}}\" med din nuværende tabulatoropstilling?",
|
||
"rename": "Omdøb",
|
||
"duplicate": "Duplikere",
|
||
"duplicateNameSuffix": "{{name}} (kopi)",
|
||
"setDefault": "Angiv som standard",
|
||
"unsetDefault": "Fjern som standard",
|
||
"defaultBadge": "Misligholdelse",
|
||
"lastSession": "Sidste session",
|
||
"lastSessionDescription": "Opdateres automatisk med din seneste faneopsætning. Anvend den til at gendanne det, du havde åbent.",
|
||
"lastUsed": "Sidst brugt {{time}}",
|
||
"neverUsed": "Aldrig anvendt",
|
||
"tabsSkipped": "Arbejdsområde anvendt — {{count}} faneblad(er) sprunget over (værten findes ikke længere): {{names}}"
|
||
},
|
||
"keybindings": {
|
||
"title": "Tastaturgenveje",
|
||
"description": "Tilpas genveje til kopiering, indsættelse og styring af terminaler, eller bind taster for at sende tekst eller køre et kodestykke.",
|
||
"defaultsHeading": "Indbyggede genveje",
|
||
"customHeading": "Brugerdefinerede genveje",
|
||
"addBinding": "Tilføj genvej",
|
||
"addBindingTitle": "Tilføj genvej",
|
||
"editBindingTitle": "Rediger genvej",
|
||
"loading": "Indlæser...",
|
||
"noCustomBindings": "Ingen brugerdefinerede genveje endnu",
|
||
"defaultBadge": "Misligholdelse",
|
||
"customizedBadge": "Tilpasset",
|
||
"customize": "Tilpas",
|
||
"resetToDefault": "Nulstil til standard",
|
||
"resetAllToDefaults": "Nulstil alle til standardindstillingerne",
|
||
"close": "Tæt",
|
||
"cancel": "Ophæve",
|
||
"saveBinding": "Gem genvej",
|
||
"saveError": "Kunne ikke gemme tastaturgenveje",
|
||
"pressKeysToRecord": "Tastekombination",
|
||
"pressKeysPlaceholder": "Klik og tryk på tasterne",
|
||
"recording": "Tryk på tasterne...",
|
||
"comboRequiredError": "Tryk først på en tastekombination",
|
||
"textRequiredError": "Indtast den tekst, der skal sendes",
|
||
"controlCodeRequiredError": "Indtast et enkelt bogstav for kontrolkoden",
|
||
"snippetRequiredError": "Vælg et uddrag",
|
||
"conflictWarning": "Denne kombination er allerede bundet til {{combo}}. Hvis du gemmer dem, aktiveres begge.",
|
||
"actionLabel": "Handling",
|
||
"actionCopy": "Kopiér valg",
|
||
"actionPaste": "Indsæt",
|
||
"actionSendControlCode": "Send Ctrl+bogstavsignal",
|
||
"actionSendText": "Send sms",
|
||
"actionRunSnippet": "Kør eksisterende kodestykke",
|
||
"actionNextTab": "Skift til næste faneblad",
|
||
"actionPreviousTab": "Skift til forrige fane",
|
||
"actionOpenCommandPalette": "Åbn hurtigsøgning",
|
||
"controlCodeLabel": "Bogstav",
|
||
"textLabel": "Tekst der skal sendes",
|
||
"appendEnterLabel": "Tryk Enter efter afsendelse",
|
||
"snippetLabel": "Uddrag",
|
||
"selectSnippetPlaceholder": "Vælg et uddrag",
|
||
"orphanedSnippetWarning": "uddrag ikke fundet",
|
||
"clipboardPermissionNote": "Kan bede om tilladelse til udklipsholder ved første brug i nogle browsere."
|
||
},
|
||
"connectionDefaults": {
|
||
"title": "Standardindstillinger for forbindelse",
|
||
"description": "Angiv værdier, som hver vært arver, medmindre den tilsidesætter dem.",
|
||
"manage": "Styre",
|
||
"dialogDescription": "Disse gælder for værter, der ikke har angivet en indstilling. Alt, hvad der er angivet på en vært, vinder.",
|
||
"tabTerminal": "Terminal",
|
||
"tabRemoteDesktop": "Fjernskrivebord",
|
||
"inherit": "Arve",
|
||
"on": "På",
|
||
"off": "Slukket",
|
||
"resizeDisplayUpdate": "Opdatering af display",
|
||
"resizeReconnect": "Genopret forbindelse",
|
||
"clearAll": "Ryd alt",
|
||
"saved": "Standardindstillinger for forbindelser gemt",
|
||
"saveFailed": "Kunne ikke gemme standardforbindelsesindstillinger"
|
||
},
|
||
"userProfile": {
|
||
"donateTitle": "Hold Termix i live",
|
||
"donateDescription": "Termix er gratis, selvhostet og bygget af kun få personer i deres fritid. Hvis det har sparet dig tid eller penge, kan en kryptodonation hjælpe med at holde det kørende.",
|
||
"donateMilestones": "Donationer hjælper med at finansiere tiden til at undersøge og lære, hvad der er nødvendigt for at opbygge SAML-, Kubernetes- og agentsupport. Se fremskridtene, og donér.",
|
||
"donateButton": "Donér krypto",
|
||
"storageModeLocal": "Browser",
|
||
"storageModeCloud": "Database",
|
||
"storageModeDescription": "Browseren gemmer kun indstillinger i denne browser. Databasen synkroniseres med serveren og indlæses på enhver enhed.",
|
||
"resetToDefaults": "Nulstil til standardindstillinger",
|
||
"resetToDefaultsSuccess": "Indstillingerne nulstilles til standardindstillingerne.",
|
||
"storageModeSwitch": "Præferencelagring",
|
||
"sectionAccount": "Konto",
|
||
"desktopProfileTitle": "Automatisk lokal skrivebordsprofil",
|
||
"desktopProfileDescription": "Denne profil er begrænset til den integrerede backend og logger ind automatisk. Den har ingen login-adgangskode; Fjernsynkronisering nedenfor bruger en separat serverkonto.",
|
||
"sectionInterface": "Grænseflade",
|
||
"interfacePresetDesc": "Hvor mange detaljer Termix viser. Alle funktioner forbliver tilgængelige.",
|
||
"preset_simple": "Enkel",
|
||
"preset_simple_desc": "Kun det essentielle.",
|
||
"preset_balanced": "Balanceret",
|
||
"preset_balanced_desc": "Standardlayoutet.",
|
||
"preset_advanced": "Fremskreden",
|
||
"preset_advanced_desc": "Alt på, tæt pakket.",
|
||
"presetClearOverrides": "Nulstil alt",
|
||
"presetOverridesTitle": "Tilpasset",
|
||
"presetRevertArea": "Vende tilbage",
|
||
"presetConfirmTitle": "Skift til {{preset}}?",
|
||
"presetConfirmDesc": "Dette nulstiller din sidebjælke, navigation, dashboardlayout, terminalværktøjslinje og filhåndteringsvisning. Dine værter, legitimationsoplysninger og startside ændres ikke.",
|
||
"presetConfirmApply": "Anvend forudindstilling",
|
||
"runSetupAgainDesc": "Gennemgå opsætningen fra første kørsel igen.",
|
||
"runSetupAgainButton": "Kør opsætning",
|
||
"uiArea_chrome": "App-chrome",
|
||
"uiArea_hostList": "Værtsliste",
|
||
"uiArea_credentialList": "Legitimationsliste",
|
||
"uiArea_rail": "Navigation",
|
||
"uiArea_dashboard": "Dashboard",
|
||
"uiArea_terminal": "Terminal",
|
||
"uiArea_fileManager": "Filhåndtering",
|
||
"uiArea_docker": "Docker",
|
||
"uiArea_hostMetrics": "Værtmålinger",
|
||
"uiArea_hostEditor": "Værtsredaktør",
|
||
"uiArea_homepage": "Hjemmeside",
|
||
"sectionAppearance": "Udseende",
|
||
"sectionSecurity": "Sikkerhed",
|
||
"sectionApiKeys": "API-nøgler",
|
||
"sectionData": "Data",
|
||
"sectionC2sTunnels": "C2S-tunneler",
|
||
"usernameLabel": "Brugernavn",
|
||
"roleLabel": "Rolle",
|
||
"roleAdministrator": "Administrator",
|
||
"authMethodLabel": "Godkendelsesmetode",
|
||
"authMethodLocal": "Lokal",
|
||
"twoFaLabel": "2FA",
|
||
"twoFaOn": "På",
|
||
"twoFaOff": "Slukket",
|
||
"versionLabel": "Version",
|
||
"betaProgramTitle": "Betaprogram",
|
||
"betaProgramDescription": "Prøv kommende funktioner tidligt med det ugentlige rullende :beta Docker-tag. Ustabil, ikke til produktion.",
|
||
"betaProgramFeedback": "Har du fundet en fejl? Rapportér den her.",
|
||
"betaProgramLearnMore": "Lær mere",
|
||
"cliTitle": "Termix CLI",
|
||
"cliDescription": "Åbn terminaler, kør kommandoer og flyt filer fra din egen shell.",
|
||
"cliLearnMore": "Lær mere",
|
||
"deleteAccount": "Slet konto",
|
||
"deleteAccountDescription": "Slet din konto permanent",
|
||
"changeServerDescription": "Skift til en anden Termix backend-server",
|
||
"deleteButton": "Slet",
|
||
"deleteAccountPermanent": "Denne handling er permanent og kan ikke fortrydes.",
|
||
"deleteAccountWarning": "Alle sessioner, værter, legitimationsoplysninger og indstillinger vil blive slettet permanent.",
|
||
"confirmPasswordDeletePlaceholder": "Indtast din adgangskode for at bekræfte",
|
||
"languageLabel": "Sprog",
|
||
"themeLabel": "Tema",
|
||
"fontSizeLabel": "Skriftstørrelse",
|
||
"interfaceFontLabel": "Grænsefladefont",
|
||
"interfaceFontDescription": "Ændrer applikationens brugerfladefont. Terminalprofiler beholder deres egne skrifttypeindstillinger.",
|
||
"accentColorLabel": "Accentfarve",
|
||
"settingsTerminal": "Terminal",
|
||
"commandAutocomplete": "Kommando Autofuldførelse",
|
||
"commandAutocompleteDesc": "Vis autofuldførelse under indtastning, hvis du trykker på tabulatortasten",
|
||
"localEcho": "Lokalt ekko",
|
||
"localEchoDesc": "Reducer opfattet inputforsinkelse ved hjælp af sikker lokal tastetrykforudsigelse",
|
||
"keyboardShortcuts": "Tastaturgenveje",
|
||
"keyboardShortcutsDescription": "Tilpas genveje til terminalkopiering, -indsætning og -kommandoer",
|
||
"manageShortcuts": "Styre",
|
||
"terminalLinkBehavior": "Klik på terminallink",
|
||
"terminalLinkBehaviorDesc": "Standardadfærd ved klik på links i terminalen",
|
||
"historyTracking": "Historiksporing",
|
||
"historyTrackingDesc": "Spor terminalkommandoer",
|
||
"commandPalette": "Kommandopalet",
|
||
"commandPaletteDesc": "Aktivér tastaturgenvej",
|
||
"reopenTabsOnLogin": "Genåbn faner ved login",
|
||
"reopenTabsOnLoginDesc": "Gendan dine åbne faner, når du logger ind eller opdaterer siden, selv fra en anden enhed",
|
||
"confirmTabClose": "Bekræft lukning af faneblad",
|
||
"confirmTabCloseDesc": "Spørg før lukning af terminalfaner",
|
||
"transferConcurrency": "Samtidige filoverførsler",
|
||
"transferConcurrencyDesc": "Hvor mange filer den side om side lokale/fjernstyrede administrator uploader eller downloader på samme tid. Sænk dette, hvis din server begrænser SFTP-kanaler.",
|
||
"settingsAppRail": "App Rail",
|
||
"sidebarSettingsMoved": "Visningsindstillingerne for værtens sidebjælke er flyttet til panelet Tilpas sidebjælke, der åbnes fra værtsværktøjslinjen.",
|
||
"showHostTags": "Vis værtstags",
|
||
"showHostTagsDesc": "Vis tags i værtslisten",
|
||
"hostTrayOnClick": "Klik for at udvide værtshandlinger",
|
||
"hostTrayOnClickDesc": "Vis altid forbindelsesknapper; klik for at udvide administrationsmuligheder i stedet for at holde musen over",
|
||
"compactHostView": "Kompakt værtvisning",
|
||
"compactHostViewDesc": "Skjul hver vært til en enkelt linje, der kun viser dens navn og adresse",
|
||
"statusColors": "Farver i den virkelige status",
|
||
"statusColorsDesc": "Brug grøn/rød til online/offline status i stedet for accentfarven",
|
||
"pinAppRail": "Fastgør app-skinne",
|
||
"pinAppRailDesc": "Hold appskinnen i venstre sidebar altid udvidet i stedet for at udvide den, når du holder musen over den",
|
||
"openFullscreenSettings": "Åbn indstillinger i fuld skærm",
|
||
"exitFullscreenSettings": "Afslut fuldskærmsindstillinger",
|
||
"expandAppRailOnHover": "Udvid app-skinne ved musepeker",
|
||
"expandAppRailOnHoverDesc": "Tillad, at appens skinne i venstre sidebar udvides, når markøren bevæges hen over den",
|
||
"showPinAppRailButton": "Vis knappen Pin App Rail",
|
||
"showPinAppRailButtonDesc": "Vis en knap i appens skinne for at fastgøre den åben. Deaktiveret som standard.",
|
||
"settingsNavigation": "Navigation",
|
||
"navigationTabsDesc": "Vælg hvilke faner der vises i app-skinnen",
|
||
"showSnippetCommands": "Vis kommandoer",
|
||
"showSnippetCommandsDesc": "Vis kommandoen for hvert kodestykke under dens navn. Slå fra for en kompakt liste.",
|
||
"foldersCollapsed": "Mapper skjult",
|
||
"foldersCollapsedDesc": "Skjul mapper som standard",
|
||
"confirmExecution": "Bekræft udførelse",
|
||
"confirmExecutionDesc": "Bekræft før kørsel af kodestykker",
|
||
"settingsUpdates": "Opdateringer",
|
||
"disableUpdateChecks": "Deaktiver opdateringstjek",
|
||
"disableUpdateChecksDesc": "Stop med at tjekke for opdateringer",
|
||
"totpAuthenticator": "TOTP-godkendelse",
|
||
"totpEnabled": "2FA er aktiveret",
|
||
"totpDisabled": "Tilføj ekstra loginsikkerhed",
|
||
"totpAddAuthenticator": "Tilføj enhed",
|
||
"totpAddTitle": "Tilføj godkendelsesenhed",
|
||
"totpAddDescription": "Bekræft din identitet for at tilmelde en anden autentificator med den samme sikre TOTP-nøgle.",
|
||
"totpAddInputRequired": "Indtast din TOTP-kode eller adgangskode",
|
||
"totpAddFailed": "Kunne ikke tilføje godkendelse",
|
||
"totpAddScanInstructions": "Scan denne QR-kode med den ekstra godkendelsesfunktion. Eksisterende godkendelsesfunktioner vil fortsat virke.",
|
||
"totpAddSuccess": "Yderligere godkendelsesfunktion tilmeldt",
|
||
"disable": "Deaktiver",
|
||
"enable": "Aktivér",
|
||
"setupTotp": "Opsæt TOTP",
|
||
"qrCode": "QR-kode",
|
||
"totpInstructions": "Scan QR-koden eller indtast hemmeligheden i din autentificeringsapp, og indtast derefter den 6-cifrede kode",
|
||
"totpCodePlaceholder": "000000",
|
||
"verify": "Verificere",
|
||
"changePassword": "Skift adgangskode",
|
||
"currentPasswordLabel": "Nuværende adgangskode",
|
||
"currentPasswordPlaceholder": "Nuværende adgangskode",
|
||
"newPasswordLabel": "Ny adgangskode",
|
||
"newPasswordPlaceholder": "Ny adgangskode",
|
||
"confirmPasswordLabel": "Bekræft ny adgangskode",
|
||
"confirmPasswordPlaceholder": "Bekræft ny adgangskode",
|
||
"updatePassword": "Opdater adgangskode",
|
||
"createApiKeyTitle": "Opret API-nøgle",
|
||
"createApiKeyDescription": "Generer en ny API-nøgle til programmatisk adgang.",
|
||
"apiKeyNameLabel": "Navn",
|
||
"apiKeyNamePlaceholder": "f.eks. CI-rørledning",
|
||
"expiryDateLabel": "Udløbsdato",
|
||
"optional": "valgfri",
|
||
"cancel": "Ophæve",
|
||
"createKey": "Opret nøgle",
|
||
"apiKeyCreatedWarning": "Nøglen er oprettet - kopier den nu, den vises ikke igen.",
|
||
"copyApiKey": "Kopiér API-nøgle",
|
||
"copiedToClipboard": "Kopieret til udklipsholderen",
|
||
"apiKeyCount": "{{count}} nøgler",
|
||
"newKey": "Ny nøgle",
|
||
"noApiKeys": "Ingen API-nøgler endnu.",
|
||
"apiKeyActive": "Aktiv",
|
||
"apiKeyUsageHint": "Medtag din nøgle i",
|
||
"apiKeyUsageHintHeader": "overskrift.",
|
||
"apiKeyPermissionsHint": "Nøgler arver tilladelserne fra den oprettende bruger.",
|
||
"exportData": "Eksporter mine data",
|
||
"exportDataDesc": "Download en sikkerhedskopi af dine værter, loginoplysninger og indstillinger for at overføre dem til en anden enhed.",
|
||
"export": "Eksportere",
|
||
"exporting": "Eksporterer...",
|
||
"importData": "Importer mine data",
|
||
"importDataDesc": "Gendan dine værter, legitimationsoplysninger og indstillinger fra en .sqlite-backupfil",
|
||
"importDataSelected": "Valgt: {{name}}",
|
||
"selectFile": "Vælg fil",
|
||
"changeFile": "Forandring",
|
||
"import": "Importere",
|
||
"importing": "Importerer...",
|
||
"exportSuccess": "Data eksporteret",
|
||
"exportFailed": "Dataeksport mislykkedes",
|
||
"importSelectFile": "Vælg venligst en fil først",
|
||
"importCompleted": "Import fuldført: {{total}} elementer importeret, {{skipped}} sprunget over",
|
||
"importFailed": "Import mislykkedes: {{error}}",
|
||
"roleUser": "Bruger",
|
||
"authMethodDual": "Dobbeltgodkendelse",
|
||
"authMethodOidc": "OIDC",
|
||
"totpSetupFailed": "Kunne ikke starte TOTP-opsætningen",
|
||
"totpEnter6Digits": "Indtast en 6-cifret kode",
|
||
"totpEnabledSuccess": "Tofaktorgodkendelse aktiveret",
|
||
"totpInvalidCode": "Ugyldig kode, prøv igen",
|
||
"totpDisableInputRequired": "Indtast din TOTP-kode eller adgangskode",
|
||
"totpDisabledSuccess": "Tofaktorgodkendelse deaktiveret",
|
||
"totpDisableFailed": "Kunne ikke deaktivere 2FA",
|
||
"totpDisableTitle": "Deaktiver 2FA",
|
||
"totpDisablePlaceholder": "Indtast TOTP-kode eller adgangskode",
|
||
"totpDisableConfirm": "Deaktiver 2FA",
|
||
"totpContinueVerify": "Fortsæt med at bekræfte",
|
||
"totpVerifyTitle": "Bekræft kode",
|
||
"totpBackupTitle": "Backupkoder",
|
||
"totpDownloadBackup": "Download backupkoder",
|
||
"passkeys": "Adgangsnøgler",
|
||
"passkeysDesc": "Brug WebAuthn/FIDO2-legitimationsoplysninger til at logge ind uden en adgangskode",
|
||
"passkeyName": "Adgangsnøglenavn",
|
||
"passkeyUvPreferred": "Foretrukket",
|
||
"passkeyUvRequired": "Påkrævet",
|
||
"passkeyUvDiscouraged": "Modløs",
|
||
"addPasskey": "Tilføj adgangsnøgle",
|
||
"noPasskeys": "Ingen adgangsnøgler registreret.",
|
||
"passkeyAdded": "Adgangsnøgle tilføjet",
|
||
"passkeyAddFailed": "Kunne ikke tilføje adgangsnøgle",
|
||
"passkeyDeleted": "Adgangsnøgle slettet",
|
||
"passkeyDeleteFailed": "Kunne ikke slette adgangsnøglen",
|
||
"done": "Færdig",
|
||
"secretCopied": "Hemmelighed kopieret til udklipsholder",
|
||
"apiKeyNameRequired": "Nøglenavn er påkrævet",
|
||
"apiKeyCreated": "API-nøglen \"{{name}}\" blev oprettet",
|
||
"apiKeyCreateFailed": "Kunne ikke oprette API-nøgle",
|
||
"apiKeyUser": "Bruger",
|
||
"apiKeyExpires": "Udløber",
|
||
"apiKeyRevoked": "API-nøglen \"{{name}}\" tilbagekaldt",
|
||
"apiKeyRevokeFailed": "API-nøglen kunne ikke tilbagekaldes",
|
||
"passwordFieldsRequired": "Nuværende og nye adgangskoder er påkrævet",
|
||
"passwordMismatch": "Adgangskoderne stemmer ikke overens",
|
||
"passwordTooShort": "Adgangskoden skal være mindst 6 tegn lang",
|
||
"passwordUpdated": "Adgangskoden er blevet opdateret",
|
||
"passwordUpdateFailed": "Adgangskoden kunne ikke opdateres",
|
||
"deletePasswordRequired": "Adgangskode kræves for at slette din konto",
|
||
"deleteFailed": "Kontoen kunne ikke slettes",
|
||
"deleting": "Sletter...",
|
||
"colorPickerTooltip": "Åbn farvevælgeren",
|
||
"themeSystem": "System",
|
||
"themeLight": "Lys",
|
||
"themeDark": "Mørk",
|
||
"themeDracula": "Dracula",
|
||
"themeCatppuccin": "Catppuccin",
|
||
"themeNord": "Nord",
|
||
"themeSolarized": "Solariseret",
|
||
"themeTokyoNight": "Tokyo-nat",
|
||
"themeOneDark": "En mørk",
|
||
"themeGruvbox": "Gruvbox"
|
||
}
|
||
}
|
||
},
|
||
"terminalToolbar": {
|
||
"title": "Terminalværktøjslinje",
|
||
"showActions": "Vis værktøjslinje",
|
||
"hideToolbar": "Skjul værktøjslinjen",
|
||
"showToolbar": "Udvid værktøjslinjen",
|
||
"moveToolbar": "Flyt værktøjslinjen",
|
||
"moveToolbarHint": "Træk for at flytte værktøjslinjen",
|
||
"layout": "Værktøjslinjevisningstilstand",
|
||
"layoutIcon": "Kun ikon",
|
||
"layoutLabeled": "Ikoner og etiketter",
|
||
"layoutExpanded": "Udvidet med metrikker",
|
||
"image": "Billedhandlinger (kun billeder)",
|
||
"upload": "Upload billede",
|
||
"paste": "Indsæt billede",
|
||
"detachTmux": "Afmonter tmux",
|
||
"detachTmuxDescription": "Afbryd tmux-session",
|
||
"imageActionFailed": "Billedhandling mislykkedes",
|
||
"retry": "Prøv igen",
|
||
"dismissError": "Afvis billedfejl",
|
||
"cpu": "CPU",
|
||
"memory": "Hukommelse",
|
||
"disk": "Disk",
|
||
"statsUnavailable": "Livestatistik ikke tilgængelig",
|
||
"tmuxDetach": "Afbryd tmux-session",
|
||
"uploadImage": "Upload et billede til værten",
|
||
"uploadingImage": "Uploader...",
|
||
"pasteImage": "Indsæt billede fra udklipsholder (kun billeder)",
|
||
"openFiles": "Åbne filer",
|
||
"openDocker": "Åbn Docker",
|
||
"openTunnel": "Åben tunnel",
|
||
"openHostMetrics": "Åbn værtsmålinger",
|
||
"openProxmoxStats": "Åbn Proxmox-statistik",
|
||
"openTmuxMonitor": "Åbn Tmux-skærmen"
|
||
},
|
||
"tmuxMonitor": {
|
||
"title": "Tmux-skærm",
|
||
"failedToLoadHosts": "Kunne ikke indlæse værter",
|
||
"failedToLoad": "Kunne ikke indlæse tmux-sessioner",
|
||
"tmuxUnavailable": "tmux er ikke installeret på denne vært",
|
||
"noSessions": "Ingen tmux-sessioner på denne vært",
|
||
"noHostSelected": "Ingen vært valgt",
|
||
"attached": "Vedhæftet",
|
||
"detached": "Fritliggende",
|
||
"attach": "Vedhæft",
|
||
"editTags": "Rediger tags",
|
||
"tagsHint": "Kommaseparerede tags (f.eks. YOLO, lab, træning)",
|
||
"tagsSaved": "Tags gemt",
|
||
"tagsSaveFailed": "Kunne ikke gemme tags",
|
||
"searchPlaceholder": "Søg i output på tværs af sessioner...",
|
||
"searchResults": "{{count}} matcher",
|
||
"searchFailed": "Søgningen mislykkedes",
|
||
"selectPaneHint": "Vælg en rude for at få vist dens output",
|
||
"closePreview": "Luk forhåndsvisning",
|
||
"newSession": "Ny session",
|
||
"newSessionHint": "Sessionsnavn (bogstaver, cifre, _ @ % + = -)",
|
||
"newSessionPlaceholder": "min-session",
|
||
"create": "Skabe",
|
||
"sessionCreated": "Sessionen \"{{name}}\" blev oprettet",
|
||
"sessionCreateFailed": "Kunne ikke oprette sessionen",
|
||
"splitRight": "Del højre",
|
||
"splitDown": "Opdel ned",
|
||
"splitFailed": "Kunne ikke opdele ruden",
|
||
"newWindow": "Nyt vindue",
|
||
"windowCreateFailed": "Kunne ikke oprette vindue",
|
||
"attachSessionTooltip": "Vedhæft til {{session}}",
|
||
"refresh": "Opfriske",
|
||
"refreshFailed": "Kunne ikke opdatere sessioner",
|
||
"collapseAll": "Skjul alle",
|
||
"expandAll": "Udvid alle",
|
||
"moreActions": "Flere handlinger",
|
||
"sessionStats": "Sessionsstatistik",
|
||
"renameSessionTitle": "Omdøb sessionen \"{{name}}\"",
|
||
"rename": "Omdøb",
|
||
"sessionRenamed": "Sessionen er omdøbt til \"{{name}}\"",
|
||
"sessionRenameFailed": "Kunne ikke omdøbe sessionen",
|
||
"editTagsTitle": "Rediger tags for \"{{name}}\"",
|
||
"killPane": "Dræb ruden",
|
||
"resizeTree": "Træk for at ændre størrelse — dobbeltklik for at nulstille",
|
||
"reattach": "Genmonter (rettelser på en forvrænget visning)",
|
||
"killWindow": "Dræb vinduet",
|
||
"killWindowTitle": "Luk vindue {{index}} af \"{{session}}\"?",
|
||
"killWindowBody": "Alle ruder og processer i dette vindue vil blive afsluttet. Hvis det sidste vindue lukkes, afsluttes sessionen.",
|
||
"windowKillFailed": "Kunne ikke lukke vinduet",
|
||
"statusActivity": "Aktivitet",
|
||
"statusWindows": "Vinduer",
|
||
"statusPanes": "ruder",
|
||
"statusTags": "Tags",
|
||
"killPaneTitle": "Afbryd rude {{id}}?",
|
||
"killPaneBody": "Processen, der kører i denne rude, vil blive afsluttet. Hvis du afslutter den sidste rude, lukkes dens vindue.",
|
||
"paneKillFailed": "Kunne ikke afslutte ruden",
|
||
"killSessionTitle": "Afslut sessionen \"{{name}}\"?",
|
||
"killSessionBody": "Alle vinduer og kørende processer i denne session vil blive afsluttet. Dette kan ikke fortrydes.",
|
||
"kill": "Dræbe",
|
||
"sessionKilled": "Sessionen \"{{name}}\" blev afbrudt",
|
||
"sessionKillFailed": "Kunne ikke afslutte sessionen",
|
||
"hostUnreachable": "Kunne ikke oprette forbindelse til værten. Kontroller, at den er online og tilgængelig.",
|
||
"noServer": "Der kører ingen tmux-server på denne vært.",
|
||
"searchTruncated": "Delvise resultater — søgningen dækker de sidste {{lines}} linjer i hver rude og højst {{panes}} ruder.",
|
||
"closeSearchResults": "Luk søgeresultater",
|
||
"retry": "Prøv igen",
|
||
"noHosts": "Ingen SSH-værter tilgængelige",
|
||
"noHostsHint": "Aktivér Tmux Monitor-indstillingen på en SSH-vært (Værtsadministrator → Terminal-fanen) for at overvåge dens tmux-sessioner.",
|
||
"tmuxInstallHint": "Installer det på værten med:",
|
||
"attachTooltip": "Åbn en terminal til {{host}}",
|
||
"attachTooltipPane": "Åbn en terminal til {{host}} — tmux-session {{session}}",
|
||
"timeJustNow": "lige nu",
|
||
"timeMinutes": "For {{count}}minutter siden",
|
||
"timeHours": "For {{count}}timer siden",
|
||
"timeDays": "for {{count}}dage siden"
|
||
},
|
||
"mobileKeyboard": {
|
||
"shift": "Flytte",
|
||
"ctrl": "Ctrl",
|
||
"esc": "Esc",
|
||
"tab": "Faneblad",
|
||
"backTab": "⇥",
|
||
"arrowUp": "Pil op",
|
||
"arrowDown": "Pil ned",
|
||
"arrowLeft": "Pil til venstre",
|
||
"arrowRight": "Pil til højre",
|
||
"home": "Hjem",
|
||
"end": "Ende",
|
||
"pageUp": "Side op",
|
||
"pageDown": "PgDn",
|
||
"delete": "Del",
|
||
"paste": "Indsæt",
|
||
"editQuickKeys": "Rediger genvejstaster",
|
||
"quickKeysTitle": "Hurtigtaster",
|
||
"quickKeysDesc": "Tryk på × for at fjerne. Understøtter op til 8 tegn.",
|
||
"quickKeyPlaceholder": "f.eks. sudo ",
|
||
"addQuickKey": "Tilføje",
|
||
"removeQuickKey": "Fjerne",
|
||
"resetDefaults": "Nulstil til standardindstillinger",
|
||
"done": "Færdig"
|
||
},
|
||
"serial": {
|
||
"title": "Seriel",
|
||
"portLabel": "Havn",
|
||
"portPlaceholder": "/dev/ttyUSB0 eller COM3",
|
||
"baudRateLabel": "Baudhastighed",
|
||
"dataBitsLabel": "Data",
|
||
"stopBitsLabel": "Stop",
|
||
"parityLabel": "Paritet",
|
||
"parityNone": "Ingen",
|
||
"parityEven": "Endog",
|
||
"parityOdd": "Ulige",
|
||
"connect": "Tilslut til seriel",
|
||
"disconnect": "Afbryde",
|
||
"refreshPorts": "Opdater porte",
|
||
"connected": "Forbundet til {{path}} ved {{baud}} baud",
|
||
"disconnected": "Seriel port afbrudt",
|
||
"connectionError": "Kunne ikke åbne seriel port",
|
||
"wsError": "WebSocket-fejl",
|
||
"errorNoServerUrl": "Ingen server-URL konfigureret",
|
||
"notSupportedTitle": "Seriel understøttes ikke",
|
||
"notSupported": "Serielle forbindelser kræver en browser med Web Serial API-understøttelse (Chrome, Edge eller Firefox 151+) eller Termix-desktopappen.",
|
||
"hideHint": "Du kan skjule fanen Seriel under Brugerprofil > Udseende > Sidebjælke > Navigation.",
|
||
"browserPickerHint": "Klik på Opret forbindelse, og din browser åbner en portvælger, hvor du kan vælge enheden."
|
||
},
|
||
"metricsHistory": {
|
||
"title": "Metrikhistorik",
|
||
"historySuffix": "Historie",
|
||
"cpuMemoryDisk": "CPU / Hukommelse / Disk",
|
||
"network": "Netværk",
|
||
"download": "RX",
|
||
"upload": "TX",
|
||
"noData": "Der er ingen historiske data tilgængelige for dette tidsinterval.",
|
||
"custom": "Skik",
|
||
"to": "til",
|
||
"apply": "Anvende",
|
||
"viewHistory": "Vis historik"
|
||
},
|
||
"alerts": {
|
||
"tabFirings": "Advarsler",
|
||
"tabRules": "Regler",
|
||
"tabChannels": "Kanaler",
|
||
"noFirings": "Ingen ubekræftede advarsler",
|
||
"noRules": "Ingen alarmregler konfigureret",
|
||
"noChannels": "Ingen notifikationskanaler konfigureret",
|
||
"rulesDesc": "Alarmregler udløser notifikationer",
|
||
"channelsDesc": "Hvor alarmmeddelelser sendes",
|
||
"acknowledge": "Anerkende",
|
||
"ackAll": "Bekræft alle",
|
||
"allAcknowledged": "Alle alarmer bekræftet",
|
||
"ackFailed": "Kunne ikke bekræfte advarslen",
|
||
"ackAllFailed": "Kunne ikke bekræfte alle advarsler",
|
||
"showAcknowledged": "Vis alle",
|
||
"hideAcknowledged": "Skjul bekræftet",
|
||
"addChannel": "Tilføj kanal",
|
||
"editChannel": "Rediger kanal",
|
||
"channelName": "Navn",
|
||
"channelType": "Type",
|
||
"channelNameRequired": "Navn er påkrævet",
|
||
"webhookUrl": "URL",
|
||
"webhookUrlRequired": "Webhook-URL er påkrævet",
|
||
"webhookDesc": "Send JSON-nyttelast til denne URL ved hver alarmudløsning",
|
||
"ntfyServer": "Server-URL",
|
||
"ntfyTopic": "Emne",
|
||
"ntfyTopicRequired": "Emne er påkrævet",
|
||
"ntfyToken": "Adgangstoken (valgfrit)",
|
||
"channelSaveFailed": "Kanalen kunne ikke gemmes",
|
||
"test": "Prøve",
|
||
"testSent": "Testnotifikation sendt",
|
||
"testFailed": "Testnotifikation mislykkedes",
|
||
"testFailedWithReason": "Testnotifikation mislykkedes: {{reason}}",
|
||
"addRule": "Tilføj alarmregel",
|
||
"editRule": "Rediger alarmregel",
|
||
"ruleName": "Regelnavn",
|
||
"ruleNameRequired": "Navn er påkrævet",
|
||
"triggerType": "Udløser",
|
||
"thresholdValue": "Tærskel (%)",
|
||
"durationSeconds": "Varighed (sekunder, 0 = affyres øjeblikkeligt)",
|
||
"cooldownMinutes": "Nedkølingstid (minutter)",
|
||
"channels": "Meddelelseskanaler",
|
||
"noChannelsHint": "Tilføj kanaler i fanen Kanaler først",
|
||
"ruleSaveFailed": "Reglen kunne ikke gemmes"
|
||
},
|
||
"ai": {
|
||
"title": "Assistent",
|
||
"send": "Sende",
|
||
"stop": "Stop",
|
||
"save": "Spare",
|
||
"cancel": "Ophæve",
|
||
"running": "løb",
|
||
"approve": "Godkende",
|
||
"reject": "Afvise",
|
||
"inputPlaceholder": "Spørg om dine servere, eller beskriv en ændring, du vil foreslå",
|
||
"selectProvider": "Vælg en udbyder",
|
||
"providerSettings": "Udbyderindstillinger",
|
||
"addProvider": "Tilføj udbyder",
|
||
"editProvider": "Rediger udbyder",
|
||
"removeProvider": "Fjern udbyder",
|
||
"providerType": "Udbyder",
|
||
"providerLabel": "Navn",
|
||
"providerLabelPlaceholder": "For eksempel: Lokal Ollama",
|
||
"baseUrl": "Serveradresse",
|
||
"apiKey": "API-nøgle",
|
||
"defaultModel": "Standardmodel",
|
||
"defaultModelPlaceholder": "For eksempel: llama3.1 eller claude-opus-5",
|
||
"labelRequired": "Giv denne udbyder et navn",
|
||
"providerSaveFailed": "Udbyderen kunne ikke gemmes",
|
||
"providerUpdated": "Udbyder opdateret",
|
||
"providerDeleteFailed": "Udbyderen kunne ikke fjernes",
|
||
"privateEndpointHint": "Adresser på dit private netværk kræver først tilladelse fra en administrator til værten.",
|
||
"providerOllama": "Ollama",
|
||
"providerAnthropic": "Antropisk",
|
||
"providerOpenai": "OpenAI",
|
||
"providerGemini": "Google Gemini",
|
||
"providerOpenaiCompatible": "OpenAI-kompatibel",
|
||
"toolArguments": "Input",
|
||
"toolResult": "Resultat",
|
||
"statusApplied": "Anvendt",
|
||
"statusRejected": "Afvist",
|
||
"proposalApplied": "Ændring anvendt",
|
||
"proposalApplyFailed": "Ændringen kunne ikke anvendes",
|
||
"proposalRejectFailed": "Kunne ikke afvise ændringen",
|
||
"enableTitle": "Aktivér AI-assistenten",
|
||
"enableDescription": "Lad assistenten læse din opsætning og foreslå ændringer, som du kan godkende.",
|
||
"readOnlyCommands": "Tillad skrivebeskyttede diagnosticeringskommandoer",
|
||
"readOnlyCommandsDescription": "Assistenten kan køre en kort liste med sikre kommandoer som f.eks. df og uptime uden at spørge hver gang. Alt, der ændrer en server, foreslås altid først.",
|
||
"modelDetectFailed": "Kunne ikke få kontakt med udbyderen, så dette er en generel liste. Du kan skrive et hvilket som helst modelnavn.",
|
||
"modelCustom": "Indtast et modelnavn",
|
||
"modelRefresh": "Opdater listen",
|
||
"modelPlaceholder": "Vælg eller skriv en model",
|
||
"attachHint": "Skriv @ for at referere til en vært, et kodestykke eller en automatisering. Ændringer foreslås, som du skal godkende.",
|
||
"runCommandTitle": "Kør kommando",
|
||
"assistant": "AI-assistent",
|
||
"terminalPanelEmpty": "Spørg assistenten om denne vært. Alt, der ændrer status, kræver din godkendelse først.",
|
||
"terminalPanelPlaceholder": "Spørg om denne vært...",
|
||
"noProvidersConfigured": "Der er endnu ikke konfigureret nogen AI-udbyder. Tilføj en i fanen AI-assistent.",
|
||
"runsInOpenTerminal": "Kører i din åbne terminalsession.",
|
||
"runInTerminal": "Løbe"
|
||
},
|
||
"macros": {
|
||
"title": "Makroer",
|
||
"description": "Kør en gemt række kommandoer i en terminal, og reager på, hvad serveren sender tilbage.",
|
||
"target": "Mål",
|
||
"noTerminal": "Ingen terminal åben",
|
||
"empty": "Ingen makroer endnu",
|
||
"emptyHint": "Opret en makro for at automatisere et terminalflow, f.eks. at logge ind, genstarte en tjeneste eller besvare prompts.",
|
||
"create": "Ny makro",
|
||
"back": "Tilbage til makroer",
|
||
"name": "Navn",
|
||
"namePlaceholder": "Genstart webserveren",
|
||
"nameRequired": "Giv makroen et navn, før du gemmer den",
|
||
"descriptionLabel": "Beskrivelse",
|
||
"descriptionPlaceholder": "Hvad denne makro gør (valgfrit)",
|
||
"unsaved": "Ikke-gemte ændringer",
|
||
"save": "Spare",
|
||
"saved": "Makro gemt",
|
||
"saveFailed": "Makroen kunne ikke gemmes",
|
||
"delete": "Slet",
|
||
"deleteTitle": "Slette denne makro?",
|
||
"deleteBody": "\"{{name}}\" vil blive slettet permanent. Dette kan ikke fortrydes.",
|
||
"deleted": "Makro slettet",
|
||
"cancel": "Ophæve",
|
||
"run": "Løbe",
|
||
"stop": "Stop",
|
||
"running": "Løber...",
|
||
"completed": "Makro færdig",
|
||
"failed": "Makro mislykkedes",
|
||
"loadFailed": "Makroer kunne ikke indlæses",
|
||
"needTerminal": "Åbn og tilslut først en terminal",
|
||
"noSteps": "Denne makro har endnu ingen trin. Tilføj et nedenfor.",
|
||
"addStep": "Tilføj trin",
|
||
"stepNumber": "Trin {{number}}",
|
||
"removeStep": "Fjern trin",
|
||
"confirmRunTitle": "Køre denne makro?",
|
||
"confirmRunBody": "\"{{name}}\" sender kommandoer til {{host}}.",
|
||
"confirmRunAction": "Kør makro",
|
||
"stepTypes": {
|
||
"send": {
|
||
"label": "Send kommando",
|
||
"help": "Skriver tekst i terminalen, på samme måde som hvis du havde skrevet den."
|
||
},
|
||
"wait": {
|
||
"label": "Vent på output",
|
||
"help": "Holder pause, indtil serveren udskriver den tekst, du navngiver, f.eks. en adgangskodeprompt."
|
||
},
|
||
"delay": {
|
||
"label": "Pause",
|
||
"help": "Venter et fast tidsrum før næste trin."
|
||
},
|
||
"if": {
|
||
"label": "Hvis outputtet indeholder",
|
||
"help": "Kontrollerer alt, hvad serveren har udskrevet indtil videre, og kører derefter en af to grene."
|
||
},
|
||
"repeat": {
|
||
"label": "Gentage",
|
||
"help": "Kører trinnene inde i den et bestemt antal gange."
|
||
}
|
||
},
|
||
"send": {
|
||
"text": "Kommando eller tekst",
|
||
"textPlaceholder": "systemctl genstart nginx",
|
||
"pressEnter": "Tryk Enter efter afsendelse",
|
||
"pressEnterHelp": "Slå dette fra for at skrive tekst uden at indsende den."
|
||
},
|
||
"wait": {
|
||
"pattern": "Vent indtil outputtet indeholder",
|
||
"patternPlaceholder": "adgangskode:",
|
||
"timeout": "Giv op efter",
|
||
"onTimeout": "Hvis det aldrig dukker op",
|
||
"stop": "Stop makroen",
|
||
"continue": "Fortsæt alligevel"
|
||
},
|
||
"delay": {
|
||
"duration": "Vent på"
|
||
},
|
||
"ifStep": {
|
||
"pattern": "Hvis outputtet indeholder",
|
||
"patternPlaceholder": "Aktiv: aktiv (løber)",
|
||
"then": "Så gør dette",
|
||
"else": "Ellers gør dette",
|
||
"emptyBranch": "Ingen trin"
|
||
},
|
||
"repeat": {
|
||
"count": "Antal gange",
|
||
"times": "gange"
|
||
},
|
||
"match": {
|
||
"useRegex": "Match med et regulært udtryk",
|
||
"useRegexHelp": "Slå dette fra for at teksten skal være præcis som den er skrevet.",
|
||
"invalidRegex": "Ikke et gyldigt regulært udtryk, det vil blive matchet som almindelig tekst"
|
||
},
|
||
"seconds": "sekunder",
|
||
"secondsShort": "{{count}}s"
|
||
},
|
||
"webEndpoint": {
|
||
"noHostSelected": "Ingen vært valgt",
|
||
"notFound": "Dette slutpunkt findes ikke længere.",
|
||
"tunnelUnreachableFromBrowser": "Dette endpoint tunnelerer til 127.0.0.1 på den maskine, der kører Termix, som din browser ikke kan nå. Indstil endpointens Bind Host til en adresse, som maskinen svarer på, f.eks. 0.0.0.0, og giv den en fast lokal port.",
|
||
"tunnelSharesSessionCookie": "Åbning af denne tunnel ville sende din Termix-session til den tunnelerede tjeneste, fordi din browser ville nå den på det samme værtsnavn, som Termix serveres fra. Cookies ignorerer porten, så de to kan ikke skelnes fra hinanden. Brug Termix-desktopappen, eller åbn Termix på localhost.",
|
||
"directSharesSessionCookie": "Åbning af dette slutpunkt ville sende din Termix-session til det, fordi din browser når det på det samme sted, som Termix serveres fra. Cookies ignorerer porten, så en anden port er ikke en anden identitet. Brug Termix-desktopappen, eller server denne webgrænseflade fra et andet værtsnavn.",
|
||
"retry": "Prøv igen",
|
||
"reload": "Genindlæs",
|
||
"copyUrl": "Kopiér URL",
|
||
"urlCopied": "URL kopieret",
|
||
"copyFailed": "Kunne ikke kopiere URL'en",
|
||
"openExternally": "Åbn eksternt",
|
||
"isolationUnavailable": "Denne browser kan ikke isolere web-slutpunkter fra din Termix-session. Brug en browser med understøttelse af iframes uden legitimationsoplysninger.",
|
||
"isolationNotice": "Integrerede sider bruger en isoleret session. For sider, der kræver lagerplads eller pop op-login, skal du bruge et isoleret vindue i desktop-appen.",
|
||
"openIsolatedWindow": "Åbn isoleret vindue"
|
||
}
|
||
}
|