Files
Termix/src/ui/locales/translated/fr_FR.json
T
3643e7af97 release-2.9.0 (#1532)
* fix(macos): skip single-instance lock in Mac App Store builds (#1454)

fix(macos): skip single-instance lock in Mac App Store builds

* Fix/backend optional sharp (#1455)

Fix/backend optional sharp

* feat: issue #1218 (#1218)

https://github.com/Termix-SSH/Support/issues/1218

* feat: Add option to use saved global custom theme under Connection Defaults (#1209)

https://github.com/Termix-SSH/Support/issues/1209

* feat: Add Fleet Sharing functionality to the UI (#1228)

https://github.com/Termix-SSH/Support/issues/1228

* feat: Add a list view to the Docker management page (#1237)

https://github.com/Termix-SSH/Support/issues/1237

* feat: issue #1264 (#1264)

https://github.com/Termix-SSH/Support/issues/1264

* feat: 2FA With FortiToken (#1288)

https://github.com/Termix-SSH/Support/issues/1288

* feat: Allow to disable showing paths to folders (#1274)

https://github.com/Termix-SSH/Support/issues/1274

* feat: Sync Network Graph between Desktop and Remote Server (#1245)

https://github.com/Termix-SSH/Support/issues/1245

* feat: Version Number on offline servers (#1291)

https://github.com/Termix-SSH/Support/issues/1291

* feat: Support OrbStack Docker socket path on macOS / Fix "Docker is not installed" on mac... (#1302)

https://github.com/Termix-SSH/Support/issues/1302

* feat: Sidebar host click should focus existing tab instead of opening a new connection (#1289)

https://github.com/Termix-SSH/Support/issues/1289

* fix: Search in side bar shows overlapping hosts when grouped by tags (#1303)

https://github.com/Termix-SSH/Support/issues/1303

* fix: I can't send a file on its own. (#1304)

https://github.com/Termix-SSH/Support/issues/1304

* fix: sudo password not autofilling (#1248)

https://github.com/Termix-SSH/Support/issues/1248

* fix: node-MainThread (#1300)

https://github.com/Termix-SSH/Support/issues/1300

* fix: Tunnel authentication with shared credentials (#1295)

https://github.com/Termix-SSH/Support/issues/1295

* fix: host key updates not syncing, metrics 404 race on first connect

Host key writes never bumped updatedAt so sync never picked them up.
Also retry the first metrics fetch briefly instead of failing right away.

* chore: increment ver

* feat: add category and icon fields to plugin manifest schema

* ci(deps): bump the github-actions group with 2 updates (#1458)

Bumps the github-actions group with 2 updates: [crowdin/github-action](https://github.com/crowdin/github-action) and [actions/github-script](https://github.com/actions/github-script).


Updates `crowdin/github-action` from 2 to 3
- [Release notes](https://github.com/crowdin/github-action/releases)
- [Commits](https://github.com/crowdin/github-action/compare/v2...v3)

Updates `actions/github-script` from 7 to 9
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v7...v9)

---
updated-dependencies:
- dependency-name: crowdin/github-action
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/github-script
  dependency-version: '9'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps-dev): bump the dev-patch-updates group with 13 updates (#1459)

Bumps the dev-patch-updates group with 13 updates:

| Package | From | To |
| --- | --- | --- |
| [@codemirror/commands](https://github.com/codemirror/commands) | `6.11.0` | `6.11.1` |
| [@codemirror/search](https://github.com/codemirror/search) | `6.7.1` | `6.7.2` |
| [@codemirror/view](https://github.com/codemirror/view) | `6.43.9` | `6.43.12` |
| [@testing-library/dom](https://github.com/testing-library/dom-testing-library) | `10.4.1` | `10.4.2` |
| [@testing-library/react](https://github.com/testing-library/react-testing-library) | `16.3.2` | `16.3.3` |
| [@testing-library/user-event](https://github.com/testing-library/user-event) | `14.6.5` | `14.6.7` |
| [@types/ssh2](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ssh2) | `1.15.5` | `1.15.6` |
| [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.1.0` | `6.1.1` |
| [cytoscape](https://github.com/cytoscape/cytoscape.js) | `3.34.1` | `3.34.3` |
| [eslint-plugin-react-refresh](https://github.com/ArnaudBarre/eslint-plugin-react-refresh) | `0.5.4` | `0.5.7` |
| [i18next](https://github.com/i18next/i18next) | `26.4.0` | `26.4.2` |
| [prettier](https://github.com/prettier/prettier) | `3.9.6` | `3.9.8` |
| [react-i18next](https://github.com/i18next/react-i18next) | `17.0.12` | `17.0.14` |


Updates `@codemirror/commands` from 6.11.0 to 6.11.1
- [Changelog](https://github.com/codemirror/commands/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codemirror/commands/commits)

Updates `@codemirror/search` from 6.7.1 to 6.7.2
- [Changelog](https://github.com/codemirror/search/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codemirror/search/commits)

Updates `@codemirror/view` from 6.43.9 to 6.43.12
- [Changelog](https://github.com/codemirror/view/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codemirror/view/commits)

Updates `@testing-library/dom` from 10.4.1 to 10.4.2
- [Release notes](https://github.com/testing-library/dom-testing-library/releases)
- [Changelog](https://github.com/testing-library/dom-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/dom-testing-library/compare/v10.4.1...v10.4.2)

Updates `@testing-library/react` from 16.3.2 to 16.3.3
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v16.3.2...v16.3.3)

Updates `@testing-library/user-event` from 14.6.5 to 14.6.7
- [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.5...v14.6.7)

Updates `@types/ssh2` from 1.15.5 to 1.15.6
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/ssh2)

Updates `@vitejs/plugin-react` from 6.1.0 to 6.1.1
- [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.1/packages/plugin-react)

Updates `cytoscape` from 3.34.1 to 3.34.3
- [Release notes](https://github.com/cytoscape/cytoscape.js/releases)
- [Commits](https://github.com/cytoscape/cytoscape.js/compare/v3.34.1...v3.34.3)

Updates `eslint-plugin-react-refresh` from 0.5.4 to 0.5.7
- [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.4...v0.5.7)

Updates `i18next` from 26.4.0 to 26.4.2
- [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.4.0...v26.4.2)

Updates `prettier` from 3.9.6 to 3.9.8
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.9.6...3.9.8)

Updates `react-i18next` from 17.0.12 to 17.0.14
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v17.0.12...v17.0.14)

---
updated-dependencies:
- dependency-name: "@codemirror/commands"
  dependency-version: 6.11.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@codemirror/search"
  dependency-version: 6.7.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@codemirror/view"
  dependency-version: 6.43.12
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@testing-library/dom"
  dependency-version: 10.4.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@testing-library/react"
  dependency-version: 16.3.3
  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.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/ssh2"
  dependency-version: 1.15.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 6.1.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: cytoscape
  dependency-version: 3.34.3
  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.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: i18next
  dependency-version: 26.4.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: prettier
  dependency-version: 3.9.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: react-i18next
  dependency-version: 17.0.14
  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 6 updates (#1461)

Bumps the prod-patch-updates group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [@tanstack/react-virtual](https://github.com/TanStack/virtual/tree/HEAD/packages/react-virtual) | `3.14.10` | `3.14.13` |
| [compression](https://github.com/expressjs/compression) | `1.8.1` | `1.8.2` |
| [jose](https://github.com/panva/jose) | `6.2.9` | `6.2.12` |
| [jszip](https://github.com/Stuk/jszip) | `3.10.1` | `3.10.2` |
| [socks](https://github.com/JoshGlazebrook/socks) | `2.8.9` | `2.8.10` |
| [undici](https://github.com/nodejs/undici) | `8.10.0` | `8.10.2` |


Updates `@tanstack/react-virtual` from 3.14.10 to 3.14.13
- [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.13/packages/react-virtual)

Updates `compression` from 1.8.1 to 1.8.2
- [Release notes](https://github.com/expressjs/compression/releases)
- [Changelog](https://github.com/expressjs/compression/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/compression/compare/v1.8.1...v1.8.2)

Updates `jose` from 6.2.9 to 6.2.12
- [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.9...v6.2.12)

Updates `jszip` from 3.10.1 to 3.10.2
- [Changelog](https://github.com/Stuk/jszip/blob/main/CHANGES.md)
- [Commits](https://github.com/Stuk/jszip/compare/v3.10.1...v3.10.2)

Updates `socks` from 2.8.9 to 2.8.10
- [Release notes](https://github.com/JoshGlazebrook/socks/releases)
- [Commits](https://github.com/JoshGlazebrook/socks/compare/2.8.9...2.8.10)

Updates `undici` from 8.10.0 to 8.10.2
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v8.10.0...v8.10.2)

---
updated-dependencies:
- dependency-name: "@tanstack/react-virtual"
  dependency-version: 3.14.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: compression
  dependency-version: 1.8.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: jose
  dependency-version: 6.2.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: jszip
  dependency-version: 3.10.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: socks
  dependency-version: 2.8.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: undici
  dependency-version: 8.10.2
  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>

* feat: add plugin worker protocol, bootstrap and plugin_storage table

Worker-side ctx proxy plus the message envelope it talks over, and the
per-plugin key/value table behind ctx.storage with migrations for all
three dialects. Rows cascade with the plugin so uninstalling leaves
nothing behind.

* feat: add allowlisted host view for plugins

An allowlist rather than a list of fields to strip. A blocklist rots:
the moment a new secret-bearing column lands on SSHHost it starts
leaking silently. With an allowlist a new field stays invisible to
plugins until someone adds it here on purpose.

* feat: add plugin loader with manifest validation and crash restart

Validates an unpacked plugin, spawns a worker_threads worker and manages
activate/deactivate/crash-restart with backoff, disabling after three
tries.

The crash counter clears only after a plugin stays up past a stability
window, not on activation. Clearing it on activation let a plugin that
activates cleanly and then dies restart forever, because every attempt
looked like the first.

loader.ts documents what the worker boundary does and does not buy you.
Node's permission model is process-wide, not per-worker, so it cannot be
enabled for plugin workers alone and is not claimed here.

* feat: route internal events through a shared plugin event bus

Formalises three ad-hoc publish paths that already existed:
automation-events.ts, metrics/automation-bridge.ts and the
hostSessionStatus singleton, now the host.session.status topic.

Both invariants the old code relied on are preserved. Publishing stays
fire-and-forget, so a failing subscriber cannot disturb a metrics poll or
a host delete. The automations engine subscribes to the bus at scheduler
start instead of being imported ad hoc, which keeps the edge
one-directional: automations may import repositories, hosts modules must
not import automations.

* feat: add plugin ctx broker with permission gate and audit

Every ctx call a plugin makes is checked against its granted
capabilities, performed by the main thread, then audited. A capability
must be both declared in the manifest and granted in the database, so
widening a plugin's reach always needs a new manifest the user can see,
never just a database row.

Audit attribution is set by the broker, not the plugin. The plugin
supplies only the details, so it cannot forge the actor.

fix: stop plugin workers seeing plaintext credentials in error messages

A failing ctx.ssh.connect handed the worker the raw error from deep in
the SSH stack, which embeds the connect config. The worker received, in
full:

  Authentication failed for root using password <SECRET>

where <SECRET> was the host's real plaintext password. Any plugin with
ssh.exec could read it by catching the error, defeating the whole point
of the handle-based ssh API.

Errors crossing the boundary are now sanitised. Only PluginFacingError
and PluginPermissionError, both authored here, reach a plugin verbatim;
anything else becomes a generic message and the real one goes to the
log. This uses a marker class rather than matching on message text,
because matching would start leaking again the moment an upstream error
happened to contain a familiar phrase.

Covered by credential-isolation.test.ts, which plants a sentinel in
every secret-bearing field and asserts it appears in no message the
worker ever receives.

* feat: dispatch plugin HTTP routes and wire the runtime into startup

ctx.http.route now registers a real router on the /plugin-api/:pluginId
dispatcher, replacing its stub 404. A plugin never touches the Express
req/res: it gets a plain summary and returns a plain object, so sockets
and session cookies stay on this side of the boundary. Authorization and
cookie headers are not forwarded.

Plugins load last in the start-up sequence, after the server is fully
wired, and are terminated before the database on shutdown so none can
outlive it. A plugin that fails to load cannot stop the backend.

fix: correct the nginx plugin-api location regex

The pattern was ^/plugin-api/(/.*)?$, which needs a double slash and so
never matched /plugin-api/<id>/<route>. Every other block in the file
uses ^/prefix(/.*)?$. Left alone, plugin routes would work in dev and
404 only behind Docker.

* fix: update stale SFTP transfer test for single file destination paths

The test still asserted transferToHost was called with the destination
directory "/srv". Commit 7727fa09 (#1304) deliberately changed a single
file transfer to send the full destination path including the filename,
so the correct expectation is "/srv/remote-1.txt". The code was right
and the test was left behind.

* feat: ship the ssh terminal as a first-party in-process plugin

Adds a hardcoded process:transport-owner tier so the terminal can own its
WebSocket server and ssh2 clients, which cannot cross the worker boundary.

* feat: ship docker as a first-party in-process plugin

Moves docker backend and frontend into plugins/docker/, alongside
ssh-terminal. Adds a host editor tab seam, a dashboard card registry,
and a build step to compile plugin backends into dist.

* feat: ship host metrics as a first-party in-process plugin

* fix: harden plugin auth and add per-request identity for ctx calls

Require auth on /plugin-api, gate plugin enable/grant/revoke routes
behind admin.plugins.manage, and thread the calling user through
worker ctx.hosts/ctx.ssh calls instead of always using the install
owner. Also adds the plugin permissions grant/revoke UI.

* feat: ship the AI assistant as a first-party in-process plugin

Moves src/backend/ai and its routes into plugins/ai, mounted through a
small /ai dispatcher instead of its own port. Moves the ai-enabled and
ai-private-endpoints settings routes out of user-settings-routes.ts
into the plugin too, so it has no leftover core dependents.

* fix: remove compiled plugin JS left behind in plugins/ after build

copy-bundled-plugins.cjs compiled and rewrote plugin backend TS in
place, copied it to dist/plugins, but never deleted the .js it had
just emitted next to the .ts sources. Those files shadowed the real
source for vitest/tsx and had import paths rewritten for the dist
layout, so tests failed with "Cannot find module" once a local build
had run. Affects docker, host-metrics and ai, not just this one.

* feat: add a permission-gated backend service registry for plugins

* feat: add a permission-gated UI action registry and action slots for plugins

Moves the terminal toolbar's hardwired AI button into a slot the ssh-terminal
plugin offers and the ai plugin fills, gated on ai.services.use.

* feat: add cross-plugin secret references gated by the provider's RBAC permission

* feat: move proxmox discovery/import/sync into a first-party plugin

* feat: move remote desktop (RDP/VNC/Telnet) into a first-party plugin

Relocates guacamole backend/frontend source and tests into
plugins/remote-desktop, following the ssh-terminal/docker pattern.

* feat: wire remote-desktop plugin into core and rename i18n keys

Repoints core consumers (dispatcher, collab, session-sharing, tab
utils) at the plugin, adds isTabTypeAvailable gating for rdp/vnc/
telnet, widens hostCapability to accept an array, and renames the
guacamole i18n namespace to remoteDesktop.

* feat: move fleets into a first-party plugin

* feat: move automations into a first-party plugin

* feat: remove legacy alert rules, superseded by automations

Alert rules already auto-migrate into automations on boot and the old
engine stands down after. Deletes the rule/firing tables, routes, UI,
and AI tools; keeps notification channels since automations still use
them. Also fixes automations' notify step, which still called the
deleted repository.

* feat: move network topology into a first-party plugin

* feat: move tailscale device discovery and settings into a plugin

Adds plugins/tailscale/ with a devices sidebar tab, admin settings
section, and re-auth dialog. Host Metrics tailscale manager card and
SSH re-auth banner parsing stay in core.

* feat: move workspaces into a first-party plugin

* feat: move web endpoint into a first-party plugin

* feat: collapse plugin runtime to one tier behind a plugin SDK

* feat: make each plugin an npm workspace built by a termix-plugin CLI

* feat: give plugins their own tables, migrations and sync entities

* feat: serve plugin http and websockets from one mount instead of ports

* feat: namespace plugin permissions and keep them valid when a plugin is off

* feat: give plugins their own settings and one settings screen

* feat: load plugin frontends at runtime and remove plugin ids from the shell

* fix: mock the ai status fetch in its activate test

* feat: add auth extension points and one ssh connect pipeline

* feat: rebuild workspaces as the reference plugin

* fix: gate second factors after SSO/LDAP behind an admin setting

* feat: convert network-topology to a full plugin (B1)

* feat: move snippets backend and tables into a plugin (B2)

* feat: point core frontend snippets pickers at the plugin (B2)

* feat: add the snippets plugin (B2)

* feat: wire ai, automations, fleets and ssh-terminal to snippets (B2)

* feat: finish the tailscale plugin, including SSH auth (B3)

* feat: finish the fleets plugin, add ctx.hosts and host-commands SDK (B4)

* chore: update proxmox and host-metrics locale files for B5

* chore: regenerate drizzle migration journals for B5

* feat: add ctx.hosts create/update to the SDK, host-metrics drops proxmox

* feat: move proxmox node stats and collectors into the proxmox plugin

* feat: drop proxmox host columns, use plugin settings instead

* feat: finish the fleets plugin, add ctx.hosts and host-commands SDK (B4)

* feat: convert file manager into a plugin

* feat: convert ssh tunnels into a plugin

* feat: finish the web-endpoint plugin, add ctx.desktop (B8)

* feat: move the terminal fully into the ssh-terminal plugin (B9)

* feat: convert tmux monitoring into a plugin (B10)

* feat: convert serial console into the serial plugin

* feat: move session sharing and collab rooms into a plugin (B12)

* feat: turn session recording into a plugin (B13)

* feat: finish the remote-desktop plugin (B14)

* feat: finish the host-metrics plugin, move host status into core (B16)

* feat: finish the docker plugin (B15)

* feat: finish the automations plugin (B17)

* feat: finish the ai plugin (B18)

* feat: finish the homepage plugin, move service links and canvas out of core (B19)

* feat: convert wake-on-lan into a plugin (B20)

* feat: convert secret-sources into a plugin (B20)

* feat: move totp and passkeys into plugins (C1)

* feat: move sso and ldap logins into plugins (C2)

* feat: move opkssh and warpgate into plugins (C3)

* feat: move step-ca into a plugin (C4)

* feat: move vault ssh signing into a plugin (C5)

* feat: move termix identity into a plugin (C6)

* feat: move acme certificate automation into a plugin (C7)

* fix: finish 2.9.0 plugin moves and get every check green

* chore: lock the plugin boundary and remove 2.9.0 leftovers

* fix: harden the plugin runtime after the 2.9.0 security review

* feat: add plugin packing, signing, pinned trust and tmxplug bundling

* test: prove 2.8 to 2.9.0 upgrade is lossless and fix what it caught

* fix: give bundled plugin backends a real require for CJS deps

* feat: improve UI loading time and jitter

* feat: show credential sharing inline in the sidebar like host sharing

* feat: tailscale add host and copy ip, fix outbound fetch hang and plugin ESM warning

* feat: unify alerts into one plugin, channels, rules and inbox

* feat: rebuild desktop sync as linked server accounts, fix packaged plugin bundles and UI scaling

* fix: set blacksmith builder cache-key to stop broken gha cache fallback

* fix: link plugin-sdk workspace before npm ci in docker deps stage

* fix: link every plugin workspace before npm ci in docker deps stage

* fix(host-metrics): exclude image and firmware filesystems (#1469)

* fix(host-metrics): exclude image and firmware filesystems

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* fix(hosts): normalize imported jump host references (#1470)

* fix(hosts): normalize imported jump host references

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* fix(ci): build plugin SDK and repair MySQL settings migration (#1471)

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* fix(file-manager): keep inline rename consistent (#1476)

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* fix(file-manager): keep inline rename consistent

* fix(dashboard): reuse translated host status labels (#1475)

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* fix(dashboard): reuse translated host status labels

* docs(api): clarify local and remote version fields (#1474)

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* docs(api): clarify local and remote version fields

* fix(file-manager): preserve selected backgrounds on hover (#1473)

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* fix(file-manager): preserve selection feedback on hover

* test(ui): await dialog focus cleanup before teardown

* fix(file-manager): restore Ctrl/Cmd+F file search (#1472)

* fix(ci): build plugin SDK before dependent checks

* fix(mysql): keep plugin settings scope indexes within limits

* test(mysql): refresh reviewed plugin upgrade SQL

* fix(file-manager): focus file search with Ctrl or Cmd F

* fix: keep rounded-full circular in production builds

* fix(file-manager): cancel uploads and stop remote writes (#1477)

* fix(file-manager): cancel uploads and stop remote writes

* test(css): exercise the configured PostCSS plugin chain

* fix(file-manager): apply compact density to directory tree (#1478)

* fix(file-manager): apply compact density to directory tree

* test(css): exercise the configured PostCSS plugin chain

* fix(file-manager): preserve font sizes in compact mode (#1480)

* fix(file-manager): preserve font sizes in compact mode

* test(css): exercise the configured PostCSS plugin chain

* fix(file-manager): prioritize file names in narrow lists (#1483)

* fix(file-manager): prioritize file names in narrow lists

* test(css): exercise the configured PostCSS plugin chain

* test(identity): preserve full Ed25519 public keys in fixtures

* test(remote-desktop): always mutate ciphertext in tamper test

* fix(remote-desktop): probe the saved host guacd endpoint (#1481)

* fix(remote-desktop): probe the saved host guacd endpoint

* test(css): exercise the configured PostCSS plugin chain

* test(identity): preserve full Ed25519 public keys in fixtures

* fix(homepage): check allowlisted private service reachability (#1479)

* fix(homepage): check allowlisted private service reachability

* test(css): exercise the configured PostCSS plugin chain

* fix(remote-desktop): stop unsolicited clipboard read prompts (#1482)

* fix(remote-desktop): read clipboard only on explicit paste

* test(css): exercise the configured PostCSS plugin chain

* test(identity): preserve full Ed25519 public keys in fixtures

* test(remote-desktop): always mutate ciphertext in tamper test

* chore: simplify plugin readmes, changelogs and manifest descriptions

* fix: keep plugins loaded after signing in from the login screen

* fix(file-manager): accept OS file drops over existing rows (#1484)

* fix(file-manager): accept OS file drops over existing rows

* test(file-manager): target the file label in drop tests

* test(css): exercise the configured PostCSS plugin chain

* test(identity): preserve full Ed25519 public keys in fixtures

* test(remote-desktop): always mutate ciphertext in tamper test

* fix(file-manager): pipeline SFTP download reads (#1485)

* feat: add plugin sdk build to beta release

* fix: make link-store secret check immune to random base64 matches

* fix(ldap): preserve the directory-provided bind DN (#1486)

* fix: compute beta changes across dev branches and move the beta tag

* chore: untrack plugin sdk ARCHITECTURE.md

* chore: remove references to plugin sdk ARCHITECTURE.md

* feat: merge host editor terminal tabs into one owned by ssh-terminal

* feat: add descriptions to plugin host enable toggles

* fix(file-manager): show download progress in file viewers (#1487)

* fix(electron): signal backend readiness over IPC (#1488)

* fix(split-screen): allow layout creation without randomUUID (#1490)

* fix(split-screen): allow layout creation without randomUUID

* test(credentials): avoid flaky Ed25519 key generation

* fix(sidebar): remeasure visible rows after density changes (#1489)

* fix(sidebar): remeasure visible rows after density changes

* test(credentials): avoid flaky Ed25519 key generation

* feat(split-screen): redesign split screen with free-form panes and pane picker

* feat(sidebar): add host click behavior setting, default to always opening a new tab

* feat(snippets): redesign panel to match the host list

* fix(session-recording): stop session logs panel from refetching in a loop

* feat(snippets): bring back sharing, target hosts and drag reorder

* feat(ssh-terminal): add toolbar position, start state, display and fade host settings

* feat(ssh-terminal): add host setting to turn off password prompt auto-fill

* fix(ai): stop streams getting cut off and keep tool steps across messages

* feat: improve quick connect system using plugin api

* fix: proxmox guest sync, startup snippet sync, drop dead cloudflare ssh transport

* feat: move terminal settings, look and ssh tools into ssh-terminal plugin

* feat: move snippets, keybinding actions and macros out of core into plugins

* feat: store rdp, vnc and telnet logins in a generic per-protocol table

* feat: type the plugin host record, move plugin strings out of core and add lint checks

* feat: replace core homepage widget registry with generic extension points

* feat: plugins only see their own host settings in the browser

* feat: harden plugin api for separate repos, signed updates and generic external login

* fix: keep plugin css below core utilities and version plugin assets by their css

* fix: load and save plugin host settings in the editor and tighten settings row spacing

* feat: redesign user host defaults system

* fix(remote-desktop): release held keys on focus loss (#1498)

* fix(session-sharing): replace local presentation after takeover (#1500)

* fix(file-manager): refresh disk usage with directory listing (#1503)

* fix(ssh-terminal): preserve input order during local echo reconciliation (#1505)

* feat(remote-desktop): expose display zoom controls for RDP (#1514)

* fix(file-manager): restore text selection and copying in Markdown previews (#1518)

* fix(sidebar): keep compact host addresses visible (#1524)

* fix(hosts): preserve plugin settings when reopening the editor (#1499)

* fix(ssh-terminal): close owner sockets when presentations unmount (#1501)

* fix(session-sharing): synchronize shared SSH terminal dimensions (#1502)

* fix(session-sharing): show participant presence in member terminals (#1504)

* fix(ai): sync provider configuration and keys across linked devices (#1506)

* feat(ssh-terminal): add a duplicate tab action (#1510)

* feat(file-manager): allow disabling move-to-trash confirmation (#1511)

* feat(file-manager): default to the remote login directory (#1512)

* feat(homepage): synchronize canvas layouts across devices (#1515)

* fix(shortcuts): prevent accidental double-Shift palette activation (#1519)

* feat(tmux-monitor): add a unified multi-host view (#1520)

* fix(electron): allow explicit quit with active connections (#1522)

* feat: reconnect all disconnected terminal tabs (#1523)

* fix(hosts): preserve recording and sharing settings in the dev editor (#1509)

* fix(database): preserve RDP domain during startup backfill (#1497)

* feat(sidebar): add keyboard type-ahead search for hosts (#1516)

* feat(automations): add per-host maintenance mode and recurring schedules (#1521)

* feat(tmux): add a per-host mouse toggle and preserve remote configuration (#1513)

* fix(session-sharing): use the linked server for desktop meetings and links (#1507)

* fix(tunnels): support TOTP for client tunnels and jump hosts (#1508)

* fix: type errors and lint failures from merged plugin prs

* feat(installer): make the Windows desktop shortcut optional (#1517)

* fix: ship the plugin sdk and serialport in desktop builds

* fix: prefer ipv4 when resolving ssh host names (#1365)

* fix: readable terminal selection with the light theme (#1319)

* fix: build desktop session share links on the linked server (#1350)

* fix: show meeting guests to members and hide the roster from guests (#1353)

* fix: reliable file manager saves with sudo prompt and no base64 guessing (#1335)

* fix: show disk usage for the mount being browsed (#1347)

* fix: load the linux tray icon reliably and log tray failures (#1332)

* fix: cover the gnome close path in the desktop quit test (#1332)

* fix: prompt for jump host TOTP in terminal, file manager and metrics (#1312)

* feat: optional auto reconnect for dropped ssh sessions (#1321)

* feat: tighter compact host rows with inline tags (#1325)

* feat: bring back the alert feed homepage widget

* feat: pick target terminals for snippets again

* feat: share button on connection tabs again

* feat: recent servers list when linking the desktop app

* feat: list the fixed app shortcuts in keyboard shortcuts

* fix: translate hardcoded toasts and drop em dashes from ui text

* fix: translate leftover hardcoded ui text

* fix: toolbar files button opens at the shell directory again

* fix: show the remote desktop note under connection origin again

* chore: openapi docs for host metrics manager routes

* chore: openapi docs for undocumented routes and fix two broken doc blocks

* fix: declare terminal.listSessions use for snippet targets

* revert: drop the alert feed widget, the notification center replaces it

* feat: restore the alert feed homepage widget

* fix: quick connect fills the host address from plugin auth editors like tailscale

* fix: docker container logs use the base background color

* chore: fix dependabot alerts and apply safe npm upgrades

* fix: proxmox stats tab reads its switch from plugin host settings

* fix: count plugin ssh logins toward host status and stop showing reachable as a warning

* fix: hide the built-in source pill in the host editor

* fix: host status shows online when the port answers and only warns on a failed login

* fix: drop the top border on the split layout menu

* fix: host defaults tabs sit where the host editor puts them and skip plugins with nothing to default

* fix: remote desktop auth method labels and notes for vnc and telnet

* fix: add description to the web endpoint enable switch

* fix: crowdin sync and pretranslate for plugin locales, run plugin tests on release

* feat: move telemetry out of core into a usage statistics plugin

* fix: recent activity card no longer cuts off host names early

* fix: remove duplicate top border on split screen menu

* fix: redesign session log player controls, fix tooltip overlap and drop dot separators

* fix: file manager and sftp text showing raw i18n keys

* fix: onboarding rerunning for existing users after upgrading

* fix: fleet detail buttons overflowing the sidebar

* fix: session log player scrolling off screen horizontally

* fix: network graph lag when adding hosts and on every render

* fix: maintenance index name, shared host read only view and badge polling

* fix: meeting tabs, workspace tab merging, rail panels as tabs and general ui lag

* chore: update release notes

* fix: remote desktop tabs reconnecting on every tab switch

* fix: build plugin sdk before linting in release workflow

* chore: lint, format, and bump version to 2.9.0

* chore: skip crowdin pre-translate in release for now

* chore: sync Crowdin translations for 2.9.0

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Koi <38512047+datlt4@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
2026-10-01 16:20:16 -05:00

2082 lines
124 KiB
JSON
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"connection": {
"retryingIn": "Nouvelle tentative dans {{seconds}}s ({{attempt}}/{{max}})",
"retryingNow": "Nouvelle tentative... ({{attempt}}/{{max}})",
"disconnected": "Impossible de se connecter",
"reconnect": "Reconnect"
},
"credentials": {
"folders": "Dossiers",
"folder": "Dossier",
"password": "Mot de passe",
"key": "Clé",
"sshPrivateKey": "Clé privée SSH",
"upload": "Téléverser",
"keyPassword": "Mot de passe de la clé",
"sshKey": "Clé SSH",
"uploadPrivateKeyFile": "Téléverser le fichier de clé privée",
"searchCredentials": "Rechercher des identifiants...",
"addCredential": "Ajouter un identifiant",
"caCertificate": "Certificat CA (-cert.pub)",
"caCertificateDescription": "Facultatif : Téléversez ou collez le fichier de certificat signé par une CA (par ex. id_ed25519-cert.pub). Requis lorsque votre serveur SSH utilise une autorisation basée sur des certificats.",
"uploadCertFile": "Téléverser le fichier -cert.pub",
"clearCert": "Effacer",
"certLoaded": "Certificat chargé",
"certPublicKeyLabel": "Certificat CA",
"certTypeLabel": "Type de certificat",
"pasteOrUploadCert": "Collez ou téléversez un certificat -cert.pub...",
"hasCaCert": "Avec certificat CA",
"noCaCert": "Aucun certificat CA",
"noPublicKeyAvailable": "Aucune clé publique disponible. Ouvrez d’abord l’éditeur d’identifiants.",
"deployCommandCopied": "Commande de déploiement copiée",
"sortCredentials": "Trier les identifiants",
"sortDefault": "Ordre par défaut",
"sortNameAsc": "Nom (A → Z)",
"sortNameDesc": "Nom (Z → A)",
"sortUsernameAsc": "Nom d’utilisateur (A → Z)",
"sortUsernameDesc": "Nom d’utilisateur (Z → A)",
"filterCredentials": "Filtrer les identifiants",
"filterClearAll": "Effacer les filtres",
"filterTypeGroup": "Type",
"filterTypePassword": "Mot de passe",
"filterTypeKey": "Clé SSH",
"filterTagsGroup": "Étiquettes",
"copyDeployCommand": "Copier la commande de déploiement",
"cloneCredentialAction": "Cloner les informations d'identification",
"clonedCredential": "Cloné {{name}}",
"clonedCredentialName": "{{name}} (copie)",
"shareCredentialAction": "Partager les identifiants",
"sharedBadge": "commun",
"sharedBy": "Partagé par {{owner}}",
"share": {
"title": "Partager \"{{name}}\"",
"description": "Les destinataires reçoivent leur propre copie chiffrée des secrets. Celle-ci est mise à jour à chaque modification des identifiants et supprimée lorsque le partage est révoqué.",
"levelUse": "Utiliser",
"levelManage": "Gérer",
"levelUseDesc": "Utilisation : associez les informations d’identification aux hôtes et connectez-vous. Le secret lui-même reste caché.",
"levelManageDesc": "Gérer : vous pouvez également modifier les informations d’identification et les partager avec d’autres personnes.",
"noAccessEntries": "Ce justificatif n'a pas encore été partagé.",
"accessRevoked": "Accès révoqué",
"shared": "Identifiants partagés"
},
"deleteCredentialAction": "Supprimer les identifiants",
"editCredentialAction": "Modifier les identifiants",
"failedToCloneCredential": "Échec du clonage des identifiants",
"failedToDeleteCredential": "Échec de la suppression des identifiants",
"keyBadge": "CLÉ",
"passwordBadge": "PWD",
"renameFolder": "Renommer le dossier",
"deleteFolder": "Supprimer le dossier",
"deleteCredentialConfirm": "Supprimer les informations d'identification \"{{name}}\"?",
"deletedCredential": "Supprimé {{name}}",
"deploySSHKeyTitle": "Déployer la clé sur l'hôte",
"loadingCredentials": "Chargement des informations d'identification...",
"noCredentialsFound": "Aucune authentification trouvée",
"noCredentialsMatchSearch": "Aucun identifiant ne correspond à votre recherche",
"addCredentialBtn": "Ajouter un identifiant",
"failedToReorder": "Échec de la commande des identifiants",
"failedToMoveCredential": "Échec du transfert des identifiants",
"sortManual": "Manuel (glisser pour réorganiser)",
"customizeSidebar": "Personnaliser la barre latérale",
"customizeSidebarDescription": "Choisissez l'apparence et le comportement de la liste des identifiants.",
"customizeDensityTitle": "Densité",
"densityComfortableDesc": "Un justificatif d'identité par rangée, avec des détails supplémentaires.",
"densityCompactDesc": "Une ligne par justificatif, pour les listes plus longues.",
"displayDensityComfortable": "Confortable",
"displayDensityCompact": "Compact",
"customizeBehaviorTitle": "Comportement",
"showCredentialTags": "Afficher les balises",
"showCredentialTagsDesc": "Afficher les balises dans la liste d'identification",
"actionsVisibility": "Actions d'identification",
"actionsVisibilityDesc": "Lorsque les boutons de connexion et de gestion de chaque identifiant apparaissent",
"actionsAlways": "Toujours visible",
"actionsOnly": "Connexion uniquement, le reste se fait en cliquant",
"actionsHover": "Afficher au survol",
"actionsClick": "Afficher au clic",
"customizeSortHint": "L'ordre de tri se trouve dans le menu de tri de la barre d'outils.",
"expandActions": "Développer les actions",
"collapseActions": "Actions d'effondrement",
"backToHosts": "Retour à la liste des hôtes",
"backToCredentials": "Retour aux identifiants",
"searchCredentialsPlaceholder": "Identifiants de recherche…",
"deployDialogTitle": "Déployer la clé SSH",
"deployDialogDesc": "Déployez {{name}} sur les clés autorisées d'un hôte.",
"targetHostLabel": "Hôte cible",
"selectHostOption": "Sélectionnez un hôte...",
"deployingBtn": "Déploiement...",
"deployBtn": "Déployer",
"keyDeployedSuccess": "Clé déployée avec succès",
"failedToDeployKey": "Échec du déploiement de la clé",
"folderRenamedTo": "Dossier renommé en \"{{name}}\"",
"failedToRenameFolder": "Impossible de renommer le dossier",
"arrangeUnlockedSwitchedToManual": "Passage au tri manuel pour que votre ordre soit conservé.",
"arrangeUnlocked": "Déverrouillez et faites glisser pour réorganiser"
},
"versionCheck": {
"updateLinkLabel": "Mise à jour disponible. Consultez les notes de version sur GitHub."
},
"common": {
"close": "Fermer",
"minimize": "Réduire",
"online": "En ligne",
"offline": "Hors ligne",
"signInFailed": "Échec de la connexion",
"unknown": "Inconnu",
"continue": "Continuer",
"maintenance": "Maintenance",
"degraded": "Dégradé",
"error": "Erreur",
"warning": "Avertissement",
"unsavedChanges": "Modifications non enregistrées",
"dismiss": "Ignorer",
"more": "Plus",
"loading": "Chargement...",
"host": "Hôte",
"selectHost": "Sélectionner un hôte...",
"noHostConfigured": "Aucun hôte configuré",
"optional": "Facultatif",
"connect": "Connecter",
"copied": "Copié",
"connecting": "Connexion en cours...",
"updateAvailable": "Mise à jour disponible",
"appName": "Termix",
"openInNewTab": "Ouvrir dans un nouvel onglet",
"noReleases": "Aucune version disponible",
"updatesAndReleases": "Mises à jour et versions",
"newVersionAvailable": "Une nouvelle version ({{version}}) est disponible.",
"failedToFetchUpdateInfo": "Échec de la récupération des informations de mise à jour",
"preRelease": "Préversion",
"noReleasesFound": "Aucune version trouvée.",
"cancel": "Annuler",
"username": "Nom d'utilisateur",
"login": "Se connecter",
"logout": "Se déconnecter",
"register": "S'inscrire",
"password": "Mot de passe",
"confirmPassword": "Confirmer le mot de passe",
"back": "Retour",
"save": "Enregistrer",
"saving": "Enregistrement...",
"delete": "Supprimer",
"rename": "Renommer",
"edit": "Modifier",
"confirm": "Confirmer",
"no": "Non",
"or": "OU",
"next": "Suivant",
"previous": "Précédent",
"refresh": "Actualiser",
"language": "Langue",
"checking": "Vérification...",
"checkingDatabase": "Vérification de la connexion à la base de données...",
"checkingAuthentication": "Vérification de l'authentification...",
"backendReconnected": "Connexion au serveur rétablie",
"connectionDegraded": "Connexion au serveur perdue, récupération en cours…",
"reload": "Recharger",
"create": "Créer",
"copy": "Copier",
"copyFailed": "Échec de la copie dans le presse-papiers.",
"maximize": "Agrandir",
"restore": "Restaurer",
"of": "sur",
"saved": "Enregistré",
"deleted": "Supprimé",
"deleteFailed": "Échec de la suppression",
"saveFailed": "Échec de l'enregistrement",
"required": "Obligatoire",
"remove": "Retirer",
"add": "Ajouter",
"update": "Mettre à jour",
"noResults": "Aucun résultat trouvé"
},
"onboarding": {
"stepCounter": "Étape {{current}} de {{total}}",
"skip": "Passer la configuration",
"next": "Suivant",
"finish": "Commencer",
"welcomeTitle": "Bienvenue sur Termix",
"welcomeIntro": "Termix vous permet de gérer vos serveurs depuis une interface unique. L'installation ne prend qu'une minute et rien n'est définitif.",
"welcome_hosts": "Sauvegardez vos serveurs",
"welcome_hosts_desc": "Conservez toutes les machines que vous gérez dans une seule liste.",
"welcome_terminal": "Connectez-vous instantanément",
"welcome_terminal_desc": "Ouvrez un terminal dans un onglet, sans client SSH séparé.",
"welcome_files": "Parcourir et modifier les fichiers",
"welcome_files_desc": "Téléverser, télécharger et modifier des fichiers distants.",
"presetTitle": "Quelle quantité d'images souhaitez-vous voir à l'écran ?",
"presetIntro": "Termix peut être aussi simple ou aussi détaillé que vous le souhaitez. Choisissez un point de départ.",
"presetChangeLater": "Vous pouvez changer de préréglage ou modifier n'importe quel paramètre ultérieurement dans les Paramètres, sous Interface.",
"appearanceTitle": "Appropriez-vous-le",
"appearanceIntro": "Choisissez un thème, une couleur d'accentuation et votre langue. Vous pourrez modifier ces trois éléments ultérieurement dans les paramètres.",
"featuresTitle": "Quelles sont les autres activités de Termix ?",
"featuresIntro": "Chaque serveur que vous sauvegardez peut être ouvert dans plusieurs navigateurs, et pas seulement dans un terminal. Voici ce qui se cache derrière les icônes à gauche.",
"featuresRailHint": "Vous n'en avez pas besoin ? Masquez n'importe quelle icône de la barre latérale dans les Paramètres, sous Navigation.",
"workflowTitle": "Déplacez-vous plus vite",
"workflowIntro": "Quelques habitudes qui vous feront gagner un temps précieux une fois que vous aurez plusieurs serveurs.",
"workflow_palette": "Palette de commandes",
"workflow_palette_desc": "Accédez directement à n'importe quel serveur ou action en saisissant du texte. Appuyez deux fois sur Maj pour l'ouvrir.",
"workflow_split": "Écran partagé",
"workflow_split_desc": "Affichez plusieurs onglets côte à côte, par exemple pour consulter les journaux pendant que vous travaillez.",
"workflow_dock": "Panneau latéral",
"workflow_dock_desc": "Cliquez avec le bouton du milieu ou avec le bouton droit sur une icône de la barre latérale pour l'ouvrir dans un onglet ou l'épingler à droite.",
"securityTitle": "Protéger vos identifiants de connexion",
"securityIntro": "Termix stocke vos identifiants, cela vaut donc la peine de prendre une minute pour voir comment cela fonctionne.",
"security_credentials": "Identifiants réutilisables",
"security_credentials_desc": "Enregistrez une clé ou un mot de passe une seule fois et associez-le à autant de serveurs que vous le souhaitez.",
"security_twofa": "double authentification et clés d'accès",
"security_twofa_desc": "Ajoutez un code TOTP ou une clé d'accès à votre compte dans les Paramètres, sous Sécurité.",
"security_identity": "Identifiant Termix",
"security_identity_desc": "Émettez des certificats SSH à durée de vie courte au lieu de copier les clés sur chaque serveur.",
"security_sharing": "Partage",
"security_sharing_desc": "Autoriser d'autres utilisateurs à accéder à un serveur sans leur communiquer le mot de passe.",
"securityEncryptionNote": "Les identifiants sont chiffrés avant d'être stockés et ne sont déchiffrés que lorsqu'une connexion en a besoin.",
"doneTitle": "Tout est prêt",
"doneHeading": "Installation terminée",
"doneDesc": "Sélectionnez un serveur dans la barre latérale pour ouvrir un terminal, parcourir ses fichiers ou consulter ses statistiques.",
"done_settings": "Vous pouvez modifier quoi que ce soit plus tard.",
"done_settings_desc": "Les thèmes, la densité de la mise en page et les icônes affichées sont tous gérés dans les Paramètres.",
"done_rerun": "Vous voulez recommencer ?",
"done_rerun_desc": "Ouvrez les Paramètres, accédez à Interface et choisissez Exécuter le programme d'installation pour suivre à nouveau ces étapes.",
"done_desktop": "Application de bureau",
"done_desktop_desc": "Termix fonctionne comme une application de bureau sous Windows, macOS et Linux.",
"done_desktop_link": "Téléchargez l'application de bureau",
"done_mobile": "application mobile",
"done_mobile_desc": "Emportez vos serveurs avec vous sur iOS et Android.",
"done_mobile_link": "Téléchargez l'application mobile",
"done_docs": "Documentation complète",
"done_docs_desc": "Des guides pour chaque fonctionnalité, y compris celles qui ne sont pas abordées ici.",
"done_docs_link": "Ouvrir les documents",
"done_cli": "Outil en ligne de commande",
"done_cli_desc": "Gérez vos serveurs depuis un terminal et utilisez Termix dans vos propres scripts.",
"done_cli_link": "Ouvrir la documentation de l'interface de ligne de commande",
"desktopTitle": "Comment souhaitez-vous utiliser Termix ?",
"desktopBody": "Vous pouvez modifier cela à tout moment depuis la section Sync dans la barre latérale.",
"desktopLocalTitle": "Sur cet appareil uniquement",
"desktopLocalBody": "Tout est stocké ici. Rien à installer.",
"desktopLinkTitle": "Avec mon serveur Termix",
"desktopLinkBody": "Connectez-vous à votre serveur pour utiliser les mêmes hôtes et paramètres sur tous vos appareils.",
"desktopLinked": "Lié à {{server}}"
},
"nav": {
"home": "Accueil",
"terminal": "Terminal",
"fileManager": "Gestionnaire de fichiers",
"serverStats": "Métriques de l'hôte",
"admin": "Administration",
"userProfile": "Profil utilisateur",
"confirmClose": "Fermer cette session active ?",
"close": "Fermer",
"cancel": "Annuler",
"sshManager": "Gestionnaire SSH",
"hostTabTitle": "{{username}}@{{ip}}:{{port}}",
"copyPassword": "Copier le mot de passe",
"copySudoPassword": "Copier le mot de passe sudo",
"passwordCopied": "Mot de passe copié dans le presse-papiers",
"noPasswordAvailable": "Aucun mot de passe disponible",
"failedToCopyPassword": "Échec de la copie du mot de passe",
"refreshTab": "Actualiser la connexion",
"renameTab": "Renommer l'onglet",
"dashboard": "Tableau de bord",
"quickConnect": "Connexion rapide",
"openAsTabHint": "Ctrl+clic ou clic du milieu pour ouvrir dans un onglet",
"openAsTab": "Ouvrir comme onglet",
"openInRightDock": "Ouvrir dans le dock de droite",
"closeRightDock": "Quai de droite à proximité",
"toggleRightDock": "Basculer le dock droit",
"multiPanelHintTitle": "Travailler avec plusieurs panneaux",
"multiPanelHintBody": "Gardez ce panneau ouvert même si la barre latérale est utilisée pour autre chose. Deux façons de le déplacer :",
"multiPanelHintTabHow": "Cliquez sur son icône de rail en maintenant la touche Ctrl enfoncée, ou utilisez le bouton dans cet en-tête.",
"multiPanelHintDockHow": "Faites un clic droit sur son icône de rail, ou utilisez l'icône de panneau dans la barre d'onglets.",
"sidebarSettings": "Paramètres de la barre latérale...",
"hosts": "Hôtes",
"hostManager": "Gestionnaire d'hôtes",
"credentials": "Identifiants",
"connections": "Connexions",
"keepSideMenuOpen": "Garder le menu ouvert",
"collapseSideMenu": "Réduire le menu",
"roleAdministrator": "Administrateur",
"roleUser": "Utilisateur",
"sync": "Synchronisation",
"reconnectDisconnectedTerminals": "Rebranchez tous les terminaux déconnectés.",
"reconnectingTerminals_one": "Reconnexion au terminal {{count}}",
"reconnectingTerminals_other": "Reconnexion des terminaux {{count}}",
"noDisconnectedTerminals": "Aucun terminal déconnecté n'est prêt à être reconnecté.",
"reconnectTerminalsFailed_one": "Impossible de démarrer la reconnexion au terminal {{count}}",
"reconnectTerminalsFailed_other": "Impossible de démarrer la reconnexion des terminaux {{count}}",
"fullscreenUnsupported": "Le mode plein écran n'est pas pris en charge par ce navigateur.",
"fullscreenFailed": "Impossible de passer en mode plein écran",
"resetSidebarWidth": "Réinitialiser la largeur",
"collapseSidebar": "Réduire la barre latérale",
"openSidebar": "Ouvrir la barre latérale",
"confirmCloseHost": "Fermer {{host}}?",
"enterFullscreen": "Passer en plein écran (Ctrl+Maj+F)",
"exitFullscreen": "Quitter le mode plein écran (Ctrl+Maj+F)"
},
"hosts": {
"hosts": "Hôtes",
"noHosts": "Aucun hôte SSH",
"retry": "Réessayer",
"refresh": "Actualiser",
"optional": "Optionnel",
"downloadSample": "Télécharger un exemple",
"failedToDeleteHost": "Échec de la suppression de {{name}}",
"importSkipExisting": "Importer (ignorer les existants)",
"importSSHConfig": "Importer depuis la configuration SSH",
"connectionDetails": "Détails de la connexion",
"ssh": "SSH",
"telnet": "Telnet",
"port": "Port",
"username": "Nom d'utilisateur",
"folder": "Dossier",
"tags": "Étiquettes",
"pin": "Épingler",
"addHost": "Ajouter un hôte",
"editHost": "Modifier l'hôte",
"cloneHost": "Dupliquer l'hôte",
"defaultPath": "Chemin par défaut",
"connection": "Connexion",
"upload": "Téléverser",
"authentication": "Authentification",
"password": "Mot de passe",
"passwordSaved": "Mot de passe enregistré, saisissez-le pour le modifier",
"key": "Clé",
"credential": "Identifiant",
"sshPrivateKey": "Clé privée SSH",
"keyType": "Type de clé",
"uploadFile": "Téléverser un fichier",
"tabGeneral": "Général",
"tabSsh": "SSH",
"tabStats": "Métriques de l'hôte",
"tabSharing": "Partage",
"tabAuthentication": "Authentification",
"terminal": "Terminal",
"tunnel": "Tunnel",
"serverStats": "Métriques de l'hôte",
"status": {
"available": "Disponible",
"reachable": "J'ai réussi, mais la dernière connexion a échoué.",
"offline": "Hors ligne",
"monitoringDisabled": "Surveillance désactivée",
"label": "Statut"
},
"folderRenamed": "Dossier « {{oldName}} » renommé en « {{newName}} » avec succès",
"failedToRenameFolder": "Échec du renommage du dossier",
"unsavedChangesDescription": "Vos modifications d'hôte n'ont pas été enregistrées. Les annuler ?",
"keepEditing": "Continuez à modifier",
"discardChanges": "Rejeter les modifications",
"movedToFolder": "{{count}} hôte(s) déplacé(s) vers \"{{folder}}\"",
"editHostTooltip": "Modifier l'hôte",
"behavior": "Comportement",
"scrollbackBuffer": "Tampon de défilement arrière",
"sshAgentForwarding": "Transfert d'agent SSH",
"selectSnippet": "Sélectionner un extrait",
"forceKeyboardInteractive": "Forcer Keyboard-Interactive",
"overrideCredentialUsername": "Remplacer le nom d'utilisateur des identifiants",
"overrideCredentialUsernameDesc": "Utiliser le nom d'utilisateur spécifié ci-dessus au lieu de celui des identifiants",
"oidcUsernameHint": "Utilisez $external.username pour renseigner le nom avec lequel vous vous êtes connecté via SSO ou LDAP.",
"jumpHostChain": "Chaîne de Jump Hosts",
"portKnocking": "Port Knocking",
"addKnock": "Ajouter un port",
"addProxyNode": "Ajouter un nœud",
"proxyNode": "Nœud proxy",
"proxyType": "Type de proxy",
"sudoPassword": "Mot de passe sudo",
"keepaliveInterval": "Intervalle keepalive (ms)",
"environmentVariables": "Variables d'environnement",
"addVariable": "Ajouter une variable",
"docker": "Docker",
"failedToConnect": "Échec de la connexion à la console",
"connect": "Connecter",
"disconnect": "Déconnecter",
"start": "Démarrer",
"enableStatusCheck": "Activer la vérification de l'état",
"enableMetrics": "Activer les métriques",
"bulkUpdateFailed": "Échec de la mise à jour groupée",
"selectAll": "Tout sélectionner",
"deselectAll": "Tout désélectionner",
"protocols": "Protocoles",
"secureShell": "Secure Shell",
"addressIp": "Adresse / IP",
"friendlyName": "Nom convivial",
"folderAndAdvanced": "Dossier et Avancé",
"showAdvancedSettings": "Afficher les paramètres avancés",
"hideAdvancedSettings": "Masquer les paramètres avancés",
"privateNotes": "Notes privées",
"privateNotesPlaceholder": "Détails concernant ce serveur…",
"pinToTop": "Épingler en haut",
"pinToTopDesc": "Toujours afficher cet hôte en haut de la liste",
"portKnockingSequence": "Séquence de Port Knocking",
"addKnockBtn": "Ajouter un knock",
"noPortKnocking": "Aucun port knocking configuré.",
"knockPort": "Port de knock",
"protocol": "Protocole",
"delayAfterMs": "Délai après (ms)",
"useSocks5Proxy": "Utiliser un proxy SOCKS5",
"useSocks5ProxyDesc": "Acheminer la connexion via un serveur proxy",
"connectionOrigin": "Origine de la connexion",
"connectionOriginDesc": "Origine de la connexion de cet hôte. Remplace la valeur par défaut globale de l'application de bureau.",
"connectionOriginDefault": "Utiliser la valeur par défaut",
"connectionOriginLocal": "Cet appareil (réseau local)",
"connectionOriginRemote": "Serveur distant",
"proxyHost": "Hôte proxy",
"proxyPort": "Port proxy",
"proxyUsername": "Nom d'utilisateur proxy",
"proxyPassword": "Mot de passe proxy",
"proxySingleMode": "Proxy unique",
"proxyChainMode": "Chaîne de proxy",
"you": "Vous",
"jumpHostChainLabel": "Chaîne de rebonds",
"addJumpBtn": "Ajouter un rebond",
"noJumpHosts": "Aucun hôte de rebond configuré.",
"selectAServer": "Sélectionner un serveur...",
"sshPort": "Port SSH",
"authMethod": "Méthode d'authentification",
"authenticationMethod": "Méthode d'authentification",
"authenticationMethodDesc": "Sélectionnez la méthode que Termix utilisera pour authentifier cette connexion SSH. Les autres méthodes ne seront pas essayées automatiquement.",
"storedCredential": "Identifiant enregistré",
"selectACredential": "Sélectionner un identifiant...",
"keyTypeLabel": "Type de clé",
"keyTypeAuto": "Détection automatique",
"keyPasteTab": "Coller",
"keyUploadTab": "Importer",
"keyFileLoaded": "Fichier de clé chargé",
"keyUploadClick": "Cliquer pour importer .pem / .key / .ppk",
"clearKey": "Effacer la clé",
"keySaved": "Clé SSH enregistrée",
"keyReplaceNotice": "Coller une nouvelle clé ci-dessous pour la remplacer",
"keyPassphraseSaved": "Phrase secrète enregistrée, saisissez pour modifier",
"replaceKey": "Remplacer la clé",
"docsLink": "Voir la documentation",
"agentLabel": "Agent SSH",
"agentDesc": "Authentifiez-vous en utilisant un agent SSH exécuté sur le serveur Termix (Bitwarden, 1Password, gpg-agent, KeeAgent, ssh-agent). L'agent doit être en cours d'exécution sur la machine où Termix est hébergé.",
"agentAuthenticationDesc": "Utilisez les clés d'un agent SSH pour authentifier cette connexion. Laissez le chemin du socket vide pour utiliser SSH_AUTH_SOCK.",
"agentSocketPathLabel": "Chemin du socket de l'agent",
"agentSocketPathPlaceholder": "Laisser vide pour utiliser SSH_AUTH_SOCK",
"agentSocketPathHint": "Laisser vide pour détecter automatiquement à partir de la variable d'environnement SSH_AUTH_SOCK, ou saisir un chemin de socket personnalisé (ex. /run/user/1000/gnupg/S.gpg-agent.ssh).",
"agentIdentityLabel": "Identité de l'agent (clé publique)",
"agentIdentityPlaceholder": "Laisser vide pour essayer toutes les clés de l'agent",
"agentIdentityHint": "Collez une clé publique (par exemple, ssh-ed25519 AAAA...) pour que seule cette clé soit autorisée par l'agent. Cette opération est recommandée lorsque l'agent détient de nombreuses clés, afin d'éviter de dépasser le nombre maximal de tentatives d'authentification (MaxAuthTries) du serveur.",
"shareSshAuthLabel": "Authentification SSH partagée",
"shareSshAuthDesc": "Fournissez aux destinataires des copies chiffrées de l'authentification SSH de cet hôte. Les informations d'identification personnelles du destinataire restent prioritaires.",
"forceKeyboardInteractiveLabel": "Forcer l’interaction clavier",
"forceKeyboardInteractiveShortDesc": "Forcer la saisie manuelle du mot de passe même si des clés sont présentes",
"allowLegacyAlgorithmsLabel": "Autoriser les algorithmes obsolètes",
"allowLegacyAlgorithmsDesc": "Activer les algorithmes SSH obsolètes (ssh-dss, ssh-rsa, diffie-hellman-group1-sha1, hmac-md5, 3des-cbc) pour les connexions à d’anciens appareils ne pouvant être mis à niveau.",
"insecure": "Non sécurisé",
"syntaxHighlightingCategories": "Catégories de coloration",
"syntaxHighlightingCategoriesDesc": "Sélectionnez les types de contenu à coloriser",
"sshAgentForwardingLabel": "Transfert d'agent SSH",
"sshAgentForwardingShortDesc": "Autorisez cet hôte distant à utiliser votre agent SSH local pour les connexions ultérieures. Ceci n'est pas nécessaire pour l'authentification de l'agent.",
"sudoPasswordAutoFillShortDesc": "Fournir automatiquement le mot de passe sudo lorsqu'il est demandé",
"sudoPasswordLabel": "Mot de passe sudo",
"sudoPasswordSaved": "Mot de passe enregistré, saisissez-le pour le modifier",
"environmentVariablesLabel": "Variables d'environnement",
"addVariableBtn": "Ajouter une variable",
"noEnvVars": "Aucune variable d'environnement configurée.",
"keepaliveIntervalLabel": "Intervalle de keepalive (secondes)",
"maxKeepaliveMisses": "Nombre maximal d'échecs de keepalive",
"sameHost": "Cet hôte (tunnel direct)",
"statusChecksLabel": "Vérifications d'état",
"enableStatusChecks": "Activer les vérifications d'état",
"enableStatusChecksDesc": "Envoyer périodiquement un ping à cet hôte pour vérifier sa disponibilité",
"useGlobalInterval": "Utiliser l'intervalle global",
"useGlobalIntervalDesc": "Remplacer par l'intervalle de vérification d'état défini à l'échelle du serveur",
"checkIntervalS": "Intervalle de vérification (s)",
"checkIntervalDesc": "Secondes entre chaque ping de connectivité",
"cpuUsageLabel": "Utilisation du CPU",
"cpuUsageDesc": "Pourcentage CPU, moyennes de charge, graphique sparkline",
"memoryLabel": "Utilisation de la mémoire",
"memoryDesc": "Utilisation de la RAM, swap, cache",
"storageLabel": "Utilisation du disque",
"storageDesc": "Utilisation du disque par point de montage",
"networkLabel": "Interfaces réseau",
"networkDesc": "Liste des interfaces et bande passante",
"uptimeLabel": "Durée de fonctionnement",
"uptimeDesc": "Temps de fonctionnement et heure de démarrage",
"systemInfoLabel": "Informations système",
"systemInfoDesc": "OS, noyau, nom d'hôte, architecture",
"recentLoginsLabel": "Connexions récentes",
"recentLoginsDesc": "Événements de connexion réussis et échoués",
"topProcessesLabel": "Top processus",
"topProcessesDesc": "PID, CPU%, MEM%, commande",
"listeningPortsLabel": "Ports en écoute",
"listeningPortsDesc": "Ports ouverts avec processus et état",
"firewallLabel": "Pare-feu",
"firewallDesc": "État du pare-feu, AppArmor, SELinux",
"hostSharedSuccessfully": "Hôte partagé avec succès",
"failedToShareHost": "Échec du partage de l'hôte",
"accessRevoked": "Accès révoqué",
"failedToRevokeAccess": "Échec de la révocation de l'accès",
"cancelBtn": "Annuler",
"savingBtn": "Enregistrement...",
"addHostBtn": "Ajouter un hôte",
"hostUpdated": "Hôte mis à jour",
"hostCreated": "Hôte créé",
"failedToSave": "Échec de l'enregistrement de l'hôte",
"credentialUpdated": "Identifiant mis à jour",
"credentialCreated": "Identifiant créé",
"failedToSaveCredential": "Échec de l'enregistrement de l'identifiant",
"credentialNameRequired": "Veuillez saisir un nom pour l'identifiant",
"credentialAuthRequired": "Ajoutez un mot de passe, une clé SSH, ou les deux",
"createCredentialFromHostBtn": "Créer un identifiant",
"createCredentialFromHostTitle": "Créer des informations d'identification à partir de l'hôte",
"createCredentialFromHostDesc": "Créez une entrée d'identification réutilisable et partageable, préremplie avec le nom d'utilisateur, le mot de passe et/ou la clé SSH actuels de cet hôte.",
"backToHosts": "Retour aux hôtes",
"pinned": "Épinglés",
"noHostsFound": "Aucun hôte trouvé",
"tryDifferentTerm": "Essayez un autre terme",
"addFirstHost": "Ajoutez votre premier hôte pour commencer",
"noCredentialsFound": "Aucun identifiant trouvé",
"addCredentialBtn": "Ajouter un identifiant",
"updateCredentialBtn": "Mettre à jour l'identifiant",
"editCredentialAction": "Modifier les identifiants",
"backToHost": "Retour à l'hôte",
"saveCredentialAsNewBtn": "Enregistrer comme nouveau",
"saveCredentialAsNewDesc": "Crée une nouvelle authentification avec ces modifications et l'attribue à cet hôte. L'authentification d'origine reste inchangée.",
"credentialSavedAsNew": "Enregistré comme nouvelle authentification",
"failedToSaveCredentialAsNew": "Impossible d'enregistrer en tant que nouvelle information d'identification",
"features": "Fonctionnalités",
"noFolder": "(Aucun dossier)",
"deleteSelected": "Supprimer",
"exitSelection": "Quitter la sélection",
"importSkip": "Importer (ignorer existants)",
"importOverwrite": "Importer (remplacer)",
"collapseBtn": "Réduire",
"importExportBtn": "Importer / Exporter",
"hostStatusesRefreshed": "Statuts des hôtes actualisés",
"failedToRefreshHosts": "Impossible d'actualiser les hôtes",
"movedHostTo": "{{host}} déplacé vers « {{folder}} »",
"failedToMoveHost": "Impossible de déplacer l'hôte",
"deletedFolder": "Dossier « {{name}} » supprimé",
"failedToDeleteFolder": "Impossible de supprimer le dossier",
"deleteAllInFolder": "Supprimer tous les hôtes dans « {{name}} » ? Cette action est irréversible.",
"folderPickerPlaceholder": "Aucun dossier",
"folderPickerSearch": "Rechercher ou créer (utilisez / pour les sous-dossiers)...",
"folderPickerNone": "Aucun dossier",
"folderPickerCreate": "Créer « {{path}} »",
"folderPickerEmpty": "Aucun dossier correspondant",
"parentHost": "Hôte parent",
"useFolderInstead": "Utilisez plutôt un dossier",
"useParentHostInstead": "Utilisez plutôt l'hôte parent",
"parentHostPickerPlaceholder": "Aucun hôte parent",
"parentHostPickerSearch": "Rechercher des hôtes...",
"parentHostPickerNone": "Aucun hôte parent",
"parentHostPickerEmpty": "Aucun hôte correspondant",
"collapseSubHosts": "Effondrement des sous-hôtes",
"expandSubHosts": "Développer les sous-hôtes",
"cannotNestUnderDescendant": "Impossible d'imbriquer un hôte sous son propre sous-hôte.",
"movedToParent": "Déplacé {{count}} hôte(s) sous \"{{parent}}\"",
"newFolder": "Nouveau dossier",
"createFolderTitle": "Créer un dossier",
"editFolderTitle": "Modifier le dossier",
"folderDialogDescription": "Choisissez un nom, une couleur et une icône. Utilisez / pour imbriquer des dossiers.",
"folderNameLabel": "Nom du dossier",
"folderNamePlaceholder": "Exemple : Production/Web",
"folderNestingHint": "Utilisez / pour séparer les niveaux et créer des dossiers imbriqués.",
"folderNameDuplicate": "Un dossier portant ce nom existe déjà ici.",
"folderColor": "Couleur",
"folderIcon": "Icône",
"folderCredential": "Attestation",
"folderCredentialNone": "Aucun identifiant attribué",
"folderCredentialHint": "Les hôtes de ce dossier qui utilisent l'authentification « Informations d'identification enregistrées » sans avoir sélectionné leurs propres informations d'identification hériteront de celles-ci.",
"folderPreview": "Aperçu",
"folderNameFallback": "Dossier sans titre",
"createFolderButton": "Créer un dossier",
"saveFolderButton": "Enregistrer le dossier",
"cancel": "Annuler",
"iconSearchPlaceholder": "Rechercher des icônes...",
"openAllSessions": "Ouvrir toutes les sessions",
"editFolder": "Modifier le dossier",
"deleteFolder": "Supprimer le dossier",
"selectFolder": "Sélectionnez tous les hôtes du dossier",
"deselectFolder": "Désélectionnez tous les hôtes du dossier",
"folderSaved": "Dossier enregistré",
"failedToSaveFolder": "Impossible d'enregistrer le dossier",
"folderDeleted": "Dossier \"{{name}}\" supprimé",
"deleteFolderConfirm": "Supprimer \"{{name}}\" et ses {{count}} hôte(s) ? Cette action est irréversible.",
"failedToMoveHosts": "Impossible de déplacer les hôtes",
"failedToReorder": "Impossible de repasser commande",
"expandAll": "Développer tous les dossiers",
"collapseAll": "Réduire tous les dossiers",
"moreActions": "Plus",
"groupBy": "Regrouper par",
"GroupByFolder": "Dossier",
"GroupByTag": "Tag",
"GroupByStatus": "Statut",
"GroupByProtocol": "Protocole",
"GroupByAuth": "Type d'authentification",
"groupUngrouped": "Sans groupe",
"customizeSidebar": "Personnaliser la barre latérale",
"customizeSidebarDescription": "Choisissez l'apparence et le comportement de la liste des hôtes.",
"customizeDensityTitle": "Densité",
"customizeBehaviorTitle": "Comportement",
"customizeSortHint": "L'ordre de tri et le regroupement se trouvent dans les menus de tri et de regroupement de la barre d'outils.",
"densityComfortableDesc": "Plus de détails par hôte : adresse, étiquettes et utilisation des ressources.",
"densityCompactDesc": "Une ligne par hôte, pour les listes plus longues.",
"display": "Afficher",
"displayDensity": "Densité",
"displayDensityComfortable": "Confortable",
"displayDensityCompact": "Compact",
"displayShowTags": "Afficher les étiquettes",
"displayTrayOnClick": "Ouvrir les actions au clic (au lieu du survol)",
"actionsVisibility": "Affichage des actions de l'hôte",
"actionsVisibilityDesc": "Choisissez le moment où les actions de l'hôte s'affichent. Sélectionnez « cliquer » pour rétablir le comportement précédent (cliquer pour développer).",
"actionsAlways": "Toujours visible",
"actionsOnly": "Connexion uniquement, le reste se fait en cliquant",
"actionsHover": "Afficher au survol",
"actionsClick": "Cliquez pour développer/réduire",
"openOnDoubleClick": "Ouvrir en double-cliquant",
"openOnDoubleClickDesc": "Exiger un double clic pour ouvrir une session hôte au lieu d'un simple clic",
"showFolderPaths": "Afficher les chemins des dossiers",
"showFolderPathsDesc": "Afficher le chemin du dossier parent au-dessus des noms des sous-dossiers imbriqués. L'indentation des sous-dossiers reste inchangée.",
"hostClickBehavior": "Cliquer sur un hôte",
"hostClickBehaviorDesc": "Que se passe-t-il lorsque vous cliquez sur un hôte qui a déjà un onglet ouvert ? Un clic avec Ctrl/Cmd, un clic du milieu ou l’option « Ouvrir dans un nouvel onglet » ouvre toujours un nouvel onglet.",
"hostClickNewTab": "Ouvrir toujours un nouvel onglet",
"hostClickFocusExisting": "Passez à l'onglet ouvert",
"hostClickFocusExistingDoubleNew": "Cliquez pour changer d'onglet, double-cliquez pour ouvrir un nouvel onglet.",
"openInNewTab": "Ouvrir dans un nouvel onglet",
"deletedHost": "{{name}} supprimé",
"copiedToClipboard": "Copié dans le presse-papiers",
"remoteDesktopUrlCopied": "URL du Bureau à distance copiée",
"expandActions": "Développer les actions",
"collapseActions": "Réduire les actions",
"cloneHostAction": "Cloner l'hôte",
"copyAddress": "Copier l'adresse",
"copyLink": "Copier le lien",
"deleteCredentialConfirm": "Supprimer l'identifiant « {{name}} » ?",
"deletedCredential": "{{name}} supprimé",
"deleteHostsConfirm": "Supprimer {{count}} hôte{{plural}} ? Cette action est irréversible.",
"movedToRoot": "Déplacé à la racine",
"addTagsPlaceholder": "Ajouter des étiquettes...",
"authDetails": "Détails d'authentification",
"credType": "Type",
"generateKeyPairDesc": "Générer une nouvelle paire de clés, les clés privée et publique seront remplies automatiquement.",
"generatingKey": "Génération en cours...",
"generateLabel": "Générer {{label}}",
"uploadFileBtn": "Téléverser un fichier",
"keyPassphraseOptional": "Phrase de passe de la clé (facultatif)",
"sshPublicKeyOptional": "Clé publique SSH (facultatif)",
"publicKeyGenerated": "Clé publique générée",
"failedToGeneratePublicKey": "Échec de la dérivation de la clé publique",
"publicKeyCopied": "Clé publique copiée",
"keyPairGenerated": "Paire de clés {{label}} générée",
"failedToGenerateKeyPair": "Échec de la génération de la paire de clés",
"searchHostsPlaceholder": "Rechercher des hôtes, adresses, étiquettes…",
"refreshBtn": "Actualiser",
"addTag": "Ajouter des étiquettes...",
"deleteConfirmBtn": "Supprimer",
"deleteHostConfirm": "Supprimer \"{{name}}\" ?",
"enableAtLeastOneProtocol": "Activez au moins un protocole ci-dessus pour configurer les paramètres d'authentification et de connexion.",
"keyPassphrase": "Phrase de passe de la clé",
"basicInformation": "Informations de base",
"authDetailsSection": "Détails d'authentification",
"credTypeLabel": "Type",
"hostsTab": "Hôtes",
"credentialsTab": "Identifiants",
"selectMultiple": "Sélectionner plusieurs",
"selectHosts": "Sélectionner les hôtes",
"connectionLabel": "Connexion",
"authenticationLabel": "Authentification",
"generateKeyPairTitle": "Générer une paire de clés",
"generateKeyPairDescription": "Générer une nouvelle paire de clés : les clés privée et publique seront automatiquement renseignées.",
"generateFromPrivateKey": "Générer à partir de la clé privée",
"refreshBtn2": "Actualiser",
"exitSelectionTitle": "Quitter la sélection",
"addHostBtn2": "Ajouter un hôte",
"addCredentialBtn2": "Ajouter un identifiant",
"checkingHostStatuses": "Vérification des statuts des hôtes...",
"pinnedSection": "Épinglés",
"hostsExported": "Hôtes exportés avec succès",
"export": {
"menuItem": "Exporter...",
"title": "Hôtes d'exportation",
"scope": "Portée",
"scopeAll": "Tous",
"scopeSelected": "Choisi",
"searchHosts": "Rechercher des hôtes...",
"include": "Inclure",
"groupConnection": "Connexion",
"groupCredentials": "Informations d'identification",
"groupNotes": "Notes",
"groupTags": "Étiquettes et épingles",
"groupProxy": "Procuration",
"groupJumpHosts": "Hôtes de saut",
"groupFeatureFlags": "drapeaux de fonctionnalités",
"groupAdvanced": "Configuration avancée",
"preview": "Aperçu",
"moreHosts": "... {{count}} plus d'hôtes",
"summary": "{{selected}} des hôtes {{total}}",
"credentialsIncluded": "les titres de compétences comprenaient",
"credentialsExcluded": "identifiants exclus",
"noneSelected": "Aucun hôte sélectionné",
"cancel": "Annuler",
"confirm": "Exporter",
"fetchFailed": "Échec du chargement des hôtes pour l'exportation",
"bulkButton": "Exporter"
},
"sampleDownloaded": "Fichier d'exemple téléchargé",
"failedToDeleteCredential2": "Échec de la suppression de l'identifiant",
"noFolderOption": "(Aucun dossier)",
"nSelected": "{{count}} sélectionné(s)",
"featuresMenu": "Fonctionnalités",
"moveMenu": "Déplacer",
"connectSelected": "Connecter",
"cancelSelection": "Annuler",
"deletedCount": "{{count}} hôte(s) supprimé(s)",
"failedToDeleteCount": "Échec de la suppression de {{count}} hôte(s)",
"duplicatedHost": "\"{{name}}\" dupliqué",
"failedToDuplicateHost": "Échec de la duplication de l'hôte",
"updatedCount": "{{count}} hôtes mis à jour",
"friendlyNameLabel": "Nom convivial",
"descriptionLabel": "Description",
"loadingHosts": "Chargement des hôtes...",
"loadingCredentials": "Chargement des identifiants...",
"noHostsYet": "Aucun hôte pour le moment",
"noHostsYetHint": "Ajoutez un serveur pour ouvrir des terminaux, parcourir des fichiers et consulter des statistiques.",
"noHostsMatchSearch": "Aucun hôte ne correspond à votre recherche",
"searchHosts": "Rechercher des hôtes...",
"sortHosts": "Trier les hôtes",
"sortDefault": "Ordre par défaut",
"sortNameAsc": "Nom (A → Z)",
"sortNameDesc": "Nom (Z → A)",
"sortIpAsc": "Adresse IP (croissant)",
"sortIpDesc": "Adresse IP (décroissant)",
"sortOnlineFirst": "En ligne d'abord",
"sortOfflineFirst": "Hors ligne d'abord",
"sortManual": "Manuel (glisser pour réorganiser)",
"sortPinnedFirst": "Épinglés d'abord",
"filterHosts": "Filtrer les hôtes",
"filterClearAll": "Effacer les filtres",
"filterStatusGroup": "État",
"filterOnline": "En ligne",
"filterOffline": "Hors ligne",
"filterPinned": "Épinglés",
"filterAuthGroup": "Type d'authentification",
"filterAuthPassword": "Mot de passe",
"filterAuthKey": "Clé SSH",
"filterAuthCredential": "Identifiant",
"filterAuthNone": "Aucun",
"filterProtocolGroup": "Protocole",
"filterProtocolSsh": "SSH",
"filterTagsGroup": "Étiquettes",
"editHostAction": "Modifier l'hôte",
"moreOptions": "Plus d'options",
"shareHost": "Partager",
"shareHostTitle": "Partager : {{name}}",
"shareFolder": "Dossier partagé",
"shareFolderTitle": "Dossier partagé : {{name}}",
"folderSharedSuccessfully": "Hôte(s) partagé(s) {{count}} dans le dossier",
"failedToShareFolder": "Échec du partage du dossier",
"sharing": {
"loadError": "Échec du chargement des données de partage. Veuillez réessayer.",
"shareWithSection": "Partager avec",
"usersTab": "Utilisateurs",
"rolesTab": "Rôles",
"searchPlaceholder": "Rechercher des utilisateurs ou des rôles…",
"noMatches": "Aucun résultat trouvé",
"permissionLevelLabel": "Niveau de permission",
"levels": {
"connect": {
"label": "Connexion",
"description": "Ouverture de sessions uniquement : terminal, bureau à distance, gestionnaire de fichiers, tunnels et Docker. Aucun accès à la configuration de l'hôte."
},
"view": {
"label": "Consultation",
"description": "Connexion, plus consultation de la configuration de l’hôte. Les secrets ne sont jamais affichés."
},
"edit": {
"label": "Modification",
"description": "Consultez et modifiez les paramètres de l'hôte sans authentification. L'authentification SSH du propriétaire reste privée et accessible uniquement à ce dernier."
},
"manage": {
"label": "Gestion",
"description": "Modification, plus partager l'hôte avec d'autres utilisateurs, modifier les niveaux de permission et révoquer l'accès."
}
},
"expiryLabel": "Expiration de l’accès",
"expiry": {
"never": "Jamais",
"oneHour": "1 heure",
"oneDay": "24 heures",
"sevenDays": "7 jours",
"thirtyDays": "30 jours",
"custom": "Personnalisé"
},
"customHoursPlaceholder": "Heures jusqu'à l'expiration de l'accès",
"shareButton": "Partager",
"shareWithCount": "Partager ({{count}})",
"currentAccess": "Accès actuel",
"noAccessEntries": "Cet hôte n'a pas encore été partagé",
"folderRulesTitle": "S'applique aux hôtes ajoutés ultérieurement",
"folderRulesHint": "Ces partages restent associés au dossier : un hôte créé ou déplacé dans ce dossier (ou un sous-dossier) bénéficie automatiquement des mêmes droits d’accès. Supprimer une règle empêche uniquement l’héritage futur.",
"folderRuleRemove": "Arrêtez d'hériter",
"folderShareSummary": "Hôte(s) partagé(s) {{shared}} de {{total}} dans ce dossier",
"grantedBy": "Accordé par",
"expires": "Expire",
"expired": "Expiré",
"never": "Jamais",
"revoke": "Révoquer",
"accessUpdated": "Accès mis à jour",
"accessUpdateFailed": "Échec de la mise à jour de l'accès",
"sharedBadge": "Partagé",
"sharedBadgeTooltip": "Partagé par {{owner}} (accès {{level}})",
"viewOnlyBanner": "Cet hôte vous est partagé par {{owner}} avec un accès en lecture seule. La configuration est en lecture seule.",
"sharedEditBanner": "Cet hôte vous est partagé par {{owner}} avec un accès en modification. Les modifications s'appliquent à l'hôte réel ; les références d'authentification ne peuvent être modifiées que par le propriétaire.",
"ownerOnlyControl": "Modifiable uniquement par le propriétaire de l’hôte",
"ownerAuthPrivate": "L'authentification SSH du propriétaire de l'hôte est privée. Utilisez l'option « Définir l'authentification SSH personnelle » du menu de l'hôte pour choisir vos propres identifiants.",
"ownerAuthShared": "L'administrateur de cet hôte a partagé l'authentification SSH. Vous pouvez l'utiliser ou choisir vos propres identifiants dans « Définir l'authentification SSH personnelle ».",
"authOverrideAction": "Configurer l'authentification SSH personnelle",
"authOverrideActionProtocol": "Définir l'authentification personnelle {{protocol}}",
"authOverrideTitle": "Authentification SSH personnelle",
"authOverrideTitleProtocol": "Authentification personnelle {{protocol}}",
"authOverrideDescriptionPrivate": "Les identifiants SSH du propriétaire de l'hôte restent privés. Choisissez l'un de vos identifiants enregistrés pour les connexions à {{host}}.",
"authOverrideDescriptionShared": "Utilisez l'authentification partagée par le propriétaire de l'hôte, ou remplacez-la par l'une de vos informations d'identification enregistrées pour les connexions à {{host}}.",
"authOverrideCredentialLabel": "Identifiants d'authentification",
"useSharedAuthentication": "Utiliser l'authentification d'hôte partagé",
"noPersonalCredential": "Aucune accréditation personnelle",
"authOverrideNoCredentials": "Vous n'avez pas encore enregistré d'identifiants SSH. Créez-en un dans la section « Identifiants » pour vous connecter aux hôtes nécessitant une authentification.",
"authOverrideRequired": "Cet hôte exige l'un de vos identifiants enregistrés avant que vous puissiez vous connecter.",
"authOverridePrivateHint": "Ces identifiants sont privés et ne peuvent être ni vus ni utilisés par l'hôte ni par les autres destinataires.",
"authOverrideSaved": "Authentification SSH personnelle enregistrée",
"authOverrideCleared": "Authentification SSH personnelle supprimée",
"authOverrideClearedToShared": "Authentification via hôte partagé",
"authOverrideLoadError": "Impossible de charger votre authentification SSH. Veuillez réessayer.",
"authOverrideSaveError": "Impossible d'enregistrer votre authentification SSH"
},
"arrangeUnlockedSwitchedToManual": "Passage au tri manuel pour que votre ordre soit conservé.",
"dragToRearrange": "Faites glisser pour réorganiser",
"arrangeUnlocked": "Déverrouillez et faites glisser pour réorganiser",
"webUiBindHostUnreachable": "Votre navigateur ne peut pas accéder à l'adresse 127.0.0.1 sur la machine exécutant Termix ; ce point de terminaison ne sera donc pas chargé. Veuillez utiliser une adresse à laquelle la machine répond, par exemple 0.0.0.0.",
"webUiBindHostSharesSessionCookie": "Depuis ce navigateur, la redirection se ferait via le même nom d'hôte que celui utilisé par Termix. Le service tunnelé recevrait donc votre session Termix. Les cookies ignorent le port. Ce point de terminaison refusera de s'ouvrir ici ; il fonctionne depuis l'application de bureau Termix ou lorsque Termix est ouvert en local.",
"webUiErrorLabelRequired": "Le point de terminaison {{row}} a besoin d'une étiquette.",
"webUiErrorLabelDuplicate": "Chaque point de terminaison nécessite un nom différent.",
"webUiErrorPortRange": "Le point de terminaison {{row}} nécessite un port compris entre 1 et 65535.",
"webUiErrorPathInvalid": "Le point de terminaison {{row}} a un chemin invalide. Utilisez un chemin comme /admin.",
"copyViewUrlAction": "Copier le lien {{name}}",
"filterAuthAgent": "Agent SSH",
"authTypeNeedsPlugin": "Cet hôte utilise {{type}}, qui nécessite {{plugin}}. Cette fonctionnalité est désactivée sur ce serveur.",
"authTypeUnknown": "Cet hôte utilise {{type}}, qui n'est pas disponible sur ce serveur.",
"authFieldsAfterSave": "Enregistrez d'abord l'hôte, puis remplissez ces champs.",
"enablePluginFeature": "Activer {{name}}",
"disablePluginFeature": "Désactiver {{name}}",
"filterFeaturesGroup": "Fonctionnalités",
"localOnly": "Conserver uniquement sur cet appareil",
"localOnlyDesc": "Cet hôte n'est pas envoyé au serveur et n'apparaît pas sur vos autres appareils.",
"folderLocalOnly": "Conserver uniquement sur cet appareil",
"folderLocalOnlyDesc": "Ce dossier et tous les éléments qu'il contient restent sur cet appareil et ne sont pas envoyés au serveur.",
"sudoPasswordDesc": "Utilisé lorsque le terminal remplit une invite sudo, et par les fonctionnalités qui exécutent des commandes avec sudo.",
"editorCancel": "Annuler",
"editorSaving": "Enregistrement…",
"editorUpdate": "Mettre à jour l'hôte",
"editorAdd": "Ajouter un hôte",
"speedSearch": "Rechercher des hôtes. Utilisez les flèches directionnelles pour sélectionner, Entrée pour vous connecter, Échap pour fermer.",
"speedSearchList": "Liste des hôtes. Saisissez votre recherche ou appuyez sur /.",
"importNoHosts": "Aucun hôte trouvé dans le fichier",
"importTooMany": "Vous pouvez importer jusqu'à {{max}} hôtes simultanément",
"importSummary": "Importation terminée : {{imported}} importée, {{updated}} mise à jour, {{failed}} échec",
"importHostsFailed": "Échec de l'importation des hôtes"
},
"commandPalette": {
"searchPlaceholder": "Rechercher des hôtes, commandes ou paramètres...",
"quickActions": "Actions rapides",
"navigation": "Navigation",
"orShortcut": "ou",
"hostManager": "Gestionnaire d'hôtes",
"hostManagerDesc": "Gérer, ajouter ou modifier des hôtes",
"addNewHost": "Ajouter un nouvel hôte",
"addNewHostDesc": "Enregistrer un nouvel hôte",
"adminSettings": "Paramètres d'administration",
"adminSettingsDesc": "Configurer les préférences système et les utilisateurs",
"userProfile": "Profil utilisateur",
"userProfileDesc": "Gérer votre compte et vos préférences",
"addCredential": "Ajouter un identifiant",
"addCredentialDesc": "Stocker des clés SSH ou des mots de passe",
"recentActivity": "Activité récente",
"serversAndHosts": "Serveurs et hôtes",
"noHostsFound": "Aucun hôte trouvé correspondant à \"{{search}}\"",
"links": "Liens",
"navigate": "Naviguer",
"select": "Sélectionner",
"toggleWith": "Basculer avec",
"pluginActions": "Plus d'actions",
"noTargetTab": "Aucun onglet de terminal n'est ouvert."
},
"splitScreen": {
"title": "Écran partagé",
"defaultLabel": "Séparer {{number}}",
"splitRight": "Diviser à droite",
"splitDown": "Diviser en bas",
"addToSplit": "Ajouter à {{split}}",
"paneEmptyItem": "Panneau {{index}}: vide",
"paneItem": "Volet {{index}}: {{label}}",
"paneNumber": "Volet {{index}}",
"newPaneRight": "Nouveau volet à droite",
"newPaneBelow": "Nouveau volet ci-dessous",
"emptyTitle": "vitre vide",
"emptyHint": "Choisissez un élément à afficher ici. Lorsque ce volet est sélectionné, tout élément ouvert depuis la barre latérale s'ouvrira également ici.",
"openTabs": "Ouvrir les onglets",
"noOpenTabs": "Aucun autre onglet n'est ouvert.",
"hosts": "Hôtes",
"searchHosts": "Rechercher des hôtes",
"noHosts": "Aucun hôte ne correspond",
"newSession": "Nouveau",
"closePane": "Fermer le volet",
"closeSession": "Séance de clôture",
"moveToTab": "Déplacer vers son propre onglet",
"swapWith": "Échanger avec",
"showHere": "Afficher dans ce volet",
"clearPane": "Videz cette fenêtre",
"zoom": "volet zoom",
"unzoom": "Rétablir la mise en page",
"unsplit": "Indivisible",
"layouts": "Plans",
"applyLayout": "Modifier la mise en page",
"newSplit": "Nouvelle scission",
"maxPanes": "Une partition peut contenir jusqu'à {{count}} panneaux",
"dropSplit": "Baisser pour diviser",
"dropHere": "Déposer pour afficher ici",
"paneActions": "Actions du volet",
"dividerHint": "Faites glisser pour redimensionner. Double-cliquez pour égaliser.",
"openInSplit": "Ouvrir en deux",
"openInNewSplit": "Nouvelle séparation avec l'onglet actuel",
"shortcuts": "Raccourcis",
"shortcutNavigate": "Passer d'un volet à l'autre",
"presets": {
"columns2": "Deux côte à côte",
"rows2": "Deux empilés",
"columns3": "Trois côte à côte",
"mainLeft3": "Un à gauche, deux à droite",
"mainBottom3": "Deux en haut, un en bas",
"grid4": "Grille de quatre",
"grid5": "Trois sur deux",
"grid6": "Grille de six"
}
},
"connections": {
"noConnections": "Aucune connexion",
"noConnectionsDesc": "Ouvrez un terminal, un gestionnaire de fichiers ou un bureau à distance pour voir les connexions ici.",
"connectedFor": "Connecté depuis {{duration}}",
"connected": "Connecté",
"disconnected": "Déconnecté",
"closeTab": "Fermer l'onglet",
"closeConnection": "Fermer la connexion",
"forgetTab": "Oublier",
"removeBackground": "Supprimer",
"reconnect": "Reconnecter",
"reopenTab": "Rouvrir",
"sectionOpen": "Ouvertes",
"sectionBackground": "Arrière-plan",
"backgroundDesc": "Les sessions persistent pendant {{minutes}} minutes après la déconnexion et peuvent être reconnectées.",
"persisted": "Persisté en arrière-plan",
"expiresIn": "Expire dans {{duration}}",
"search": "Rechercher des connexions...",
"noSearchResults": "Aucune connexion ne correspond à votre recherche",
"rename": "Renommer la session"
},
"terminal": {
"totpRequired": "Authentification à deux facteurs requise",
"totpCodeLabel": "Code de vérification",
"totpVerify": "Vérifier",
"mfaPromptRequired": "Authentification requise",
"mfaPushRequired": "Authentification push requise",
"mfaMenuPlaceholder": "Saisissez votre réponse",
"mfaCodeOrPushPlaceholder": "Code ou « push »",
"mfaWaitingApproval": "En attente d'approbation sur votre appareil...",
"mfaSendRequest": "Envoyer une requête",
"browserSignInCode": "Clé de sécurité",
"browserSignInUrl": "URL de connexion",
"browserSignInOpen": "Ouvrir dans le navigateur",
"browserSignInContinue": "J'ai terminé la connexion",
"browserSignInRequired": "{{provider}} Connexion requise",
"connectionLogTitle": "Journal de connexion",
"connectionLogCopy": "Copier les journaux dans le presse-papiers",
"connectionLogEmpty": "Aucun journal de connexion pour l'instant",
"connectionLogWaiting": "En attente des journaux de connexion...",
"connectionLogCopied": "Journaux de connexion copiés dans le presse-papiers",
"connectionLogCopyFailed": "Échec de la copie des journaux dans le presse-papiers"
},
"cardGrid": {
"dragToMove": "Glisser pour déplacer",
"dragToResize": "Glisser pour redimensionner",
"changeWidth": "Modifier la largeur",
"removeCard": "Supprimer {{label}}",
"addCard": "Ajouter",
"columns": "Colonnes",
"empty": "Aucune carte. Utilisez Ajouter ci-dessous pour placer des cartes."
},
"auth": {
"tagline": "Gestion auto-hébergée de SSH et de bureau à distance",
"loginTitle": "Bienvenue à nouveau",
"registerTitle": "Créer un compte",
"forgotPassword": "Mot de passe oublié ?",
"rememberMe": "Se souvenir de cet appareil pendant 30 jours (inclut TOTP)",
"noAccount": "Pas de compte ?",
"hasAccount": "Déjà un compte ?",
"twoFactorAuth": "Authentification à deux facteurs",
"enterCode": "Saisir le code",
"redirectingToApp": "Redirection vers l'application...",
"sshAuthenticationRequired": "Authentification SSH requise",
"sshNoKeyboardInteractive": "Authentification interactive au clavier indisponible",
"sshAuthenticationFailed": "Échec de l'authentification",
"sshAuthenticationTimeout": "Expiration de l'authentification",
"sshNoKeyboardInteractiveDescription": "Le serveur ne prend pas en charge l'authentification interactive au clavier. Veuillez fournir votre mot de passe ou votre clé SSH.",
"sshAuthFailedDescription": "Les identifiants fournis sont incorrects. Veuillez réessayer avec des identifiants valides.",
"sshTimeoutDescription": "La tentative d'authentification a expiré. Veuillez réessayer.",
"sshProvideCredentialsDescription": "Veuillez fournir vos identifiants SSH pour vous connecter à ce serveur.",
"sshPasswordDescription": "Saisissez le mot de passe pour cette connexion SSH.",
"sshKeyPasswordDescription": "Si votre clé SSH est chiffrée, saisissez la phrase secrète ici.",
"passphraseRequired": "Phrase secrète requise",
"passphraseRequiredDescription": "La clé SSH est chiffrée. Veuillez saisir la phrase secrète pour la déverrouiller.",
"back": "Retour",
"firstUser": "Premier utilisateur",
"firstUserMessage": "Vous êtes le premier utilisateur et serez défini comme administrateur. Vous pouvez consulter les paramètres administrateur dans le menu déroulant utilisateur de la barre latérale. Si vous pensez qu'il s'agit d'une erreur, vérifiez les journaux Docker ou créez un ticket GitHub.",
"external": "Externe",
"loginWithExternal": "Se connecter avec un fournisseur externe",
"loginWithExternalDesc": "Connectez-vous à l'aide de votre fournisseur d'identité externe configuré.",
"externalNotSupportedInElectron": "La connexion externe n'est pas encore prise en charge par l'application de bureau. Veuillez utiliser la version web.",
"loginWithProvider": "Se connecter avec {{name}}",
"orContinueWith": "ou continuer avec",
"resetPasswordButton": "Réinitialiser le mot de passe",
"sendResetCode": "Envoyer le code de réinitialisation",
"resetCodeDesc": "Saisissez votre nom d'utilisateur pour recevoir un code de réinitialisation du mot de passe. Le code sera enregistré dans les journaux du conteneur Docker.",
"resetCode": "Code de réinitialisation",
"verifyCodeButton": "Vérifier le code",
"enterResetCode": "Saisissez le code à 6 chiffres figurant dans les journaux du conteneur Docker pour l'utilisateur :",
"newPassword": "Nouveau mot de passe",
"confirmNewPassword": "Confirmer le mot de passe",
"enterNewPassword": "Saisissez votre nouveau mot de passe pour l'utilisateur :",
"signUp": "S'inscrire",
"desktopApp": "Application de bureau",
"loggingInToDesktopApp": "Connexion à l'application de bureau",
"loadingServer": "Chargement du serveur...",
"dataLossWarning": "Réinitialiser votre mot de passe de cette manière supprimera tous vos hôtes SSH enregistrés, vos identifiants et autres données chiffrées. Cette action est irréversible. N'utilisez cette méthode que si vous avez oublié votre mot de passe et que vous n'êtes pas connecté.",
"authenticationDisabled": "Authentification désactivée",
"authenticationDisabledDesc": "Toutes les méthodes d'authentification sont actuellement désactivées. Veuillez contacter votre administrateur.",
"passwordLoginDisabledDesc": "La connexion par mot de passe est désactivée. Utilisez une clé d'accès ou un fournisseur d'authentification externe.",
"attemptsRemaining": "{{count}} tentatives restantes",
"confirmResetDataWipe": "Ce compte ne s'est pas connecté depuis la mise à niveau du chiffrement, donc ses données stockées ne peuvent pas être récupérées sans l'ancien mot de passe. La réinitialisation supprimera définitivement ses hôtes, identifiants et extraits. Continuer ?",
"password": "Mot de passe",
"secondFactorUnavailable": "Votre compte utilise une authentification à deux facteurs actuellement indisponible. Veuillez contacter un administrateur pour la réinitialiser.",
"secondFactorNoUI": "Ce deuxième facteur ne peut pas être affiché sur cet écran. Veuillez contacter un administrateur.",
"serverAuthentication": "Connexion au serveur",
"minChars": "min. {{min}} caractères"
},
"hostKey": {
"verifyNewHost": "Vérifier la clé d'hôte SSH",
"keyChangedWarning": "Clé d'hôte SSH modifiée",
"firstConnectionTitle": "Première connexion à cet hôte",
"firstConnectionDescription": "L'authenticité de cet hôte ne peut pas être établie. Vérifiez que l'empreinte correspond à ce que vous attendez.",
"keyChangedDescription": "La clé d'hôte de ce serveur a changé depuis votre dernière connexion. Cela pourrait indiquer un problème de sécurité.",
"previousKey": "Clé précédente",
"newFingerprint": "Nouvelle empreinte",
"fingerprint": "Empreinte",
"verifyInstructions": "Si vous faites confiance à cet hôte, cliquez sur Accepter pour continuer et enregistrer cette empreinte pour les connexions futures.",
"securityWarning": "Avertissement de sécurité",
"acceptAndContinue": "Accepter et continuer",
"acceptNewKey": "Accepter la nouvelle clé et continuer"
},
"errors": {
"databaseConnection": "Impossible de se connecter à la base de données",
"embeddedServerFailed": "Le serveur local de Termix n'a pas pu démarrer.",
"unknownError": "Erreur inconnue",
"loginFailed": "Échec de la connexion",
"failedPasswordReset": "Échec du lancement de la réinitialisation du mot de passe",
"failedVerifyCode": "Échec de la vérification du code de réinitialisation",
"failedCompleteReset": "Échec de la finalisation de la réinitialisation du mot de passe",
"invalidTotpCode": "Code TOTP invalide",
"failedOidcLogin": "Échec de la connexion externe",
"silentSigninOidcUnavailable": "Une connexion silencieuse a été demandée, mais aucune connexion externe n'est configurée.",
"failedUserInfo": "Échec de la récupération des informations utilisateur après la connexion",
"oidcAuthFailed": "Échec de la connexion externe",
"invalidAuthUrl": "URL d'autorisation invalide reçue du backend",
"requiredField": "Ce champ est obligatoire",
"minLength": "La longueur minimale est de {{min}}",
"passwordMismatch": "Les mots de passe ne correspondent pas",
"passwordLoginDisabled": "La connexion par nom d'utilisateur/mot de passe est actuellement désactivée",
"sessionExpired": "Session expirée - veuillez vous reconnecter",
"totpRateLimited": "Limitation de débit : trop de tentatives de vérification TOTP. Veuillez réessayer plus tard.",
"totpRateLimitedWithTime": "Limitation de débit : trop de tentatives de vérification TOTP. Veuillez attendre {{time}} secondes avant de réessayer.",
"resetCodeRateLimited": "Limitation de débit : trop de tentatives de vérification. Veuillez réessayer plus tard.",
"resetCodeRateLimitedWithTime": "Limitation de débit : trop de tentatives de vérification. Veuillez patienter {{time}} secondes avant de réessayer.",
"authTokenSaveFailed": "Échec de l'enregistrement du jeton d'authentification",
"authTokenMissing": "Le serveur n'a pas renvoyé de nouveau jeton d'authentification. Veuillez vous reconnecter.",
"failedToLoadServer": "Échec du chargement du serveur",
"sessionExpiredLogin": "Session expirée. Veuillez vous reconnecter."
},
"messages": {
"registrationDisabled": "L'inscription de nouveaux comptes est actuellement désactivée par un administrateur. Veuillez vous connecter ou contacter un administrateur.",
"userNotAllowed": "Votre compte n'est pas autorisé à s'inscrire. Veuillez contacter un administrateur.",
"databaseConnectionFailed": "Échec de la connexion au serveur de base de données",
"embeddedServerPortInUse": "Le port {{port}} est déjà utilisé par un autre programme. Il s'agit généralement d'un conteneur Docker Termix ou d'un processus Termix restant d'une session précédente. Fermez-le, puis redémarrez Termix.",
"embeddedServerPortInUseUnknownPort": "L'un des ports requis par Termix est déjà utilisé par un autre programme. Fermez ce programme, puis redémarrez Termix.",
"embeddedServerCrashed": "Le serveur local s'est arrêté inopinément. Redémarrez Termix et consultez le journal du bureau si le problème persiste.",
"resetCodeSent": "Code de réinitialisation envoyé dans les journaux Docker",
"codeVerified": "Code vérifié avec succès",
"passwordResetSuccess": "Réinitialisation du mot de passe réussie",
"loginSuccess": "Connexion réussie",
"registrationSuccess": "Inscription réussie"
},
"placeholders": {
"language": "Langue",
"keyPassword": "mot de passe de la clé",
"pastePrivateKey": "Collez votre clé privée ici...",
"enterPassword": "Saisissez votre mot de passe"
},
"dashboard": {
"title": "Tableau de bord",
"loading": "Chargement du tableau de bord...",
"github": "GitHub",
"support": "Support",
"discord": "Discord",
"docs": "Documentation",
"donate": "Faire un don",
"serverOverview": "Vue d'ensemble du serveur",
"version": "Version",
"upToDate": "À jour",
"updateAvailable": "Mise à jour disponible",
"beta": "Bêta",
"uptime": "Disponibilité",
"database": "Base de données",
"healthy": "Opérationnel",
"error": "Erreur",
"totalHosts": "Total hôtes",
"totalCredentials": "Total identifiants",
"recentActivity": "Activité récente",
"reset": "Réinitialiser",
"loadingRecentActivity": "Chargement de l'activité récente...",
"noRecentActivity": "Aucune activité récente",
"quickActions": "Actions rapides",
"addHost": "Ajouter un hôte",
"addCredential": "Ajouter un identifiant",
"adminSettings": "Paramètres administrateur",
"userProfile": "Profil utilisateur",
"serverStats": "Statistiques serveur",
"loadingServerStats": "Chargement des statistiques serveur...",
"noServerData": "Aucune donnée serveur disponible",
"customizeLayout": "Personnaliser le tableau de bord",
"dashboardSettings": "Paramètres du tableau de bord",
"enableDisableCards": "Activer/Désactiver les cartes",
"resetLayout": "Rétablir la disposition par défaut",
"serverOverviewCard": "Vue d'ensemble du serveur",
"recentActivityCard": "Activité récente",
"quickActionsCard": "Actions rapides",
"serverStatsCard": "Statistiques du serveur",
"panelMain": "Principal",
"panelSide": "Latéral",
"justNow": "à l'instant",
"activityFileManager": "Gestionnaire de fichiers"
},
"donation": {
"title": "Vous appréciez Termix ?",
"body": "Termix est gratuit et open source, conçu et maintenu par une équipe de deux personnes sur notre temps libre. S'il remplace un outil commercial pour lequel vous auriez autrement payé, un don aide à couvrir les coûts d'hébergement et à poursuivre le développement. Pour le moment, les dons sont uniquement en cryptomonnaie.",
"milestones": "Les dons aident également à financer le temps nécessaire à la recherche et à l'apprentissage pour développer des fonctionnalités telles que la prise en charge de SAML et Kubernetes. Consultez la progression sur la page des dons.",
"cta": "Faire un don",
"dismiss": "Peut-être plus tard"
},
"dashboardTab": {
"stable": "STABLE",
"hostsOnline": "Hôtes en ligne",
"registerNewServer": "Enregistrer un nouveau serveur",
"storeSshKeysOrPasswords": "Stocker des clés SSH ou des mots de passe",
"manageUsersAndRoles": "Gérer les utilisateurs et les rôles",
"manageYourAccount": "Gérer votre compte",
"hostStatus": "État de l'hôte",
"noHostsConfigured": "Aucun hôte configuré",
"online": "EN LIGNE",
"offline": "HORS LIGNE",
"checking": "VÉRIFICATION",
"onlineLower": "En ligne",
"add": "Ajouter :",
"commandPalette": "Palette de commandes",
"done": "Terminé",
"editModeInstructions": "Faites glisser les cartes pour les réorganiser. Faites glisser le séparateur de colonnes pour redimensionner les colonnes. Faites glisser le bord inférieur d'une carte pour modifier sa hauteur. Utilisez le bouton Corbeille pour supprimer une carte.",
"empty": "Vide",
"clear": "Effacer",
"viewServerDetails": "Afficher les détails du serveur",
"dragToResizeColumns": "Faites glisser pour redimensionner les colonnes",
"hostsAvailable": "Hôtes disponibles"
},
"admin": {
"sectionGeneral": "Général",
"sectionUsers": "Utilisateurs",
"sectionSessions": "Sessions",
"sectionRoles": "Rôles",
"sectionDatabase": "Base de données",
"sectionApiKeys": "Clés API",
"sectionAuditLog": "Journal d'audit",
"sectionSsl": "certificat HTTPS",
"sectionBranding": "Marque blanche",
"brandingAppName": "Nom de l'application",
"brandingAppNameDesc": "Affiché sur l'écran de connexion et dans l'onglet du navigateur. Laisser vide pour utiliser « Termix ».",
"brandingTagline": "Slogan",
"brandingTaglineDesc": "Affiché sous le nom de l'application sur l'écran de connexion. Laisser vide pour utiliser le slogan par défaut.",
"brandingLogo": "Logo",
"brandingLogoDesc": "PNG, JPEG ou WEBP, jusqu'à 750 Ko. Remplace l'icône par défaut sur l'écran de connexion et dans l'onglet du navigateur.",
"brandingLogoUpload": "Télécharger le logo",
"brandingLogoReset": "Réinitialiser par défaut",
"brandingLogoInvalid": "Image invalide. Veuillez utiliser un fichier PNG, JPEG ou WEBP d'une taille maximale de 750 Ko.",
"brandingSaved": "Paramètres de marque enregistrés",
"brandingSaveFailed": "Impossible d'enregistrer les paramètres de marque",
"sslDescription": "Le certificat utilisé par Termix sur HTTPS. Vous pouvez télécharger le vôtre ici ou en obtenir et renouveler un auprès de Let's Encrypt dans la section Certificats ACME.",
"sslDocsLink": "Voir la documentation SSL",
"sslCertStatus": "Statut du certificat",
"sslCertStatusNone": "Aucun certificat",
"sslCertStatusValid": "Valide",
"sslCertStatusExpiring": "Expiration prochaine",
"sslCertStatusExpired": "Expiré",
"sslCertExpiresAt": "Expire le {{date}}",
"sslInfoNote": "Après l'émission ou le chargement d'un certificat, Termix activera automatiquement le protocole HTTPS sur le port SSL (8443 par défaut), en plus du port HTTP existant. Assurez-vous que ce port est publié/associé à ce conteneur afin qu'il soit accessible.",
"sslManualCert": "Certificat (PEM)",
"sslManualCertPlaceholder": "-----DÉBUT DU CERTIFICAT-----",
"sslManualKey": "Clé privée (PEM)",
"sslManualKeyPlaceholder": "-----DÉBUT DE LA CLÉ PRIVÉE-----",
"sslManualDesc": "Collez votre certificat et votre clé privée existants, y compris la chaîne complète si votre autorité de certification l'exige.",
"sslManualUpload": "Télécharger et installer le certificat",
"sslManualUploadLoading": "Téléchargement du certificat...",
"sslManualUploadSuccess": "Certificat téléchargé et installé avec succès",
"sslManualUploadFailed": "Échec du chargement du certificat",
"sslManualRequiresFields": "Un certificat et une clé privée sont nécessaires.",
"auditLogTotal": "{{total}} entrées au total",
"auditLogEmpty": "Aucune entrée de journal d'audit trouvée",
"auditLogSuccess": "Succès",
"auditLogFailed": "Échec",
"auditLogClearFilters": "Effacer les filtres",
"auditLogPage": "Page {{page}} sur {{totalPages}} ({{total}} au total)",
"auditLogIp": "IP",
"auditLogResourceId": "ID de ressource",
"auditLogFilterUser": "Utilisateur",
"auditLogFilterAction": "Action",
"auditLogFilterResourceType": "Type de ressource",
"auditLogFilterStatus": "Statut",
"auditLogFilterFrom": "De",
"auditLogFilterTo": "À",
"auditLogFilterAll": "Tous",
"allowRegistration": "Autoriser l'enregistrement des utilisateurs",
"allowRegistrationDesc": "Permettre aux nouveaux utilisateurs de s'enregistrer avec un nom d'utilisateur et un mot de passe",
"allowPasswordLogin": "Autoriser la connexion par mot de passe",
"allowPasswordLoginDesc": "Connexion par nom d'utilisateur/mot de passe",
"oidcAutoProvision": "Création automatique de comptes externes",
"oidcAutoProvisionDesc": "Créer un compte lors de la première connexion via une authentification externe telle que SSO ou LDAP, même si l'inscription est désactivée.",
"secondFactorAfterExternalLogin": "Demander une authentification à deux facteurs après les connexions externes (SSO, GitHub, Google, LDAP).",
"secondFactorAfterExternalLoginDesc": "Désactivé, le second facteur d'authentification n'est demandé qu'après la saisie du mot de passe et les autres connexions locales, comme auparavant. Activé, il est demandé après chaque méthode de connexion, y compris l'authentification unique (SSO) et LDAP.",
"allowPasswordReset": "Autoriser la réinitialisation du mot de passe",
"allowPasswordResetDesc": "Code de réinitialisation via les journaux Docker",
"auditForwardingTitle": "Transmettre au SIEM",
"auditForwardingDesc": "Transmettez une copie de chaque entrée d'audit à un collecteur externe au format NDJSON. Les journaux locaux restent la source de référence.",
"auditForwardingEnvNotice": "Une variable d'environnement configure également la redirection ; l'URL enregistrée ici est prioritaire.",
"auditForwardingToken": "Jeton porteur (facultatif)",
"auditForwardingTokenStored": "Jeton porteur (stocké)",
"auditForwardingSaved": "Paramètres de transfert d'audit enregistrés",
"auditForwardingSaveError": "Échec de l'enregistrement des paramètres de transfert d'audit",
"sessionTimeout": "Expiration de session",
"hours": "heures",
"sessionTimeoutRange": "Durée minimale : 1 h, durée maximale : 720 h",
"monitoringDefaults": "Paramètres de surveillance par défaut",
"statusCheck": "Vérification de l'état",
"sec": "s",
"logLevel": "Niveau de journalisation",
"usersCount": "{{count}} utilisateurs",
"searchUsers": "Rechercher des utilisateurs...",
"noUsers": "Aucun utilisateur",
"noUsersMatch": "Aucun utilisateur ne correspond à votre recherche",
"pageOf": "Page {{page}} de {{total}}",
"createUser": "Créer",
"newRole": "Nouveau rôle",
"roleName": "Nom",
"roleDisplayName": "Nom affiché",
"roleDescription": "Description",
"rolesCount": "{{count}} rôles",
"createRole": "Créer",
"creating": "Création...",
"exportDatabase": "Exporter la base de données",
"exportDatabaseDesc": "Téléchargez une sauvegarde SQLite portable de tous les hôtes, identifiants et paramètres",
"export": "Exporter",
"exporting": "Exportation en cours...",
"importDatabase": "Importer la base de données",
"importDatabaseDesc": "Restauration à partir d'une sauvegarde .sqlite portable sur n'importe quel système de gestion de base de données",
"importDatabaseSelected": "Sélectionné : {{name}}",
"selectFile": "Sélectionner un fichier",
"changeFile": "Modifier",
"import": "Importer",
"importing": "Importation en cours...",
"apiKeysCount": "{{count}} clés",
"apiKeysDocsLink": "Voir la documentation",
"apiKeysCliHint": "Utilisez une clé API avec l'interface de ligne de commande Termix pour gérer les serveurs depuis votre terminal.",
"apiKeysCliLink": "Consultez la documentation de l'interface de ligne de commande",
"newApiKey": "Nouvelle clé API",
"apiKeyCreatedWarning": "Clé créée : copiez-la maintenant, elle ne sera plus affichée.",
"apiKeyName": "Nom",
"apiKeyUser": "Utilisateur",
"apiKeySelectUser": "Sélectionner un utilisateur...",
"apiKeyExpiresAt": "Date d'expiration",
"createKey": "Créer la clé",
"apiKeyNoExpiry": "Aucune expiration",
"revokedBadge": "RÉVOQUÉE",
"authTypeDual": "Authentification double",
"authTypeOidc": "Externe",
"authTypeLocal": "Locale",
"adminStatusAdministrator": "Administrateur",
"adminStatusRegularUser": "Utilisateur standard",
"adminBadge": "ADMIN",
"systemBadge": "SYS",
"customBadge": "PERSONNALISÉ",
"youBadge": "VOUS",
"sessionsActive": "{{count}} actives",
"sessionActive": "Active : {{time}}",
"sessionExpires": "Exp : {{time}}",
"revokeAll": "Toutes",
"revokeAllSessionsSuccess": "Toutes les sessions de l'utilisateur ont été révoquées.",
"revokeAllSessionsFailed": "Échec de la révocation des sessions.",
"revokeSessionFailed": "Échec de la révocation de la session.",
"addRole": "Ajouter un rôle",
"noCustomRoles": "Aucun rôle personnalisé défini.",
"removeRoleFailed": "Échec de la suppression du rôle.",
"assignRoleFailed": "Échec de l'attribution du rôle.",
"deleteRoleFailed": "Échec de la suppression du rôle.",
"userAdminAccess": "Administrateur",
"userAdminAccessDesc": "Accès complet à tous les paramètres d'administration.",
"userRoles": "Rôles",
"revokeAllUserSessions": "Révoquer toutes les sessions",
"revokeAllUserSessionsDesc": "Forcer la reconnexion sur tous les appareils.",
"revoke": "Révoquer",
"deleteUserWarning": "La suppression de cet utilisateur est définitive.",
"deleteUser": "Supprimer {{username}}",
"deleting": "Suppression…",
"deleteUserFailed": "Échec de la suppression de l'utilisateur.",
"deleteUserSuccess": "Utilisateur « {{username}} » supprimé.",
"deleteRoleSuccess": "Rôle « {{name}} » supprimé.",
"revokeKeySuccess": "Clé « {{name}} » révoquée.",
"revokeKeyFailed": "Échec de la révocation de la clé.",
"copiedToClipboard": "Copié dans le presse-papiers.",
"done": "Terminé",
"createUserTitle": "Créer un utilisateur",
"createUserDesc": "Créer un nouveau compte local.",
"createUserUsername": "Nom d'utilisateur",
"createUserPassword": "Mot de passe",
"createUserPasswordHint": "6 caractères minimum.",
"createUserEnterUsername": "Saisissez le nom d'utilisateur",
"createUserEnterPassword": "Saisissez le mot de passe",
"createUserSubmit": "Créer",
"editUserTitle": "Gérer l'utilisateur : {{username}}",
"editUserDesc": "Modifier les rôles, le statut administrateur, les sessions et les paramètres du compte.",
"editUserUsername": "Nom d'utilisateur",
"editUserAuthType": "Type d'authentification",
"editUserAdminStatus": "Statut administrateur",
"editUserUserId": "ID utilisateur",
"linkAccountTitle": "Lier des comptes",
"linkAccountDesc": "Fusionnez le compte externe {{username}} avec un compte local existant.",
"linkAccountDescLocal": "Associez un compte local {{username}} à un compte externe existant.",
"linkAccountWarningTitle": "Cela aura pour effet :",
"linkAccountEffect1": "Supprimer le compte externe uniquement",
"linkAccountEffect2": "Ajoutez son identifiant externe au compte cible",
"linkAccountEffect3": "Autoriser la connexion externe et par mot de passe",
"linkAccountTargetUsername": "Nom d'utilisateur du compte local",
"linkAccountTargetPlaceholder": "Saisissez le nom d'utilisateur du compte local à lier",
"linkAccountOidcUsername": "Nom d'utilisateur du compte externe",
"linkAccountOidcPlaceholder": "Saisissez le nom d'utilisateur du compte externe uniquement à fusionner.",
"linkAccountOidcNotFound": "Aucun compte externe n'a été trouvé avec ce nom d'utilisateur.",
"linkAccounts": "Lier les comptes",
"linkAccountSuccess": "Comptes liés avec succès",
"linkAccountFailed": "Échec de la liaison des comptes",
"linkAccountInProgress": "Liaison en cours…",
"unlinkAccountTitle": "Dissocier la connexion externe",
"unlinkAccountDesc": "Supprimez la connexion externe de {{username}}. Ils ne pourront se connecter qu'avec leur mot de passe.",
"unlinkAccountWarning": "Cette action désactivera la connexion externe à ce compte. L'utilisateur devra définir un mot de passe pour continuer à se connecter.",
"unlinkAccount": "Dissocier la connexion externe",
"unlinkAccountInProgress": "Dissociation en cours…",
"unlinkAccountSuccess": "Connexion externe non liée",
"unlinkAccountFailed": "Échec de la dissociation de la connexion externe",
"saving": "Enregistrement…",
"updateRegistrationFailed": "Échec de la mise à jour du paramètre d'enregistrement",
"updatePasswordLoginFailed": "Échec de la mise à jour du paramètre de connexion par mot de passe",
"updateOidcAutoProvisionFailed": "Échec de la mise à jour du paramètre de création automatique",
"updateSecondFactorAfterExternalLoginFailed": "Échec de la mise à jour du paramètre de deuxième facteur",
"updatePasswordResetFailed": "Échec de la mise à jour du paramètre de réinitialisation du mot de passe",
"sessionTimeoutRange2": "Le délai d'expiration de session doit être compris entre 1 et 720 heures",
"sessionTimeoutSaved": "Délai d'expiration de session enregistré",
"sessionTimeoutSaveFailed": "Échec de l'enregistrement du délai d'expiration de session",
"monitoringIntervalInvalid": "Valeurs d'intervalle invalides",
"monitoringSaved": "Paramètres de surveillance enregistrés",
"monitoringSaveFailed": "Échec de l'enregistrement des paramètres de surveillance",
"logLevelUpdateFailed": "Échec de la mise à jour du niveau de journalisation",
"createUserRequired": "Nom d'utilisateur et mot de passe requis",
"createUserPasswordTooShort": "Le mot de passe doit comporter au moins 6 caractères",
"createUserSuccess": "Utilisateur « {{username}} » créé",
"createUserFailed": "Échec de la création de l'utilisateur",
"updateAdminStatusFailed": "Échec de la mise à jour du statut d'administrateur",
"allSessionsRevoked": "Toutes les sessions révoquées",
"revokeSessionsFailed": "Échec de la révocation des sessions",
"manageUserData": "Gérer les données utilisateur",
"backToUsers": "Retour aux utilisateurs",
"manageTabAccount": "Compte",
"manageTabHosts": "Hôtes",
"manageTabCredentials": "Identifiants",
"manageTabSessions": "Sessions",
"manageTabDanger": "Danger",
"manageEditorBack": "Retour aux données de {{username}}",
"dataLockedBadge": "VERROUILLÉ",
"dataLockedNotice": "Les données de {{username}} restent verrouillées jusqu'à leur prochaine connexion. Leurs hôtes, identifiants et extraits ne peuvent être consultés ni modifiés d'ici là.",
"resetPasswordTitle": "Réinitialiser le mot de passe",
"resetPasswordOidcOnly": "Cet utilisateur se connecte via un fournisseur externe et n'a pas de mot de passe.",
"resetPasswordPlaceholder": "Nouveau mot de passe",
"resetPasswordBtn": "Réinitialiser",
"resetPasswordWorking": "Réinitialisation en cours...",
"resetPasswordSuccess": "Mot de passe réinitialisé",
"resetPasswordSuccessWiped": "Mot de passe réinitialisé. Les données chiffrées de l'utilisateur ont été effacées.",
"resetPasswordFailed": "Échec de la réinitialisation du mot de passe",
"resetPasswordConfirmWipe": "{{username}} ne s'est pas connecté depuis la mise à niveau du chiffrement, ses données ne peuvent donc pas être récupérées. La réinitialisation supprimera ses hôtes, identifiants et extraits. Continuer ?",
"manageApiKeys": "Clés API",
"apiKeyNamePlaceholder": "Nom de la clé",
"apiKeyCopyNotice": "Copiez cette clé maintenant, elle ne sera plus affichée.",
"noApiKeysForUser": "Aucune clé API",
"apiKeyDeleteFailed": "Échec de la suppression de la clé API",
"exportUserData": "Export des données",
"exportUserDataDesc": "Télécharger les hôtes, identifiants et données du gestionnaire de fichiers de cet utilisateur au format JSON. Les secrets sont déchiffrés.",
"exportUserDataSuccess": "Données utilisateur exportées",
"exportUserDataFailed": "Échec de l'exportation des données utilisateur",
"hostsCount": "{{count}} hôtes",
"addHostForUser": "Ajouter un hôte",
"noHostsForUser": "Cet utilisateur n'a aucun hôte",
"connectToHost": "Se connecter",
"deleteHostConfirm": "Supprimer l'hôte \"{{name}}\" appartenant à {{username}} ?",
"hostDeletedSuccess": "Hôte supprimé",
"hostDeleteFailed": "Échec de la suppression de l'hôte",
"credentialsCount": "{{count}} identifiants",
"addCredentialForUser": "Ajouter un identifiant",
"noCredentialsForUser": "Cet utilisateur n'a pas d'identifiants",
"deleteCredentialConfirm": "Supprimer l'identifiant \"{{name}}\" appartenant à {{username}} ?",
"credentialDeletedSuccess": "Identifiant supprimé",
"credentialDeleteFailed": "Échec de la suppression de l'identifiant",
"noSessionsForUser": "Aucune session active",
"deleteSuccessorLabel": "Transmettez les hôtes et les identifiants à",
"deleteSuccessorMe": "Moi (l'administrateur de suppression)",
"deleteSuccessorNone": "Personne, supprimez-les",
"deleteSuccessorDesc": "Tout ce que cet utilisateur a partagé continue de fonctionner sous le nouveau propriétaire ; choisir « personne » supprime ses hôtes, ses identifiants et ses partages.",
"deleteUserDangerDesc": "Supprimer définitivement {{username}} et toutes ses données (hôtes, identifiants, snippets, historique). Cette action est irréversible.",
"deleteUserConfirm": "Supprimer définitivement {{username}} et toutes ses données ?",
"deleteUserAdminBlocked": "Retirez le statut d'administrateur avant de supprimer cet utilisateur.",
"createRoleRequired": "Le nom et le nom d'affichage sont requis",
"createRoleSuccess": "Rôle \"{{name}}\" créé",
"createRoleFailed": "Échec de la création du rôle",
"apiKeyNameRequired": "Le nom de la clé est requis",
"apiKeyUserRequired": "L'identifiant utilisateur est requis",
"apiKeyCreatedSuccess": "Clé API \"{{name}}\" créée",
"apiKeyCreateFailed": "Échec de la création de la clé API",
"exportSuccess": "Base de données exportée avec succès",
"exportFailed": "Échec de l'exportation de la base de données",
"importSelectFile": "Veuillez d'abord sélectionner un fichier",
"importCompleted": "Importation terminée : {{total}} éléments importés, {{skipped}} ignorés",
"importFailed": "Échec de l'importation : {{error}}",
"importError": "Échec de l'importation de la base de données",
"sectionHostDefaults": "Paramètres par défaut de l'hôte",
"minutes": "minutes",
"rolePermissions": {
"count": "{{count}} permissions",
"editAction": "Modifier les permissions",
"loadError": "Impossible de charger le catalogue des permissions",
"saved": "Permissions du rôle sauvegardées",
"saveError": "Impossible de sauvegarder les permissions du rôle",
"save": "Enregistrer",
"saving": "Enregistrement...",
"pluginDisabled": "Fonctionnalité désactivée",
"groups": {
"hosts": "Hôtes",
"credentials": "Identifiants",
"admin": "Administration"
}
},
"notificationPrivateEndpoints": "Hôtes de notifications privées autorisés",
"notificationPrivateEndpointsDesc": "Indiquez précisément les hôtes privés que les canaux de notification peuvent contacter. Séparez-les par des virgules.",
"updateNotificationEndpointsFailed": "Échec de la mise à jour de la liste blanche du point de terminaison de notification",
"secondFactorsSectionTitle": "Deuxièmes facteurs",
"secondFactorsNone": "Aucun deuxième facteur n'a été enregistré",
"secondFactorUnavailable": "Indisponible",
"resetSecondFactors": "Réinitialiser les facteurs secondaires",
"resetSecondFactorsConfirm": "Supprimer un facteur sur deux pour {{username}}? Ils peuvent se connecter avec leur mot de passe ou SSO et s'inscrire à nouveau.",
"secondFactorsResetSuccess": "Réinitialisation des facteurs secondaires",
"secondFactorsResetFailed": "Échec de la réinitialisation des seconds facteurs",
"passwordLoginForced": "La connexion par mot de passe est désactivée, mais aucune autre méthode de connexion n'est activée ; elle reste donc active pour le moment. Personne ne sera bloqué.",
"sslNotRenewed": "Ce certificat n'est pas renouvelable. Il expire le {{date}}. Activez le renouvellement automatique dans la section Certificats ACME ou téléchargez-en un nouveau avant cette date.",
"sslSelfSigned": "Certificat auto-signé par Termix. Les navigateurs vous avertiront.",
"sslRenewedBy": "Renouvelé automatiquement par {{plugin}}",
"sslIssuer": "Émis par {{issuer}}",
"sslNames": "Couvertures {{names}}",
"sslManualTitle": "Téléverser un certificat",
"updateExternalAutoProvisionFailed": "Échec de la mise à jour du paramètre de création automatique"
},
"newUi": {
"sidebar": {
"quickConnect": {
"hostLabel": "Hôte",
"hostPlaceholder": "192.168.1.1 ou exemple.com",
"portLabel": "Port",
"portPlaceholder": "22",
"usernameLabel": "Nom d’utilisateur",
"usernamePlaceholder": "nom d’utilisateur",
"authLabel": "Authentification",
"passwordLabel": "Mot de passe",
"passwordPlaceholder": "mot de passe",
"privateKeyLabel": "Clé privée",
"privateKeyPlaceholder": "Coller la clé privée...",
"credentialLabel": "Identifiant",
"credentialPlaceholder": "Sélectionner un identifiant enregistré",
"protocolLabel": "Protocole",
"domainLabel": "Domaine",
"domainPlaceholder": "facultatif",
"connectToAction": "Se connecter à {{name}}",
"sshProtocol": "SSH",
"noTarget": "Aucun programme installé ne peut se connecter à ce type d'hôte."
},
"keybindings": {
"title": "Raccourcis clavier",
"description": "Associez des touches à des actions dans le terminal et l'application, ou modifiez les raccourcis intégrés.",
"defaultsHeading": "Raccourcis intégrés",
"fixedHeading": "Raccourcis d'application",
"fixed": {
"splitRight": "Diviser à droite",
"splitDown": "Diviser en bas",
"zoomPane": "Effectuez un zoom sur la fenêtre sélectionnée",
"navigatePane": "Passer d'un volet à l'autre",
"nextTab": "Onglet suivant",
"previousTab": "Onglet précédent",
"jumpTab": "Aller à l'onglet",
"previousView": "Retour à la vue précédente de la barre latérale",
"fullscreen": "Basculer vers le plein écran"
},
"customHeading": "Raccourcis personnalisés",
"addBinding": "Ajouter un raccourci",
"addBindingTitle": "Ajouter un raccourci",
"editBindingTitle": "Modifier le raccourci",
"loading": "Chargement...",
"noCustomBindings": "Aucun raccourci personnalisé pour le moment",
"defaultBadge": "Défaut",
"customizedBadge": "Personnalisé",
"customize": "Personnaliser",
"resetToDefault": "Réinitialiser par défaut",
"resetAllToDefaults": "Réinitialiser tout aux valeurs par défaut",
"close": "Fermer",
"cancel": "Annuler",
"saveBinding": "Enregistrer le raccourci",
"saveError": "Impossible d'enregistrer les raccourcis clavier.",
"pressKeysToRecord": "Combinaison de clés",
"pressKeysPlaceholder": "Cliquez et appuyez sur les touches",
"recording": "Appuyez sur les touches...",
"comboRequiredError": "Appuyez d'abord sur une combinaison de touches",
"conflictWarning": "Cette combinaison est déjà liée à {{combo}}. Sauvegarder déclenchera les deux.",
"actionLabel": "Action",
"actionNextTab": "Passer à l'onglet suivant",
"actionPreviousTab": "Passer à l'onglet précédent",
"actionOpenCommandPalette": "Ouvrir la recherche rapide",
"actionReconnectSession": "Reconnecter la session actuelle",
"unavailableAction": "{{type}} (non disponible)",
"actionRequiredError": "Choisissez d'abord une action"
},
"userProfile": {
"donateTitle": "Soutenir Termix",
"donateDescription": "Termix est gratuit, auto-hébergé et conçu par seulement quelques personnes pendant leur temps libre. Si cela vous a fait gagner du temps ou de l'argent, un don en crypto aide à le maintenir.",
"donateMilestones": "Les dons aident à financer le temps de recherche et d'apprentissage nécessaire pour développer le support SAML, Kubernetes et Agent. Voir les progrès et faire un don.",
"donateButton": "Faire un don en crypto",
"storageModeLocal": "Navigateur",
"storageModeCloud": "Base de données",
"storageModeDescription": "Le navigateur stocke les paramètres uniquement dans ce navigateur. La base de données synchronise avec le serveur et charge sur n'importe quel appareil.",
"resetToDefaults": "Réinitialiser aux valeurs par défaut",
"resetToDefaultsSuccess": "Paramètres réinitialisés aux valeurs par défaut.",
"storageModeSwitch": "Stockage des préférences",
"sectionAccount": "Compte",
"desktopProfileTitle": "Cet appareil uniquement",
"desktopProfileDescription": "Ce profil est stocké sur cet appareil et se connecte automatiquement. Associez-le à un serveur Termix pour utiliser les mêmes hôtes et paramètres sur tous les appareils.",
"sectionInterface": "Interface",
"interfacePresetDesc": "Le niveau de détail affiché par Termix est impressionnant. Toutes les fonctionnalités restent disponibles.",
"preset_simple": "Simple",
"preset_simple_desc": "L'essentiel seulement.",
"preset_balanced": "Équilibré",
"preset_balanced_desc": "La disposition standard.",
"preset_advanced": "Avancé",
"preset_advanced_desc": "Tout est allumé, très serré.",
"presetClearOverrides": "Réinitialiser tout",
"presetOverridesTitle": "Personnalisé",
"presetRevertArea": "Revenir",
"presetConfirmTitle": "Passer à {{preset}}?",
"presetConfirmDesc": "Cette opération réinitialise votre barre latérale, votre navigation, la disposition de votre tableau de bord, votre barre d'outils du terminal et l'affichage de votre gestionnaire de fichiers. Vos hôtes, vos identifiants et votre page d'accueil restent inchangés.",
"presetConfirmApply": "Appliquer le préréglage",
"runSetupAgainDesc": "Reprenez la configuration initiale.",
"runSetupAgainButton": "Exécuter la configuration",
"uiArea_chrome": "Application Chrome",
"uiArea_hostList": "Liste des hôtes",
"uiArea_credentialList": "Liste des références",
"uiArea_rail": "Navigation",
"uiArea_dashboard": "Tableau de bord",
"uiArea_terminal": "Terminal",
"uiArea_fileManager": "Gestionnaire de fichiers",
"uiArea_hostEditor": "Éditeur hôte",
"sectionAppearance": "Apparence",
"sectionSecurity": "Sécurité",
"sectionApiKeys": "Clés API",
"sectionData": "Données",
"usernameLabel": "Nom d'utilisateur",
"roleLabel": "Rôle",
"roleAdministrator": "Administrateur",
"authMethodLabel": "Méthode d'authentification",
"authMethodLocal": "Local",
"twoFaLabel": "2FA",
"twoFaOn": "Activée",
"twoFaOff": "Désactivée",
"versionLabel": "Version",
"betaProgramTitle": "Programme bêta",
"betaProgramDescription": "Essayez les fonctionnalités à venir en avance avec le tag Docker :beta à rolling hebdomadaire. Instable, pas pour la production.",
"betaProgramFeedback": "Un bug trouvé ? Signalez-le ici.",
"betaProgramLearnMore": "En savoir plus",
"cliTitle": "Ligne de commande Termix",
"cliDescription": "Ouvrez des terminaux, exécutez des commandes et déplacez des fichiers depuis votre propre shell.",
"cliLearnMore": "Apprendre encore plus",
"deleteAccount": "Supprimer le compte",
"deleteAccountDescription": "Supprimer définitivement votre compte",
"changeServerDescription": "Basculer vers un autre serveur backend Termix",
"deleteButton": "Supprimer",
"deleteAccountPermanent": "Cette action est permanente et ne peut être annulée.",
"deleteAccountWarning": "Toutes les sessions, les hôtes, les identifiants et les paramètres seront définitivement supprimés.",
"confirmPasswordDeletePlaceholder": "Saisissez votre mot de passe pour confirmer",
"languageLabel": "Langue",
"themeLabel": "Thème",
"fontSizeLabel": "Taille de la police",
"interfaceFontLabel": "Police d'interface",
"interfaceFontDescription": "Modifie la police de l'interface de l'application. Les profils de terminal conservent leurs propres paramètres de police.",
"accentColorLabel": "Couleur d’accentuation",
"keyboardShortcuts": "Raccourcis clavier",
"keyboardShortcutsDescription": "Personnalisez les raccourcis de copie, de collage et de commandes du terminal",
"manageShortcuts": "Gérer",
"historyTracking": "Suivi de l’historique",
"historyTrackingDesc": "Suivre les commandes du terminal",
"commandPalette": "Palette de commandes",
"commandPaletteDesc": "Activer le raccourci clavier",
"reopenTabsOnLogin": "Rouvrir les onglets à la connexion",
"reopenTabsOnLoginDesc": "Restaurer vos onglets ouverts lors de la connexion ou du rafraîchissement de la page, même depuis un autre appareil",
"confirmTabClose": "Confirmer la fermeture des onglets",
"confirmTabCloseDesc": "Demander avant de fermer les onglets du terminal",
"showTabNumbers": "Afficher les numéros d'onglet",
"showTabNumbersDesc": "Afficher un numéro sur chaque onglet pour faciliter leur distinction.",
"settingsAppRail": "App Rail",
"sidebarSettingsMoved": "Les paramètres d'affichage de la barre latérale de l'hôte ont été déplacés vers le panneau « Personnaliser la barre latérale », accessible depuis la barre d'outils Hôtes.",
"showHostTags": "Afficher les étiquettes d’hôte",
"showHostTagsDesc": "Afficher les étiquettes dans la liste des hôtes",
"hostTrayOnClick": "Cliquer pour développer les actions de l’hôte",
"hostTrayOnClickDesc": "Toujours afficher les boutons de connexion ; cliquer pour développer les options de gestion au lieu de survoler",
"compactHostView": "Vue hôte compacte",
"compactHostViewDesc": "Réduire chaque hôte à une seule ligne affichant uniquement son nom et son adresse",
"statusColors": "Couleurs d’état réelles",
"statusColorsDesc": "Utiliser vert/rouge pour l’état en ligne/hors ligne au lieu de la couleur d’accentuation",
"pinAppRail": "Épingler la barre d’applications",
"pinAppRailDesc": "Garder la barre d’applications de la barre latérale gauche toujours développée au lieu de se développer au survol",
"openFullscreenSettings": "Ouvrir les paramètres en plein écran",
"exitFullscreenSettings": "Quitter les paramètres plein écran",
"expandAppRailOnHover": "Développer la barre d’applications au survol",
"expandAppRailOnHoverDesc": "Permettre à la barre d’applications de la barre latérale gauche de se développer lorsque le pointeur la survole",
"showPinAppRailButton": "Afficher le bouton de l'application Pin Rail",
"showPinAppRailButtonDesc": "Afficher un bouton dans la barre d'application pour l'épingler ouverte. Désactivé par défaut.",
"settingsNavigation": "Navigation",
"navigationTabsDesc": "Choisir les onglets affichés dans la barre latérale de l'application",
"showSnippetCommands": "Afficher les commandes",
"showSnippetCommandsDesc": "Afficher la commande de chaque extrait de code sous son nom. Désactiver cette option pour une liste compacte.",
"foldersCollapsed": "Dossiers réduits",
"foldersCollapsedDesc": "Réduire les dossiers par défaut",
"confirmExecution": "Confirmer l'exécution",
"confirmExecutionDesc": "Confirmer avant d'exécuter des snippets",
"settingsUpdates": "Mises à jour",
"disableUpdateChecks": "Désactiver la vérification des mises à jour",
"disableUpdateChecksDesc": "Ne plus vérifier les mises à jour",
"changePassword": "Modifier le mot de passe",
"currentPasswordLabel": "Mot de passe actuel",
"currentPasswordPlaceholder": "Mot de passe actuel",
"newPasswordLabel": "Nouveau mot de passe",
"newPasswordPlaceholder": "Nouveau mot de passe",
"confirmPasswordLabel": "Confirmer le nouveau mot de passe",
"confirmPasswordPlaceholder": "Confirmer le nouveau mot de passe",
"updatePassword": "Mettre à jour le mot de passe",
"createApiKeyTitle": "Créer une clé API",
"createApiKeyDescription": "Générer une nouvelle clé API pour un accès programmatique.",
"apiKeyNameLabel": "Nom",
"apiKeyNamePlaceholder": "par ex. Pipeline CI",
"expiryDateLabel": "Date d'expiration",
"optional": "optionnel",
"cancel": "Annuler",
"createKey": "Créer la clé",
"apiKeyCreatedWarning": "Clé créée - copiez-la maintenant, elle ne sera plus affichée.",
"copyApiKey": "Copier la clé API",
"copiedToClipboard": "Copié dans le presse-papiers",
"apiKeyCount": "{{count}} clés",
"newKey": "Nouvelle clé",
"noApiKeys": "Aucune clé API pour le moment.",
"apiKeyActive": "Active",
"apiKeyUsageHint": "Incluez votre clé dans l’",
"apiKeyUsageHintHeader": "en-tête.",
"apiKeyPermissionsHint": "Les clés héritent des autorisations de l’utilisateur qui les a créées.",
"exportData": "Exporter mes données",
"exportDataDesc": "Téléchargez une sauvegarde de vos hôtes, identifiants et paramètres pour les transférer sur un autre appareil.",
"export": "Exporter",
"exporting": "Exportation...",
"importData": "Importer mes données",
"importDataDesc": "Restaurez vos hôtes, identifiants et paramètres à partir d'un fichier de sauvegarde .sqlite",
"importDataSelected": "Sélectionné : {{name}}",
"selectFile": "Sélectionner un fichier",
"changeFile": "Changement",
"import": "Importer",
"importing": "Importation en cours...",
"exportSuccess": "Données exportées avec succès",
"exportFailed": "L'exportation des données a échoué.",
"importSelectFile": "Veuillez d'abord sélectionner un fichier",
"importCompleted": "Importation terminée : {{total}} éléments importés, {{skipped}} ignorés",
"importFailed": "Échec de l'importation : {{error}}",
"roleUser": "Utilisateur",
"authMethodDual": "Authentification double",
"authMethodOidc": "Externe",
"done": "Terminé",
"apiKeyNameRequired": "Le nom de la clé est requis",
"apiKeyCreated": "Clé API \"{{name}}\" créée",
"apiKeyCreateFailed": "Échec de la création de la clé API",
"apiKeyUser": "Utilisateur",
"apiKeyExpires": "Expiration",
"apiKeyRevoked": "Clé API \"{{name}}\" révoquée",
"apiKeyRevokeFailed": "Échec de la révocation de la clé API",
"passwordFieldsRequired": "Les mots de passe actuel et nouveau sont requis",
"passwordMismatch": "Les mots de passe ne correspondent pas",
"passwordTooShort": "Le mot de passe doit contenir au moins 6 caractères",
"passwordUpdated": "Mot de passe mis à jour avec succès",
"passwordUpdateFailed": "Échec de la mise à jour du mot de passe",
"deletePasswordRequired": "Le mot de passe est requis pour supprimer votre compte",
"deleteFailed": "Échec de la suppression du compte",
"deleting": "Suppression...",
"colorPickerTooltip": "Ouvrir le sélecteur de couleurs",
"themeSystem": "Système",
"themeLight": "Clair",
"themeDark": "Sombre",
"themeDracula": "Dracula",
"themeCatppuccin": "Catppuccin",
"themeNord": "Nord",
"themeSolarized": "Solarized",
"themeTokyoNight": "Tokyo Night",
"themeOneDark": "One Dark",
"themeGruvbox": "Gruvbox",
"linkedProfileTitle": "Connecté à {{server}}",
"linkedProfileDescription": "Cet appareil utilise votre compte sur le serveur et conserve une copie de vos données, il fonctionne donc même hors ligne.",
"manageSync": "Gérer la synchronisation",
"setUpSync": "Lien vers un serveur",
"settingsTabsAndShortcuts": "Onglets et raccourcis"
}
}
},
"terminalToolbar": {},
"plugins": {
"capabilities": {
"credentials:read": {
"title": "Consultez vos mots de passe et clés",
"consequence": "Il peut lire le secret stocké pour n'importe quel hôte accessible."
},
"ssh:connect": {
"title": "Exécutez des commandes sur vos serveurs",
"consequence": "Toute commande, sur les hôtes auxquels vous vous connectez, avec votre accès."
},
"process:spawn": {
"title": "Exécutez des programmes sur cette machine",
"consequence": "Les programmes s'exécutent sur le serveur Termix lui-même, et non sur vos hôtes."
},
"users:write": {
"title": "Créer et modifier des comptes d'utilisateurs",
"consequence": "Il permet d'ajouter des utilisateurs et de modifier leurs rôles."
},
"auth:provide": {
"title": "Identifiant de la prise en charge",
"consequence": "Il peut ajouter une méthode de connexion, un deuxième facteur ou un type de connexion SSH."
},
"system:tls": {
"title": "Gérer les certificats",
"consequence": "Il peut remplacer le certificat que Termix sert via HTTPS et répondre aux vérifications de domaine effectuées par les autorités de certification."
},
"device:serial": {
"title": "Accéder aux périphériques série et USB",
"consequence": "Il peut ouvrir un port série physique sur la machine exécutant Termix."
},
"hosts:write": {
"title": "Créer et modifier les hôtes",
"consequence": "Il permet d'ajouter des hôtes et de modifier ceux que vous avez déjà."
},
"credentials:use": {
"title": "Connectez-vous à vos serveurs",
"consequence": "Il ne peut pas voir vos mots de passe ni vos clés."
},
"credentials:write": {
"title": "Enregistrer les nouveaux identifiants",
"consequence": "Il peut ajouter des mots de passe et des clés à vos identifiants enregistrés."
},
"network:outbound": {
"title": "Accéder à Internet",
"consequence": "Il peut envoyer des requêtes à des services externes."
},
"network:serve": {
"title": "Accepter les connexions",
"consequence": "Il ouvre un port sur le serveur Termix."
},
"network:broadcast": {
"title": "Diffuser des messages sur le réseau",
"consequence": "Il peut envoyer des paquets à des périphériques du réseau local, comme un signal Wake-on-LAN."
},
"users:read": {
"title": "Voir les noms d'utilisateur et les rôles",
"consequence": "Jamais de hachage de mot de passe, jamais d'authentification à deux facteurs."
},
"events:core": {
"title": "Regardez tout ce qui se passe",
"consequence": "Y compris l'activité des autres utilisateurs, pas seulement la vôtre."
},
"notify:send": {
"title": "Envoyer des alertes",
"consequence": "À vous ou à d'autres utilisateurs, et par le biais des canaux qu'ils mettent en place."
},
"notify:hub": {
"title": "Recevez toutes les alertes",
"consequence": "Stocke et transmet les alertes envoyées par tous les plugins, y compris leur contenu."
},
"audit:read": {
"title": "Consultez le journal d'audit",
"consequence": "Il permet de voir qui a fait quoi et quand."
},
"desktop:window": {
"title": "Ouvrir les fenêtres du bureau",
"consequence": "Uniquement dans l'application de bureau Termix."
},
"users:impersonate": {
"title": "Agir comme les autres utilisateurs",
"consequence": "Exécute des tâches en arrière-plan avec les droits d'un autre utilisateur, comme des tâches planifiées. Chaque utilisation est consignée dans le journal d'audit."
},
"db:core-refs": {
"title": "Consultez les tableaux des comptes principaux",
"consequence": "Permet d'interroger directement la base de données les utilisateurs, les rôles et les hôtes."
},
"hosts:read": {
"title": "Consultez votre liste d'hôtes",
"consequence": "Vous pouvez déjà voir les noms et adresses des hôtes."
},
"db:own": {
"title": "Stocke ses propres données",
"consequence": "Conservé dans ses propres tables, séparées des autres plugins."
},
"kv:own": {
"title": "N'oubliez pas les petits réglages",
"consequence": "Conservé séparément des autres plugins."
},
"files:own": {
"title": "Stocke ses propres fichiers",
"consequence": "Dans son propre dossier sur le disque, séparé des autres plugins."
},
"secrets:own": {
"title": "Elle renferme ses propres secrets",
"consequence": "Chiffré par Termix. Le plugin ne détient jamais la clé."
},
"settings:read-core": {
"title": "Lire les paramètres Termix",
"consequence": "Paramètres du serveur, et non vos hôtes ou identifiants."
},
"plugins:read": {
"title": "Voir les fonctionnalités installées",
"consequence": "Il peut voir quelles fonctionnalités sont installées et en cours d'exécution."
},
"ui:surface": {
"title": "Ajouter ses propres écrans",
"consequence": "Onglets, panneaux et paramètres que vous pouvez masquer ultérieurement."
}
},
"runtime": {
"needsPlugin": "{{name}} n'est pas disponible",
"needsUnknownPlugin": "Cette fonctionnalité n'est pas disponible.",
"disabledHint": "Cette fonction est désactivée sur ce serveur.",
"missingHint": "La fonctionnalité dont elle provenait a été supprimée.",
"failed": "{{name}} n'a pas pu démarrer",
"failedHint": "Un administrateur peut consulter les journaux du serveur pour plus de détails.",
"loading": "Chargement {{name}}",
"crashed": "Une erreur s'est produite dans {{name}}",
"retry": "Essayer à nouveau"
}
},
"settings": {
"secretSet": "Ensemble",
"secretNotSet": "Non défini",
"secretReplace": "Remplacer",
"pluginSettingsSaved": "Paramètres enregistrés",
"pluginSettingsInvalid": "Certains paramètres n'ont pas pu être enregistrés. Veuillez vérifier les champs mis en évidence.",
"pluginSettingsSaveFailed": "Impossible d'enregistrer les paramètres",
"pluginSettingsLoadFailed": "Échec du chargement des paramètres",
"featureUnavailable": "{{name}} est actuellement indisponible. Ces paramètres sont enregistrés mais ne seront pas pris en compte."
},
"managerCard": {
"refresh": "Actualiser",
"retry": "Réessayer",
"sudoHint": "Définissez un mot de passe sudo pour cet hôte dans l'éditeur d'hôte pour activer les actions privilégiées.",
"noData": "Aucune donnée",
"filter": "Filtrer..."
},
"sync": {
"server": "Serveur Termix",
"account": "Compte",
"status": "État",
"never": "jamais",
"justNow": "à l’instant",
"minutesAgo_one": "{{count}} il y a une minute",
"minutesAgo_other": "{{count}} minutes il y a",
"hoursAgo_one": "{{count}} il y a une heure",
"hoursAgo_other": "{{count}} il y a des heures",
"actionFailed": "Cela n'a pas fonctionné. Veuillez réessayer.",
"unlinkedTitle": "Cet appareil uniquement",
"unlinkedBody": "Termix fonctionne de manière autonome sur cet appareil. Connectez-le à votre serveur Termix pour assurer la synchronisation.",
"unlinkedPointHosts": "Vos hôtes, identifiants, extraits de code et paramètres vous suivent sur tous vos appareils.",
"unlinkedPointOffline": "Tout continue de fonctionner même lorsque le serveur est inaccessible, et reprend son fonctionnement normal plus tard.",
"unlinkedPointAccount": "Vous vous connectez avec votre compte serveur, et les serveurs avec lesquels d'autres personnes ont partagé des fichiers apparaissent également ici.",
"linkButton": "Lien vers un serveur",
"state": {
"syncing": "Synchronisation",
"offline": "Serveur inaccessible",
"error": "La synchronisation s'est arrêtée.",
"signedOut": "Déconnexion",
"synced": "Synchronisé {{time}}"
},
"pending_one": "{{count}} Changement en attente de synchronisation",
"pending_other": "{{count}} modifications en attente de synchronisation",
"signInAgain": "Se reconnecter",
"syncNow": "Synchroniser maintenant",
"unlink": "Dissocier",
"unlinked": "Cet appareil n'est plus connecté",
"unlinkTitle": "Dissocier cet appareil ?",
"unlinkDescription": "La synchronisation s'interrompt et la connexion au serveur est coupée. Les hôtes partagés avec vous par d'autres utilisateurs sont de toute façon supprimés de cet appareil.",
"unlinkKeepTitle": "Conservez mes données ici",
"unlinkKeepBody": "Vos hôtes, identifiants et paramètres restent sur cet appareil et continuent de fonctionner automatiquement.",
"unlinkRemoveTitle": "Supprimer les données synchronisées",
"unlinkRemoveBody": "Tout ce qui provient du serveur est supprimé de cet appareil. Seuls les hôtes hébergés sur cet appareil restent présents.",
"conflictsTitle": "Conflits",
"conflictsDescription": "Ces modifications ont été effectuées simultanément ici et sur le serveur. C'est la version serveur qui est utilisée. Veuillez conserver votre version pour l'envoyer au serveur.",
"keepMine": "Garde le mien",
"keepServer": "Serveur de stockage",
"errorsTitle": "Non synchronisé",
"errorsDescription": "Le serveur n'a pas accepté ces modifications. Elles restent sur cet appareil.",
"errorPermission": "Votre compte sur le serveur n'est pas autorisé à effectuer cette modification.",
"retry": "Essayer à nouveau",
"whatSyncs": "Qu'est-ce qui se synchronise ?",
"whatSyncsDescription": "Désactivez tout ce que vous souhaitez conserver uniquement sur cet appareil.",
"coreGroup": "Termix",
"notOnServer": "Le serveur ne possède pas ceci",
"notOnDevice": "Pas encore installé sur cet appareil",
"localOnlyHint": "Vous pouvez également conserver des hôtes ou des dossiers individuels sur cet appareil à partir de leurs paramètres.",
"originTitle": "Là où les connexions commencent",
"originDescription": "Connectez-vous aux hôtes depuis cet appareil ou via le serveur. Vous pouvez modifier ce paramètre pour chaque hôte.",
"originLocal": "Cet appareil",
"originRemote": "Le serveur",
"entities": {
"hosts": "Hôtes",
"sshCredentials": "Identifiants",
"sshFolders": "Dossiers",
"userPreferences": "Préférences",
"pluginUserSettings": "Paramètres des fonctionnalités",
"sharedHosts": "Les hôtes ont partagé avec vous",
"sharedCredentials": "Identifiants partagés avec vous",
"vaultProfiles": "Profils Vault",
"snippetFolders": "Dossiers d'extraits",
"snippets": "Snippets",
"dashboardServiceLinks": "Liens de service",
"homepageItems": "Éléments de la page d'accueil",
"networkTopology": "Carte du réseau",
"workspaces": "Espaces de travail"
},
"proxy": {
"title": "proxy inverse",
"description": "Uniquement nécessaire lorsqu'un service comme Cloudflare Access ou une page de connexion se trouve devant votre serveur.",
"headersTitle": "En-têtes supplémentaires",
"headersHint": "Envoyé avec chaque requête au serveur, par exemple un jeton de service Cloudflare Access.",
"headerName": "Nom de l'en-tête",
"headerValue": "Valeur",
"savedValue": "Enregistré, saisissez pour modifier",
"addHeader": "Ajouter un en-tête",
"removeHeader": "Supprimer l'en-tête",
"basicAuthTitle": "Nom d'utilisateur et mot de passe",
"basicAuthHint": "Pour un proxy qui demande un nom d'utilisateur et un mot de passe avant Termix.",
"username": "Nom d’utilisateur",
"password": "Mot de passe",
"allowInvalidCertificate": "Faire confiance à un certificat auto-signé",
"allowInvalidCertificateHint": "Uniquement pour votre propre serveur, lorsque son certificat ne provient pas d'une autorité reconnue.",
"saved": "Enregistré"
},
"problems": {
"invalidUrl": "Cela ne ressemble pas à une adresse web.",
"unreachable": "Impossible de joindre le serveur. Veuillez vérifier l'adresse et vous assurer que le serveur est en cours d'exécution.",
"unreachableWithReason": "Impossible de joindre le serveur : {{reason}}",
"tlsUntrusted": "Le certificat du serveur n'est pas approuvé. S'il s'agit de votre propre serveur avec un certificat auto-signé, activez l'option ci-dessous.",
"basicAuthRequired": "Un élément devant le serveur vous demande un nom d'utilisateur et un mot de passe. Veuillez les saisir ci-dessous.",
"proxyLogin": "Une page de connexion ou un proxy a répondu à la place de Termix. Ajoutez les en-têtes nécessaires ci-dessous ou vérifiez l'adresse.",
"notTermix": "Il n'existe aucun serveur Termix à cette adresse. S'il est accessible via un chemin d'accès, veuillez l'indiquer, par exemple : https://example.com/termix.",
"versionMismatch": "Ce serveur utilise une ancienne version de Termix. Veuillez la mettre à jour vers la version 2.9 ou une version plus récente pour établir la connexion.",
"differentAccount": "Vous vous êtes connecté à un autre compte. Connectez-vous au compte auquel cet appareil est associé, ou dissociez-le d'abord."
},
"wizard": {
"title": "Lien vers un serveur Termix",
"reloginTitle": "Se reconnecter",
"savedServers": "Serveurs récents",
"removeServer": "Retirer de la liste",
"serverDescription": "Saisissez l'adresse que vous utilisez pour ouvrir Termix dans votre navigateur.",
"signinDescription": "Connectez-vous à {{url}}",
"chooseDescription": "Cet appareil contient déjà des données. Que faut-il en faire ?",
"finishingDescription": "Connexion de cet appareil.",
"serverUrl": "Adresse du serveur",
"serverUrlHint": "Par exemple, https://termix.example.com",
"showProxySettings": "Paramètres du proxy inverse",
"hideProxySettings": "Masquer les paramètres du proxy inverse",
"continue": "Continuer",
"back": "Retour",
"mergeTitle": "Ajouter à mon compte",
"mergeBody": "Les éléments {{count}} présents sur cet appareil sont ajoutés à votre compte. Les éléments déjà présents sur votre compte restent tels quels sur le serveur.",
"replaceTitle": "Remplacez-le par mon compte",
"replaceBody": "Les éléments {{count}} présents sur cet appareil sont supprimés, et cet appareil récupère tout le contenu de votre compte. Seuls les hôtes conservés sur cet appareil restent.",
"link": "Lien",
"linking": "Liaison et exécution de la première synchronisation...",
"linked": "Connexion établie. Vos données sont en cours de synchronisation.",
"signedInAgain": "Connexion réussie. La synchronisation est de nouveau en cours."
}
},
"hostDefaults": {
"source": {
"folder": "Dossier {{name}}",
"user": "Mes paramètres par défaut",
"admin": "Serveur",
"builtin": "Intégré"
},
"custom": "Personnalisé",
"setHere": "Défini ici",
"notSet": "Non défini",
"notSetTitle": "Aucune valeur par défaut n'est définie pour cela",
"resetTitle": "Cet hôte définit sa propre valeur. Cliquez pour utiliser à nouveau la valeur par défaut de {{source}}",
"clearTitle": "Définissez ce niveau. Cliquez pour l'effacer et utilisez plutôt {{source}}",
"inheritedTitle": "Suit la valeur par défaut de {{source}}",
"titleAdmin": "paramètres par défaut de l'hôte du serveur",
"titleUser": "Paramètres par défaut de mon hôte",
"titleFolder": "Paramètres par défaut du dossier : {{name}}",
"descriptionAdmin": "Valeurs par défaut pour chaque hôte sur ce serveur. Les valeurs par défaut d'un utilisateur, d'un dossier ou de l'hôte lui-même peuvent être différentes. Modifiez un champ pour le définir ici, ou effacez-le pour le laisser non défini.",
"descriptionUser": "Valeurs par défaut pour tous vos hôtes, au détriment de celles du serveur. Un dossier ou l'hôte lui-même peut toutefois définir une valeur différente. Modifiez un champ pour la définir ici, ou effacez-le pour la laisser non définie.",
"descriptionFolder": "Ces valeurs par défaut s'appliquent aux hôtes de ce dossier et de ses sous-dossiers, et non aux vôtres. Un hôte peut toutefois définir une valeur différente. Modifiez un champ pour la définir ici, ou effacez-le pour la laisser non définie.",
"save": "Enregistrer les paramètres par défaut",
"saved_one": "Paramètres par défaut enregistrés. L'hôte {{count}} a été mis à jour.",
"saved_other": "Valeurs par défaut enregistrées. {{count}} hôtes ont été mis à jour.",
"savedInBackground": "Paramètres par défaut enregistrés. Mise à jour des hôtes en cours en arrière-plan.",
"appliedToHosts_one": "L'hôte {{count}} a été mis à jour avec les nouvelles valeurs par défaut.",
"appliedToHosts_other": "Les hôtes {{count}} ont été mis à jour avec les nouvelles valeurs par défaut.",
"saveFailed": "Impossible d'enregistrer les paramètres par défaut.",
"loadFailed": "Impossible de charger les valeurs par défaut",
"confirmTitle": "Enregistrer les paramètres par défaut ?",
"confirmChanges_one": "L'hôte {{count}} suit ces valeurs par défaut et changera.",
"confirmChanges_other": "Les hôtes {{count}} suivent ces valeurs par défaut et changeront.",
"confirmNoChanges": "Aucune modification apportée aux hôtes existants. Les nouveaux hôtes utiliseront ces paramètres par défaut.",
"menuMyDefaults": "Paramètres par défaut de mon hôte",
"folderDefaultsAction": "Paramètres par défaut du dossier",
"adminSectionDescription": "Définissez les valeurs par défaut que chaque hôte de ce serveur suivra, pour chaque paramètre propre à un hôte, y compris ceux de chaque fonctionnalité. Les utilisateurs et les dossiers peuvent définir leurs propres valeurs par-dessus, et chaque hôte peut toujours utiliser ses propres valeurs.",
"editServerDefaults": "Modifier les paramètres par défaut du serveur",
"resetMenu": "Réinitialiser",
"resetAll": "Tout par défaut",
"resetCore": "Connexion et SSH par défaut",
"resetDone_one": "L'hôte {{count}} suit désormais ses valeurs par défaut.",
"resetDone_other": "Les hôtes {{count}} suivent désormais leurs valeurs par défaut."
}
}