@vantran-se/openchamber-web 2.1.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -24
- package/bin/cli.js +1 -3
- package/bin/cli.test.js +40 -16
- package/bin/lib/DOCUMENTATION.md +6 -5
- package/bin/lib/cli-args.js +6 -1
- package/bin/lib/cli-args.test.js +34 -0
- package/bin/lib/cli-lifecycle.js +0 -1
- package/bin/lib/cli-network.js +8 -2
- package/bin/lib/cli-process.js +1 -1
- package/bin/lib/cli-settings-accessors.test.js +21 -13
- package/bin/lib/cli-startup.js +17 -11
- package/bin/lib/cli-startup.test.js +92 -2
- package/bin/lib/commands-connect-url.js +8 -1
- package/bin/lib/commands-schedule.js +8 -2
- package/bin/lib/commands-serve.js +15 -21
- package/bin/lib/commands-update.js +12 -24
- package/bin/lib/commands-update.test.js +14 -46
- package/dist/assets/DiffView-Cv9MSXl1.js +4 -0
- package/dist/assets/FilePreviewCommentMenu-D4kLseHj.js +4 -0
- package/dist/assets/FilesView-BVoD8I2x.js +14 -0
- package/dist/assets/{GitView-DzuzhIPx.js → GitView-Bzb8p-ew.js} +4 -4
- package/dist/assets/GuestSurfacePane-Crdbvsxo.js +1 -0
- package/dist/assets/InProgressOperationBanner-CwMjNQgk.js +2 -0
- package/dist/assets/{JsonTreeView-B_EPRjzy.js → JsonTreeView-DRKHZfsn.js} +1 -1
- package/dist/assets/MarkdownImageGallery-DZtqT1Zn.js +1 -0
- package/dist/assets/MarkdownRendererImpl-CqG7HCNd.js +10 -0
- package/dist/assets/OnboardingScreen-DMIxwYK5.js +1 -0
- package/dist/assets/{PatchDiff-6yh1csza.js → PatchDiff-CUcCg1jk.js} +1 -1
- package/dist/assets/PierreDiffViewer-CnnR-dnD.js +228 -0
- package/dist/assets/PlanView-RCBadcY7.js +5 -0
- package/dist/assets/SettingsView-CjBjZFRO.js +30 -0
- package/dist/assets/SettingsWindow-DyM7QuhI.js +1 -0
- package/dist/assets/SubmoduleDiffSummary-BWIfgMED.js +1 -0
- package/dist/assets/ToolOutputDialog-Q0P3FuAi.js +15 -0
- package/dist/assets/ToolPartDiffPreview-p7qR9FpU.js +8 -0
- package/dist/assets/{VirtualizedFileDiff-BTJVRkyo.js → VirtualizedFileDiff-CFpjL8Ns.js} +3 -3
- package/dist/assets/{Virtualizer-xCEYz34p.js → Virtualizer-C0IsclZn.js} +1 -1
- package/dist/assets/WalkthroughView-DI31zD02.js +4 -0
- package/dist/assets/appThemeRegistry-B9gkFq9i.js +1 -0
- package/dist/assets/{computeVirtualFileMetrics-CmPe29DM.js → computeVirtualFileMetrics-C2WM6JC2.js} +2 -2
- package/dist/assets/de-YKfk5MmC.js +14 -0
- package/dist/assets/es-_gwT0kr-.js +20 -0
- package/dist/assets/fileTreeStatus-D438yi8M.js +1 -0
- package/dist/assets/fr-DqzvXmIm.js +18 -0
- package/dist/assets/index-BLaHKdtx.js +1 -0
- package/dist/assets/index-BkMXRrVQ.css +1 -0
- package/dist/assets/index-DxNa7xYB.js +65 -0
- package/dist/assets/initializeSharedPreferences-Bck5EAWP.js +1 -0
- package/dist/assets/{isDiffPlainText-CQmDCnEv.js → isDiffPlainText-Dgbw8VKk.js} +1 -1
- package/dist/assets/{isFilePlainText-CYBUzW4I.js → isFilePlainText-_ZS5UYRj.js} +1 -1
- package/dist/assets/ja-B-GFYhQE.js +20 -0
- package/dist/assets/ko-mzksfqDC.js +20 -0
- package/dist/assets/main-C5Xx8dn_.js +2 -0
- package/dist/assets/main-CfBSQM1H.js +990 -0
- package/dist/assets/markdownCore-BmWwW1ll.js +7 -0
- package/dist/assets/miniChat-mnKwy4vQ.js +2 -0
- package/dist/assets/mobile-DeEQd0wZ.js +2 -0
- package/dist/assets/nl-CWQr6NSq.js +20 -0
- package/dist/assets/{parseDiffFromFile-Cy0PNxun.js → parseDiffFromFile-BUgn-T9p.js} +2 -2
- package/dist/assets/patchFileDiff-Dt8LhgBh.js +13 -0
- package/dist/assets/pl-UmRcDUX2.js +20 -0
- package/dist/assets/pt-BR-BSLybvVF.js +20 -0
- package/dist/assets/relocateRestoredSession-B5E9xb3T.js +1 -0
- package/dist/assets/renderElectronMiniChatApp-C0a9A5_J.js +2 -0
- package/dist/assets/renderMobileApp-BNncg3Pk.js +25 -0
- package/dist/assets/runtimeEndpointReset-CZ5aafpl.js +62 -0
- package/dist/assets/{selectionMarkdown-TkYk5h9l.js → selectionMarkdown-CUN3wUld.js} +9 -9
- package/dist/assets/{sessionOwnership-Bs1xbRfB.js → sessionOwnership-BSuxCEhb.js} +1 -1
- package/dist/assets/shikiHighlight-DHDx-6eM.js +1 -0
- package/dist/assets/space-apply-DM_2pRW7.js +1 -0
- package/dist/assets/space-close-Bpomt8z0.js +1 -0
- package/dist/assets/{surface-B6n7wJtt.js → surface-C-jQaGnL.js} +1 -1
- package/dist/assets/{textMateThemeFromAppTheme-CDlKffWz.js → textMateThemeFromAppTheme-DlsTphbY.js} +1 -1
- package/dist/assets/tr-gaTrX_HK.js +11 -0
- package/dist/assets/uk-CnJF6ykl.js +20 -0
- package/dist/assets/{useAppFontEffects-DCqCVGlT.js → useAppFontEffects-DGlvOqP_.js} +194 -233
- package/dist/assets/useInlineCommentController-kMN4Wg_D.js +2 -0
- package/dist/assets/{useRootScrollLock-BowwS8kq.js → useRootScrollLock-DMPpvpNP.js} +2 -2
- package/dist/assets/{vendor-base-ui-DX96QhTP.js → vendor-base-ui-Det7U81h.js} +1 -1
- package/dist/assets/{vendor-codemirror-autocomplete-DW1FQz9_.js → vendor-codemirror-autocomplete-BSHQHbKu.js} +1 -1
- package/dist/assets/{vendor-codemirror-commands-DpmhalwN.js → vendor-codemirror-commands-C4G_dPWe.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-angular-BqExbN1M.js → vendor-codemirror-lang-angular-B6LbBGHB.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-cpp-DZA36HfS.js → vendor-codemirror-lang-cpp-BWWXBx7W.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-css-B07blnnZ.js → vendor-codemirror-lang-css-Cayfb29q.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-go-BM8K9D1-.js → vendor-codemirror-lang-go-BoKlCNKw.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-html-DaH9adfE.js → vendor-codemirror-lang-html-BQWerHsJ.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-java-CsdC0viz.js → vendor-codemirror-lang-java-DWX7Fq_K.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-javascript-CpGYXGuo.js → vendor-codemirror-lang-javascript-DbpEcZM0.js} +2 -2
- package/dist/assets/{vendor-codemirror-lang-jinja-BBeGzXw5.js → vendor-codemirror-lang-jinja-D1JIJRA7.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-json-58T70Hqs.js → vendor-codemirror-lang-json-BzgckzmB.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-less-BI-xCA59.js → vendor-codemirror-lang-less-B9EpDXFi.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-liquid-zEcMa-zy.js → vendor-codemirror-lang-liquid-9U7kRbSf.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-markdown-BLKnlLP4.js → vendor-codemirror-lang-markdown-D2TEBIvZ.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-php-9f35M83-.js → vendor-codemirror-lang-php-BT6sDVzE.js} +1 -1
- package/dist/assets/vendor-codemirror-lang-python-jAMtYiA9.js +3 -0
- package/dist/assets/{vendor-codemirror-lang-rust-MNDL_jZQ.js → vendor-codemirror-lang-rust-CVO56EiL.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-sass-p9epsSNm.js → vendor-codemirror-lang-sass-DZlOoUWu.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-sql-Bqzh0EXX.js → vendor-codemirror-lang-sql-fZ6t1DPw.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-vue-BnNUWV-p.js → vendor-codemirror-lang-vue-DxbqrLiE.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-wast-C2a-oLmk.js → vendor-codemirror-lang-wast-DyU1Gt-I.js} +1 -1
- package/dist/assets/vendor-codemirror-lang-xml-C9a_K5_p.js +1 -0
- package/dist/assets/{vendor-codemirror-lang-yaml-C0sjswB0.js → vendor-codemirror-lang-yaml-Cptq8l0e.js} +1 -1
- package/dist/assets/{vendor-codemirror-language-ByBn5zIW.js → vendor-codemirror-language-DufXoQvE.js} +2 -2
- package/dist/assets/vendor-codemirror-language-data-CtwSWKtX.js +2 -0
- package/dist/assets/{vendor-codemirror-search-ib-sHD5W.js → vendor-codemirror-search-CvXM_pZg.js} +1 -1
- package/dist/assets/{vendor-codemirror-state-G3UuR-be.js → vendor-codemirror-state-Dek9sMtw.js} +1 -1
- package/dist/assets/{vendor-codemirror-view-Bniqp7p5.js → vendor-codemirror-view-1e0FQ6Wn.js} +1 -1
- package/dist/assets/vendor-framer-motion-DxDVhOLc.js +9 -0
- package/dist/assets/vendor-katex-CuQvj9-L.js +257 -0
- package/dist/assets/vendor-katex-DdZNUVNG.css +1 -0
- package/dist/assets/{vendor-motion-dom-DcCgeG69.js → vendor-motion-dom-HXPOMxb7.js} +1 -1
- package/dist/assets/{vendor-opencode-client-DHzhmLwV.js → vendor-opencode-client-BmFcUkbQ.js} +1 -1
- package/dist/assets/{vendor-replit-codemirror-vim-DkzqxN2H.js → vendor-replit-codemirror-vim-BlJRn-cW.js} +2 -2
- package/dist/assets/{vendor-tanstack-react-virtual-H_JmXOFV.js → vendor-tanstack-react-virtual-CvuLsk7D.js} +1 -1
- package/dist/assets/{vendor-tanstack-virtual-core-Dxc8hSTB.js → vendor-tanstack-virtual-core-DPaNcJcT.js} +1 -1
- package/dist/assets/zh-CN-t2vigSB1.js +20 -0
- package/dist/assets/zh-TW-jAgqBokB.js +20 -0
- package/dist/index.html +6 -6
- package/dist/mini-chat.html +6 -6
- package/dist/mobile.html +6 -6
- package/package.json +8 -5
- package/server/index.js +80 -36
- package/server/lib/agent-memory/actions.js +1 -6
- package/server/lib/agent-memory/routes.js +1 -2
- package/server/lib/agent-memory/runtime.js +1 -8
- package/server/lib/agent-tool/DOCUMENTATION.md +7 -3
- package/server/lib/agent-tool/runtime.js +3 -6
- package/server/lib/agent-tool/runtime.test.js +0 -2
- package/server/lib/browser-control/DOCUMENTATION.md +6 -0
- package/server/lib/changelog/update-notes.js +1 -1
- package/server/lib/context-obligatory/runtime.js +1 -2
- package/server/lib/dev-tunnel/DOCUMENTATION.md +8 -0
- package/server/lib/dev-tunnel/client.js +21 -10
- package/server/lib/dev-tunnel/tunnel.test.js +34 -0
- package/server/lib/dispatch-results/runtime.js +1 -1
- package/server/lib/enterprise-mode.d.ts +1 -0
- package/server/lib/enterprise-mode.js +13 -2
- package/server/lib/enterprise-mode.test.js +21 -0
- package/server/lib/event-stream/DOCUMENTATION.md +2 -2
- package/server/lib/event-stream/index.js +1 -3
- package/server/lib/event-stream/translate-v2.js +1 -9
- package/server/lib/event-stream/translate-v2.test.js +0 -11
- package/server/lib/fs/DOCUMENTATION.md +5 -2
- package/server/lib/fs/routes.js +62 -15
- package/server/lib/fs/routes.test.js +278 -48
- package/server/lib/fs/workspace-file-names.js +104 -0
- package/server/lib/fs/workspace-file-names.test.js +62 -0
- package/server/lib/git/DOCUMENTATION.md +17 -5
- package/server/lib/git/contributor-provenance-storage.js +9 -6
- package/server/lib/git/contributor-provenance-storage.test.js +29 -0
- package/server/lib/git/credential-broker.js +1 -1
- package/server/lib/git/credential-resolver.js +1 -4
- package/server/lib/git/credentials.js +1 -0
- package/server/lib/git/discovery-endpoint.js +1 -1
- package/server/lib/git/identity-provisioning.js +2 -1
- package/server/lib/git/identity-storage.js +3 -4
- package/server/lib/git/lfs-discovery.js +14 -14
- package/server/lib/git/lfs-discovery.test.js +16 -6
- package/server/lib/git/network-operation-plan.js +50 -62
- package/server/lib/git/network-operation-plan.test.js +103 -1
- package/server/lib/git/network-operation-registry.js +4 -6
- package/server/lib/git/network-operation-storage.js +4 -6
- package/server/lib/git/network-operations.js +12 -4
- package/server/lib/git/network-operations.test.js +19 -6
- package/server/lib/git/redaction.js +2 -1
- package/server/lib/git/repository-credential-runtime.js +5 -3
- package/server/lib/git/repository-credential-runtime.test.js +22 -0
- package/server/lib/git/routes.js +31 -137
- package/server/lib/git/routes.test.js +2 -2
- package/server/lib/git/service.js +143 -27
- package/server/lib/git/service.test.js +215 -1
- package/server/lib/git/ssh-credential-storage.js +1 -4
- package/server/lib/git/submodule-discovery.js +1 -1
- package/server/lib/git/worktree-bootstrap-storage.js +3 -4
- package/server/lib/git/worktree-bootstrap-storage.test.js +15 -0
- package/server/lib/git/worktree-creation.js +194 -0
- package/server/lib/git/worktree-creation.test.js +155 -0
- package/server/lib/github/DOCUMENTATION.md +11 -6
- package/server/lib/github/auth.js +2 -4
- package/server/lib/github/device-flow.js +2 -2
- package/server/lib/github/gh-cli-credential.js +1 -0
- package/server/lib/github/octokit.js +31 -0
- package/server/lib/github/pr-status.js +35 -18
- package/server/lib/github/pr-status.test.js +271 -3
- package/server/lib/github/reference-search.js +102 -13
- package/server/lib/github/reference-search.test.js +48 -7
- package/server/lib/github/routes.auth.test.js +18 -0
- package/server/lib/github/routes.js +360 -6
- package/server/lib/github/routes.mutations.test.js +239 -0
- package/server/lib/github/routes.test.js +134 -2
- package/server/lib/gitlab/DOCUMENTATION.md +5 -1
- package/server/lib/gitlab/auth-storage.test.js +1 -0
- package/server/lib/gitlab/mappers.js +30 -1
- package/server/lib/gitlab/resources.js +230 -6
- package/server/lib/gitlab/resources.test.js +179 -0
- package/server/lib/gitlab/routes.js +200 -6
- package/server/lib/gitlab/routes.test.js +186 -2
- package/server/lib/gitlab/validation.js +1 -5
- package/server/lib/guests/DOCUMENTATION.md +1 -1
- package/server/lib/guests/oauth.js +2 -2
- package/server/lib/guests/service.js +1 -1
- package/server/lib/guests/sockets.js +1 -1
- package/server/lib/injected-env.d.ts +8 -0
- package/server/lib/injected-env.js +50 -0
- package/server/lib/injected-env.test.js +56 -0
- package/server/lib/linear/DOCUMENTATION.md +5 -6
- package/server/lib/linear/issues.js +62 -4
- package/server/lib/linear/issues.test.js +68 -0
- package/server/lib/linear/oauth.js +5 -5
- package/server/lib/linear/parse.js +2 -9
- package/server/lib/message-queue/DOCUMENTATION.md +23 -1
- package/server/lib/message-queue/runtime.js +85 -12
- package/server/lib/message-queue/runtime.test.js +172 -2
- package/server/lib/notifications/apns-runtime.js +5 -6
- package/server/lib/notifications/apns-runtime.test.js +20 -4
- package/server/lib/openchamber-control/DOCUMENTATION.md +19 -1
- package/server/lib/openchamber-control/actions.js +2 -1
- package/server/lib/openchamber-control/service.js +119 -20
- package/server/lib/openchamber-control/service.test.js +166 -0
- package/server/lib/openchamber-sessions/archive-store.js +1 -6
- package/server/lib/openchamber-sessions/routes.js +47 -12
- package/server/lib/openchamber-sessions/routes.test.js +65 -2
- package/server/lib/openchamber-sessions/session-metadata-store.js +1 -6
- package/server/lib/opencode/DOCUMENTATION.md +22 -8
- package/server/lib/opencode/agents.js +62 -0
- package/server/lib/opencode/auth-state-runtime.js +3 -1
- package/server/lib/opencode/auth.d.ts +1 -1
- package/server/lib/opencode/auth.js +8 -0
- package/server/lib/opencode/auth.test.js +31 -0
- package/server/lib/opencode/config-entity-routes.js +16 -0
- package/server/lib/opencode/config-entity-v2.test.js +16 -1
- package/server/lib/opencode/config-paths.test.js +2 -2
- package/server/lib/opencode/config-v2.js +2 -4
- package/server/lib/opencode/feature-routes-runtime.js +89 -49
- package/server/lib/opencode/lifecycle.js +41 -21
- package/server/lib/opencode/lifecycle.test.js +50 -2
- package/server/lib/opencode/model-discovery.js +1 -1
- package/server/lib/opencode/model-discovery.test.js +17 -0
- package/server/lib/opencode/models-metadata.js +0 -2
- package/server/lib/opencode/openchamber-routes.test.js +3 -3
- package/server/lib/opencode/plugins.js +6 -9
- package/server/lib/opencode/provider-source-route.test.js +101 -3
- package/server/lib/opencode/providers-disabled.test.js +59 -0
- package/server/lib/opencode/providers.js +34 -0
- package/server/lib/opencode/proxy.js +11 -3
- package/server/lib/opencode/routes.js +40 -2
- package/server/lib/opencode/settings-helpers.js +27 -1
- package/server/lib/opencode/settings-helpers.test.js +19 -7
- package/server/lib/opencode/settings-registry.json +27 -16
- package/server/lib/opencode/settings-runtime.test.js +18 -0
- package/server/lib/opencode/shared-service-runtime.js +23 -104
- package/server/lib/opencode/shared.js +77 -46
- package/server/lib/opencode/shared.test.js +12 -12
- package/server/lib/opencode/shutdown-runtime.test.js +2 -3
- package/server/lib/opencode/skill-routes.js +123 -38
- package/server/lib/opencode/skill-routes.test.js +201 -0
- package/server/lib/opencode/skills.js +81 -34
- package/server/lib/opencode/skills.test.js +176 -21
- package/server/lib/opencode/startup-pipeline-runtime.js +6 -3
- package/server/lib/opencode/startup-pipeline-runtime.test.js +2 -1
- package/server/lib/opencode/watcher.test.js +0 -54
- package/server/lib/outbound-proxy.js +52 -0
- package/server/lib/outbound-proxy.test.js +55 -0
- package/server/lib/package-manager.js +23 -17
- package/server/lib/package-manager.test.js +5 -18
- package/server/lib/permission-auto-accept/DOCUMENTATION.md +1 -1
- package/server/lib/permission-auto-accept/runtime.js +19 -47
- package/server/lib/permission-auto-accept/runtime.test.js +2 -2
- package/server/lib/project-context/DOCUMENTATION.md +7 -1
- package/server/lib/project-context/routes.js +1 -2
- package/server/lib/project-context/runtime.js +12 -14
- package/server/lib/project-context/runtime.test.js +78 -2
- package/server/lib/projects/project-config.js +30 -15
- package/server/lib/projects/project-config.test.js +30 -0
- package/server/lib/projects/project-setup.js +1 -2
- package/server/lib/projects/routes.js +1 -2
- package/server/lib/quota/DOCUMENTATION.md +35 -7
- package/server/lib/quota/index.js +1 -0
- package/server/lib/quota/providers/claude/index.js +1 -1
- package/server/lib/quota/providers/cline-pass.js +1 -1
- package/server/lib/quota/providers/exe-dev.js +1 -1
- package/server/lib/quota/providers/google/index.js +1 -1
- package/server/lib/quota/providers/hyper.js +1 -1
- package/server/lib/quota/providers/kimi.js +116 -36
- package/server/lib/quota/providers/kimi.test.js +128 -3
- package/server/lib/quota/providers/opencode-go.js +144 -21
- package/server/lib/quota/providers/opencode-go.test.js +229 -6
- package/server/lib/quota/providers/openrouter.js +1 -1
- package/server/lib/quota/providers/zenmux.js +1 -1
- package/server/lib/quota/utils/auth.js +1 -0
- package/server/lib/quota/utils/transformers.js +2 -6
- package/server/lib/relay/DOCUMENTATION.md +18 -3
- package/server/lib/relay/e2ee.js +7 -7
- package/server/lib/relay/host-client.js +84 -13
- package/server/lib/relay/host-client.test.js +201 -1
- package/server/lib/relay/identity.js +6 -29
- package/server/lib/relay/identity.test.js +18 -28
- package/server/lib/relay/key-store.js +141 -0
- package/server/lib/relay/key-store.test.js +138 -0
- package/server/lib/relay/service.js +8 -8
- package/server/lib/relay/service.test.js +10 -5
- package/server/lib/relay/signing-key.js +13 -36
- package/server/lib/relay/tunnel-codec.js +10 -10
- package/server/lib/route-module-exports.test.js +22 -0
- package/server/lib/routing/DOCUMENTATION.md +23 -3
- package/server/lib/routing/cache.js +87 -0
- package/server/lib/routing/defaults.js +11 -0
- package/server/lib/routing/history.js +12 -4
- package/server/lib/routing/runtime.js +39 -3
- package/server/lib/routing/runtime.test.js +81 -2
- package/server/lib/routing/store.js +12 -1
- package/server/lib/routing/store.test.js +13 -0
- package/server/lib/scheduled-tasks/DOCUMENTATION.md +59 -1
- package/server/lib/scheduled-tasks/existing-session.js +119 -0
- package/server/lib/scheduled-tasks/existing-session.test.js +350 -0
- package/server/lib/scheduled-tasks/loops.js +1 -8
- package/server/lib/scheduled-tasks/routes.js +8 -8
- package/server/lib/scheduled-tasks/runtime.js +103 -13
- package/server/lib/scheduled-tasks/runtime.test.js +48 -0
- package/server/lib/scheduled-tasks/service.js +33 -11
- package/server/lib/scheduled-tasks/service.test.js +128 -2
- package/server/lib/scheduled-tasks/session-defaults.js +27 -0
- package/server/lib/scheduled-tasks/session-defaults.test.js +19 -0
- package/server/lib/session-assist/context.js +1 -0
- package/server/lib/session-folders/routes.js +2 -2
- package/server/lib/session-goal/objectives.js +1 -1
- package/server/lib/session-knowledge/routes.js +2 -2
- package/server/lib/session-knowledge/runtime.js +1 -2
- package/server/lib/session-work/DOCUMENTATION.md +39 -14
- package/server/lib/session-work/questions.js +31 -2
- package/server/lib/session-work/runtime.js +22 -13
- package/server/lib/session-work/runtime.test.js +43 -26
- package/server/lib/session-work/state.js +10 -4
- package/server/lib/session-work/state.test.js +8 -1
- package/server/lib/shared/DOCUMENTATION.md +89 -0
- package/server/lib/shared/guards.js +53 -0
- package/server/lib/shared/guards.test.js +112 -0
- package/server/lib/skills-catalog/DOCUMENTATION.md +10 -8
- package/server/lib/skills-catalog/cache.js +3 -2
- package/server/lib/skills-catalog/curated-sources.js +5 -1
- package/server/lib/skills-catalog/git.js +107 -20
- package/server/lib/skills-catalog/git.test.js +78 -0
- package/server/lib/skills-catalog/install.js +21 -12
- package/server/lib/skills-catalog/scan.js +25 -15
- package/server/lib/skills-catalog/source.js +26 -1
- package/server/lib/skills-catalog/source.test.js +27 -0
- package/server/lib/source-control/DOCUMENTATION.md +2 -1
- package/server/lib/source-control/audit-storage.js +7 -6
- package/server/lib/source-control/audit-storage.test.js +11 -0
- package/server/lib/source-control/binding-service.js +2 -5
- package/server/lib/source-control/change-request-worktree.js +90 -0
- package/server/lib/source-control/change-request-worktree.test.js +121 -0
- package/server/lib/source-control/mutation-executor.js +1 -1
- package/server/lib/source-control/mutation-storage.js +11 -5
- package/server/lib/source-control/provider-instance.js +1 -2
- package/server/lib/source-control/repository-identity.js +1 -1
- package/server/lib/source-control/routes.js +14 -2
- package/server/lib/spaces/DOCUMENTATION.md +42 -17
- package/server/lib/spaces/command-stream.test.js +15 -0
- package/server/lib/spaces/dispatcher.js +7 -0
- package/server/lib/spaces/dispatcher.test.js +17 -0
- package/server/lib/spaces/hardening.js +2 -2
- package/server/lib/spaces/hardening.test.js +1 -1
- package/server/lib/spaces/host.js +2 -0
- package/server/lib/spaces/journey.js +66 -5
- package/server/lib/spaces/journey.test.js +95 -4
- package/server/lib/spaces/layout.js +1 -1
- package/server/lib/spaces/places/docker-disk.js +38 -14
- package/server/lib/spaces/places/docker-disk.test.js +80 -1
- package/server/lib/spaces/places/docker.js +35 -11
- package/server/lib/spaces/places/fake-docker.js +22 -3
- package/server/lib/spaces/places/memory-place.js +3 -0
- package/server/lib/spaces/places/packed.docker.live.test.js +1 -1
- package/server/lib/spaces/routes.js +5 -0
- package/server/lib/spaces/routes.test.js +4 -2
- package/server/lib/spaces/run-command.js +9 -2
- package/server/lib/spaces/tools.js +4 -5
- package/server/lib/spaces/tools.test.js +2 -2
- package/server/lib/terminal/runtime.js +18 -6
- package/server/lib/terminal/runtime.test.js +66 -0
- package/server/lib/tts/index.js +3 -0
- package/server/lib/tts/service.js +4 -2
- package/server/lib/walkthrough/DOCUMENTATION.md +3 -1
- package/server/lib/walkthrough/index.js +2 -3
- package/server/lib/walkthrough/pr-source.test.js +22 -0
- package/server/lib/walkthrough/sources.js +6 -1
- package/server/opencode-proxy.test.js +127 -0
- package/bin/lib/commands-startup.test.js +0 -15
- package/dist/assets/CodeMirrorCommentWidgets-CVDSjcrP.js +0 -1
- package/dist/assets/DiffView-Ct7vL3fD.js +0 -4
- package/dist/assets/FilesView-DT0uEYgT.js +0 -17
- package/dist/assets/GuestSurfacePane-DVvk1VPu.js +0 -1
- package/dist/assets/LinearIssuesView-C10MwA9h.js +0 -1
- package/dist/assets/MarkdownImageGallery-BbN_K_3d.js +0 -1
- package/dist/assets/MarkdownRendererImpl-BLt2Tkk9.js +0 -10
- package/dist/assets/OnboardingScreen-Bgp5A3WB.js +0 -1
- package/dist/assets/PierreDiffViewer-CWJLj-S-.js +0 -210
- package/dist/assets/PlanView-DsRWnsOI.js +0 -5
- package/dist/assets/PublishDialog-CCeKloRu.js +0 -2
- package/dist/assets/SettingsView-BuPPsNPp.js +0 -30
- package/dist/assets/SettingsWindow-CM5fL8Ot.js +0 -1
- package/dist/assets/SubmoduleDiffSummary-CfsMcfiQ.js +0 -1
- package/dist/assets/ToolOutputDialog-mZrfSofz.js +0 -15
- package/dist/assets/ToolPartDiffPreview-BUGCRYEL.js +0 -8
- package/dist/assets/WalkthroughView-ClBo7PPd.js +0 -4
- package/dist/assets/appThemeRegistry-CxzMxR-H.js +0 -1
- package/dist/assets/de-CBla4hjd.js +0 -14
- package/dist/assets/es-BmnZtxTD.js +0 -20
- package/dist/assets/fileTreeStatus-BSHFIGEg.js +0 -1
- package/dist/assets/fr-OVKIBUZO.js +0 -18
- package/dist/assets/index-CKCFKmjF.js +0 -1
- package/dist/assets/index-Dbx4V4GN.css +0 -1
- package/dist/assets/index-vQ1Pg1cr.js +0 -61
- package/dist/assets/ja-6v-yr-gE.js +0 -20
- package/dist/assets/ko-I_ZLvgQ9.js +0 -20
- package/dist/assets/main-CmO4dRtR.js +0 -2
- package/dist/assets/main-b9vqhlYM.js +0 -999
- package/dist/assets/markdownCore-BPEZRQfP.js +0 -7
- package/dist/assets/miniChat-B5Oi7B-6.js +0 -2
- package/dist/assets/mobile-CVtShif9.js +0 -2
- package/dist/assets/nl-DcvIJf46.js +0 -20
- package/dist/assets/patchFileDiff-CW3wCH1O.js +0 -13
- package/dist/assets/pl-JxCUl0sd.js +0 -20
- package/dist/assets/pt-BR-L89mjja2.js +0 -20
- package/dist/assets/relocateRestoredSession-DYh_9oBa.js +0 -1
- package/dist/assets/renderElectronMiniChatApp-BD-1JHSg.js +0 -2
- package/dist/assets/renderMobileApp-7s5InXt1.js +0 -25
- package/dist/assets/runtimeEndpointReset-DqLJC6L1.js +0 -53
- package/dist/assets/shikiHighlight-CXgZnvHh.js +0 -1
- package/dist/assets/space-apply-1trGVIl8.js +0 -1
- package/dist/assets/space-close-y7j-NuBv.js +0 -1
- package/dist/assets/tr-ka5J1flt.js +0 -11
- package/dist/assets/uk-PyGe6Q_u.js +0 -20
- package/dist/assets/useInlineCommentController-CrjSGCpi.js +0 -2
- package/dist/assets/vendor-codemirror-lang-python-B7ClrMIT.js +0 -3
- package/dist/assets/vendor-codemirror-lang-xml-C8tGnS64.js +0 -1
- package/dist/assets/vendor-codemirror-language-data-q2bKO1EM.js +0 -2
- package/dist/assets/vendor-framer-motion-Bq3iTZ6r.js +0 -1
- package/dist/assets/vendor-katex-CHD9BdDO.js +0 -257
- package/dist/assets/vendor-katex-Cp579UoJ.css +0 -1
- package/dist/assets/zh-CN-B0P2tybJ.js +0 -20
- package/dist/assets/zh-TW-Bs9C5cN8.js +0 -20
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import{bB as e,bC as t,bD as s,bE as i,bF as n,bG as o,bH as a,bI as r,bJ as l,bK as c,bL as d,bM as u,bN as p,bO as m,bP as g,bQ as h,bR as b,bS as v,bT as f,bU as w,bV as k}from"./index-DxNa7xYB.js";import"./vendor-zod-CxRSdNoV.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-react-BUCujlKS.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-opencode-client-BmFcUkbQ.js";const C={"settings.sourceControl.ssh.title":"Clés SSH","settings.sourceControl.ssh.load":"Afficher les clés","settings.sourceControl.ssh.discover":"Chercher des clés dans ~/.ssh","settings.sourceControl.ssh.empty":"Aucune clé SSH ajoutée pour l’instant.","settings.sourceControl.ssh.hostSetup":"OpenChamber ne regarde que les fichiers de clé situés directement dans ~/.ssh sur la machine où il tourne, et garde sa propre copie de ceux que vous ajoutez. Pour une clé protégée par une phrase secrète ou gérée par un agent SSH, utilisez plutôt l’identité système.","settings.sourceControl.ssh.unreadable":"Impossible de lire cette clé. Corrigez-la sur la machine ou utilisez l’identité système.","settings.sourceControl.ssh.changed":"Cette clé a changé depuis son ajout. Ajoutez-la à nouveau ou utilisez l’identité système.","settings.sourceControl.ssh.unverifiable":"Cette clé a une phrase secrète ou ne peut pas être vérifiée. Utilisez-en une sans phrase secrète, ou l’identité système.","settings.sourceControl.ssh.insecurePermissions":"D’autres utilisateurs de cette machine peuvent lire cette clé. Exécutez d’abord chmod 600 dessus.","settings.sourceControl.ssh.discoveredEmpty":"Aucune clé trouvée dans ~/.ssh.","settings.sourceControl.ssh.discoveryTruncated":"~/.ssh contient trop de fichiers, certains n’ont donc pas été vérifiés.","settings.sourceControl.ssh.confirmFingerprint":"C’est ma clé : {fingerprint}","settings.sourceControl.ssh.import":"Ajouter la clé","settings.sourceControl.ssh.imported":"Clé ajoutée.","settings.sourceControl.ssh.candidateExpired":"Cette liste n’est plus à jour. Cherchez à nouveau des clés.","settings.sourceControl.ssh.candidateChanged":"La clé a changé après avoir été trouvée. Cherchez à nouveau des clés.","settings.sourceControl.ssh.confirmationMismatch":"Cette empreinte ne correspond pas à la clé. Cherchez à nouveau des clés.","settings.sourceControl.ssh.candidateUnavailable":"Cette clé n’est plus là. Cherchez à nouveau des clés.","settings.sourceControl.ssh.inventoryFull":"Trop de clés ajoutées. Retirez d’abord une clé inutilisée.","settings.sourceControl.ssh.operationFailed":"Un problème est survenu avec les clés SSH. Réessayez.","settings.themeImport.selectAll":"Tout sélectionner","settings.themeImport.deselectAll":"Tout désélectionner","settings.themeImport.complete":"Import terminé","settings.themeImport.catalogTitle":"Importer un thème VS Code (Open VSX)","settings.themeImport.catalogHint":"Recherchez des thèmes VS Code dans Open VSX. Les thèmes publiés uniquement sur Microsoft Marketplace peuvent être absents.","settings.themeImport.search":"Rechercher des thèmes","settings.themeImport.catalogError":"Impossible de charger les thèmes depuis Open VSX. Relancez la recherche.","settings.themeImport.empty":"Aucun thème trouvé dans Open VSX.","settings.themeImport.back":"Retour à la recherche","settings.themeImport.chooseFile":"Choisir un fichier JSON","settings.themeImport.importSelected":"Importer les variantes sélectionnées","settings.themeImport.installed":"Importé","settings.themeImport.partialError":"Certains thèmes n’ont pas pu être enregistrés. Les imports réussis sont conservés. Vous pouvez réessayer les variantes restantes.","settings.themeImport.delete":"Supprimer le thème importé {name}","settings.themeImport.deleteError":"Impossible de supprimer le thème. Il a été conservé.","settings.themeImport.action":"Importer un thème VS Code","settings.themeImport.busy":"Importation du thème…","settings.themeImport.hint":"Importez un thème VS Code .json ou .jsonc avec les couleurs de syntaxe et de diff. Il sera enregistré sur le serveur OpenChamber connecté.","settings.themeImport.success":"{name} a été importé.","settings.themeImport.error.invalid":"Ce fichier n’est pas un thème de couleurs VS Code pris en charge.","settings.themeImport.error.include":"Ce thème fait référence à un autre fichier. Exportez-le depuis VS Code avec Developer: Generate Color Theme From Current Settings, puis importez le JSON généré.","settings.themeImport.error.size":"Les fichiers de thème ne doivent pas dépasser 512 KiB.","settings.themeImport.error.background":"Ce thème ne contient pas la couleur editor.background. Exportez un thème de couleurs complet depuis VS Code.","settings.themeImport.error.save":"Impossible d’enregistrer le thème. Vérifiez la connexion et réessayez.","settings.themeImport.error.connection":"Le serveur connecté a changé. Le thème n’a pas été appliqué.","settings.themeImport.error.unsupported":"L’importation de thèmes n’est pas disponible dans VS Code.","settings.themeImport.error.conflict":"Ce thème importé a été modifié sur le serveur. Il n’a pas été écrasé.","settings.openchamber.visual.field.alwaysShowScrollbars":"Toujours afficher les barres de défilement","settings.openchamber.visual.field.alwaysShowScrollbarsHint":"Gardez les barres de défilement visibles même lorsque le pointeur se trouve hors de la zone défilante. Uniquement sur cet appareil.","settings.providers.page.openCodeGo.title":"Suivi de l’utilisation d’OpenCode Go","settings.providers.page.openCodeGo.description":"Connectez le tableau de bord OpenCode Go pour afficher les quotas glissant, hebdomadaire et mensuel.","settings.providers.page.openCodeGo.workspaceId":"ID de l’espace de travail","settings.providers.page.openCodeGo.authCookie":"Cookie d’authentification","settings.providers.page.openCodeGo.apiKey":"Clé API","settings.providers.page.openCodeGo.help":"Copiez l’ID depuis l’URL du tableau de bord et le cookie auth depuis les outils du navigateur. OpenChamber n’analyse jamais les cookies du navigateur.","settings.providers.page.openCodeGo.save":"Enregistrer et valider","settings.providers.page.openCodeGo.replace":"Remplacer","settings.providers.page.openCodeGo.validate":"Valider","settings.providers.page.openCodeGo.delete":"Supprimer","settings.providers.page.quotaCredentials.saved":"Identifiants de {provider} enregistrés.","settings.providers.page.quotaCredentials.accessToken":"Jeton d’accès","settings.providers.page.quotaCredentials.usageToken":"Jeton API d’utilisation","settings.providers.page.quotaCredentials.exeDevTokenInstructions":"Exécutez cette commande dans votre terminal, puis collez le jeton ci-dessous. Il peut uniquement lire l’utilisation des crédits LLM et expire après 30 jours.","settings.providers.page.quotaCredentials.refreshToken":"Jeton d’actualisation","settings.providers.page.quotaCredentials.tokenPlaceholder":"Collez le jeton","settings.providers.page.quotaCredentials.platformApiKey":"Clé API de plateforme","settings.providers.page.quotaCredentials.zenmuxInstructions":"L’usage nécessite une clé API de plateforme depuis la console ZenMux. La clé qu’OpenCode utilise pour le chat est distincte et n’est pas utilisée ici.","settings.providers.page.openCodeGo.saveFailed":"Impossible de valider les identifiants OpenCode Go.","settings.providers.page.openCodeGo.valid":"Les identifiants OpenCode Go sont valides.","settings.providers.page.openCodeGo.invalid":"Les identifiants OpenCode Go sont invalides ou expirés.","settings.providers.page.openCodeGo.deleted":"Identifiants OpenCode Go supprimés.","settings.providers.page.openCodeGo.deleteFailed":"Impossible de supprimer les identifiants OpenCode Go.","settings.appearance.language.label":"Langue","settings.appearance.language.description":"Choisissez la langue de l'interface.","settings.appearance.language.select":"Sélectionnez la langue","settings.window.description":"Fenêtre des paramètres OpenChamber.","settings.view.home.title":"Paramètres","settings.view.home.description":"Accédez aux pages communes.","settings.view.home.cards.providers.title":"Fournisseurs","settings.view.home.cards.providers.description":"Connecter les modèles + les identifiants","settings.view.home.cards.agents.title":"Agents","settings.view.home.cards.agents.description":"Invites, outils, autorisations","settings.view.home.cards.skillsCatalog.title":"Catalogue de skills","settings.view.home.cards.skillsCatalog.description":"Installer des skills depuis des catalogues","settings.view.home.cards.mcp.title":"MCP","settings.view.home.cards.mcp.description":"Configurer les serveurs MCP + connexions","settings.view.home.cards.plugins.title":"Plugins","settings.view.home.cards.plugins.description":"Gérer les plugins OpenCode","settings.view.home.cards.usage.title":"Utilisation","settings.view.home.cards.usage.description":"Quota + visibilité des dépenses","settings.view.unavailable.title":"Pas disponible","settings.view.unavailable.description":"Cette page de paramètres n'est pas disponible dans ce runtime.","settings.view.badge.beta":"bêta","settings.view.actions.backToSettings":"Retour aux paramètres","settings.view.actions.closeSettings":"Fermer les paramètres","settings.view.actions.closeSettingsWithShortcut":"Fermer les paramètres ({shortcut}+,)","settings.view.actions.back":"Retour","settings.view.actions.resizeNavigation":"Redimensionner la navigation dans les paramètres","settings.page.projects.title":"Projets","settings.page.remoteInstances.title":"Instances distantes","settings.page.providers.title":"Fournisseurs","settings.page.usage.title":"Utilisation","settings.page.agents.title":"Agents","settings.page.commands.title":"Commandes","settings.page.mcp.title":"MCP","settings.page.plugins.title":"Plugins","settings.page.skills.title":"Skills","settings.page.skillsCatalog.title":"Catalogue de skills","settings.page.git.title":"Git","settings.page.appearance.title":"Apparence","settings.page.appearance.description":"Personnalisez l’apparence et le ressenti d’OpenChamber.","settings.page.chat.title":"Chat","settings.page.chat.description":"Configurez l’affichage des messages et des outils.","settings.page.shortcuts.title":"Raccourcis","settings.page.shortcuts.description":"Personnalisez les raccourcis clavier.","settings.page.general.title":"Général","settings.page.general.description":"Démarrage de l'application, sécurité, connexion et confidentialité.","settings.page.sessions.title":"Sessions","settings.page.sessions.description":"Définissez les valeurs par défaut et la conservation des sessions.","settings.page.magicPrompts.title":"Prompts magiques","settings.page.notifications.title":"Notifications","settings.page.notifications.description":"Choisissez quand et comment être notifié.","settings.page.voice.title":"Voix","settings.page.voice.description":"Configurez la synthèse vocale et la dictée.","settings.page.tunnel.title":"Tunnel externe","settings.page.tunnel.description":"Exposez cette instance via un tunnel distant.","settings.page.snippets.title":"Extraits","settings.snippets.sidebar.title":"Extraits","settings.snippets.sidebar.total":"Total : {count}","settings.snippets.sidebar.actions.create":"Créer un extrait","settings.snippets.sidebar.actions.more":"Plus d’actions pour {name}","settings.snippets.sidebar.toast.deleted":"Extrait supprimé","settings.snippets.sidebar.toast.deleteFailed":"Échec de la suppression de l'extrait","settings.snippets.sidebar.dialog.deleteTitle":"Supprimer l'extrait ?","settings.snippets.sidebar.dialog.deleteDescription":"Cela supprimera définitivement #{name}.","settings.snippets.page.empty.title":"Sélectionnez un extrait","settings.snippets.page.empty.description":"Choisissez un extrait dans la barre latérale pour le modifier.","settings.snippets.page.title.new":"Nouvel extrait","settings.snippets.page.field.namePlaceholder":"nom de l'extrait","settings.snippets.page.field.descriptionPlaceholder":"À quoi sert cet extrait","settings.snippets.page.field.aliases":"Alias","settings.snippets.page.field.aliasesPlaceholder":"en sécurité, prudent","settings.snippets.page.field.content":"Contenu","settings.snippets.page.field.contentPlaceholder":"Markdown de l'extrait...","settings.snippets.page.hint":"Utilisez #name dans les prompts. Prend en charge les alias et les blocs à ajouter avant/après compatibles avec les extraits de code opencode.","settings.snippets.page.toast.nameRequired":"Le nom de l'extrait est obligatoire","settings.snippets.page.toast.contentRequired":"Le contenu de l'extrait est requis","settings.snippets.page.toast.saveFailed":"Échec de l'enregistrement de l'extrait","settings.snippets.page.toast.saved":"Extrait enregistré","settings.page.promptTemplates.title":"Modèles de prompt","settings.promptTemplates.sidebar.title":"Modèles de prompt","settings.promptTemplates.sidebar.total":"Total : {count}","settings.promptTemplates.sidebar.empty.title":"Aucun modèle de prompt","settings.promptTemplates.sidebar.empty.description":"Créez un modèle de prompt pour commencer.","settings.promptTemplates.sidebar.toast.deleted":'Modèle "{name}" supprimé',"settings.promptTemplates.sidebar.toast.deleteFailed":"Échec de la suppression du modèle","settings.promptTemplates.sidebar.toast.nameRequired":"Le nom du modèle est obligatoire","settings.promptTemplates.sidebar.toast.renamed":"Modèle renommé","settings.promptTemplates.sidebar.toast.renameFailed":"Échec du changement de nom du modèle","settings.promptTemplates.sidebar.dialog.deleteTitle":"Supprimer le modèle ?","settings.promptTemplates.sidebar.dialog.deleteDescription":'Cela supprimera définitivement "{name}". Cette action ne peut pas être annulée.',"settings.promptTemplates.sidebar.renameDialog.title":"Renommer le modèle","settings.promptTemplates.sidebar.renameDialog.description":'Entrez un nouveau nom pour "{name}".',"settings.promptTemplates.sidebar.renameDialog.placeholder":"Nom du modèle","settings.promptTemplates.sidebar.badge.default":"défaut","settings.promptTemplates.page.empty.title":"Sélectionnez un modèle","settings.promptTemplates.page.empty.description":"Choisissez un modèle dans la barre latérale pour le modifier.","settings.promptTemplates.page.title.new":"Nouveau modèle","settings.promptTemplates.page.subtitle.edit":"Modifier le modèle","settings.promptTemplates.page.subtitle.new":"Créer un nouveau modèle de prompt","settings.promptTemplates.page.section.identity":"Identité","settings.promptTemplates.page.field.name":"Nom","settings.promptTemplates.page.field.namePlaceholder":"Nom du modèle","settings.promptTemplates.page.section.template":"Modèle","settings.promptTemplates.page.field.templatePlaceholder":"Saisissez le texte du modèle de prompt...","settings.promptTemplates.page.templateHint":"Ce texte sera ajouté au début du prompt de l'utilisateur lorsqu'il est sélectionné dans un groupe multi-run.","settings.promptTemplates.page.toast.nameRequired":"Le nom du modèle est obligatoire","settings.promptTemplates.page.toast.updated":"Modèle mis à jour","settings.promptTemplates.page.toast.updateFailed":"Échec de la mise à jour du modèle","settings.promptTemplates.page.toast.created":"Modèle créé","settings.promptTemplates.page.toast.createFailed":"Échec de la création du modèle","settings.promptTemplates.page.toast.saveUnexpectedError":"Une erreur inattendue s'est produite lors de l'enregistrement","settings.openchamber.tunnel.title":"Tunnel externe","settings.openchamber.tunnel.enterpriseMode":"Les tunnels externes ne sont pas disponibles en mode entreprise, car le service de tunnel verrait le trafic. Pour accéder à ce serveur depuis d’autres appareils, associez-les sur votre réseau ou via le relais de votre organisation.","settings.openchamber.tunnel.description":"Configurez un accès à distance sécurisé avec des liens rapides ou votre propre tunnel Cloudflare distant géré.","settings.openchamber.tunnel.note.serverSideEnforced":"L'accès au tunnel sécurisé est appliqué côté serveur.","settings.openchamber.tunnel.note.connectLinksOneTime":"Les liens de connexion sont uniques et sont révoqués lorsque le tunnel s'arrête ou lorsque la durée de vie du lien de connexion expire.","settings.openchamber.tunnel.note.cloudflareConnectorTarget":"Cible du connecteur Cloudflare :","settings.openchamber.tunnel.note.cloudflareConnectorTargetUse":"Pour la cible du connecteur Cloudflare, utilisez","settings.openchamber.tunnel.note.tokensSavedPerTunnel":"Les jetons sont enregistrés par tunnel et réutilisés à partir du disque.","settings.openchamber.tunnel.note.customConfigUsed":"Le fichier de configuration personnalisé sera utilisé lors du démarrage du tunnel.","settings.openchamber.tunnel.note.defaultConfigUsed":"Lorsqu'il est vide, cloudflared utilise sa configuration par défaut (~/.cloudflared/config.yml).","settings.openchamber.tunnel.note.managedRemoteRequiresDomain":"Les tunnels distants gérés nécessitent un domaine acheté dans votre compte Cloudflare.","settings.openchamber.tunnel.note.managedLocalUsesConfig":"Les tunnels locaux gérés utilisent votre fichier de configuration cloudflared local.","settings.openchamber.tunnel.note.startModeAndGenerateLink":"Démarrez un tunnel {mode} et générez un lien de connexion unique. Ne fermez pas l'application pendant que ce tunnel est utilisé.","settings.openchamber.tunnel.note.scanQrToConnect":"Scannez avec votre téléphone pour vous connecter.","settings.openchamber.tunnel.section.redeemedAccessLinks":"Liens d'accès utilisés","settings.openchamber.tunnel.section.savedManagedRemoteTunnels":"Tunnels distants gérés enregistrés","settings.openchamber.tunnel.notAvailable.cloudflaredNotFound":"cloudflared introuvable","settings.openchamber.tunnel.notAvailable.installHint":"Installez-le pour activer l'accès au tunnel distant :","settings.openchamber.tunnel.field.provider":"Fournisseur","settings.openchamber.tunnel.field.providerPlaceholder":"Sélectionnez le fournisseur","settings.openchamber.tunnel.field.tunnelType":"Type de tunnel","settings.openchamber.tunnel.field.connectLinkTtl":"Durée de vie du lien de connexion","settings.openchamber.tunnel.field.tunnelSessionTtl":"Durée de vie de la session tunnel","settings.openchamber.tunnel.field.hostnameLabel":"Nom d'hôte :","settings.openchamber.tunnel.field.savedTokenAvailablePlaceholder":"Jeton enregistré disponible (facultatif à remplacer)","settings.openchamber.tunnel.field.pasteTokenPlaceholder":"Coller le jeton pour ce tunnel","settings.openchamber.tunnel.field.newPresetNamePlaceholder":"Nom du tunnel (p. ex. Production)","settings.openchamber.tunnel.field.newPresetHostnamePlaceholder":"Nom d'hôte (p. ex. oc.example.com)","settings.openchamber.tunnel.field.newPresetTokenPlaceholder":"Jeton","settings.openchamber.tunnel.field.managedRemoteTokenInfoAria":"Informations sur le jeton de tunnel distant géré","settings.openchamber.tunnel.field.configurationFile":"Fichier de configuration","settings.openchamber.tunnel.field.configurationFilePlaceholder":"Utilisation de la configuration cloudflared par défaut","settings.openchamber.tunnel.field.managedRemoteTunnelToConnect":"Tunnel distant géré pour se connecter","settings.openchamber.tunnel.field.selectSavedTunnelPlaceholder":"Sélectionnez le tunnel enregistré","settings.openchamber.tunnel.field.publicUrlHint":"URL publique (non accessible sans jeton)","settings.openchamber.tunnel.field.connectLink":"Lien de connexion","settings.openchamber.tunnel.field.expires":"Expire","settings.openchamber.tunnel.field.connectQrAlt":"Code de connexion du tunnel QR","settings.openchamber.tunnel.actions.removePresetAria":"Supprimer {name}","settings.openchamber.tunnel.actions.saveToken":"Enregistrer le jeton","settings.openchamber.tunnel.actions.browseConfigFileAria":"Parcourir le fichier de configuration","settings.openchamber.tunnel.actions.clearConfigFileAria":"Effacer le fichier de configuration","settings.openchamber.tunnel.actions.openManagedRemoteDocs":"Consultez la documentation sur la façon de configurer un tunnel distant géré","settings.openchamber.tunnel.actions.openManagedLocalDocs":"Consultez la documentation sur la configuration du tunnel local géré","settings.openchamber.tunnel.actions.startTunnel":"Démarrer le tunnel","settings.openchamber.tunnel.actions.startingTunnel":"Démarrage du tunnel...","settings.openchamber.tunnel.actions.stopTunnel":"Arrêter le tunnel","settings.openchamber.tunnel.actions.stopping":"Arrêt...","settings.openchamber.tunnel.actions.newConnectLink":"Nouveau lien de connexion","settings.openchamber.tunnel.actions.copied":"Copié","settings.openchamber.tunnel.actions.retry":"Réessayer","settings.openchamber.tunnel.option.moreProvidersSoon":"Plus de fournisseurs à venir","settings.openchamber.tunnel.option.mode.quick.label":"Rapide","settings.openchamber.tunnel.option.mode.quick.tooltip":"Le tunnel rapide est une solution best-effort dont la disponibilité n'est pas garantie.","settings.openchamber.tunnel.option.mode.managedRemote.label":"Distant géré","settings.openchamber.tunnel.option.mode.managedRemote.tooltip":"Le mode distant géré utilise votre compte Cloudflare et votre nom d'hôte pour un accès longue durée.","settings.openchamber.tunnel.option.mode.managedLocal.label":"Local géré","settings.openchamber.tunnel.option.mode.managedLocal.tooltip":"Le mode local géré utilise votre fichier de configuration cloudflared local.","settings.openchamber.tunnel.warning.quickModeReliability":"Pour un accès longue durée plus fiable, passez au mode distant géré ou local géré.","settings.openchamber.tunnel.warning.replacesActiveTunnel":"Le démarrage de ce tunnel remplace le tunnel actif et révoque les liens de connexion et les sessions distantes existantes.","settings.openchamber.tunnel.badge.quick":"RAPIDE","settings.openchamber.tunnel.badge.remote":"DISTANT","settings.openchamber.tunnel.badge.local":"LOCAL","settings.openchamber.tunnel.state.loading":"Chargement","settings.openchamber.tunnel.state.expired":"Expiré","settings.openchamber.tunnel.state.revoked":"Révoqué","settings.openchamber.tunnel.state.inactive":"Inactif","settings.openchamber.tunnel.state.noExpiry":"Pas d'expiration","settings.openchamber.tunnel.state.never":"Jamais","settings.openchamber.tunnel.state.tunnelReady":"Tunnel prêt","settings.openchamber.tunnel.session.redeemedAt":"Utilisé {time}","settings.openchamber.tunnel.session.expiresIn":"Expire dans {remaining}","settings.openchamber.tunnel.session.inactiveWithReason":"Inactif ({reason})","settings.openchamber.tunnel.error.invalidConfigExtension":"Le fichier de configuration doit utiliser l'extension .yml, .yaml ou .json.","settings.openchamber.tunnel.tooltip.tokensSavedPath":"Les jetons sont enregistrés dans ~/.config/openchamber/cloudflare-managed-remote-tunnels.json.","settings.openchamber.tunnel.empty.noManagedRemoteTunnels":"Aucun tunnel distant géré n'a encore été enregistré.","settings.openchamber.tunnel.toast.checkAvailabilityFailed":"Échec de la vérification de la disponibilité du tunnel","settings.openchamber.tunnel.toast.saveSettingsFailed":"Échec de l'enregistrement des paramètres du tunnel","settings.openchamber.tunnel.toast.saveTtlFailed":"Échec de l'enregistrement des paramètres TTL du tunnel","settings.openchamber.tunnel.toast.saveTokenFailed":"Échec de l'enregistrement du jeton de tunnel distant géré","settings.openchamber.tunnel.toast.selectOrAddManagedRemoteFirst":"Sélectionnez ou ajoutez d'abord un tunnel distant géré","settings.openchamber.tunnel.toast.managedRemoteTokenRequiredBeforeStarting":"Un jeton de tunnel distant géré est requis avant de démarrer","settings.openchamber.tunnel.toast.addManagedRemoteTokenBeforeStarting":"Ajoutez un jeton de tunnel distant géré avant de commencer","settings.openchamber.tunnel.toast.startFailed":"Échec du démarrage du tunnel","settings.openchamber.tunnel.toast.startedButNoPublicUrl":"Le tunnel a démarré mais aucune URL publique n'a été renvoyée","settings.openchamber.tunnel.toast.replacedTunnelSingleSingle":"Tunnel précédent remplacé : 1 lien révoqué, 1 session invalidée.","settings.openchamber.tunnel.toast.replacedTunnelSingleManySessions":"Tunnel précédent remplacé : 1 lien révoqué, sessions {invalidatedSessionCount} invalidées.","settings.openchamber.tunnel.toast.replacedTunnelManyLinksSingleSession":"Tunnel précédent remplacé : liens {revokedBootstrapCount} révoqués, 1 session invalidée.","settings.openchamber.tunnel.toast.replacedTunnelManyMany":"Tunnel précédent remplacé : liens {revokedBootstrapCount} révoqués, sessions {invalidatedSessionCount} invalidées.","settings.openchamber.tunnel.toast.linkReady":"Lien de connexion prêt","settings.openchamber.tunnel.toast.stopped":"Tunnel arrêté","settings.openchamber.tunnel.toast.stopFailed":"Échec de l'arrêt du tunnel","settings.openchamber.tunnel.toast.connectLinkCopied":"Lien de connexion copié","settings.openchamber.tunnel.toast.copyUrlFailed":"Échec de la copie de l'URL","settings.openchamber.tunnel.toast.saveSelectedManagedRemoteFailed":"Échec de l'enregistrement du tunnel distant géré sélectionné","settings.openchamber.tunnel.toast.tunnelNameRequired":"Le nom du tunnel est obligatoire","settings.openchamber.tunnel.toast.managedRemoteHostnameRequired":"Le nom d'hôte du tunnel distant géré est requis","settings.openchamber.tunnel.toast.managedRemoteTokenRequired":"Un jeton de tunnel distant géré est requis","settings.openchamber.tunnel.toast.hostnameAlreadyExists":"Ce nom d'hôte existe déjà","settings.openchamber.tunnel.toast.managedRemoteSaved":"Tunnel distant géré enregistré","settings.openchamber.tunnel.toast.managedRemoteRemoved":"Tunnel distant géré supprimé","settings.magicPrompts.sidebar.title":"Prompts magiques","settings.magicPrompts.sidebar.description":"Sélectionnez un modèle de prompt à modifier.","settings.magicPrompts.sidebar.group.git":"Git","settings.magicPrompts.sidebar.group.planning":"Planification","settings.magicPrompts.sidebar.group.session":"Session","settings.magicPrompts.sidebar.item.gitCommitGenerate":"Génération de commit","settings.magicPrompts.sidebar.item.gitPrGenerate":"Génération de PR","settings.magicPrompts.sidebar.item.gitConflictResolve":"Résolution des conflits de fusion/rebase","settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve":"Résolution des conflits de cherry-pick","settings.magicPrompts.sidebar.item.planTodo":"Planification des tâches","settings.magicPrompts.sidebar.item.planImprove":"Améliorer le plan","settings.magicPrompts.sidebar.item.planImplement":"Plan de mise en œuvre","settings.magicPrompts.sidebar.item.sessionSummary":"Résumé de la session","settings.magicPrompts.sidebar.item.sessionWorkspaceReview":"Examen de l'espace de travail","settings.magicPrompts.sidebar.item.sessionFusion":"Fusion","settings.remoteInstances.sidebar.title":"Instances distantes","settings.remoteInstances.sidebar.total":"Total {count}","settings.remoteInstances.sidebar.newSshInstanceName":"Nouvelle instance SSH","settings.remoteInstances.sidebar.actions.addSshInstance":"Ajouter une instance SSH","settings.remoteInstances.sidebar.actions.connect":"Connecter","settings.remoteInstances.sidebar.actions.disconnect":"Déconnecter","settings.remoteInstances.sidebar.actions.retry":"Réessayer","settings.remoteInstances.sidebar.actions.remove":"Retirer","settings.remoteInstances.sidebar.confirm.localPortInUseRetry":"Le port local est déjà utilisé. Choisir un port local gratuit et réessayer ?","settings.remoteInstances.sidebar.toast.createFailed":"Échec de la création de l'instance SSH","settings.remoteInstances.sidebar.toast.retriedWithRandomPort":"Réessayé avec un port local aléatoire","settings.remoteInstances.sidebar.toast.connectFailed":"Échec de la connexion de l'instance","settings.remoteInstances.sidebar.toast.disconnectFailed":"Échec de la déconnexion de l'instance","settings.remoteInstances.sidebar.toast.retryFailed":"Échec de la nouvelle tentative de connexion","settings.remoteInstances.sidebar.toast.removeFailed":"Échec de la suppression de l'instance","settings.remoteInstances.sidebar.phase.ready":"Prêt","settings.remoteInstances.sidebar.phase.error":"Erreur","settings.remoteInstances.sidebar.phase.reconnect":"Reconnecter","settings.remoteInstances.sidebar.phase.installing":"Installation","settings.remoteInstances.sidebar.phase.updating":"Mise à jour","settings.remoteInstances.sidebar.phase.forwarding":"Transfert","settings.remoteInstances.sidebar.phase.starting":"Démarrage","settings.remoteInstances.sidebar.phase.connecting":"Connexion","settings.remoteInstances.sidebar.phase.idle":"Inactif","settings.remoteInstances.page.section.instance":"Instance","settings.remoteInstances.page.section.instanceDescription":"Paramètres de base du SSH.","settings.remoteInstances.page.field.mode":"Mode","settings.remoteInstances.page.field.modeHint":"Installations/mises à jour gérées et démarrage de OpenChamber à distance. Externe suppose qu'il est déjà en cours d'exécution.","settings.remoteInstances.page.field.modePlaceholder":"Sélectionnez le mode","settings.remoteInstances.page.field.modeManaged":"Géré (démarrage automatique)","settings.remoteInstances.page.field.modeExternal":"Externe (déjà en cours d'exécution)","settings.remoteInstances.page.field.preferredRemotePort":"Port sur la machine distante","settings.remoteInstances.page.field.preferredRemotePortHint":"Port utilisé par OpenChamber sur la machine distante. Laissez vide pour en choisir un automatiquement.","settings.remoteInstances.page.field.keepServerRunning":"Maintenir le serveur en marche","settings.remoteInstances.page.field.keepServerRunningHint":"Laisser le serveur distant tourner après la déconnexion. Désactivé, il est arrêté à la déconnexion puis redémarré à la connexion suivante.","settings.remoteInstances.page.field.bindHost":"Accessible depuis","settings.remoteInstances.page.field.bindHostHint":"Qui peut ouvrir l’adresse redirigée sur cet ordinateur. La machine distante reste de toute façon accessible uniquement par le tunnel SSH.","settings.remoteInstances.page.field.preferredLocalPort":"Port sur cet ordinateur","settings.remoteInstances.page.field.preferredLocalPortHint":"Port ouvert sur cet ordinateur pour le tunnel. Laissez vide pour en choisir un automatiquement.","settings.remoteInstances.page.field.forwardType":"Type de transfert","settings.remoteInstances.page.field.localHostPlaceholder":"127.0.0.1","settings.remoteInstances.page.field.remoteHostPlaceholder":"127.0.0.1","settings.remoteInstances.page.field.auto":"Auto","settings.remoteInstances.page.confirm.bindAllInterfaces":"La liaison à 0.0.0.0 expose les ports transférés à votre réseau local. Continuer?","settings.remoteInstances.page.preview.localSocks5":"(SOCKS5 local)","settings.remoteInstances.page.preview.local":"(local)","settings.remoteInstances.page.preview.remote":"(hôte distant)","settings.remoteInstances.page.toast.openLocalEndpointFailed":"Échec de l'ouverture du point de terminaison local","settings.remoteInstances.page.toast.localUrlCopied":"URL locale copiée","settings.remoteInstances.page.actions.copyLocalUrl":"Copier l’URL locale","settings.remoteInstances.page.actions.open":"Ouvrir","settings.remoteInstances.page.logsDialog.selectedInstanceFallback":"Instance sélectionnée","settings.remoteInstances.page.patternDialog.descriptionWithHost":"{host} nécessite une destination concrète.","settings.remoteInstances.page.patternDialog.description":"Entrez la destination.","settings.common.infoAria":"Plus d’informations","settings.common.actions.cancel":"Annuler","settings.common.actions.close":"Fermer","settings.common.actions.create":"Créer","settings.common.actions.delete":"Supprimer","settings.openchamber.appLinks.title":"Liens d’application approuvés","settings.openchamber.appLinks.info":"Les liens de cette liste s’ouvrent sans nouvelle demande sur cet appareil. Les autres liens d’application demandent toujours une confirmation.","settings.openchamber.appLinks.empty":"Aucun lien d’application approuvé sur cet appareil. Choisissez « Approuver et ouvrir » lors de l’ouverture d’un lien pour l’ajouter ici.","settings.openchamber.appLinks.removeAria":"Supprimer les liens {scheme} approuvés","settings.common.actions.reset":"Réinitialiser","settings.common.actions.rename":"Renommer","settings.common.actions.duplicate":"Dupliquer","settings.common.actions.import":"Importer","settings.common.actions.copyAll":"Copier tout","settings.common.actions.clear":"Effacer","settings.common.actions.saving":"Enregistrement...","settings.common.status.saved":"Enregistré","settings.common.status.saveFailed":"Échec de l’enregistrement","settings.common.status.saveFailedReason":"Enregistrement impossible : {reason}","settings.common.actions.saveChanges":"Enregistrer les modifications","settings.common.scope.global":"Mondial","settings.common.scope.project":"Projet","settings.common.field.description":"Description","settings.common.badge.new":"Nouveau","settings.common.badge.modified":"Modifié","settings.common.permission.allow":"Autoriser","settings.common.permission.ask":"Demander","settings.common.permission.deny":"Refuser","settings.common.state.comingSoon":"À venir...","settings.projects.actions.title":"Actions","settings.projects.shared.badge":"Dans le dépôt","settings.projects.shared.actionsFromRepo":"Enregistrées dans le dépôt ({path}). Tous ceux qui le récupèrent les ont.","settings.projects.shared.commandsFromRepo":"Exécutées en premier, enregistrées dans le dépôt ({path})","settings.projects.shared.invalid":"La configuration du projet dans {path} n'a pas pu être lue : {reason}","settings.projects.shared.trusted":"Commandes du dépôt approuvées sur cette instance","settings.projects.shared.resetTrust":"Réinitialiser la confiance","settings.projects.shared.title":"Configuration du dépôt","settings.projects.shared.description":"Configuration enregistrée dans le dépôt lui-même, pour que tous ceux qui le récupèrent aient les mêmes actions, commandes de configuration, amorces et plans. Rien n'est écrit tant que vous n'y déplacez pas un élément.","settings.projects.shared.file":"Fichier","settings.projects.shared.status.missing":"Pas encore dans le dépôt","settings.projects.shared.status.ok":"Dans le dépôt","settings.projects.shared.plansDir":"Dossier des plans","settings.projects.shared.plansDirPlaceholder":".openchamber/plans","settings.projects.shared.plansDirInfo":"Où vivent les plans du dépôt, relativement au dépôt. Vide signifie .openchamber/plans. Un dossier personnalisé comme docs/plans remplace entièrement le dossier par défaut : seul ce dossier est lu et écrit. Déplacez vous-même les fichiers existants quand vous le changez.","settings.projects.shared.plansDirAria":"Dossier des plans du dépôt","settings.projects.shared.actions.share":"Déplacer vers le dépôt","settings.projects.shared.actions.showTitle":"Réaffiche cette action du dépôt dans votre menu.","settings.projects.shared.actions.hideTitle":"Masque cette action du dépôt dans votre menu seulement ; le dépôt n'est pas modifié.","settings.projects.shared.actions.makePersonalTitle":"Le retire du dépôt et ne le garde que dans vos réglages sur cette instance.","settings.projects.shared.actions.shareTitle":"L'enregistre dans {path} du dépôt, pour que tous ceux qui le récupèrent l'aient. Il quitte vos réglages personnels.","settings.projects.shared.actions.shareAfterSave":"Enregistre d'abord vos modifications, puis déplacez","settings.projects.shared.actions.makePersonal":"Déplacer vers mes réglages","settings.projects.shared.actions.hide":"Masquer pour moi","settings.projects.shared.actions.show":"Afficher","settings.projects.shared.hiddenBadge":"Masqué","settings.projects.shared.replaceMode":"Utiliser uniquement mes commandes de configuration et ignorer celles du dépôt","settings.projects.shared.replaceModeAria":"Utiliser uniquement mes commandes de configuration et ignorer celles du dépôt","settings.projects.shared.toast.shareFailed":"Impossible de mettre à jour la configuration du dépôt","settings.projects.actions.description":"Commandes par projet affichées dans l'en-tête à côté du nom du projet.","settings.projects.actions.validation.fillNameAndCommand":"Remplissez le nom de l'action et la commande avant d'enregistrer.","settings.projects.actions.state.loading":"Chargement...","settings.projects.actions.state.empty":"Aucune action configurée pour le moment.","settings.projects.actions.state.untitled":"Action sans titre","settings.projects.actions.state.noDesktopSshForwards":"Aucun transfert local SSH activé disponible.","settings.projects.actions.field.selectIconAria":"Sélectionner l'icône","settings.projects.actions.field.iconAria":"Icône {icon}","settings.projects.actions.field.actionNamePlaceholder":"Nom de l'action","settings.projects.actions.field.command":"Commande","settings.projects.actions.field.commandPlaceholder":"p. ex. bun install","settings.projects.actions.runIn.label":"Exécuter dans","settings.projects.actions.runIn.info":"Choisissez où cette action s'exécute lorsqu'elle est lancée depuis un worktree lié.","settings.projects.actions.runIn.project":"Checkout parent","settings.projects.actions.runIn.worktree":"Worktree courant","settings.projects.actions.runIn.aria":"Répertoire d'exécution de cette action","settings.projects.actions.field.autoOpenUrl":"Ouverture automatique de l’URL","settings.projects.actions.field.autoOpenUrlForAria":"Ouverture automatique de l’URL pour {title}","settings.projects.actions.field.autoOpenUrlDescription":"Ouvrir l’URL détectée dans la sortie, ou l’URL personnalisée ci-dessous","settings.projects.actions.field.overrideUrlPlaceholder":"Remplacer URL (facultatif)","settings.projects.actions.field.overrideUrlTooltip":"Si ce champ est rempli, l’URL personnalisée est utilisée. Sinon, l'application ouvre la meilleure URL détectée dans la sortie.","settings.projects.actions.field.overrideUrlVariables":"Utilisez {worktree} ou {branch} pour la copie de travail où l’action s’exécute, p. ex. https://{worktree}.myapp.localhost","settings.projects.actions.field.desktopSshForward":"Transfert SSH local","settings.projects.actions.field.useOutputManualUrl":"Utiliser l’URL de sortie ou l’URL manuelle","settings.projects.actions.actions.add":"Ajouter une action","settings.projects.actions.actions.save":"Enregistrer les actions","settings.projects.actions.toast.saveFailed":"Échec de l'enregistrement des actions","settings.projects.actions.toast.saved":"Actions du projet enregistrées","settings.openchamber.about.title":"À propos de OpenChamber","settings.openchamber.about.field.version":"Version","settings.openchamber.about.state.checking":"Vérification...","settings.openchamber.about.state.upToDate":"À jour","settings.openchamber.about.actions.checkUpdates":"Vérifier les mises à jour","settings.openchamber.about.actions.update":"Mise à jour","settings.openchamber.about.actions.updateOpenChamberToVersion":"Mettre à jour OpenChamber vers {version}","settings.openchamber.about.actions.updateServerToVersion":"Mettre à jour le serveur OpenChamber vers {version}","settings.openchamber.about.actions.updateDesktopToVersion":"Mettre à jour OpenChamber Desktop vers {version}","settings.openchamber.about.actions.updateAppToVersion":"Mettre à jour cette application vers {version}","settings.openchamber.about.actions.updateOpenCodeToVersion":"Mettre à jour OpenCode vers {version}","settings.openchamber.about.actions.checkServerForUpdates":"Vérifier les mises à jour du serveur","settings.openchamber.about.serviceManagerUpdate":"OpenChamber {version} est disponible. Ce serveur tourne sous un gestionnaire de services et ne peut pas se mettre à jour seul. Exécutez ceci sur le serveur, puis redémarrez le service :","settings.openchamber.about.openCode.installedVersion":"OpenCode {version} installé. Rechargez OpenCode pour commencer à l’utiliser.","settings.openchamber.about.openCode.installed":"Mise à jour d’OpenCode installée. Rechargez OpenCode pour commencer à l’utiliser.","settings.openchamber.about.openCode.manualUpdate":"OpenCode {version} est disponible. Mettez à jour OpenCode de la même façon que vous l’avez installé, puis redémarrez OpenChamber.","settings.openchamber.about.native.serverOpenChamberVersion":"Serveur : OpenChamber {version}","settings.openchamber.about.native.serverOpenCodeVersion":"Serveur : OpenCode {version}","settings.openchamber.about.native.appVersion":"Cette app : {version}","settings.openchamber.about.toast.serverLatestVersion":"Le serveur utilise la dernière version d’OpenChamber","settings.openchamber.about.actions.checkForUpdates":"Vérifier les mises à jour","settings.openchamber.about.toast.latestVersion":"Vous êtes sur la dernière version","settings.agents.sidebar.title":"Agents","settings.agents.sidebar.total":"Total {count}","settings.agents.sidebar.empty.title":"Aucun agent configuré","settings.agents.sidebar.empty.description":"Utilisez le bouton + ci-dessus pour en créer un","settings.agents.sidebar.section.builtIn":"Agents intégrés","settings.agents.sidebar.section.custom":"Agents personnalisés","settings.agents.sidebar.badge.system":"système","settings.agents.sidebar.dialog.deleteTitle":"Supprimer un agent","settings.agents.sidebar.dialog.deleteDescription":`Êtes-vous sûr de vouloir supprimer l'agent "{name}" ?`,"settings.agents.sidebar.renameDialog.title":"Renommer l'agent","settings.agents.sidebar.renameDialog.description":`Entrez un nouveau nom pour l'agent "@{name}"`,"settings.agents.sidebar.renameDialog.placeholder":"Nouveau nom d'agent...","settings.agents.sidebar.toast.builtInCannotDelete":"Les agents intégrés ne peuvent pas être supprimés","settings.agents.sidebar.toast.agentDeleted":'Agent "{name}" supprimé avec succès',"settings.agents.sidebar.toast.deleteFailed":"Échec de la suppression de l'agent","settings.agents.sidebar.toast.definitionNotFound":"Définition de l’agent introuvable. Aucune modification effectuée.","settings.agents.sidebar.toast.agentNameRequired":"Le nom de l'agent est requis","settings.agents.sidebar.toast.agentExists":"Un agent portant ce nom existe déjà","settings.agents.sidebar.toast.removeOldAfterRenameFailed":"Échec de la suppression de l'ancien agent après le changement de nom","settings.agents.sidebar.toast.renameFailed":"Échec du changement de nom de l'agent","settings.agents.sidebar.toast.agentRenamed":'Agent renommé en "{name}"',"settings.agents.page.toast.permissionNameRequired":"Le nom de l'autorisation est requis","settings.agents.page.toast.created":"Agent créé avec succès","settings.agents.page.toast.updated":"Agent mis à jour avec succès","settings.agents.page.toast.createFailed":"Échec de la création de l'agent","settings.agents.page.toast.updateFailed":"Échec de la mise à jour de l'agent","settings.agents.page.toast.saveUnexpectedError":"Une erreur s'est produite lors de l'enregistrement","settings.agents.page.empty.title":"Sélectionnez un agent dans la barre latérale","settings.agents.page.empty.description":"ou créez-en un nouveau","settings.agents.page.title.new":"Nouvel agent","settings.agents.page.subtitle.new":"Configurer un nouveau personnage d'assistant","settings.agents.page.subtitle.edit":"Modifier les paramètres de l'agent","settings.agents.page.section.identityRole":"Identité et rôle","settings.agents.page.section.modelParameters":"Modèle et paramètres","settings.agents.page.section.systemPrompt":"Prompt système","settings.agents.page.permissionsEditor.sectionInfo":"Modifie les règles de permissions propres à cet agent, telles qu'enregistrées dans sa config. « Hériter » laisse la clé non définie : la config globale et les valeurs par défaut s'appliquent.","settings.agents.page.permissionsEditor.ruleCount":"{count} règles","settings.agents.page.permissionsEditor.action.allow":"Autoriser","settings.agents.page.permissionsEditor.action.ask":"Demander","settings.agents.page.permissionsEditor.action.deny":"Refuser","settings.agents.page.permissionsEditor.action.default":"Par défaut","settings.agents.page.permissionsEditor.action.inherit":"Hériter","settings.agents.page.permissionsEditor.actions.addKey":"Ajouter une clé","settings.agents.page.permissionsEditor.customKeyPlaceholder":"Clé de permission personnalisée…","settings.agents.page.permissionsEditor.defaultAria":"Permission par défaut pour tous les outils","settings.agents.page.permissionsEditor.defaultInfo":"Le repli au niveau de l'agent (la clé *). S'applique à tout outil sans règle propre.","settings.agents.page.permissionsEditor.defaultLabel":"Défaut pour tous les outils","settings.agents.page.permissionsEditor.effectiveHint":"→ {action}","settings.agents.page.permissionsEditor.mcpTitle":"Serveurs MCP","settings.agents.page.permissionsEditor.mcpInfo":"Une ligne par serveur MCP de votre configuration. La règle couvre tous les outils du serveur. Les serveurs désactivés ou en échec sont aussi listés, pour définir une règle à l'avance.","settings.agents.page.permissionsEditor.mcpStatus.disabled":"Désactivé","settings.agents.page.permissionsEditor.mcpStatus.pending":"Démarrage","settings.agents.page.permissionsEditor.keyAria":"Permission pour {key}","settings.agents.page.permissionsEditor.patternActionAria":"Action pour le motif de {key}","settings.agents.page.permissionsEditor.patternPlaceholder":"Motif, p. ex. rm -rf * ou /path/**","settings.agents.page.permissionsEditor.actions.addRule":"Ajouter une règle","settings.agents.page.permissionsEditor.actions.removeRuleAria":"Supprimer la règle","settings.agents.page.permissionsEditor.actions.retry":"Réessayer","settings.agents.page.permissionsEditor.state.loadFailed":"Impossible de charger la config de permissions de l'agent.","settings.agents.page.permissionsEditor.toast.saveFailed":"Échec de l'enregistrement des permissions","settings.agents.page.section.toolPermissions":"Autorisations des outils","settings.agents.page.field.agentName":"Nom de l'agent","settings.agents.page.field.agentNamePlaceholder":"nom-agent","settings.agents.page.field.scopePlaceholder":"Portée","settings.agents.page.field.descriptionPlaceholder":"Que fait cet agent ?","settings.agents.page.runtimeProvided.note":"Fourni par OpenCode ou un plugin, sans fichier de configuration propre. Les indications grisées montrent ses valeurs actuelles ; ce que vous saisissez est enregistré comme surcharge.","settings.agents.page.field.mode":"Mode","settings.agents.page.field.modeTooltip":"Visibilité principale et sous-agent","settings.agents.page.field.overrideModel":"Remplacer le modèle","settings.agents.page.field.variant":"Variante de réflexion","settings.agents.page.field.variantTooltip":"Optionnel. Si le modèle prend en charge le raisonnement, la variante contrôle la profondeur du raisonnement.","settings.agents.page.field.variantHint":"Spécifique au modèle (par ex. variante Anthropic)","settings.agents.page.field.variantPlaceholder":"p. ex. high, max, low, none","settings.agents.page.field.temperature":"Température","settings.agents.page.field.temperatureTooltip":"Contrôle le caractère aléatoire. Plus élevé = créatif, Inférieur = concentré.","settings.agents.page.field.temperatureRange":"0.0 à 2.0","settings.agents.page.field.clearTemperatureAria":"Effacer le remplacement de la température","settings.agents.page.field.topP":"Top P","settings.agents.page.field.topPTooltip":"Diversité d'échantillonnage du noyau. Inférieur = jetons probables uniquement.","settings.agents.page.field.topPRange":"0.0 à 1.0","settings.agents.page.field.clearTopPAria":"Effacer le remplacement Top P","settings.agents.page.field.systemPromptPlaceholder":"Vous êtes un assistant expert en codage...","settings.agents.page.mode.primary":"Primaire","settings.agents.page.mode.subagent":"Sous-agent","settings.agents.page.mode.all":"Tous","settings.agents.page.permissions.defaultLabel":"Défaut","settings.agents.page.permissions.hideEditor":"Masquer l'éditeur","settings.agents.page.permissions.advancedEditor":"Éditeur avancé","settings.agents.page.permissions.globalSummary":"Mondial : {summary}","settings.agents.page.permissions.rulesSummary":"Règles : {summary}","settings.agents.page.permissions.globalDefault":"Valeur par défaut globale","settings.agents.page.permissions.pattern":"Motif","settings.agents.page.permissions.addCustomRule":"Ajouter une règle personnalisée","settings.agents.page.permissions.permissionPlaceholder":"Autorisation...","settings.agents.page.permissions.patternPlaceholder":"Motif (p. ex. *)","settings.page.behavior.title":"Comportement","settings.page.behavior.description":"Guidez la façon dont l'agent répond.","settings.behavior.page.title":"Comportement","settings.behavior.page.warning.title":"Les règles globales sont combinées avec les règles du projet","settings.behavior.page.warning.description":"Les modifications apportées ici mettent à jour {path}. OpenCode inclut également toutes les règles AGENTS.md au niveau du projet lorsqu'elles existent.","settings.behavior.page.section.systemPrompt":"AGENTS.md global","settings.behavior.page.field.systemPromptPlaceholder":`Vous êtes un assistant IA utile...
|
|
2
|
+
|
|
3
|
+
Utilisez cet espace pour définir des règles absolues sur la façon dont l'IA doit se comporter dans toutes les sessions et tous les fournisseurs.`,"settings.behavior.page.section.responseStyle":"Style de réponse","settings.behavior.page.responseStyle.tooltip":"Lorsqu'elles sont activées, ces instructions guident la manière dont l'assistant répond à chaque nouvelle conversation. Elles sont envoyées avec votre premier message et ne modifient pas vos règles globales AGENTS.md.","settings.behavior.page.responseStyle.enableAria":"Activer les instructions de style de réponse","settings.behavior.page.responseStyle.enable":"Ajouter des instructions de style de réponse aux nouvelles conversations","settings.behavior.page.responseStyle.preset":"Préréglage","settings.behavior.page.responseStyle.option.concise":"Concis","settings.behavior.page.responseStyle.option.detailed":"Détaillé","settings.behavior.page.responseStyle.option.mentor":"Mentor","settings.behavior.page.responseStyle.option.pushback":"Esprit critique","settings.behavior.page.responseStyle.option.noFiller":"Pas de remplissage","settings.behavior.page.responseStyle.option.matchEnergy":"S’adapte à mon ton","settings.behavior.page.responseStyle.option.warmPeer":"Collègue bienveillant","settings.behavior.page.responseStyle.option.custom":"Personnalisé","settings.behavior.page.responseStyle.customPlaceholder":"Écrivez l'instruction à ajouter au premier message...","settings.behavior.page.toast.saved":"Comportement enregistré avec succès","settings.behavior.page.toast.saveFailed":"Échec de l'enregistrement du comportement","settings.behavior.page.toast.agentsMdChangedOnDisk":"AGENTS.md a été modifié en dehors d'OpenChamber, votre modification n'a donc pas été enregistrée. Copiez-la, puis rouvrez cette page pour charger le fichier actuel.","settings.commands.sidebar.title":"Commandes","settings.commands.sidebar.total":"Total {count}","settings.commands.sidebar.empty.title":"Aucune commande configurée","settings.commands.sidebar.empty.description":"Utilisez le bouton + ci-dessus pour en créer un","settings.commands.sidebar.section.builtIn":"Commandes intégrées","settings.commands.sidebar.section.custom":"Commandes personnalisées","settings.commands.sidebar.dialog.deleteTitle":"Supprimer la commande","settings.commands.sidebar.dialog.resetTitle":"Réinitialiser la commande","settings.commands.sidebar.dialog.deleteDescription":"Êtes-vous sûr de vouloir supprimer la commande « {name} » ?","settings.commands.sidebar.dialog.resetDescription":"Êtes-vous sûr de vouloir réinitialiser la commande « {name} » à sa configuration par défaut ?","settings.commands.sidebar.renameDialog.title":"Renommer la commande","settings.commands.sidebar.renameDialog.description":'Entrez un nouveau nom pour la commande "/{name}"',"settings.commands.sidebar.renameDialog.placeholder":"Nouveau nom de commande...","settings.commands.sidebar.toast.builtInCannotDelete":"Les commandes intégrées ne peuvent pas être supprimées","settings.commands.sidebar.toast.commandDeleted":'Commande "{name}" supprimée avec succès',"settings.commands.sidebar.toast.commandReset":'Commande "{name}" réinitialisée aux valeurs par défaut',"settings.commands.sidebar.toast.deleteFailed":"Échec de la suppression de la commande","settings.commands.sidebar.toast.resetFailed":"Échec de la réinitialisation de la commande","settings.commands.sidebar.toast.commandNameRequired":"Le nom de la commande est obligatoire","settings.commands.sidebar.toast.commandExists":"Une commande portant ce nom existe déjà","settings.commands.sidebar.toast.removeOldAfterRenameFailed":"Échec de la suppression de l'ancienne commande après le changement de nom","settings.commands.sidebar.toast.renameFailed":"Échec du renommage de la commande","settings.commands.page.toast.templateRequired":"Le modèle de commande est requis","settings.commands.page.toast.created":"Commande créée avec succès","settings.commands.page.toast.updated":"Commande mise à jour avec succès","settings.commands.page.toast.createFailed":"Échec de la création de la commande","settings.commands.page.toast.updateFailed":"Échec de la mise à jour de la commande","settings.commands.page.toast.saveUnexpectedError":"Une erreur s'est produite lors de l'enregistrement","settings.commands.page.empty.title":"Sélectionnez une commande dans la barre latérale","settings.commands.page.empty.description":"ou créez-en un nouveau","settings.commands.page.title.new":"Nouvelle commande","settings.commands.page.subtitle.new":"Configurer une nouvelle commande slash","settings.commands.page.subtitle.edit":"Modifier les paramètres de la commande","settings.commands.page.section.identity":"Identité","settings.commands.page.section.executionContext":"Contexte d'exécution","settings.commands.page.section.template":"Modèle de commande","settings.commands.page.field.commandName":"Nom de la commande","settings.commands.page.field.commandNamePlaceholder":"nom-commande","settings.commands.page.field.descriptionPlaceholder":"Que fait cette commande ?","settings.commands.page.field.overrideAgent":"Remplacer l'agent","settings.commands.page.field.templatePlaceholder":`Votre modèle de commande ici...
|
|
4
|
+
|
|
5
|
+
Utilisez $ARGUMENTS pour référencer les entrées de l'utilisateur.
|
|
6
|
+
Utilisez !\`shell command\` pour injecter la sortie du shell.
|
|
7
|
+
Utilisez @filename pour inclure le contenu du fichier.`,"settings.commands.page.templateHint.userInput":"entrée de l'utilisateur","settings.commands.page.templateHint.shellOutput":"sortie du shell","settings.commands.page.templateHint.fileContents":"contenu du fichier","settings.commands.agentSelector.title":"Sélectionnez un agent","settings.commands.agentSelector.notSelected":"Non sélectionné","settings.commands.agentSelector.selectAgentPlaceholder":"Sélectionnez un agent...","settings.gitIdentities.page.section.title":"Identités","settings.gitIdentities.page.empty.title":"Aucune identité configurée","settings.gitIdentities.page.empty.description":"Créez-en un pour gérer les paramètres d'auteur Git par projet","settings.gitIdentities.page.badge.default":"défaut","settings.gitIdentities.page.actions.setAsDefault":"Définir par défaut","settings.gitIdentities.page.actions.unsetDefault":"Désactiver la valeur par défaut","settings.gitIdentities.page.toast.updateDefaultFailed":"Échec de la mise à jour de l'identité par défaut","settings.gitIdentities.page.toast.defaultUpdated":"Identité par défaut mise à jour","settings.gitIdentities.page.toast.defaultUnset":"Identité par défaut non définie","settings.gitIdentities.page.toast.profileDeleted":'Profil "{name}" supprimé',"settings.gitIdentities.page.toast.deleteProfileFailed":"Échec de la suppression du profil","settings.gitIdentities.page.deleteDialog.title":"Supprimer le profil","settings.gitIdentities.page.deleteDialog.description":"Êtes-vous sûr de vouloir supprimer « {name} » ?","settings.gitIdentities.editor.title.newIdentity":"Nouvelle identité","settings.gitIdentities.editor.title.globalIdentity":"Identité globale","settings.gitIdentities.editor.title.editIdentity":"Modifier l'identité","settings.gitIdentities.editor.description.globalReadOnly":"Identité Git à l'échelle du système (lecture seule)","settings.gitIdentities.editor.description.newProfile":"Créer un nouveau profil d'identité Git","settings.gitIdentities.editor.description.editProfile":"Modifier les paramètres du profil d'identité","settings.gitIdentities.editor.section.commitSigning":"Signature des commits","settings.gitIdentities.editor.field.profileName":"Nom du profil","settings.gitIdentities.editor.field.profileNamePlaceholder":"Profil professionnel, personnel, etc.","settings.gitIdentities.editor.field.color":"Couleur","settings.gitIdentities.editor.field.icon":"Icône","settings.gitIdentities.editor.field.userName":"Nom d’auteur Git","settings.gitIdentities.editor.field.userNameTooltip":"Le nom qui apparaîtra dans les messages de commit Git.","settings.gitIdentities.editor.field.userNamePlaceholder":"John Doe","settings.gitIdentities.editor.field.emailAddress":"Adresse e-mail","settings.gitIdentities.editor.field.emailAddressTooltip":"Doit correspondre à votre adresse e-mail dans GitHub/GitLab pour une attribution appropriée.","settings.gitIdentities.editor.field.emailAddressPlaceholder":"jean@example.com","settings.gitIdentities.editor.field.signCommits":"Signer les commits avec cette identité","settings.gitIdentities.editor.field.signingKey":"Clé de signature","settings.gitIdentities.editor.field.signingKeyPlaceholder":"~/.ssh/id_ed25519.pub","settings.gitIdentities.editor.field.account":"Compte de gestion de code","settings.gitIdentities.editor.field.accountNone":"Aucun compte","settings.gitIdentities.editor.auth.label":"Authentification","settings.gitIdentities.editor.auth.systemHint":"Push et pull avec ce que Git utilise déjà sur cette machine : clés SSH, gestionnaire d'identifiants, CLI gh.","settings.gitIdentities.editor.auth.system":"Cette machine","settings.gitIdentities.editor.auth.accountHint":"Push et pull avec la connexion ou le jeton du compte connecté.","settings.gitIdentities.editor.auth.account":"Compte","settings.gitIdentities.editor.auth.anonymous":"Anonyme","settings.gitIdentities.editor.auth.ssh":"SSH","settings.gitIdentities.editor.auth.anonymousHint":"Lit les dépôts publics en HTTPS sans connexion et ne peut pas pousser. Les issues et pull requests passent toujours par le compte.","settings.gitIdentities.page.incomplete":"Il lui faut un compte ou une clé avant qu'un dépôt puisse l'utiliser","settings.gitIdentities.page.accountGone":"Le compte utilisé par cette identité n'est plus connecté","settings.gitIdentities.editor.toast.accountRequired":"Choisissez le compte au nom duquel agit cette identité.","settings.gitIdentities.editor.toast.sshKeyRequired":"Choisissez la clé SSH gérée utilisée par cette identité.","settings.gitIdentities.editor.actions.close":"Fermer","settings.gitIdentities.editor.actions.create":"Créer","settings.gitIdentities.editor.actions.save":"Enregistrer","settings.gitIdentities.editor.toast.userNameEmailRequired":"Le nom d'utilisateur et l'e-mail sont requis","settings.gitIdentities.editor.toast.signingKeyRequired":"Une clé de signature est requise lorsque la signature des commits est activée","settings.gitIdentities.editor.toast.profileCreated":"Profil créé","settings.gitIdentities.editor.toast.profileUpdated":"Profil mis à jour","settings.gitIdentities.editor.toast.createProfileFailed":"Échec de la création du profil","settings.gitIdentities.editor.toast.updateProfileFailed":"Échec de la mise à jour du profil","settings.gitIdentities.editor.toast.saveUnexpectedError":"Une erreur s'est produite lors de l'enregistrement","settings.gitIdentities.editor.toast.profileDeleted":"Profil supprimé","settings.gitIdentities.editor.toast.deleteProfileFailed":"Échec de la suppression du profil","settings.gitIdentities.editor.toast.deleteUnexpectedError":"Une erreur s'est produite lors de la suppression","settings.skills.sidebar.title":"Skills","settings.skills.sidebar.total":"Total {count}","settings.skills.sidebar.blockedByPolicy":"Bloqué","settings.skills.sidebar.blockedByPolicyHint":"Une règle de votre configuration OpenCode bloque ce skill, donc les agents ne peuvent pas l'utiliser.","settings.skills.sidebar.section.project":"Skills du projet","settings.skills.sidebar.section.user":"Skills utilisateur","settings.skills.sidebar.empty.title":"Aucun skill configuré","settings.skills.sidebar.empty.description":"Utilisez le bouton + ci-dessus pour en créer un","settings.skills.sidebar.badge.claude":"Claude","settings.skills.sidebar.badge.agents":"agents","settings.skills.sidebar.badge.opencode":"OpenCode","settings.skills.sidebar.toast.skillDeleted":'Skill "{name}" supprimé avec succès',"settings.skills.sidebar.toast.deleteSkillFailed":"Échec de la suppression du skill","settings.skills.sidebar.toast.duplicateLoadFailed":"Échec du chargement des détails du skill pour la duplication","settings.skills.sidebar.toast.renameFailed":"Échec du renommage du skill","settings.skills.sidebar.toast.skillRenamed":'Skill renommé en "{name}"',"settings.skills.sidebar.deleteDialog.title":"Supprimer le skill","settings.skills.sidebar.deleteDialog.description":"Êtes-vous sûr de vouloir supprimer le skill « {name} » ?","settings.skills.sidebar.renameDialog.title":"Renommer le skill","settings.skills.sidebar.renameDialog.description":'Entrez un nouveau nom pour le skill "{name}"',"settings.skills.sidebar.renameDialog.placeholder":"Nouveau nom de skill...","settings.skills.page.title.newSkill":"Nouveau skill","settings.skills.page.subtitle.newSkill":"Configurer un nouveau skill","settings.skills.page.subtitle.skillLocation":"Skill {location}","settings.skills.page.section.basicInformation":"Informations de base","settings.skills.page.section.instructions":"Instructions","settings.skills.page.section.supportingFiles":"Fichiers de support","settings.skills.page.field.skillNameLocation":"Nom et emplacement du skill","settings.skills.page.field.skillNameHint":"Minuscules, chiffres, tirets","settings.skills.page.field.skillNamePlaceholder":"nom-du-skill","settings.skills.page.field.descriptionHint":"L'agent s'en sert pour décider quand charger le skill","settings.skills.page.field.disableModelInvocation":"Exécuter uniquement sur appel manuel","settings.skills.page.field.disableModelInvocationHint":"L'agent ne choisira pas ce skill de lui-même. Il ne se charge que lorsque vous l'appelez par son nom.","settings.skills.page.field.descriptionPlaceholder":"Brève description de ce que fait ce skill...","settings.skills.page.field.instructionsPlaceholder":"Instructions étape par étape, directives ou contenu de référence...","settings.skills.page.badge.claudeCompatible":"Compatible Claude","settings.skills.page.badge.pending":"en attente","settings.skills.page.actions.addFile":"Ajouter un fichier","settings.skills.page.actions.createSkill":"Créer un skill","settings.skills.page.actions.createFile":"Créer un fichier","settings.skills.page.supportingFiles.empty":"Aucun fichier à l'appui. Utilisez « Ajouter un fichier » pour inclure des documents de référence.","settings.skills.page.loading.details":"Chargement des détails du skill...","settings.skills.page.loading.fileContent":"Chargement du contenu du fichier...","settings.skills.page.empty.title":"Sélectionnez un skill dans la barre latérale","settings.skills.page.empty.description":"ou créez-en un nouveau","settings.skills.page.deleteFileDialog.title":"Supprimer le fichier de support","settings.skills.page.deleteFileDialog.description":"Êtes-vous sûr de vouloir supprimer « {path} » ?","settings.skills.page.fileDialog.titleEdit":"Modifier le fichier de support","settings.skills.page.fileDialog.titleAdd":"Ajouter un fichier de support","settings.skills.page.fileDialog.descriptionEdit":"Modifier le contenu du fichier","settings.skills.page.fileDialog.descriptionAdd":"Créer un nouveau fichier dans le répertoire du skill","settings.skills.page.fileDialog.field.filePath":"Chemin du fichier","settings.skills.page.fileDialog.field.filePathPlaceholder":"example.md ou docs/reference.txt","settings.skills.page.fileDialog.field.filePathHint":"Chemin relatif dans le répertoire du skill. Les sous-répertoires seront créés automatiquement.","settings.skills.page.fileDialog.field.content":"Contenu","settings.skills.page.fileDialog.field.contentPlaceholder":"Contenu du fichier...","settings.skills.page.toast.skillNameRequired":"Le nom du skill est requis","settings.skills.page.toast.invalidSkillName":"Le nom du skill doit contenir de 1 à 64 caractères alphanumériques minuscules avec des traits d'union et ne peut pas commencer ni se terminer par un trait d'union.","settings.skills.page.toast.descriptionRequired":"Une description est requise","settings.skills.page.toast.skillExists":"Un skill portant ce nom existe déjà","settings.skills.page.toast.skillCreated":"Skill créé avec succès","settings.skills.page.toast.skillUpdated":"Skill mis à jour avec succès","settings.skills.page.toast.createSkillFailed":"Échec de la création du skill","settings.skills.page.toast.updateSkillFailed":"Échec de la mise à jour du skill","settings.skills.page.toast.saveUnexpectedError":"Une erreur s'est produite lors de l'enregistrement","settings.skills.page.toast.loadFileContentFailed":"Échec du chargement du contenu du fichier","settings.skills.page.toast.fileNameRequired":"Le nom du fichier est obligatoire","settings.skills.page.toast.fileExists":"Un fichier portant ce nom existe déjà","settings.skills.page.toast.noSkillSelected":"Aucun skill sélectionné","settings.skills.page.toast.fileAdded":'Fichier "{path}" ajouté',"settings.skills.page.toast.fileCreated":'Fichier "{path}" créé',"settings.skills.page.toast.fileUpdated":'Fichier "{path}" mis à jour',"settings.skills.page.toast.fileRemoved":'Fichier "{path}" supprimé',"settings.skills.page.toast.fileDeleted":'Fichier "{path}" supprimé',"settings.skills.page.toast.createFileFailed":"Échec de la création du fichier","settings.skills.page.toast.updateFileFailed":"Échec de la mise à jour du fichier","settings.skills.page.toast.deleteFileFailed":"Échec de la suppression du fichier","settings.skills.location.option.userOpencode.label":"Utilisateur / OpenCode","settings.skills.location.option.userOpencode.description":"Emplacement de configuration global de OpenCode","settings.skills.location.option.projectOpencode.label":"Projet / OpenCode","settings.skills.location.option.projectOpencode.description":"Emplacement .opencode du projet actuel","settings.skills.location.option.userClaude.label":"Utilisateur / Claude","settings.skills.location.option.userClaude.description":"Emplacement global des skills Claude","settings.skills.location.option.projectClaude.label":"Projet / Claude","settings.skills.location.option.projectClaude.description":"Projet actuel .claude location","settings.skills.location.option.userAgents.label":"Utilisateur / Agent","settings.skills.location.option.userAgents.description":"Emplacement de compatibilité global .agents","settings.skills.location.option.projectAgents.label":"Projet / Agents","settings.skills.location.option.projectAgents.description":"Emplacement de compatibilité .agents du projet actuel","settings.skills.catalog.shared.field.repository":"Dépôt","settings.skills.catalog.shared.field.repositoryPlaceholder":"propriétaire/dépôt ou git@github.com:owner/repo.git","settings.skills.catalog.shared.field.optionalSubpath":"Sous-chemin facultatif","settings.skills.catalog.shared.field.subpathPlaceholder":"p. ex. skills","settings.skills.catalog.shared.field.targetLocation":"Emplacement cible","settings.skills.catalog.shared.field.project":"Projet","settings.skills.catalog.shared.field.noProjects":"Aucun projet disponible","settings.skills.catalog.shared.field.chooseProjectPlaceholder":"Choisir un projet","settings.skills.catalog.shared.field.searchSkillsPlaceholder":"Rechercher des skills…","settings.skills.catalog.shared.toast.repositoryRequired":"La source du dépôt est requise","settings.skills.catalog.shared.toast.privateRepoNotSupportedVsCode":"Les dépôts privés ne sont pas encore pris en charge dans VS Code","settings.skills.catalog.shared.toast.foundSkills":"Skill(s) trouvé(s) : {count}","settings.skills.catalog.shared.noDescription":"Aucune description fournie","settings.skills.catalog.shared.actions.scan":"Analyser","settings.skills.catalog.shared.actions.scanning":"Analyse...","settings.skills.catalog.shared.actions.install":"Installer","settings.skills.catalog.shared.actions.installing":"Installation...","settings.skills.catalog.shared.auth.title":"Authentification requise","settings.skills.catalog.shared.auth.description":"Identité Git","settings.skills.catalog.shared.auth.chooseIdentity":"Choisissez votre identité","settings.skills.catalog.shared.auth.default":"Configuration Git par défaut","settings.skills.catalog.shared.auth.defaultHint":"Utilise les clés SSH et les identifiants enregistrés que Git a déjà sur cet ordinateur.","settings.skills.catalog.shared.auth.accountHint":"Se connecte avec le compte associé","settings.skills.catalog.shared.auth.sshHint":"Se connecte avec sa clé SSH","settings.skills.catalog.shared.auth.footerHint":"Configurez les identités dans Paramètres - Identités Git.","settings.skills.catalog.shared.auth.footerHintArrow":"Configurez les identités dans Paramètres → Identités Git.","settings.skills.catalog.conflicts.title":"Des skills existent déjà","settings.skills.catalog.conflicts.description":"Certains skills sélectionnés sont déjà installés dans ce périmètre. Choisissez si vous voulez les ignorer ou les écraser.","settings.skills.catalog.conflicts.count":"Conflit(s) {count}","settings.skills.catalog.conflicts.installedIn":"Installé dans {scope} / {source}","settings.skills.catalog.conflicts.scope.user":"utilisateur","settings.skills.catalog.conflicts.scope.project":"projet","settings.skills.catalog.conflicts.source.opencode":"OpenCode","settings.skills.catalog.conflicts.source.agents":"agents","settings.skills.catalog.conflicts.decision.skip":"Ignorer","settings.skills.catalog.conflicts.decision.overwrite":"Écraser","settings.skills.catalog.conflicts.actions.skipAll":"Tout ignorer","settings.skills.catalog.conflicts.actions.overwriteAll":"Tout écraser","settings.skills.catalog.conflicts.actions.continue":"Continuer","settings.skills.catalog.installSkill.title":"Installer le skill","settings.skills.catalog.installSkill.descriptionPrefix":"Installer","settings.skills.catalog.installSkill.descriptionSuffix":"dans l’un des quatre emplacements cibles.","settings.skills.catalog.installSkill.field.destination":"Destination","settings.skills.catalog.installSkill.field.project":"Projet","settings.skills.catalog.installSkill.field.noProjects":"Aucun projet disponible","settings.skills.catalog.installSkill.field.chooseProjectPlaceholder":"Choisir un projet","settings.skills.catalog.installSkill.actions.install":"Installer","settings.skills.catalog.installSkill.actions.installing":"Installation...","settings.skills.catalog.installSkill.toast.installed":"Skill installé avec succès","settings.skills.catalog.installSkill.toast.authRequired":"Authentification requise","settings.skills.catalog.installSkill.toast.installFailed":"Échec de l'installation du skill","settings.skills.catalog.installSkill.toast.skipped":"Certaines compétences n'ont pas été installées : {skills}","settings.skills.catalog.add.title":"Ajouter un catalogue de skills","settings.skills.catalog.edit.title":"Modifier le catalogue de compétences","settings.skills.catalog.edit.actions.save":"Enregistrer","settings.skills.catalog.add.descriptionPrefix":"Ajoutez un dépôt Git comme nouvelle source de catalogue. OpenChamber le scannera pour les dossiers contenant","settings.skills.catalog.add.descriptionSuffix":".","settings.skills.catalog.add.field.catalogName":"Nom du catalogue","settings.skills.catalog.add.field.catalogNamePlaceholder":"p. ex. Skills d'équipe","settings.skills.catalog.add.field.repository":"Dépôt","settings.skills.catalog.add.field.optionalSubpath":"Sous-chemin facultatif","settings.skills.catalog.add.field.repositoryHint":"Les dépôts publics fonctionnent partout. Les dépôts privés nécessitent une identité SSH (desktop et web uniquement).","settings.skills.catalog.add.scanResult":"Résultat de l'analyse : {count} skill(s) trouvé(s)","settings.skills.catalog.add.duplicateMessage":"Ce catalogue est déjà ajouté.","settings.skills.catalog.add.actions.addCatalog":"Ajouter un catalogue","settings.skills.catalog.add.toast.repositoryRequired":"La source du dépôt est requise","settings.skills.catalog.add.toast.authenticationRequiredScan":"Authentification requise. Sélectionnez une identité Git et effectuez une nouvelle analyse.","settings.skills.catalog.add.toast.scanFailed":"Échec de l'analyse du dépôt","settings.skills.catalog.add.toast.noSkillsFound":"Aucun skill trouvé dans ce dépôt","settings.skills.catalog.add.toast.catalogNameRequired":"Le nom du catalogue est obligatoire","settings.skills.catalog.add.toast.scanBeforeAdd":"Scannez le dépôt avant d'ajouter ce catalogue","settings.skills.catalog.add.toast.catalogAlreadyExists":"Ce catalogue existe déjà","settings.skills.catalog.add.toast.catalogAdded":"Catalogue ajouté","settings.skills.catalog.add.toast.saveFailed":"Échec de l'enregistrement du catalogue","settings.skills.catalog.installFromRepo.title":"Installer à partir du dépôt Git","settings.skills.catalog.installFromRepo.descriptionPrefix":"Analyser un dépôt à la recherche de dossiers contenant","settings.skills.catalog.installFromRepo.descriptionSuffix":", puis installez les skills sélectionnés.","settings.skills.catalog.installFromRepo.repositoryHintPrefix":"Pour le raccourci GitHub, vous pouvez ajouter un sous-chemin comme","settings.skills.catalog.installFromRepo.authDescription":"Sélectionnez une identité Git pouvant accéder à ce dépôt.","settings.skills.catalog.installFromRepo.empty.noScanResultsTitle":"Aucun résultat d'analyse pour l'instant","settings.skills.catalog.installFromRepo.empty.noScanResultsDescription":"Scannez un dépôt pour découvrir des skills","settings.skills.catalog.installFromRepo.actions.selectAll":"Tout sélectionner","settings.skills.catalog.installFromRepo.actions.selectNone":"N'en sélectionner aucun","settings.skills.catalog.installFromRepo.actions.installSelected":"Installer la sélection","settings.skills.catalog.installFromRepo.badge.installed":"installé ({scope}/{source})","settings.skills.catalog.installFromRepo.selectedCount":"Sélection : {selected} / {total}","settings.skills.catalog.installFromRepo.toast.authenticationRequiredScan":"Authentification requise. Sélectionnez une identité Git et réessayez l'analyse.","settings.skills.catalog.installFromRepo.toast.authenticationRequiredInstall":"Authentification requise. Sélectionnez une identité Git et réessayez l'installation.","settings.skills.catalog.installFromRepo.toast.scanFailed":"Échec de l'analyse du dépôt","settings.skills.catalog.installFromRepo.toast.selectAtLeastOne":"Sélectionnez au moins un skill à installer","settings.skills.catalog.installFromRepo.toast.installedCount":"{count} skill(s) installé(s)","settings.skills.catalog.installFromRepo.toast.installCompleted":"Installation terminée","settings.skills.catalog.installFromRepo.toast.installFailed":"Échec de l'installation des skills","settings.skills.catalog.page.mode.manual":"Manuel","settings.skills.catalog.page.mode.external":"Externe","settings.skills.catalog.page.title":"Catalogue de skills","settings.skills.catalog.page.subtitle":"Installez des skills prêts à l'emploi depuis des dépôts curatés ou ajoutez votre propre source.","settings.skills.catalog.page.section.sources":"Sources","settings.skills.catalog.page.searchAllPlaceholder":"Rechercher des skills dans toutes les sources…","settings.skills.catalog.page.search.clear":"Effacer la recherche","settings.skills.catalog.page.source.skillsCount":"Skills : {count}","settings.skills.catalog.page.source.stars":"Étoiles : {count}","settings.skills.catalog.page.source.updated":"Mis à jour {time}","settings.skills.catalog.page.source.addOwnTitle":"Ajouter votre propre source","settings.skills.catalog.page.source.addOwnDescription":"N'importe quel dépôt Git avec des skills","settings.skills.catalog.page.source.viewRepo":"Ouvrir le dépôt sur GitHub","settings.skills.catalog.page.skill.viewOnGithub":"Voir le skill sur GitHub","settings.skills.catalog.page.list.searchTitle":"Résultats de recherche","settings.skills.catalog.page.section.sourceRepository":"Dépôt source","settings.skills.catalog.page.field.selectSourcePlaceholder":"Sélectionnez la source","settings.skills.catalog.page.actions.refreshTitle":"Rafraîchir","settings.skills.catalog.page.actions.removeCatalogTitle":"Supprimer le catalogue","settings.skills.catalog.page.actions.addCatalog":"Ajouter un catalogue","settings.skills.catalog.page.actions.removeCatalog":"Supprimer le catalogue","settings.skills.catalog.page.actions.editCatalog":"Modifier le catalogue","settings.skills.catalog.page.actions.deselectAll":"Tout désélectionner","settings.skills.catalog.page.actions.delete":"Supprimer","settings.skills.catalog.page.toast.deleted":"Compétences supprimées : {count}","settings.skills.catalog.page.loading.catalog":"Chargement...","settings.skills.catalog.page.loading.skills":"Chargement des skills...","settings.skills.catalog.page.foundCount":"{count} skill(s) trouvé(s)","settings.skills.catalog.page.error.catalogTitle":"Erreur de catalogue","settings.skills.catalog.page.empty.noSkillsTitle":"Aucun skill trouvé","settings.skills.catalog.page.empty.noSkillsDescription":"Essayez une autre recherche ou actualisez le catalogue","settings.skills.catalog.page.badge.installed":"installé ({scope})","settings.skills.catalog.page.badge.notInstallable":"non installable","settings.skills.catalog.page.badge.unknown":"inconnu","settings.skills.catalog.page.removeDialog.title":"Supprimer le catalogue","settings.skills.catalog.page.removeDialog.description":"Êtes-vous sûr de vouloir supprimer ce catalogue ?","settings.openchamber.passkeys.title":"Clés d’accès","settings.openchamber.passkeys.field.currentDevice":"Appareil actuel","settings.openchamber.passkeys.actions.add":"Ajouter une clé d’accès","settings.openchamber.passkeys.actions.cancelSetup":"Annuler la configuration de la clé d’accès","settings.openchamber.passkeys.actions.signOutEverywhere":"Se déconnecter partout","settings.openchamber.passkeys.actions.signingOut":"Déconnexion…","settings.openchamber.passkeys.actions.removing":"Suppression…","settings.openchamber.passkeys.state.uiPasswordRequired":"Les clés d'accès sont disponibles uniquement lorsque le verrouillage par mot de passe de l'interface utilisateur est activé.","settings.openchamber.passkeys.state.loading":"Chargement des clés d'accès…","settings.openchamber.passkeys.state.noneSaved":"Aucune clé d'accès enregistrée pour cet hôte pour l'instant.","settings.openchamber.passkeys.item.lastUsed":"Dernière utilisation {time}","settings.openchamber.passkeys.item.added":"Ajout de {time}","settings.openchamber.passkeys.time.neverUsed":"Jamais utilisé","settings.openchamber.passkeys.toast.loadFailed":"Impossible de charger les clés d'accès.","settings.openchamber.passkeys.toast.enableUiPasswordFirst":"Activez le verrouillage par mot de passe de l'interface utilisateur avant d'ajouter des clés d'accès.","settings.openchamber.passkeys.toast.added":"Clé d'accès ajoutée","settings.openchamber.passkeys.toast.setupCanceled":"Configuration de la clé d’accès annulée","settings.openchamber.passkeys.toast.addFailed":"Impossible d'ajouter la clé d’accès.","settings.openchamber.passkeys.toast.removed":"Clé d'accès supprimée","settings.openchamber.passkeys.toast.removeFailed":"Impossible de supprimer la clé d’accès.","settings.openchamber.passkeys.toast.clearAuthFailed":"Impossible d'effacer l'authentification enregistrée.","settings.openchamber.sessionRetention.title":"Conservation des sessions","settings.openchamber.mergedWorktreeCleanup.title":"Après la fusion d'une PR","settings.openchamber.mergedWorktreeCleanup.info":"Utilise le statut de PR déjà affiché dans la barre latérale. Rien ne se passe tant qu'un agent travaille dans le worktree ou qu'une de ses sessions est ouverte.","settings.openchamber.mergedWorktreeCleanup.field.enable":"Archiver les sessions et supprimer le worktree","settings.openchamber.mergedWorktreeCleanup.field.enableDescription":"Le worktree et sa branche locale ne sont supprimés que si tout son contenu est dans la PR fusionnée. Sinon, les sessions sont archivées et le worktree est conservé.","settings.openchamber.messageSearch.title":"Recherche dans les messages","settings.openchamber.messageSearch.field.enabled":"Rechercher les messages dans toutes les conversations","settings.openchamber.messageSearch.field.enabledInfo":"Conserve à côté des réglages un petit index de vos messages et des réponses de l’agent, pour que la recherche les trouve instantanément. Il reste sur la machine qui exécute OpenChamber et n’est jamais envoyé ailleurs.","settings.openchamber.messageSearch.field.reasoning":"Rechercher aussi dans le raisonnement de l’agent","settings.openchamber.messageSearch.field.reasoningInfo":"Les modèles qui réfléchissent longuement peuvent multiplier la taille de l’index, et l’activation relit toutes les conversations. Les résultats dans le raisonnement n’apparaissent que si le raisonnement est affiché dans le chat.","settings.openchamber.messageSearch.field.index":"Index de recherche","settings.openchamber.messageSearch.status.loading":"Vérification de l’index…","settings.openchamber.messageSearch.status.off":"La recherche est désactivée. Rien n’est indexé.","settings.openchamber.messageSearch.status.offWithFile":"La recherche est désactivée. L’index occupe {size} sur le disque.","settings.openchamber.messageSearch.status.indexing":"Indexation des conversations : {done} sur {total}. {size} sur le disque.","settings.openchamber.messageSearch.status.ready":"Conversations indexées : {sessions}, messages : {messages}. {size} sur le disque.","settings.openchamber.messageSearch.status.failed":"Impossible d’ouvrir l’index. Le reconstruire règle généralement le problème.","settings.openchamber.messageSearch.status.unsupported":"Ce serveur n’a pas SQLite et ne peut donc pas tenir d’index de recherche.","settings.openchamber.messageSearch.status.error":"Impossible de lire l’état de l’index.","settings.openchamber.messageSearch.actions.rebuild":"Reconstruire l’index","settings.openchamber.messageSearch.actions.delete":"Supprimer l’index","settings.openchamber.messageSearch.actions.working":"En cours…","settings.openchamber.sessionWork.title":"Sessions en cours","settings.openchamber.sessionWork.info":"Un bloc dans la barre latérale, sous les discussions, pour les sessions où un vrai travail est en cours. Une session y reste jusqu'à ce que vous la marquiez comme terminée : survolez-la et utilisez l'œil pour la suivre ou la coche pour la terminer, ou passez par le menu de la session.","settings.openchamber.sessionWork.field.enabled":"Afficher les sessions en cours","settings.openchamber.sessionWork.field.autoOpen":"Placer automatiquement les sessions en cours","settings.openchamber.sessionWork.field.autoOpenInfo":"Jev lit chaque message que vous envoyez et place la session en cours lorsque vous demandez une modification, signalez un bug ou discutez d'un changement concret. Les questions et la recherche ne comptent pas. Jev ne marque jamais le travail comme terminé : quand un tour ressemble à la fin du travail, la session affiche une coche grise et c'est vous qui décidez.","settings.openchamber.sessionWork.field.keepInGroup":"Garder les sessions en cours dans leur groupe de projet","settings.openchamber.sessionWork.field.keepInGroupInfo":"Une session en cours reste aussi listée sous son groupe de projet et ses dossiers. Récent et la chronologie ne l’affichent toujours qu’une fois, dans le bloc de travail. La recherche l’affiche toujours une seule fois.","settings.openchamber.sessionRetention.field.onlyArchived":"Uniquement les sessions archivées","settings.openchamber.sessionRetention.field.onlyArchivedDescription":"Utilise Supprimer et compte la période de conservation depuis l'archivage. Les sessions non archivées sont conservées.","settings.openchamber.sessionRetention.archivedTooltip":"Supprime les sessions archivées dont la période de conservation a expiré. Conserve les 5 sessions archivées le plus récemment, la session ouverte, les sessions en cours et les sessions partagées. Une session parente est conservée si sa suppression supprimerait aussi une session enfant protégée.","settings.openchamber.sessionRetention.tooltip":"Archive ou supprime les sessions non archivées selon leur dernière activité. Conserve les 5 sessions les plus récentes, la session ouverte, les sessions en cours et les sessions partagées. Les sessions archivées sont conservées. Une session parente est conservée si sa suppression supprimerait aussi une session enfant protégée.","settings.openchamber.sessionRetention.field.enableAutoCleanupAria":"Activer le nettoyage automatique","settings.openchamber.sessionRetention.field.enableAutoCleanup":"Activer le nettoyage automatique","settings.openchamber.sessionRetention.field.retentionPeriod":"Période de conservation","settings.openchamber.sessionRetention.field.retentionPeriodAria":"Durée de conservation en jours","settings.openchamber.sessionRetention.field.days":"jours","settings.openchamber.sessionRetention.field.whenSessionsExpire":"Quand les sessions expirent","settings.openchamber.sessionRetention.actions.resetRetentionAria":"Réinitialiser la période de conservation","settings.openchamber.sessionRetention.actions.runCleanupNow":"Nettoyer maintenant","settings.openchamber.sessionRetention.actions.cleaningUp":"Nettoyage...","settings.openchamber.sessionRetention.action.archive":"Archiver","settings.openchamber.sessionRetention.action.delete":"Supprimer","settings.openchamber.sessionRetention.manualCleanup.title":"Nettoyage manuel","settings.openchamber.sessionRetention.manualCleanup.eligibleArchiveNow":"Éligible à l'archivage dès maintenant : {count}","settings.openchamber.sessionRetention.manualCleanup.eligibleDeleteNow":"Éligible à la suppression dès maintenant : {count}","settings.openchamber.sessionRetention.toast.noneEligibleArchive":"Aucune session éligible à l'archivage","settings.openchamber.sessionRetention.toast.noneEligibleDelete":"Aucune session éligible à la suppression","settings.openchamber.sessionRetention.toast.archivedCount":"Session(s) {count} archivée(s)","settings.openchamber.sessionRetention.toast.deletedCount":"Session(s) {count} supprimée(s)","settings.openchamber.sessionRetention.toast.failedArchiveCount":"Échec de l'archivage des sessions {count}","settings.openchamber.sessionRetention.toast.failedDeleteCount":"Échec de la suppression des sessions {count}","settings.openchamber.desktopNetwork.title":"Accès au réseau de bureau","settings.openchamber.desktopNetwork.field.windowControlsPosition":"Position des contrôles de fenêtre","settings.openchamber.desktopNetwork.field.windowControlsPositionDescription":"Choisissez où apparaissent les boutons Réduire, Agrandir et Fermer. Par défaut à droite.","settings.openchamber.desktopNetwork.field.windowControlsPositionAria":"Position des contrôles de fenêtre","settings.openchamber.desktopNetwork.option.windowControlsLeft":"Gauche","settings.openchamber.desktopNetwork.option.windowControlsRight":"Droite","settings.openchamber.desktopNetwork.field.windowControls":"Contrôles de fenêtre","settings.openchamber.desktopNetwork.field.windowControlsStyle":"Style","settings.openchamber.desktopNetwork.field.windowControlsStyleAria":"Style des contrôles de fenêtre","settings.openchamber.desktopNetwork.option.windowControlsClassic":"Classique","settings.openchamber.desktopNetwork.option.windowControlsTrafficLights":"Feux de circulation","settings.openchamber.desktopNetwork.field.launchAtLoginAria":"Démarrez OpenChamber lors de la connexion","settings.openchamber.desktopNetwork.field.launchAtLogin":"Démarrez OpenChamber lorsque vous vous connectez","settings.openchamber.desktopNetwork.field.launchAtLoginDescription":"Démarre l'application en arrière-plan sans ouvrir de fenêtre. Utilisez l'icône d'état du bureau pour l'ouvrir.","settings.openchamber.desktopNetwork.field.macMenuBarAria":"Afficher OpenChamber dans la barre des menus macOS","settings.openchamber.desktopNetwork.field.macMenuBar":"Afficher OpenChamber dans la barre des menus","settings.openchamber.desktopNetwork.field.macMenuBarDescription":"Nécessite un redémarrage de l'application. Lorsque cette option est désactivée, OpenChamber ne crée pas l'élément de barre des menus et n'exécute pas ses mises à jour de sessions, d'approbations et d'utilisation.","settings.openchamber.desktopNetwork.field.minimizeToTrayAria":"Fermer OpenChamber dans la zone de notification","settings.openchamber.desktopNetwork.field.minimizeToTray":"Fermer dans la zone de notification","settings.openchamber.desktopNetwork.field.minimizeToTrayDescription":"Garde OpenChamber actif dans la zone de notification lorsque la fenêtre principale est fermée. La réduction laisse la fenêtre dans la barre des tâches.","settings.openchamber.desktopNetwork.field.keepAwakeAria":"Garder l'ordinateur éveillé pendant qu'OpenChamber fonctionne","settings.openchamber.desktopNetwork.field.keepAwake":"Garder l'ordinateur éveillé pendant qu'OpenChamber fonctionne","settings.openchamber.desktopNetwork.field.keepAwakeDescription":"Pour que les téléphones puissent continuer à ouvrir cette application. L'écran peut toujours s'éteindre.","settings.openchamber.desktopNetwork.field.miniChatGlobalShortcut":"Raccourci global du Mini Chat","settings.openchamber.desktopNetwork.field.miniChatGlobalShortcutDescription":"Affichez ou masquez le Mini Chat partout sur le bureau, même quand OpenChamber n’est pas au premier plan.","settings.openchamber.desktopNetwork.field.miniChatGlobalShortcutInactive":"Non enregistré : une autre application utilise peut-être ce raccourci.","settings.openchamber.desktopNetwork.field.quakeMode":"Mode Quake","settings.openchamber.desktopNetwork.field.quakeModeAria":"Activer le basculement Quake en arrière-plan","settings.openchamber.desktopNetwork.field.quakeModeDescription":"Laisse OpenChamber tourner en arrière-plan et affiche ou masque la fenêtre principale depuis n’importe où avec un seul raccourci global, comme le mode Quake de Windows Terminal. Fermer la fenêtre la masque au lieu de quitter.","settings.openchamber.desktopNetwork.field.quakeModeShortcut":"Raccourci global du mode Quake","settings.openchamber.desktopNetwork.field.quakeModeShortcutDescription":"Affichez ou masquez la fenêtre principale depuis n’importe où sur le bureau, même quand OpenChamber n’est pas au premier plan. Par défaut Ctrl+`, sans jamais entrer en conflit avec Win+` de Windows Terminal.","settings.openchamber.desktopNetwork.field.quakeModeShortcutInactive":"Non enregistré : une autre application utilise peut-être ce raccourci.","settings.openchamber.desktopNetwork.field.quakeModeHeight":"Hauteur de la fenêtre Quake","settings.openchamber.desktopNetwork.field.quakeModeHeightAria":"Hauteur de la fenêtre Quake","settings.openchamber.desktopNetwork.field.quakeModeHeightDescription":"La part de l’écran couverte par la fenêtre Quake à l’ouverture. Elle s’ancre en haut de l’écran du curseur sur toute sa largeur.","settings.openchamber.desktopNetwork.field.allowLanAccessAria":"Autoriser l'accès LAN à l’application de bureau","settings.openchamber.desktopNetwork.field.allowLanAccess":"Autoriser les autres appareils de votre réseau local à ouvrir cette application","settings.openchamber.desktopNetwork.field.allowLanAccessDescription":"Redémarre l'application afin que les téléphones, tablettes et autres ordinateurs connectés à votre réseau Wi-Fi puissent l'ouvrir.","settings.openchamber.desktopNetwork.field.warning":"Attention : lorsqu'elle est activée, l'application est accessible à toute personne se trouvant sur le même réseau local.","settings.openchamber.desktopNetwork.field.passwordRequiredWarning":"L'accès LAN nécessite un mot de passe de l'interface utilisateur du bureau. Tant qu'il n'est pas défini, l'application de bureau démarre en accès local uniquement.","settings.openchamber.desktopNetwork.field.enterpriseBlocked":"Le mode entreprise garde OpenChamber sur cet ordinateur. Votre administrateur peut autoriser l’accès réseau.","settings.openchamber.desktopPassword.field.password":"Mot de passe de l'interface utilisateur du bureau","settings.openchamber.desktopPassword.field.passwordPlaceholder":"Aucun mot de passe requis","settings.openchamber.desktopPassword.field.passwordSetPlaceholder":"Mot de passe défini. Saisissez-en un nouveau pour le remplacer.","settings.openchamber.desktopPassword.actions.removePassword":"Supprimer le mot de passe","settings.openchamber.desktopPassword.field.passwordDescription":"OpenChamber le demande après le redémarrage, puis quand la session de connexion expire : après 12 heures, ou 7 jours avec « Faire confiance à cet appareil ». Laissez vide pour désactiver la connexion.","settings.openchamber.desktopNetwork.hint.openAfterRestart":"Après redémarrage, ouvrez depuis un autre appareil :","settings.openchamber.desktopNetwork.hint.openNow":"Ouvrir depuis un autre appareil :","settings.openchamber.desktopNetwork.actions.saveAndRestart":"Enregistrer + Redémarrer","settings.openchamber.desktopNetwork.error.loadFailed":"Échec du chargement des paramètres du bureau","settings.openchamber.desktopNetwork.error.saveFailed":"Échec de l'enregistrement des paramètres du bureau","settings.openchamber.desktopNetwork.error.savedRestartFailed":"Enregistré, mais échec du redémarrage de l'application","settings.openchamber.desktopNetwork.error.launchAtLoginUnsupported":"Le lancement à la connexion n'est pas pris en charge sur ce système","settings.openchamber.desktopNetwork.error.launchAtLoginSaveFailed":"Échec de la mise à jour du paramètre de lancement lors de la connexion","settings.openchamber.desktopNetwork.error.minimizeToTrayUnsupported":"Le mode d'arrière-plan dans la zone de notification n'est pas pris en charge sur ce système","settings.openchamber.desktopNetwork.error.minimizeToTraySaveFailed":"Échec de la mise à jour du paramètre de zone de notification","settings.openchamber.desktopNetwork.error.keepAwakeUnsupported":"La prévention de la veille n'est pas prise en charge sur ce système","settings.openchamber.desktopNetwork.error.keepAwakeSaveFailed":"Échec de la mise à jour du paramètre de maintien en éveil","settings.openchamber.desktopNetwork.error.miniChatGlobalShortcutSaveFailed":"Impossible de mettre à jour le raccourci global du Mini Chat","settings.openchamber.desktopNetwork.error.miniChatGlobalShortcutUnsupported":"Cette combinaison ne peut pas servir de raccourci global. Ajoutez Ctrl, Alt ou Cmd.","settings.openchamber.desktopNetwork.error.quakeModeSaveFailed":"Impossible de mettre à jour le mode Quake","settings.openchamber.desktopNetwork.error.quakeModeShortcutUnsupported":"Cette combinaison ne peut pas servir de raccourci global. Ajoutez Ctrl, Alt ou Cmd.","settings.openchamber.opencodeCli.title":"OpenCode CLI","settings.openchamber.spaces.title":"Espaces isolés","settings.openchamber.spaces.field.enabled":"Laisser les agents travailler dans des espaces isolés","settings.openchamber.spaces.field.enabledAria":"Laisser les agents travailler dans des espaces isolés","settings.openchamber.spaces.field.enabledInfo":"L’agent travaille sur votre projet dans un conteneur Docker. Il ne peut pas accéder à vos fichiers, à vos autres projets ni à vos clés. Vous pouvez appliquer ou abandonner ses modifications. Le premier démarrage télécharge environ 1,6 Go.","settings.openchamber.spaces.idleStop.enabled":"Arrêter les espaces inactifs","settings.openchamber.spaces.idleStop.enabledAria":"Arrêter les espaces inactifs","settings.openchamber.spaces.idleStop.enabledInfo":"Arrête un espace sans activité. Les fichiers sont conservés. Fonctionne même quand OpenChamber est fermé.","settings.openchamber.spaces.idleStop.after":"Arrêter après","settings.openchamber.spaces.idleStop.afterAria":"Heures sans activité avant l’arrêt d’un espace","settings.openchamber.spaces.idleStop.hours":"heures","settings.openchamber.spaces.idleStop.resetAria":"Revenir à 4 heures","settings.openchamber.spaces.idleStop.loadFailed":"Impossible de charger ce réglage.","settings.openchamber.tools.title":"Outils OpenChamber","settings.openchamber.tools.field.agentControlTool":"Outil de contrôle pour les agents","settings.openchamber.tools.field.agentControlToolAria":"Activer l’outil de contrôle pour les agents","settings.openchamber.tools.field.agentControlToolInfo":"Les agents peuvent aussi confier des prompts à d’autres sessions, les lancer dans des worktrees et planifier des tâches. Supprimer des sessions et des worktrees reste entre vos mains.","settings.openchamber.tools.field.agentControlToolSummary":"Créer et piloter des sessions, des worktrees et des tâches planifiées.","settings.openchamber.tools.field.agentWebTool":"Outil OpenChamber Web","settings.openchamber.tools.field.agentWebToolAria":"Activer l’outil OpenChamber Web","settings.openchamber.tools.field.agentWebToolInfo":"Pratique pour vérifier un travail d’UI dans l’app en cours. Les agents peuvent naviguer, examiner des pages et faire des captures d’écran.","settings.openchamber.tools.field.agentWebToolSummary":"Ouvrir, lire et parcourir des pages dans le panneau du navigateur.","settings.openchamber.tools.browserProvider.label":"Fournisseur de navigateur","settings.openchamber.tools.browserProvider.aria":"Choisir qui répond aux actions de navigateur de l'agent","settings.openchamber.tools.browserProvider.info":"OpenChamber Web est le panneau navigateur de l’app de bureau. Une extension navigateur tourne sur le serveur, pour naviguer sans app de bureau ouverte.","settings.openchamber.tools.browserProvider.option.builtin":"OpenChamber Web","settings.openchamber.tools.browserProvider.toast.reset":"{name} ne peut plus fournir le navigateur. Les agents utilisent de nouveau OpenChamber Web.","settings.openchamber.tools.field.agentMemoryTool":"Outil de mémoire de l’agent","settings.openchamber.tools.field.agentMemoryToolAria":"Outil de mémoire de l’agent","settings.openchamber.tools.field.agentMemoryToolInfo":"Les agents ne voient que les titres et ouvrent une entrée quand elle est utile. La désactivation masque aussi l’onglet Mémoire.","settings.openchamber.tools.field.agentMemoryToolSummary":"Retenir d’une session à l’autre ce qui est vrai sur vous et chaque projet.","settings.openchamber.tools.field.agentNotifyTool":"Outil de notification de l’agent","settings.openchamber.tools.field.agentNotifyToolAria":"Outil de notification de l’agent","settings.openchamber.tools.field.agentNotifyToolInfo":"Suit vos réglages de notifications.","settings.openchamber.tools.field.agentNotifyToolSummary":"Les agents vous préviennent quand c’est fini ou qu’ils sont bloqués.","settings.openchamber.tools.field.agentToolsCodeMode":"Exécuter via Code Mode","settings.openchamber.tools.field.agentToolsCodeModeAria":"Exécuter les outils OpenChamber via Code Mode","settings.openchamber.tools.field.agentToolsCodeModeInfo":"Désactivé : le modèle voit chaque outil directement. Activé : ils passent derrière un outil qui exécute un court script. Économise un peu de contexte, mais le modèle peut les manquer, surtout les petits.","settings.openchamber.opencodeCli.tooltipPrefix":"Chemin absolu facultatif vers le","settings.openchamber.opencodeCli.tooltipSuffix":"binaire.","settings.openchamber.opencodeCli.field.binaryPath":"Chemin binaire OpenCode","settings.openchamber.opencodeCli.field.binaryPathPlaceholder":"/Users/you/.bun/bin/opencode","settings.openchamber.opencodeCli.field.pinnedByAdministrator":"Votre administrateur a défini ce chemin : OpenChamber démarre toujours OpenCode depuis celui-ci.","settings.openchamber.opencodeCli.field.showUpdateNotifications":"Afficher les notifications de mise à jour de OpenCode","settings.openchamber.opencodeCli.field.showUpdateNotificationsAria":"Afficher les notifications de mise à jour de OpenCode","settings.openchamber.opencodeCli.actions.browseAria":"Rechercher le chemin binaire OpenCode","settings.openchamber.opencodeCli.actions.browse":"Parcourir","settings.openchamber.opencodeCli.actions.saveAndReload":"Enregistrer + Recharger","settings.openchamber.opencodeCli.actions.restartingOpenCode":"Redémarrage de OpenCode…","settings.openchamber.opencodeCli.restart.manualRequired":"Enregistré sur le disque. Redémarrez le serveur OpenCode connecté pour appliquer les modifications.","settings.openchamber.opencodeCli.restart.failed":"Échec de l'application des modifications de configuration.","settings.openchamber.opencodeCli.actions.restart":"Redémarrer OpenCode","settings.openchamber.opencodeCli.restart.external":"Cet OpenCode a été lancé en dehors d'OpenChamber. Redémarrez-le là où vous l'avez lancé.","settings.openchamber.opencodeCli.restart.restartFailed":"Impossible de redémarrer OpenCode.","settings.openchamber.opencodeCli.dialog.selectBinaryTitle":"Sélectionnez le binaire OpenCode","settings.openchamber.opencodeCli.tipPrefix":"Astuce : vous pouvez également utiliser","settings.openchamber.opencodeCli.tipMiddle":"variable d’environnement, mais ce paramètre persiste dans","settings.mcp.sidebar.actions.refreshStatusAria":"Actualiser le statut du MCP","settings.mcp.sidebar.actions.refreshStatusTitle":"Actualiser le statut du MCP","settings.mcp.sidebar.actions.addServerTitle":"Ajouter le serveur MCP","settings.mcp.sidebar.serverType.localTitle":"Serveur local","settings.mcp.sidebar.serverType.remoteTitle":"Serveur distant","settings.plugins.sidebar.actions.addTitle":"Ajouter un plugin","settings.plugins.sidebar.actions.deleting":"Suppression…","settings.plugins.sidebar.empty.description":"Utilisez le bouton + ci-dessus pour en ajouter un","settings.plugins.sidebar.group.userEntries":"Configuration utilisateur","settings.plugins.sidebar.group.userFiles":"Fichier de plug-in utilisateur","settings.plugins.sidebar.group.projectEntries":"Configuration du projet","settings.plugins.sidebar.group.projectFiles":"Fichier de plugin de projet","settings.plugins.sidebar.kind.npm":"paquet npm","settings.plugins.sidebar.kind.path":"Chemin local","settings.plugins.sidebar.kind.file":"Fichier de plug-in","settings.plugins.sidebar.kind.package":"Paquet de plugin","settings.plugins.sidebar.deleteDialog.title":"Supprimer le plugin","settings.plugins.sidebar.deleteDialog.description":"Êtes-vous sûr de vouloir supprimer « {name} » ?","settings.plugins.sidebar.toast.deleted":'Plugin "{name}" supprimé',"settings.plugins.sidebar.toast.deleteFailed":"Échec de la suppression du plugin","settings.plugins.page.header.entry":"Plugin installé","settings.plugins.page.header.file":"Fichier de plug-in","settings.plugins.page.field.spec":"Spécification","settings.plugins.page.field.spec.placeholder":"npm-package@version ou /absolute/path","settings.plugins.page.field.options":"Options (JSON)","settings.plugins.page.field.options.invalidJson":"JSON invalide","settings.plugins.page.field.fileName":"Nom de fichier","settings.plugins.page.field.content":"Contenu","settings.plugins.page.field.scope":"Portée","settings.plugins.scope.user":"Utilisateur","settings.plugins.scope.project":"Projet","settings.plugins.dialog.add.title":"Ajouter un plugin","settings.plugins.dialog.add.tab.npm":"De npm","settings.plugins.dialog.add.tab.path":"Du chemin local","settings.plugins.dialog.add.tab.file":"Nouveau fichier","settings.plugins.dialog.add.action.submit":"Ajouter","settings.plugins.dialog.add.action.cancel":"Annuler","settings.plugins.toast.created":"Plugin ajouté","settings.plugins.toast.updated":"Plugin mis à jour","settings.plugins.toast.reloadFailed":"Échec du rechargement d'OpenCode — redémarrage requis","settings.plugins.validation.fileName":"Le nom du fichier doit être en minuscule et se terminer par .js / .ts / .mjs / .cjs","settings.plugins.validation.specRequired":"La spécification est requise","settings.plugins.registry.badge.network.tooltip":"Impossible d'accéder au registre de packages","settings.plugins.registry.banner.updateAvailable.title":"Mise à jour disponible","settings.plugins.registry.banner.updateAvailable.description":"{current} → {latest}","settings.plugins.registry.banner.updateAvailable.action":"Mise à jour vers {latest}","settings.plugins.registry.banner.invalid.title":"Plugin invalide","settings.plugins.registry.banner.invalid.malformed":"La syntaxe des spécifications est mal formée","settings.plugins.registry.banner.invalid.missingPackage":"Package introuvable dans le registre","settings.plugins.registry.banner.invalid.missingVersion":"Version non publiée","settings.plugins.registry.banner.invalid.pathMissing":"Le fichier n'existe pas","settings.plugins.registry.banner.invalid.pathUnreadable":"Le fichier n'est pas lisible","settings.plugins.sidebar.actions.refresh":"Vérifier les mises à jour","settings.plugins.toast.updatedToLatest":"Plugin mis à jour vers {version}","settings.plugins.toast.refreshing":"Vérification de npm pour les mises à jour…","settings.plugins.toast.refreshFailed":"Impossible de vérifier le registre npm","settings.plugins.status.loaded":"Chargé","settings.plugins.status.loadedVersion":"Chargé · {version}","settings.plugins.status.failed.title":"Échec du chargement","settings.plugins.status.failed.ref":"Référence du journal : {ref}","settings.plugins.status.notReported.title":"Non chargé","settings.plugins.status.notReported.description":"OpenCode n'a pas signalé ce plugin ici. Il est peut-être encore en cours d'installation, ou une autre entrée de configuration le désactive.","settings.plugins.status.unknown.title":"Statut inconnu","settings.plugins.status.unknown.description":"Impossible de lire le statut du plugin depuis OpenCode.","settings.plugins.status.retry":"Réessayer","settings.plugins.status.sidebar.unavailable":"Statut des plugins indisponible","settings.plugins.update.available.title":"Mise à jour disponible","settings.plugins.update.available.description":"Une version plus récente correspond à cette spécification. La mise à jour la réinstalle sans modifier votre configuration.","settings.plugins.update.action":"Mettre à jour","settings.plugins.update.running":"Mise à jour…","settings.plugins.update.failed.title":"Échec de la mise à jour","settings.plugins.update.toast.done":"{name} mis à jour","settings.plugins.update.toast.failed":"Impossible de mettre à jour {name}","settings.plugins.toast.checkFailed":"Impossible de vérifier les mises à jour via OpenCode","settings.openchamber.keyboardShortcuts.title":"Raccourcis clavier","settings.openchamber.keyboardShortcuts.actions.resetAll":"Tout réinitialiser","settings.openchamber.keyboardShortcuts.actions.overwrite":"Écraser","settings.openchamber.keyboardShortcuts.tooltip":"Capturez une nouvelle combinaison de touches, enregistrez-la et les liaisons seront mises à jour immédiatement.","settings.openchamber.keyboardShortcuts.overwritePrompt":"Ce combo est déjà utilisé par un autre raccourci. Écraser et effacer cet autre mappage ?","settings.openchamber.keyboardShortcuts.field.pressKeys":"Appuyez sur les touches...","settings.openchamber.keyboardShortcuts.error.captureFirst":"Capturez d'abord un raccourci.","settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut":"Ce raccourci peut entrer en conflit avec les paramètres par défaut du navigateur. Vous pouvez tout de même l’enregistrer.","settings.openchamber.keyboardShortcuts.action.open_go_to_line.label":"Aller à la ligne (éditeur de fichiers)","settings.openchamber.keyboardShortcuts.action.open_document_symbols.label":"Aller au symbole dans le fichier (éditeur de fichiers)","settings.openchamber.keyboardShortcuts.action.open_command_palette.label":"Ouvrir la palette de commandes","settings.openchamber.keyboardShortcuts.action.focus_input.label":"Placer le focus dans la saisie","settings.openchamber.keyboardShortcuts.action.open_settings.label":"Ouvrir les paramètres","settings.openchamber.keyboardShortcuts.action.toggle_terminal.label":"Afficher/masquer le panneau du terminal","settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label":"Développer/réduire le terminal","settings.openchamber.keyboardShortcuts.action.add_selection_to_chat.label":"Ajouter la sélection au chat","settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label":"Afficher/masquer la barre latérale","settings.openchamber.keyboardShortcuts.action.switch_session_tab.label":"Basculer l’onglet de session","settings.openchamber.keyboardShortcuts.action.switch_session_tab.suffix":" + 1…9","settings.openchamber.keyboardShortcuts.action.switch_context_surface.label":"Basculer la surface du panneau contextuel","settings.openchamber.keyboardShortcuts.action.switch_context_surface.suffix":" + 1…0","settings.openchamber.keyboardShortcuts.action.new_chat.label":"Nouvelle session","settings.openchamber.keyboardShortcuts.action.switch_session_previous.label":"Session précédente","settings.openchamber.keyboardShortcuts.action.switch_session_next.label":"Session suivante","settings.openchamber.keyboardShortcuts.action.session_history_back.label":"Précédent dans l’historique des sessions","settings.openchamber.keyboardShortcuts.action.session_history_forward.label":"Suivant dans l’historique des sessions","settings.openchamber.keyboardShortcuts.action.archive_current_session.label":"Archiver la session actuelle","settings.openchamber.keyboardShortcuts.action.rename_current_session.label":"Renommer la session actuelle","settings.openchamber.keyboardShortcuts.action.toggle_permission_auto_accept.label":"Changer de mode de permissions","settings.openchamber.keyboardShortcuts.action.close_session_tab.label":"Fermer l’onglet de session","settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label":"Nouvelle session de worktree","settings.openchamber.keyboardShortcuts.action.new_mini_chat.label":"Nouvelle fenêtre de mini-chat","settings.openchamber.keyboardShortcuts.action.mini_chat_global.label":"Raccourci global du Mini Chat","settings.openchamber.keyboardShortcuts.action.quake_mode_global.label":"Raccourci global du mode Quake","settings.openchamber.keyboardShortcuts.action.open_help.label":"Ouvrir les raccourcis clavier","settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label":"Afficher/masquer le menu des services","settings.openchamber.keyboardShortcuts.action.cycle_theme.label":"Changer de thème","settings.openchamber.keyboardShortcuts.action.cycle_agent.label":"Changer d’agent","settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label":"Faire avancer le modèle favori","settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_backward.label":"Faire défiler le modèle favori vers l'arrière","settings.openchamber.keyboardShortcuts.action.open_model_selector.label":"Ouvrir le sélecteur de modèle","settings.openchamber.keyboardShortcuts.action.expand_input.label":"Développer l'entrée","settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label":"Ouvrir la chronologie de la conversation","settings.openchamber.keyboardShortcuts.action.toggle_prompt_navigator.label":"Afficher ou masquer le navigateur de prompts","settings.openchamber.keyboardShortcuts.warning.contextualPrefix":"Cette séquence partage un préfixe contextuel avec {action}. Lorsque son contexte est actif, cette action est prioritaire.","settings.openchamber.keyboardShortcuts.category.session":"Commandes de session","settings.openchamber.keyboardShortcuts.category.models":"Modèles et agents","settings.openchamber.keyboardShortcuts.category.panels":"Panneaux et outils","settings.openchamber.keyboardShortcuts.category.navigation":"Navigation","settings.openchamber.keyboardShortcuts.category.application":"Application","settings.openchamber.keyboardShortcuts.actions.edit":"Modifier","settings.openchamber.keyboardShortcuts.actions.confirm":"Confirmer","settings.openchamber.keyboardShortcuts.dialog.title":"Modifier {action}","settings.openchamber.keyboardShortcuts.dialog.instructions":"Appuyez sur deux combinaisons de touches au maximum, avec trois touches au plus chacune. Après la première, attendez jusqu’à 3 secondes une seconde combinaison. Utilisez Confirmer pour appliquer ou Annuler pour abandonner. Retour arrière supprime la dernière.","settings.openchamber.keyboardShortcuts.dialog.instructionsSingle":"Appuyez sur une combinaison de touches, avec trois touches au plus. Utilisez Confirmer pour appliquer ou Annuler pour abandonner. Retour arrière la supprime.","settings.openchamber.keyboardShortcuts.dialog.firstChord":"Première combinaison","settings.openchamber.keyboardShortcuts.dialog.secondChord":"Deuxième combinaison","settings.openchamber.keyboardShortcuts.dialog.recording":"Appuyez sur les touches…","settings.openchamber.keyboardShortcuts.unassigned":"Non attribué","settings.openchamber.keyboardShortcuts.error.prefixConflict":"Cela entre en conflit avec la séquence utilisée par {action}. Choisissez une autre combinaison.","settings.openchamber.keyboardShortcuts.error.exactConflict":"Cette combinaison est déjà utilisée par {action}.","settings.openchamber.keyboardShortcuts.error.internalConflict":"Cette combinaison entre en conflit avec un raccourci intégré qui ne peut pas être remplacé.","settings.openchamber.keyboardShortcuts.action.open_draft_project_picker.label":"Ouvrir le sélecteur de projet de brouillon","settings.openchamber.keyboardShortcuts.action.open_draft_worktree_picker.label":"Ouvrir le sélecteur de worktree de brouillon","settings.openchamber.keyboardShortcuts.action.open_session_list.label":"Ouvrir les sessions récentes","settings.openchamber.keyboardShortcuts.action.background_session_work.label":"Passer le travail en cours en arrière-plan","settings.openchamber.keyboardShortcuts.action.toggle_dictation.label":"Saisie vocale","settings.projects.sidebar.total":"Total {count}","settings.projects.sidebar.actions.addProject":"Ajouter un projet","settings.projects.page.empty.noProjects":"Aucun projet disponible.","settings.projects.page.title.default":"Paramètres du projet","settings.projects.page.section.worktree":"Worktree","settings.projects.page.field.projectName":"Nom du projet","settings.projects.page.field.projectAgent":"Agent du projet","settings.projects.page.field.projectModel":"Modèle du projet","settings.projects.page.field.projectThinking":"Réflexion du projet","settings.projects.page.section.chatDefaults":"Valeurs par défaut des nouveaux chats","settings.projects.page.section.chatDefaultsDescription":"Utilisées au démarrage d’un nouveau chat dans ce projet. À défaut, les valeurs globales s’appliquent. La réflexion n’apparaît que pour les modèles qui proposent des niveaux.","settings.projects.page.field.projectNamePlaceholder":"Nom du projet","settings.projects.page.option.thinkingDefault":"Celui du modèle","settings.projects.page.field.accentColor":"Couleur d'accentuation","settings.projects.page.field.projectIcon":"Icône du projet","settings.projects.page.field.projectIconBackgroundAria":"Couleur d’arrière-plan de l’icône du projet","settings.projects.page.field.clearIconBackgroundAria":"Effacer l’arrière-plan de l’icône","settings.projects.page.field.clearBackground":"Effacer l’arrière-plan","settings.projects.page.field.none":"Aucun","settings.projects.page.field.preview":"Aperçu","settings.projects.page.actions.uploadIcon":"Téléverser une icône","settings.projects.page.actions.uploading":"Téléchargement...","settings.projects.page.actions.discoverFavicon":"Découvrir la favicon","settings.projects.page.actions.discovering":"Découverte...","settings.projects.page.actions.removeProjectIcon":"Supprimer l'icône du projet","settings.projects.page.actions.removing":"Suppression...","settings.projects.page.actions.undoRemove":"Annuler la suppression","settings.projects.page.toast.uploadIconFailed":"Échec du téléchargement de l'icône du projet","settings.projects.page.toast.iconUpdated":"Icône du projet mise à jour","settings.projects.page.toast.removeIconFailed":"Échec de la suppression de l'icône du projet","settings.projects.page.toast.iconRemoved":"Icône du projet supprimée","settings.projects.page.toast.discoverIconFailed":"Échec de la découverte de l'icône du projet","settings.projects.page.toast.customIconAlreadySet":"Icône personnalisée déjà définie pour ce projet","settings.projects.page.toast.iconDiscovered":"Icône de projet découverte","settings.projects.page.toast.saveFailed":"Échec de l'enregistrement des paramètres du projet","settings.usage.sidebar.title":"Utilisation","settings.usage.sidebar.total":"Total {count}","settings.usage.sidebar.actions.toggleAutoRefreshAria":"Activer l'actualisation automatique","settings.usage.sidebar.actions.refreshAria":"Actualiser l'utilisation","settings.usage.sidebar.actions.refreshTitle":"Actualiser l'utilisation","settings.usage.sidebar.tooltip.autoRefresh":"Actualisation automatique des données d'utilisation à un intervalle défini","settings.usage.sidebar.field.intervalPlaceholder":"Intervalle","settings.usage.sidebar.field.display":"Afficher","settings.usage.sidebar.field.displayModePlaceholder":"Mode d'affichage","settings.usage.sidebar.field.displayModeUsage":"Utilisé","settings.usage.sidebar.field.displayModeRemaining":"Quota restant","settings.usage.sidebar.status.notSet":"Non défini","settings.usage.page.empty.selectProvider":"Sélectionnez un fournisseur pour afficher les détails d'utilisation.","settings.usage.page.header.providerUsage":"Utilisation de {provider}","settings.usage.page.header.refreshing":"Actualisation de l’utilisation...","settings.usage.page.header.lastUpdated":"Dernière mise à jour : {time}","settings.usage.page.header.lastUpdatedWithPlan":"Forfait : {plan} · Dernière mise à jour : {time}","settings.usage.page.options.showInWorkStatusAria":"Afficher dans le panneau d’état du travail","settings.usage.page.options.showInWorkStatus":"Afficher dans le panneau d’état du travail","settings.usage.page.options.showInWorkStatusTooltip":"Lorsqu’elle est activée, l’utilisation de ce fournisseur sera visible dans le panneau d’état du travail.","settings.usage.page.state.noData":"Aucune donnée d'utilisation disponible pour l'instant.","settings.usage.page.state.refreshFailedTitle":"Échec de l'actualisation des données d'utilisation","settings.usage.page.state.providerNotConfiguredTitle":"Fournisseur non configuré","settings.usage.page.state.providerNotConfiguredDescription":"Ajoutez des informations d'identification dans l'onglet Fournisseurs pour activer le suivi de l'utilisation.","settings.usage.page.section.modelQuotas":"Quotas de modèles","settings.usage.page.section.otherModels":"Autres modèles","settings.usage.page.state.noQuotaWindowsTitle":"Aucune fenêtre de quota signalée","settings.usage.page.state.noQuotaWindowsDescription":"Ce fournisseur ne signale actuellement aucune limite de débit ni aucun quota d'utilisation.","settings.usage.page.window.giftResetAria":"Réinitialisation de limite cadeau","settings.usage.page.window.giftResetExpires":"Réinitialisation de limite cadeau disponible jusqu'à {time}","settings.usage.page.window.giftResetActivated":"Réinitialisation de limite cadeau activée","settings.usage.page.window.giftResetActivateFailed":"Échec de l'activation de la réinitialisation de limite cadeau","settings.usage.page.window.giftResetNotNeeded":"Aucune réinitialisation de limite cadeau nécessaire pour le moment","settings.usage.pace.status.onTrack":"En bonne voie","settings.usage.pace.status.slightlyFast":"Un peu rapide","settings.usage.pace.status.tooFast":"Trop vite","settings.usage.pace.status.usedUp":"Épuisé","settings.usage.pace.predictionTooltip":"Utilisation prévue à la fin de la fenêtre en fonction du rythme actuel : {prediction}","settings.usage.pace.wait":"Attendez {duration}","settings.usage.pace.prediction":"Prévision : {prediction}","settings.usage.pace.rate":"Rythme : {rate}","settings.usage.pace.waitSeparator":"· Attendez","settings.usage.pace.predictionLabel":"Préd :","settings.usage.card.showInHeaderAria":"Afficher dans le menu d’en-tête","settings.usage.card.resetsAt":"Réinitialisation {time}","settings.usage.card.bar.used":"utilisé","settings.usage.card.bar.remaining":"restant","settings.remoteInstances.page.title":"Instance distante","settings.remoteInstances.page.description":"Configurez la connexion SSH, le serveur distant et les paramètres de transfert.","settings.remoteInstances.page.empty.selectInstance":"Sélectionnez une instance pour afficher et modifier ses paramètres.","settings.remoteInstances.page.empty.noExtraForwards":"Aucun transfert de port supplémentaire configuré.","settings.remoteInstances.page.section.actions":"Actions","settings.remoteInstances.page.section.actionsDescription":"Connectez-vous, reconnectez-vous, inspectez les journaux ou supprimez cette instance.","settings.remoteInstances.page.section.remoteServer":"Serveur distant","settings.remoteInstances.page.section.remoteServerDescription":"Comment OpenChamber est géré et démarré sur l'hôte distant.","settings.remoteInstances.page.section.mainTunnel":"Accès depuis cet ordinateur","settings.remoteInstances.page.section.mainTunnelDescription":"OpenChamber tourne sur la machine distante. Ces réglages ne concernent que l’adresse, sur cet ordinateur, qui y mène via le tunnel SSH.","settings.remoteInstances.page.section.authentication":"Authentification","settings.remoteInstances.page.section.authenticationDescription":"Informations d'identification facultatives pour SSH et l'interface utilisateur distante OpenChamber.","settings.remoteInstances.page.section.portForwards":"Transferts de ports","settings.remoteInstances.page.section.portForwardsDescription":"Transferts de ports supplémentaires via cette connexion SSH, au-delà du tunnel principal.","settings.remoteInstances.page.field.sshCommand":"Commande SSH","settings.remoteInstances.page.field.sshCommandPlaceholder":"ssh utilisateur@hôte","settings.remoteInstances.page.field.nickname":"Surnom","settings.remoteInstances.page.field.nicknamePlaceholder":"Mon hôte distant","settings.remoteInstances.page.field.connectionTimeoutSeconds":"Délai d'expiration de la connexion (secondes)","settings.remoteInstances.page.field.installMethod":"Méthode d'installation","settings.remoteInstances.page.field.installMethodHint":"Comment OpenChamber est installé lors de l’exécution en mode géré.","settings.remoteInstances.page.field.selectInstallMethodPlaceholder":"Sélectionnez la méthode d'installation","settings.remoteInstances.page.field.selectBindHostPlaceholder":"Sélectionnez l'hôte de liaison","settings.remoteInstances.page.field.sshPasswordOptional":"Mot de passe SSH (facultatif)","settings.remoteInstances.page.field.sshPasswordPlaceholder":"Entrez le mot de passe SSH","settings.remoteInstances.page.field.uiPasswordOptional":"Mot de passe de l'interface utilisateur (facultatif)","settings.remoteInstances.page.field.uiPasswordPlaceholder":"Entrez le mot de passe de l'interface utilisateur","settings.remoteInstances.page.field.forwardTypeHint":"Choisissez le transfert local (-L), distant (-R) ou dynamique (-D).","settings.remoteInstances.page.field.typePlaceholder":"Type","settings.remoteInstances.page.forwardType.local":"Local (-L)","settings.remoteInstances.page.forwardType.remote":"À distance (-R)","settings.remoteInstances.page.forwardType.dynamic":"Dynamique (-D)","settings.remoteInstances.page.forwardTypeDescription.local":"Transférez le trafic local vers une destination distante.","settings.remoteInstances.page.forwardTypeDescription.remote":"Exposez un point de terminaison distant et renvoyez-le à votre ordinateur local.","settings.remoteInstances.page.forwardTypeDescription.dynamic":"Exposez un proxy SOCKS5 local sur SSH.","settings.remoteInstances.page.actions.create":"Créer","settings.remoteInstances.page.actions.cancel":"Annuler","settings.remoteInstances.page.actions.connecting":"Connexion...","settings.remoteInstances.page.actions.reconnecting":"Reconnexion...","settings.remoteInstances.page.actions.reconnectNow":"Reconnecter maintenant","settings.remoteInstances.page.actions.logs":"Journaux SSH","settings.remoteInstances.page.actions.pickRandomPort":"Choisir un port aléatoire","settings.remoteInstances.page.actions.enableForwardAria":"Activer le transfert","settings.remoteInstances.page.actions.openLocal":"Ouvrir localement","settings.remoteInstances.page.actions.addForward":"Ajouter un transfert","settings.remoteInstances.page.addDialog.description":"Choisissez un hôte dans votre configuration SSH ou saisissez la connexion vous-même.","settings.remoteInstances.page.addDialog.sourceLabel":"D'où vient la connexion","settings.remoteInstances.page.addDialog.tab.saved":"Depuis la configuration SSH","settings.remoteInstances.page.addDialog.tab.manual":"Saisir moi-même","settings.remoteInstances.page.addDialog.searchPlaceholder":"Rechercher des hôtes","settings.remoteInstances.page.addDialog.emptySaved":"Aucun hôte trouvé dans votre configuration SSH. Saisissez plutôt la connexion vous-même.","settings.remoteInstances.page.addDialog.searchEmpty":"Aucun hôte ne correspond à cette recherche.","settings.remoteInstances.page.addDialog.use":"Utiliser","settings.remoteInstances.page.state.notConnected":"Non connecté","settings.remoteInstances.page.state.connecting":"Connexion en cours","settings.remoteInstances.page.state.ready":"Connecté","settings.remoteInstances.page.state.problem":"Action requise","settings.remoteInstances.page.section.advanced":"Paramètres avancés","settings.remoteInstances.page.section.advancedHint":"Ports, méthode d’installation, mots de passe et redirections supplémentaires. Les valeurs par défaut conviennent à la plupart des connexions.","settings.remoteInstances.page.field.installMethodAuto":"Automatique","settings.remoteInstances.page.error.hint.noRuntime":"La machine distante n’a ni bun ni npm. Installez-en un là-bas, ou basculez cette connexion sur « Déjà en cours d’exécution ».","settings.remoteInstances.page.error.hint.noOpencode":"La CLI opencode n’est pas installée sur la machine distante. Installez-la là-bas (voir opencode.ai), puis reconnectez-vous.","settings.remoteInstances.page.error.action.setUiPassword":"Définir le mot de passe de l’interface","settings.remoteInstances.page.error.action.pickRandomPort":"Utiliser un autre port local","settings.remoteInstances.page.error.action.setRemotePort":"Définir le port distant","settings.remoteInstances.page.validation.externalPortRequired":"Indiquez d’abord un port distant. En mode « Déjà en cours d’exécution », OpenChamber doit savoir sur quel port le serveur écoute.","settings.remoteInstances.page.empty.noInstances":"Aucune connexion SSH pour le moment.","settings.remoteInstances.page.field.uiPasswordRequired":"Mot de passe d’interface (obligatoire)","settings.remoteInstances.page.field.uiPasswordMissingForLan":"Obligatoire tant que le serveur distant est accessible sur son réseau.","settings.remoteInstances.page.field.remoteLanAccess":"Accessible sur le réseau distant","settings.remoteInstances.page.field.remoteLanAccessHint":"Autoriser aussi les autres appareils du réseau de la machine distante à ouvrir cet OpenChamber directement, sans le tunnel SSH. Un mot de passe d’interface est obligatoire.","settings.remoteInstances.page.field.remoteLanAccessWarning":"N’importe qui sur ce réseau peut atteindre l’OpenChamber distant. Seul le mot de passe d’interface ci-dessous le protège.","settings.remoteInstances.page.validation.remoteLanNeedsPassword":"Définissez d’abord un mot de passe d’interface. Sans lui, l’OpenChamber distant serait ouvert à tous les appareils de ce réseau.","settings.remoteInstances.page.field.bindHostOption.loopback":"Cet ordinateur seulement (127.0.0.1)","settings.remoteInstances.page.field.bindHostOption.localhost":"Cet ordinateur seulement (localhost)","settings.remoteInstances.page.field.bindHostOption.lan":"Tout appareil de mon réseau (0.0.0.0)","settings.remoteInstances.page.field.sshPasswordHint":"Nécessaire uniquement si cet hôte demande un mot de passe au lieu d’accepter une clé SSH.","settings.remoteInstances.page.field.uiPasswordHintManaged":"Mot de passe qui protégera l’interface OpenChamber distante. OpenChamber l’applique au serveur qu’il démarre pour vous.","settings.remoteInstances.page.field.uiPasswordHintExternal":"Mot de passe du serveur OpenChamber déjà en cours d’exécution sur la machine distante, utilisé pour s’y connecter.","settings.remoteInstances.page.tunnelPreview.caption":"Cette connexion redirige :","settings.remoteInstances.page.empty.noInstancesWithOneImport":"Aucune connexion SSH pour le moment. 1 hôte peut être importé depuis votre configuration SSH.","settings.remoteInstances.page.empty.noInstancesWithImports":"Aucune connexion SSH pour le moment. {count} hôtes peuvent être importés depuis votre configuration SSH.","settings.remoteInstances.page.state.loadingInstances":"Chargement des connexions...","settings.remoteInstances.page.import.loading":"Chargement des hôtes SSH...","settings.remoteInstances.page.import.noneFound":"Aucun hôte SSH trouvé.","settings.remoteInstances.page.import.noneAvailable":"Aucun hôte SSH disponible pour l'importation.","settings.remoteInstances.page.import.patternSuffix":"(modèle)","settings.remoteInstances.page.status.currentLocalUrl":"URL locale actuelle :","settings.remoteInstances.page.status.reconnectStale":"La reconnexion semble bloquée. Vous pouvez réessayer maintenant.","settings.remoteInstances.page.logsDialog.title":"Journaux SSH","settings.remoteInstances.page.logsDialog.loading":"Chargement des journaux...","settings.remoteInstances.page.logsDialog.empty":"Aucun journal SSH pour l’instant.","settings.remoteInstances.page.patternDialog.title":"Créer à partir d'un motif générique","settings.remoteInstances.page.patternDialog.destinationPlaceholder":"utilisateur@hôte","settings.remoteInstances.page.phase.resolvingConfiguration":"Résolution de la configuration","settings.remoteInstances.page.phase.checkingAuth":"Vérification de l'authentification","settings.remoteInstances.page.phase.establishingSsh":"Établissement de la connexion SSH","settings.remoteInstances.page.phase.probingRemote":"Détection de l’hôte distant","settings.remoteInstances.page.phase.installingOpenChamber":"Installation d’OpenChamber","settings.remoteInstances.page.phase.updatingOpenChamber":"Mise à jour d’OpenChamber","settings.remoteInstances.page.phase.detectingServer":"Détection du serveur","settings.remoteInstances.page.phase.startingServer":"Démarrage du serveur","settings.remoteInstances.page.phase.forwardingPorts":"Transfert des ports","settings.remoteInstances.page.phase.reconnecting":"Reconnexion","settings.remoteInstances.page.confirm.storeSshPasswordPlaintext":"Stocker le mot de passe SSH en clair sur le disque ?","settings.remoteInstances.page.confirm.storeUiPasswordPlaintext":"Stocker le mot de passe de l'interface utilisateur en clair sur le disque ?","settings.remoteInstances.page.confirm.removeInstance":"Supprimer cette instance distante ?","settings.remoteInstances.page.toast.sshCommandRequired":"La commande SSH est requise","settings.remoteInstances.page.toast.saveFailed":"Échec de l'enregistrement de l'instance","settings.remoteInstances.page.toast.instanceSaved":"Instance enregistrée","settings.remoteInstances.page.toast.instanceCreated":"Instance créée","settings.remoteInstances.page.toast.destinationRequired":"La destination est obligatoire","settings.remoteInstances.page.toast.noLogsToCopy":"Aucun journal à copier","settings.remoteInstances.page.toast.logsCopied":"Journaux copiés","settings.remoteInstances.page.toast.logsCleared":"Journaux effacés","settings.remoteInstances.page.toast.clearLogsFailed":"Échec de la suppression des journaux","settings.remoteInstances.page.toast.instanceUrlUnavailable":"L'URL de l'instance n'est pas disponible","settings.remoteInstances.page.toast.connectFailed":"Échec de la connexion de l'instance","settings.remoteInstances.page.toast.cancelConnectionFailed":"Échec de l'annulation de la connexion","settings.remoteInstances.page.toast.disconnectFailed":"Échec de la déconnexion de l'instance","settings.remoteInstances.page.toast.retryFailed":"Échec de la nouvelle tentative de connexion","settings.remoteInstances.page.toast.instanceRemoved":"Instance supprimée","settings.remoteInstances.page.toast.removeInstanceFailed":"Échec de la suppression de l'instance","settings.openchamber.worktrees.state.selectProject":"Sélectionnez un projet pour gérer les worktrees.","settings.openchamber.worktrees.state.gitOnly":"Les paramètres Worktree ne sont disponibles que pour les dépôts Git.","settings.openchamber.worktrees.setup.title":"Commandes de configuration","settings.openchamber.worktrees.setup.tooltipPrefix":"S'exécute automatiquement dans le nouveau répertoire worktree lorsqu'un worktree est créé. Utiliser","settings.openchamber.worktrees.setup.tooltipSuffix":"pour la racine du projet.","settings.openchamber.worktrees.setup.loading":"Chargement...","settings.openchamber.worktrees.setup.commandPlaceholder":"p. ex. bun install","settings.openchamber.worktrees.setup.removeCommandAria":"Supprimer la commande","settings.openchamber.worktrees.setup.addCommand":"Ajouter une commande","settings.openchamber.worktrees.setup.waitForCommands":"Attendre la fin des commandes de configuration avant de créer ou d'envoyer une session","settings.openchamber.worktrees.setup.waitForCommandsAria":"Attendre les commandes de configuration Worktree avant de créer ou d'envoyer une session","settings.openchamber.worktrees.setup.toast.saveFailed":"Échec de l'enregistrement des commandes de configuration Worktree","settings.openchamber.worktrees.list.title":"Worktrees existants","settings.openchamber.worktrees.list.tooltip":"La suppression d'un worktree supprime également les sessions liées.","settings.openchamber.worktrees.list.loading":"Chargement des worktrees...","settings.openchamber.worktrees.list.empty":"Aucun worktree trouvé pour ce projet","settings.openchamber.worktrees.list.detachedHead":"HEAD détaché","settings.openchamber.worktrees.list.deleteWorktreeAria":"Supprimer le worktree {name}","settings.agents.modelSelector.title":"Sélectionnez le modèle","settings.agents.modelSelector.searchPlaceholder":"Rechercher des modèles","settings.agents.modelSelector.selectPlaceholder":"Sélectionnez le modèle...","settings.agents.modelSelector.notSelected":"Non sélectionné","settings.agents.modelSelector.noModelOptional":"Aucun modèle (facultatif)","settings.agents.modelSelector.section.favorites":"Favoris","settings.agents.modelSelector.section.recents":"Récents","settings.agents.modelSelector.section.recent":"Récent","settings.agents.modelSelector.badge.current":"Actuel","settings.agents.modelSelector.actions.favorite":"Préféré","settings.agents.modelSelector.actions.unfavorite":"Supprimer des favoris","settings.agents.modelSelector.actions.addToFavorites":"Ajouter aux favoris","settings.agents.modelSelector.actions.removeFromFavorites":"Supprimer des favoris","settings.agents.modelSelector.state.noModelsFound":"Aucun modèle trouvé","settings.agents.modelSelector.keyboardHints":"↑↓ naviguer • Entrer sélectionner • Esc fermer","settings.providers.page.state.loading":"Chargement...","settings.providers.page.state.unableToLoadProviderList":"Impossible de charger la liste des fournisseurs","settings.providers.page.connect.title":"Connecter le fournisseur","settings.providers.page.connect.noProvidersFound":"Aucun fournisseur trouvé","settings.providers.connect.searchPlaceholder":"Rechercher un fournisseur","settings.providers.connect.popular":"Populaires","settings.providers.connect.all":"Tous les fournisseurs","settings.providers.connect.showAll":"Afficher tous les fournisseurs ({count})","settings.providers.connect.recommended":"Recommandé","settings.providers.connect.customHint":"Tout point de terminaison compatible OpenAI ou Anthropic","settings.providers.connect.note.openai":"Modèles GPT, connexion avec ChatGPT","settings.providers.connect.note.opencodeGo":"Abonnement à petit prix","settings.providers.connect.note.openrouter":"Tous les modèles avec une seule clé","settings.providers.connect.note.anthropic":"Modèles Claude avec une clé API","settings.providers.connect.note.githubCopilot":"Modèles inclus dans votre offre Copilot","settings.providers.connect.note.google":"Modèles Gemini avec une clé API","settings.providers.connect.note.vercel":"De nombreux modèles via une seule passerelle","settings.providers.page.custom.title":"Fournisseur personnalisé","settings.providers.page.custom.editTitle":"Modifier le fournisseur personnalisé","settings.providers.page.custom.description":"Ajoutez un fournisseur avec une URL de base, des identifiants, une liste de modèles et un protocole API pris en charge. Enregistré dans la configuration OpenCode pour le chat.","settings.providers.page.custom.field.providerID.label":"ID du fournisseur","settings.providers.page.custom.field.providerID.placeholder":"mon-fournisseur","settings.providers.page.custom.field.providerID.info":"Minuscules, chiffres, tirets et underscores. Utilisé comme ID de fournisseur OpenCode.","settings.providers.page.custom.field.name.label":"Nom affiché","settings.providers.page.custom.field.name.placeholder":"Mon fournisseur","settings.providers.page.custom.field.name.info":"Affiché dans les sélecteurs de fournisseur et de modèle.","settings.providers.page.custom.field.icon.label":"Icône du fournisseur","settings.providers.page.custom.field.icon.info":"Utilisée pour ce fournisseur personnalisé dans les listes de fournisseurs et de modèles.","settings.providers.page.custom.field.icon.option.default":"Par défaut","settings.providers.page.custom.field.icon.option.server":"Serveur","settings.providers.page.custom.field.icon.option.cloud":"Cloud","settings.providers.page.custom.field.icon.option.database":"Base de données","settings.providers.page.custom.field.icon.option.terminal":"Terminal","settings.providers.page.custom.field.icon.option.code":"Code","settings.providers.page.custom.field.icon.option.ai":"IA","settings.providers.page.custom.field.protocol.label":"Protocole API","settings.providers.page.custom.field.protocol.info":"Choisissez le format de requête implémenté par cette API.","settings.providers.page.custom.field.protocol.openaiChat":"OpenAI Chat Completions","settings.providers.page.custom.field.protocol.openaiResponses":"OpenAI Responses","settings.providers.page.custom.field.protocol.anthropicMessages":"Anthropic Messages","settings.providers.page.custom.field.baseURL.label":"URL de base","settings.providers.page.custom.field.baseURL.placeholder":"https://api.example.com/v1","settings.providers.page.custom.field.baseURL.info":"URL de base de l’API compatible OpenAI. Doit commencer par http:// ou https://.","settings.providers.page.custom.field.apiKey.label":"Clé API","settings.providers.page.custom.field.apiKey.placeholder":"sk-... ou {env:VAR_NAME}","settings.providers.page.custom.field.apiKey.info":"Stockée dans l’auth OpenCode, pas par OpenChamber. Utilisez {env:VAR_NAME} pour lire une clé depuis l’environnement.","settings.providers.page.custom.field.apiKey.editInfo":"Laissez vide pour conserver l'identifiant existant, ou saisissez une nouvelle clé / {env:VAR_NAME}.","settings.providers.page.custom.field.apiKey.editPlaceholder":"Laissez vide pour conserver la clé existante","settings.providers.page.custom.models.title":"Modèles","settings.providers.page.custom.models.idLabel":"ID du modèle","settings.providers.page.custom.models.idPlaceholder":"gpt-4o","settings.providers.page.custom.models.nameLabel":"Nom du modèle","settings.providers.page.custom.models.namePlaceholder":"GPT-4o","settings.providers.page.custom.models.variantsLabel":"Niveaux de raisonnement","settings.providers.page.custom.models.variantsPlaceholder":"low, medium, high","settings.providers.page.custom.models.variantsInfo":"Facultatif. Niveaux d’effort acceptés par l’endpoint, séparés par des virgules, par ex. low, medium, high. Chacun devient une variante sélectionnable dans le sélecteur de modèle.","settings.providers.page.custom.models.add":"Ajouter un modèle","settings.providers.page.custom.models.remove":"Supprimer le modèle","settings.providers.page.custom.models.untitled":"Nouveau modèle","settings.providers.page.custom.headers.title":"En-têtes","settings.providers.page.custom.headers.description":"En-têtes de requête optionnels envoyés à chaque appel.","settings.providers.page.custom.headers.keyLabel":"Nom de l’en-tête","settings.providers.page.custom.headers.keyPlaceholder":"X-Custom-Header","settings.providers.page.custom.headers.valueLabel":"Valeur de l’en-tête","settings.providers.page.custom.headers.valuePlaceholder":"valeur","settings.providers.page.custom.headers.add":"Ajouter un en-tête","settings.providers.page.custom.headers.remove":"Supprimer l’en-tête","settings.providers.page.custom.actions.back":"Retour","settings.providers.page.custom.actions.save":"Enregistrer le fournisseur","settings.providers.page.custom.actions.update":"Mettre à jour le fournisseur","settings.providers.page.custom.error.providerID.required":"L’ID du fournisseur est obligatoire","settings.providers.page.custom.error.providerID.format":"Utilisez des minuscules, chiffres, tirets ou underscores","settings.providers.page.custom.error.providerID.exists":"Un fournisseur avec cet ID est déjà connecté","settings.providers.page.custom.error.name.required":"Le nom affiché est obligatoire","settings.providers.page.custom.error.baseURL.required":"L’URL de base est obligatoire","settings.providers.page.custom.error.baseURL.format":"L’URL de base doit commencer par http:// ou https://","settings.providers.page.custom.error.required":"Obligatoire","settings.providers.page.custom.error.duplicate":"Doublon","settings.providers.page.custom.error.apiKey.required":"Une clé API ou {env:VAR_NAME} est requise","settings.providers.page.custom.discovery.fetch":"Trouver les modèles","settings.providers.page.custom.discovery.fetching":"Recherche des modèles...","settings.providers.page.custom.discovery.info":"Interroge une seule fois la liste des modèles de ce fournisseur. Les limites et capacités sont complétées depuis models.dev quand il connaît le modèle. Rien ne se met à jour tout seul ensuite.","settings.providers.page.custom.discovery.failed":"Impossible de récupérer les modèles de ce fournisseur","settings.providers.page.custom.discovery.review":"Modèles trouvés","settings.providers.page.custom.discovery.counts":"{matching} modèles sur {total}, {selected} sélectionnés","settings.providers.page.custom.discovery.selectAll":"Tout sélectionner","settings.providers.page.custom.discovery.deselectAll":"Tout désélectionner","settings.providers.page.custom.discovery.importSelected":"Ajouter la sélection ({count})","settings.providers.page.custom.discovery.cancel":"Annuler","settings.providers.page.custom.discovery.alreadyAdded":"Déjà ajouté","settings.providers.page.custom.discovery.contextValue":"Contexte {value}","settings.providers.page.custom.discovery.outputValue":"Sortie {value}","settings.providers.page.custom.discovery.source.provider-api":"Rempli depuis le fournisseur","settings.providers.page.custom.discovery.source.models.dev":"Rempli depuis models.dev","settings.providers.page.custom.models.contextWindow":"Fenêtre de contexte","settings.providers.page.custom.models.maxOutputTokens":"Jetons de sortie maximum","settings.providers.page.custom.models.inputCapabilities":"Capacités d’entrée","settings.providers.page.custom.models.outputCapabilities":"Capacités de sortie","settings.providers.page.custom.models.tools":"Appels d’outils","settings.providers.page.custom.models.toolsOff":"pas d’appels d’outils","settings.providers.page.custom.error.positiveInteger":"Saisissez un nombre entier positif","settings.providers.page.custom.authFailure.keyAfterConfig":"Le fournisseur a été enregistré, mais pas sa clé API. Enregistrez à nouveau pour réessayer la clé, ou déconnectez-le pour supprimer le fournisseur.","settings.providers.page.auth.title":"Authentification","settings.providers.page.auth.loadingMethods":"Chargement des méthodes d'authentification...","settings.providers.page.auth.apiKeyLabel":"Clé API","settings.providers.page.auth.apiKeyTooltip":"Les clés sont envoyées directement à OpenCode et ne sont jamais stockées par OpenChamber.","settings.providers.page.auth.apiKeyPlaceholder":"sk-...","settings.providers.page.auth.oauthMethodFallback":"Méthode OAuth {index}","settings.providers.page.auth.pasteAuthorizationCodePlaceholder":"Coller le code d'autorisation","settings.providers.page.auth.oauth.starting":"Démarrage de l’autorisation…","settings.providers.page.auth.external.connecting":"Connexion…","settings.providers.page.auth.field.other":"Autre…","settings.providers.page.auth.field.otherPlaceholder":"Saisissez une valeur","settings.providers.page.auth.oauth.waiting":"En attente de l’autorisation…","settings.providers.page.auth.oauth.waitingHint":"Terminez la connexion dans votre navigateur. Laissez cette page ouverte : la connexion se finalisera d’elle-même.","settings.providers.page.auth.oauth.codeHint":"Copiez le code d’autorisation depuis votre navigateur et collez-le ici.","settings.providers.page.auth.oauth.deviceCodeLabel":"Code de l’appareil","settings.providers.page.auth.oauth.linkLabel":"Lien d’autorisation","settings.providers.page.auth.oauth.promptRequired":"Renseignez « {field} » pour continuer","settings.providers.page.auth.oauth.error.sessionExpired":"La demande d’autorisation a expiré. Reconnectez-vous pour la relancer.","settings.providers.page.auth.oauth.error.codeRequired":"Ce fournisseur a besoin du code d’autorisation de votre navigateur.","settings.providers.page.auth.oauth.error.declined":"L’autorisation a été refusée ou n’a pas abouti.","settings.providers.page.auth.oauth.error.invalidInput":"Les informations saisies ont été refusées.","settings.providers.page.auth.incomplete":"Identifiants manquants","settings.providers.page.auth.incompleteHint":"· Ajoutez une clé API ou {env:VAR} avant d’utiliser ce fournisseur dans le chat","settings.providers.page.connectionDetails.source.userConfig":"configuration utilisateur","settings.providers.page.connectionDetails.source.projectConfig":"configuration du projet","settings.providers.page.connectionDetails.source.customConfig":"configuration personnalisée","settings.providers.page.models.title":"Modèles disponibles","settings.providers.page.models.filterPlaceholder":"Filtrer les modèles...","settings.providers.page.models.noModelsMatchFilter":"Aucun modèle ne correspond à ce filtre.","settings.providers.page.models.capability.toolCalling":"Appel d'outil","settings.providers.page.models.capability.reasoning":"Raisonnement","settings.providers.page.models.capability.imageInput":"Saisie d'images","settings.providers.page.models.tokenBadge.context":"cx","settings.providers.page.models.tokenBadge.output":"sortie","settings.providers.page.models.actions.hideModelFromSelectors":"Masquer le modèle des sélecteurs","settings.providers.page.models.actions.showModelInSelectors":"Afficher le modèle dans les sélecteurs","settings.providers.page.models.actions.hideModel":"Masquer le modèle","settings.providers.page.models.actions.showModel":"Afficher le modèle","settings.providers.page.actions.saving":"Enregistrement...","settings.providers.page.actions.saveKey":"Enregistrer la clé","settings.providers.page.actions.connect":"Connecter","settings.providers.page.actions.copyCode":"Copier le code","settings.providers.page.actions.open":"Ouvrir","settings.providers.page.actions.copy":"Copier","settings.providers.page.actions.complete":"Terminer","settings.providers.page.actions.continue":"Continuer","settings.providers.page.actions.cancel":"Annuler","settings.providers.page.actions.tryAgain":"Réessayer","settings.providers.page.actions.hide":"Masquer","settings.providers.page.actions.edit":"Modifier","settings.providers.page.actions.disconnect":"Déconnecter","settings.providers.page.actions.hideAll":"Tout masquer","settings.providers.page.actions.showAll":"Afficher tout","settings.providers.page.toast.authMethodsLoadFailed":"Échec du chargement des méthodes d'authentification du fournisseur","settings.providers.page.toast.providerSourcesLoadFailed":"Échec du chargement des sources du fournisseur","settings.providers.page.toast.apiKeyRequired":"La clé API est requise","settings.providers.page.toast.apiKeySaveFailed":"Échec de l'enregistrement de la clé API","settings.providers.page.toast.apiKeySaved":"Clé API enregistrée","settings.providers.page.toast.oauthStartFailed":"Échec du démarrage du flux OAuth","settings.providers.page.toast.oauthDetailsMissing":"Aucun détail OAuth renvoyé","settings.providers.page.toast.oauthCompleteFailed":"Échec de la réalisation du flux OAuth","settings.providers.page.toast.oauthCompleted":"Connexion OAuth terminée","settings.providers.page.toast.externalConnected":"Connecté avec des identifiants externes","settings.providers.page.toast.externalConnectFailed":"Impossible de se connecter avec des identifiants externes","settings.providers.page.toast.oauthLinkCopied":"Lien OAuth copié","settings.providers.page.toast.oauthLinkCopyFailed":"Échec de la copie du lien OAuth","settings.providers.page.toast.deviceCodeCopied":"Code de l'appareil copié","settings.providers.page.toast.deviceCodeCopyFailed":"Échec de la copie du code de l'appareil","settings.providers.page.toast.providerDisconnected":"Fournisseur déconnecté","settings.providers.page.toast.providerDisconnectFailed":"Échec de la déconnexion du fournisseur","settings.providers.page.toast.customProviderSaved":"{provider} connecté","settings.providers.page.toast.customProviderSaveFailed":"Échec de l’enregistrement du fournisseur personnalisé","settings.mcp.page.header.newServer":"Nouveau serveur MCP","settings.mcp.page.header.configureNewServer":"Configurer un nouveau serveur MCP","settings.mcp.page.header.transport":"Transport {type}","settings.mcp.page.transport.local":"Local · stdio","settings.mcp.page.transport.remote":"À distance · SSE","settings.mcp.page.status.label.connected":"Connecté","settings.mcp.page.status.label.failed":"Échoué","settings.mcp.page.status.label.needsAuth":"Nécessite une authentification","settings.mcp.page.status.label.needsRegistration":"Nécessite une inscription","settings.mcp.page.status.description.connected":"Connecté et prêt pour OpenCode pour découvrir des outils et des ressources.","settings.mcp.page.status.description.failedDefault":"OpenCode n'a pas pu atteindre ce serveur MCP.","settings.mcp.page.status.description.needsAuth":"Ce serveur MCP distant nécessite une autorisation avant de pouvoir se connecter.","settings.mcp.page.status.description.needsClientRegistrationDefault":"Ce serveur MCP distant nécessite l'enregistrement du client avant que l'autorisation puisse être effectuée.","settings.mcp.page.status.description.disabled":"Ce serveur MCP est désactivé en configuration.","settings.mcp.page.status.description.blockedByPolicy":"Une règle de votre configuration OpenCode bloque ce serveur, donc OpenCode ne le démarre pas. Modifiez la règle integration.use pour l'autoriser.","settings.mcp.page.status.description.default":"Actualisez ou testez la connexion pour charger l’état d’exécution en direct.","settings.mcp.page.status.runtimeStatus":"Statut d'exécution","settings.mcp.page.status.projectScopedTo":"Projet limité à {directory}","settings.mcp.page.status.userScoped":"Configuration à l'échelle de l'utilisateur","settings.mcp.page.status.activeProject":"le projet actif","settings.mcp.page.actions.connect":"Connecter","settings.mcp.page.actions.disconnect":"Déconnecter","settings.mcp.page.actions.authorize":"Autoriser","settings.mcp.page.actions.reauthorize":"Réautoriser","settings.mcp.page.actions.clearAuth":"Effacer l'authentification","settings.mcp.page.actions.test":"Tester","settings.mcp.page.actions.testConnection":"Tester la connexion","settings.mcp.page.actions.working":"En cours...","settings.mcp.page.actions.starting":"Démarrage...","settings.mcp.page.actions.clearing":"Effacement...","settings.mcp.page.actions.testing":"Test...","settings.mcp.page.actions.completing":"Finalisation...","settings.mcp.page.actions.completeAuthorization":"Terminer l’autorisation","settings.mcp.page.actions.openInBrowser":"Ouvrir dans le navigateur","settings.mcp.page.actions.copyLink":"Copier le lien","settings.mcp.page.actions.deleting":"Suppression…","settings.mcp.page.auth.authorizationUrl":"URL d’autorisation","settings.mcp.page.auth.manualFallbackTitle":"Autorisation manuelle de secours","settings.mcp.page.auth.manualFallbackDescription":"Si le navigateur revient sur une autre machine ou affiche une URL de rappel avec un code, collez cette URL complète ou le code brut ici.","settings.mcp.page.auth.callbackInputPlaceholder":"Collez l’URL de rappel ou le code d'autorisation","settings.mcp.page.auth.waitingForOpenCode":"En attente de la détection par OpenCode du flux d'autorisation terminé dans le navigateur...","settings.mcp.page.server.title":"Serveur","settings.mcp.page.server.name":"Nom du serveur","settings.mcp.page.server.namePlaceholder":"mon-serveur-mcp","settings.mcp.page.server.importJson":"Importer à partir de l'extrait de code JSON","settings.mcp.page.server.importJsonTitle":"Importer une configuration complète du serveur MCP à partir d'un extrait de code JSON","settings.mcp.page.server.enable":"Activer le serveur","settings.mcp.page.server.enableAria":"Activer le serveur","settings.mcp.page.server.transportMode":"Mode de transport","settings.mcp.page.connection.command":"Commande","settings.mcp.page.connection.serverUrl":"URL du serveur","settings.mcp.page.connection.serverUrlPlaceholder":"https://mcp.example.com/mcp","settings.mcp.page.connection.pasteCommand":"Coller la commande","settings.mcp.page.connection.pasteCommandTitle":"Collez une commande locale à partir du presse-papiers et divisez-la automatiquement","settings.mcp.page.connection.previewArgs":"Aperçu (arguments {count})","settings.mcp.page.advanced.title":"Avancé","settings.mcp.page.advanced.configure":"Configurer les options avancées","settings.mcp.page.advanced.autoDetect":"Détection automatique","settings.mcp.page.advanced.custom":"Personnalisé","settings.mcp.page.advanced.headers":"En-têtes","settings.mcp.page.advanced.requestHeaders":"En-têtes de demande","settings.mcp.page.advanced.headerNamePlaceholder":"Nom de l'en-tête","settings.mcp.page.advanced.pasteHeaders":"Coller les en-têtes","settings.mcp.page.advanced.pasteHeadersTitle":"Coller les lignes d'en-tête KEY=VALUE du presse-papiers","settings.mcp.page.advanced.oauthAutoDetection":"Activer la détection automatique OAuth","settings.mcp.page.advanced.oauthAutoDetectionAria":"Activer la détection automatique OAuth","settings.mcp.page.advanced.oauthClientIdPlaceholder":"ID client OAuth","settings.mcp.page.advanced.oauthClientSecretPlaceholder":"Secret client OAuth","settings.mcp.page.advanced.oauthScopesPlaceholder":"Portées (délimitées par des espaces)","settings.mcp.page.advanced.oauthRedirectUriPlaceholder":"URI de redirection","settings.mcp.page.advanced.oauthHint":"Laissez ces champs vides pour permettre à OpenCode de déduire les paramètres OAuth du serveur MCP.","settings.mcp.page.advanced.oauthCallbackHint":"L'autorisation MCP basée sur le navigateur utilise ce rappel URL lorsque l'URI de redirection est vide :","settings.mcp.page.env.title":"Variables d'environnement","settings.mcp.page.env.key":"Clé","settings.mcp.page.env.value":"Valeur","settings.mcp.page.env.valuePlaceholder":"valeur","settings.mcp.page.env.hide":"Masquer","settings.mcp.page.env.show":"Afficher","settings.mcp.page.env.addVariable":"Ajouter une variable","settings.mcp.page.env.addEnvironmentVariable":"Ajouter une variable d'environnement","settings.mcp.page.env.keyPlaceholder":"API_KEY","settings.mcp.page.env.pasteEnv":"Coller .env","settings.mcp.page.env.pasteEnvTitle":"Coller les lignes KEY=VALUE du presse-papiers","settings.mcp.page.env.plainTextWarning":"⚠ Les valeurs sont stockées sous forme de texte brut dans opencode.json","settings.mcp.page.env.removeVariableAria":"Supprimer une variable","settings.mcp.page.importDialog.title":"Importer l’extrait JSON","settings.mcp.page.importDialog.description":"Collez un extrait complet de MCP JSON à partir de la documentation ou d'un autre fichier de configuration. Les valeurs analysées rempliront ce formulaire pour examen avant de les enregistrer.","settings.mcp.page.importDialog.pasteFromClipboard":"Coller le JSON depuis le presse-papiers","settings.mcp.page.deleteDialog.title":"Supprimer « {name} » ?","settings.mcp.page.deleteDialog.descriptionPrefix":"Cela supprime le serveur de","settings.mcp.page.deleteDialog.descriptionSuffix":"OpenCode devra recharger.","settings.mcp.page.toast.clipboardReadFailed":"Impossible de lire le presse-papier","settings.mcp.page.toast.configImported":"Configuration MCP importée","settings.mcp.page.toast.nameRequired":"Le nom est requis","settings.mcp.page.toast.serverNameExists":"Un serveur portant ce nom existe déjà","settings.mcp.page.toast.localCommandRequired":"La commande ne peut pas être vide pour un serveur local","settings.mcp.page.toast.remoteUrlRequired":"URL ne peut pas être vide pour un serveur distant","settings.mcp.page.toast.serverCreatedReloadFailed":"Le serveur MCP a été créé, mais le rechargement du OpenCode a échoué.","settings.mcp.page.toast.savedReloadFailed":"Enregistré, mais le rechargement du OpenCode a échoué.","settings.mcp.page.toast.retryRefreshHint":"Réessayez d'actualiser ou de rouvrir les paramètres avant d'autoriser ce serveur.","settings.mcp.page.toast.serverCreatedReloading":"Serveur MCP créé. Rechargement du OpenCode…","settings.mcp.page.toast.saveFailed":"Échec de l'enregistrement","settings.mcp.page.toast.unexpectedError":"Une erreur s'est produite","settings.mcp.page.toast.serverDeletedReloadFailed":'"{name}" supprimé, mais le rechargement du OpenCode a échoué',"settings.mcp.page.toast.refreshListIfStale":"Actualisez la liste MCP si l'interface utilisateur semble obsolète.","settings.mcp.page.toast.serverDeleted":'"{name}" supprimé',"settings.mcp.page.toast.deleteFailed":"Échec de la suppression","settings.mcp.page.toast.disconnected":"Déconnecté","settings.mcp.page.toast.connected":"Connecté","settings.mcp.page.toast.connectionNeedsAuthorization":"La connexion nécessite une autorisation","settings.mcp.page.toast.connectionNeedsClientRegistration":"La connexion nécessite l'enregistrement du client","settings.mcp.page.toast.connectionFailed":"La connexion a échoué","settings.mcp.page.toast.connectionAttemptFinished":"Tentative de connexion terminée. Actualisez le statut pour plus de détails.","settings.mcp.page.toast.createServerBeforeLiveActions":"Créez le serveur avant d'exécuter des actions en direct","settings.mcp.page.toast.refreshStatusFailed":"Échec de l'actualisation du statut du MCP","settings.mcp.page.toast.oauthRedirectUrlBuildFailed":"Impossible de créer l’URL de redirection OAuth MCP","settings.mcp.page.toast.oauthBrowserCallbackSaveFailed":"Échec de l'enregistrement de l’URL de rappel du navigateur pour l'autorisation MCP","settings.mcp.page.toast.openCodeReloadFailedAfterCallbackSave":"Le rechargement d’OpenCode a échoué après l'enregistrement de l’URL de rappel du navigateur","settings.mcp.page.toast.completeAuthorizationInBrowserWithPaste":"Terminez le flux d'autorisation MCP dans votre navigateur, puis collez ici le code renvoyé ou l’URL de rappel","settings.mcp.page.toast.completeAuthorizationInBrowser":"Complétez le flux d'autorisation MCP dans votre navigateur","settings.mcp.page.toast.openAuthorizationUrlFailed":"Impossible d'ouvrir automatiquement l’URL d’autorisation","settings.mcp.page.toast.authorizationStartFailed":"Échec du démarrage de l'autorisation","settings.mcp.page.toast.authSessionExpired":"La session d'autorisation a expiré ou a été effacée lors du rechargement. Cliquez à nouveau sur Autoriser.","settings.mcp.page.toast.savedAuthorizationRemoved":"L'autorisation MCP enregistrée a été supprimée","settings.mcp.page.toast.clearAuthorizationFailed":"Échec de la suppression de l’autorisation","settings.mcp.page.toast.authorizationUrlCopied":"URL d’autorisation copiée","settings.mcp.page.toast.authorizationUrlCopyFailed":"Échec de la copie de l’URL d’autorisation","settings.mcp.page.toast.pasteCallbackOrCodeFirst":"Collez d'abord l’URL de rappel ou le code d'autorisation","settings.mcp.page.toast.missingServerDetails":"Détails du serveur MCP manquants. Sélectionnez à nouveau le serveur ou collez l’URL de rappel complète.","settings.mcp.page.toast.authorizationCompleted":"Autorisation MCP terminée","settings.mcp.page.toast.authorizationCompletedFor":"Autorisation MCP complétée pour {name}","settings.mcp.page.toast.authorizationCompleteFailed":"Échec de l'autorisation MCP","settings.mcp.page.toast.enableServerBeforeTest":"Activez ce serveur avant de tester la connexion","settings.mcp.page.toast.connectionTestSucceeded":"Test de connexion réussi","settings.mcp.page.toast.connectionTestFailed":"Le test de connexion a échoué","settings.mcp.page.toast.connectionTestFinished":"Test de connexion terminé. Actualisez le statut pour plus de détails.","settings.mcp.page.toast.authorizationFailed":"L'autorisation a échoué","settings.mcp.page.toast.authorizationStillInProgress":"L'autorisation est toujours en cours dans votre navigateur. Collez le rappel URL ou le code si nécessaire.","settings.mcp.page.toast.noKeyValuePairsFound":"Aucune paire KEY=VALUE trouvée dans le presse-papiers","settings.mcp.page.toast.importedVariablesCount":"Variables importées : {count}","settings.mcp.page.toast.pastedArgumentsCount":"Arguments collés : {count}","settings.shared.projectSelector.fallbackProject":"Projet","settings.shared.projectSelector.switchProjectAria":"Changer de projet","settings.shared.projectSelector.switchProjectTitle":"Changer de projet","settings.shared.projectSelector.sheetTitle":"Projet","settings.shared.projectSelector.searchPlaceholder":"Rechercher des projets...","settings.openchamber.defaults.title":"Paramètres par défaut de la session","settings.openchamber.defaults.summaryPrefix":"Les nouvelles sessions débuteront avec :","settings.openchamber.defaults.summaryOpenCodeDefault":"Agent OpenCode par défaut","settings.openchamber.defaults.field.defaultModel":"Modèle par défaut","settings.openchamber.defaults.field.defaultThinking":"Pensée par défaut","settings.openchamber.defaults.field.thinkingPlaceholder":"Pensée","settings.openchamber.defaults.field.defaultAgent":"Agent par défaut","settings.openchamber.defaults.field.showDeletionDialogAria":"Afficher la boîte de dialogue de suppression","settings.openchamber.defaults.field.sessionWarming":"Garder les sessions inactives au chaud","settings.openchamber.defaults.field.sessionWarmingInfo":"Certains fournisseurs oublient le contexte mis en cache d'une conversation après quelques minutes de silence : le message suivant est alors plus lent et plus cher. Avec cette option, OpenCode envoie une toute petite requête « OK » toutes les 4 minutes tant que la session est inactive, jusqu'à 30 minutes après votre dernier message. Chaque ping est facturé comme une petite requête. S'applique à tous les projets.","settings.openchamber.defaults.smallModel.title":"Petit modèle","settings.openchamber.defaults.smallModel.description":"Un modèle économique pour les tâches utilitaires rapides, comme les récapitulatifs et résumés courts.","settings.openchamber.defaults.smallModel.useDefault":"Utiliser le petit modèle par défaut","settings.openchamber.defaults.smallModel.useDefaultAria":"Utiliser le petit modèle par défaut","settings.openchamber.defaults.smallModel.overrideModel":"Modèle de remplacement","settings.openchamber.defaults.walkthroughModel.title":"Modèle du parcours des modifications","settings.openchamber.defaults.walkthroughModel.description":"La revue par IA de vos modifications exige une sortie structurée et de la place pour un diff entier, ce qu’un petit modèle économique ne fournit pas toujours. Les modèles que le catalogue déclare incapables de sortie structurée sont masqués ici. Sans choix explicite, le petit modèle est utilisé.","settings.openchamber.defaults.walkthroughModel.overrideModel":"Modèle du parcours","settings.openchamber.defaults.walkthroughModel.usesSmallModel":"Petit modèle","settings.openchamber.defaults.field.showDeletionDialog":"Afficher la boîte de dialogue de suppression","settings.openchamber.defaults.field.openFilesPreviewAria":"Ouvrir les fichiers prévisualisables en mode aperçu","settings.openchamber.defaults.field.openFilesPreview":"Ouvrir les fichiers prévisualisables en mode aperçu","settings.openchamber.defaults.option.default":"Défaut","settings.openchamber.defaults.option.defaultLowercase":"défaut","settings.openchamber.git.title":"Préférences Git","settings.openchamber.git.changesViewTitle":"Vue des modifications","settings.openchamber.git.changesViewAria":"Mode d'affichage des modifications Git","settings.openchamber.git.option.flatList":"Liste plate","settings.openchamber.git.option.treeView":"Vue arborescente","settings.openchamber.git.optionAria":"Mode d'affichage des modifications Git : {option}","settings.openchamber.git.enableGitmojiAria":"Activer le sélecteur Gitmoji","settings.openchamber.git.enableGitmoji":"Activer le sélecteur Gitmoji","settings.openchamber.git.showGitignoredAria":"Afficher les fichiers ignorés par Git","settings.openchamber.git.showGitignored":"Afficher les fichiers ignorés par Git","settings.github.page.tooltip.connectAccount":"Connectez un compte GitHub pour les PR et les workflows d’issues dans l'application.","settings.github.page.avatarAlt.withLogin":"Avatar {login}","settings.github.page.avatarAlt.fallback":"Avatar GitHub","settings.github.page.accountSource.oauth":"OAuth","settings.github.page.accountSource.cli":"CLI","settings.github.page.actions.connect":"Connecter GitHub","settings.github.page.actions.addAccount":"Ajouter un compte","settings.github.page.actions.openGithub":"Ouvrir GitHub","settings.github.page.status.notConnected":"Non connecté","settings.github.page.status.active":"Actif","settings.github.page.flow.title":"Autoriser OpenChamber","settings.github.page.flow.description":"Dans GitHub, saisissez le code suivant pour autoriser cet appareil :","settings.github.page.flow.waiting":"En attente d'approbation… (actualisation automatique)","settings.github.page.toast.startConnectFailed":"Échec du démarrage de la connexion GitHub","settings.github.page.toast.connected":"GitHub connecté","settings.github.page.toast.authorizationFailed":"L'autorisation GitHub a échoué","settings.github.page.toast.disconnected":"GitHub déconnecté","settings.github.page.toast.disconnectFailed":"Échec de la déconnexion de GitHub","settings.github.page.ghCli.title":"Jeton CLI GitHub","settings.github.page.ghCli.availableDescription":"Connecté avec la CLI gh. Pas utilisé tant que vous n’y basculez pas","settings.github.page.ghCli.disabledDescription":"Installé et masqué dans vos comptes","settings.github.page.ghCli.actions.disable":"Désactiver","settings.github.page.ghCli.actions.enable":"Activer","settings.github.page.toast.ghCliEnabled":"Compte gh CLI affiché","settings.github.page.toast.ghCliDisabled":"Compte gh CLI masqué","settings.github.page.toast.ghCliUpdateFailed":"Échec de la mise à jour du paramètre gh CLI","settings.notifications.page.delivery.title":"Envoi des notifications","settings.notifications.page.delivery.enableAria":"Activer les notifications","settings.notifications.page.delivery.enableLabel":"Activer les notifications","settings.notifications.page.delivery.focusedAria":"Notifier lorsque l'application est ciblée","settings.notifications.page.delivery.focusedLabel":"Notifier lorsque l'application est ciblée","settings.notifications.page.delivery.testAction":"Envoyer une notification de test","settings.notifications.page.delivery.browserPermissionHint":"Votre navigateur peut demander l'autorisation la première fois.","settings.notifications.page.delivery.permissionDenied":"Autorisation de notification refusée. Activez-la dans les paramètres de votre navigateur.","settings.notifications.page.delivery.permissionGrantedButDisabled":"Autorisation accordée, mais les notifications sont désactivées.","settings.notifications.page.delivery.vscodeHint":"Lorsqu'elles sont activées, les notifications sont envoyées via les notifications natives VS Code.","settings.notifications.page.events.title":"Événements de notification","settings.notifications.page.events.completionAria":"Achèvement de l'agent","settings.notifications.page.events.completionLabel":"Achèvement de l'agent","settings.notifications.page.events.subtaskAria":"Achèvement du sous-agent","settings.notifications.page.events.subtaskLabel":"Achèvement du sous-agent","settings.notifications.page.events.errorAria":"Erreurs d'agent","settings.notifications.page.events.errorLabel":"Erreurs d'agent","settings.notifications.page.events.questionAria":"Questions des agents","settings.notifications.page.events.questionLabel":"Questions aux agents","settings.notifications.page.template.title":"Modèles de notifications","settings.notifications.page.template.variablesLabel":"Variables :","settings.notifications.page.template.event.completion":"achèvement","settings.notifications.page.template.event.subtask":"Achèvement du sous-agent","settings.notifications.page.template.event.error":"erreur","settings.notifications.page.template.event.question":"question","settings.notifications.page.template.field.title":"Titre","settings.notifications.page.template.field.message":"Message","settings.notifications.page.template.defaults.completion.title":"{agent_name} est prêt","settings.notifications.page.template.defaults.completion.message":"{model_name} a terminé la tâche","settings.notifications.page.template.defaults.error.title":"Erreur d'outil","settings.notifications.page.template.defaults.error.message":"{last_message}","settings.notifications.page.template.defaults.question.title":"Entrée nécessaire","settings.notifications.page.template.defaults.question.message":"{last_message}","settings.notifications.page.template.defaults.subtask.title":"{agent_name} est prêt","settings.notifications.page.template.defaults.subtask.message":"{model_name} a terminé la tâche","settings.notifications.page.summary.title":"Résumé de l'IA","settings.notifications.page.summary.toggleAria":"Résumer le dernier message","settings.notifications.page.summary.toggleLabel":"Résumer le dernier message","settings.notifications.page.summary.requiresTemplateVariable":"Nécessite","settings.notifications.page.summary.modelLabel":"Modèle de synthèse","settings.notifications.page.summary.modelTooltip":"Utilisé pour les notifications et les résumés vocaux.","settings.notifications.page.summary.notSelected":"Non sélectionné","settings.notifications.page.summary.thresholdLabel":"Seuil","settings.notifications.page.summary.thresholdHint":"Les messages plus longs seront résumés","settings.notifications.page.summary.resetThresholdAria":"Réinitialiser le seuil","settings.notifications.page.summary.lengthLabel":"Longueur","settings.notifications.page.summary.lengthHint":"Longueur de caractères cible du résumé","settings.notifications.page.summary.resetLengthAria":"Réinitialiser la longueur du résumé","settings.notifications.page.summary.maxLengthLabel":"Longueur maximale","settings.notifications.page.summary.maxLengthHint":"Tronquer {last_message} à cette longueur","settings.notifications.page.summary.resetMaxLengthAria":"Réinitialiser la longueur maximale du message","settings.notifications.page.push.title":"Notifications push en arrière-plan","settings.notifications.page.push.enableAria":"Activer les notifications push","settings.notifications.page.push.enableLabel":"Activer les notifications push","settings.notifications.page.push.unsupportedHint":"Push non pris en charge. Desktop Chrome/Edge et Android prennent en charge le push. iOS nécessite une PWA installée.","settings.notifications.page.push.supportedHint":"Recevez des alertes via le service en arrière-plan de votre système d'exploitation","settings.notifications.page.push.loadingAria":"Chargement","settings.notifications.page.toast.permissionDenied.title":"Autorisation de notification refusée","settings.notifications.page.toast.permissionDenied.description":"Veuillez activer les notifications dans les paramètres de votre navigateur.","settings.notifications.page.toast.permissionDenied.enableInBrowser":"Activez les notifications dans les paramètres de votre navigateur.","settings.notifications.page.toast.requestPermissionFailed":"Échec de la demande d'autorisation de notification","settings.notifications.page.toast.notificationsApiUnavailable":"API Notifications indisponible","settings.notifications.page.toast.testNotificationSent":"Notification de test envoyée avec succès","settings.notifications.page.toast.testNotificationFailed":"Échec de l'envoi de la notification de test","settings.notifications.page.toast.pushUnsupported":"Notifications push non prises en charge","settings.notifications.page.toast.pushApiUnavailable":"API Push indisponible","settings.notifications.page.toast.pushKeyLoadFailed":"Échec du chargement de la clé Push","settings.notifications.page.toast.enableBackgroundFailed":"Échec de l'activation des notifications en arrière-plan","settings.notifications.page.toast.backgroundEnabled":"Notifications en arrière-plan activées","settings.notifications.page.toast.backgroundDisabled":"Notifications en arrière-plan désactivées","settings.notifications.page.testNotification.title":"Avis de test","settings.notifications.page.testNotification.body":"Il s'agit d'une notification de test de OpenChamber.","settings.voice.page.section.speechRecognition":"Reconnaissance vocale","settings.voice.page.field.enableVoiceInput":"Activer la saisie vocale","settings.voice.page.field.enableVoiceInputAria":"Activer la saisie vocale (dictée)","settings.voice.page.section.playbackAndSummary":"Lecture","settings.voice.page.field.provider":"Fournisseur","settings.voice.page.provider.browser":"Navigateur","settings.voice.page.provider.openai":"OpenAI","settings.voice.page.provider.custom":"Personnalisé","settings.voice.page.provider.say":"Dire","settings.voice.page.provider.server":"Serveur","settings.voice.page.provider.local":"Local","settings.voice.page.tooltip.sttLocal":"Transcription locale sur le serveur OpenChamber. Les modèles se téléchargent automatiquement ; aucune clé d'API requise.","settings.voice.page.tooltip.localTts":"Synthèse locale sur le serveur OpenChamber (Kokoro pour l’anglais ; les modèles des autres langues sont téléchargés à la première utilisation). Aucune clé API requise.","settings.voice.page.field.followTextLanguage":"Adapter la voix à la langue du texte","settings.voice.page.field.followTextLanguageAria":"Adapter la voix à la langue du texte","settings.voice.page.field.followTextLanguageInfo":"Si une réponse est dans une autre langue, une voix pour cette langue est utilisée : une voix macOS adaptée ou un modèle local téléchargé à la première utilisation.","settings.voice.page.stt.model.parakeetV2":"Parakeet v2 (anglais)","settings.voice.page.stt.model.parakeetV3":"Parakeet v3 (25 langues européennes)","settings.voice.page.stt.model.whisperBase":"Whisper base (multilingue)","settings.voice.page.stt.model.whisperTiny":"Whisper tiny (multilingue)","settings.voice.page.stt.badge.bestForEnglish":"Idéal pour l’anglais","settings.voice.page.stt.badge.bestForMultilingual":"Idéal multilingue","settings.voice.page.stt.meta.accuracy":"Précision","settings.voice.page.stt.meta.speed":"Vitesse","settings.voice.page.stt.modelInstalled":"Modèle installé","settings.voice.page.stt.modelDownloading":"Téléchargement du modèle...","settings.voice.page.stt.modelDownloadingProgress":"Téléchargement du modèle... {percent}%","settings.voice.page.stt.modelNotInstalled":"Modèle non téléchargé","settings.voice.page.stt.modelDownload":"Télécharger","settings.voice.page.stt.modelDelete":"Supprimer le modèle","settings.voice.page.stt.modelRetry":"Réessayer","settings.voice.page.localTts.availableToDownload":"Disponibles au téléchargement","settings.voice.page.localTts.filterPlaceholder":"Filtrer par langue ou description","settings.voice.page.localTts.filterNoMatch":"Aucun modèle ne correspond au filtre","settings.voice.page.provider.wasm":"Local","settings.voice.page.stt.wasmModel":"Modèle Whisper","settings.voice.page.stt.wasmLoaded":"Modèle chargé, prêt","settings.voice.page.stt.wasmDownloading":"Téléchargement du modèle...","settings.voice.page.stt.wasmLoading":"Chargement du modèle...","settings.voice.page.stt.wasmNotLoaded":"Le modèle se chargera lors de la première utilisation vocale","settings.voice.page.stt.wasmDownload":"Charger","settings.voice.page.stt.wasmRetry":"Réessayer","settings.voice.page.tooltip.browser":"Gratuit, hors ligne, prise en charge mobile limitée.","settings.voice.page.tooltip.openai":"Haute qualité, prêt pour le mobile, nécessite une clé API.","settings.voice.page.tooltip.custom":"Serveur compatible OpenAI (par exemple Kokoro).","settings.voice.page.tooltip.say":"Natif macOS. Rapide, gratuit, hors ligne.","settings.voice.page.tooltip.sttBrowser":"Web Speech API (Chrome/Edge). Gratuit, aucune configuration.","settings.voice.page.tooltip.sttServer":"Serveur Whisper compatible OpenAI. Une meilleure précision, dans n’importe quelle langue.","settings.voice.page.field.apiKey":"Clé API","settings.voice.page.field.apiKeyHintUsingConfig":"Utiliser la clé de la configuration","settings.voice.page.field.apiKeyHintRequired":"OpenAI TTS nécessite une clé API","settings.voice.page.enterpriseMode":"En mode entreprise, la lecture à voix haute reste sur cette machine : utilisez une voix locale ou un serveur personnalisé qui tourne ici.","settings.voice.page.field.apiKeyHintProvide":"Fournissez votre clé OpenAI","settings.voice.page.field.apiKeySavedPlaceholder":"Enregistrée sur le serveur","settings.voice.page.field.apiKeyRemove":"Supprimer la clé enregistrée","settings.voice.page.field.apiKeyOptional":"Facultatif","settings.voice.page.toast.apiKeySaveFailed":"Impossible d’enregistrer la clé","settings.voice.page.field.serverUrl":"URL du serveur","settings.voice.page.field.serverUrlHint":"URL de base du serveur TTS compatible OpenAI","settings.voice.page.field.model":"Modèle","settings.voice.page.field.voice":"Voix","settings.voice.page.field.voiceIdentifierHint":"Identifiant vocal pris en charge par le serveur","settings.voice.page.field.configuredAbove":"Configuré ci-dessus","settings.voice.page.actions.preview":"Aperçu","settings.voice.page.field.selectVoicePlaceholder":"Sélectionnez la voix","settings.voice.page.field.auto":"Auto","settings.voice.page.field.speechRate":"Taux de parole","settings.voice.page.field.speechPitch":"Hauteur de la voix","settings.voice.page.field.speechVolume":"Volume de la parole","settings.voice.page.field.language":"Langue","settings.voice.page.field.selectLanguagePlaceholder":"Sélectionnez la langue","settings.voice.page.field.sttBrowserSupportError":"MediaRecorder ou AudioContext ne sont pas disponibles dans ce navigateur. Le serveur STT peut ne pas fonctionner.","settings.voice.page.field.sttServerUrlHint":"URL de base du serveur compatible Whisper","settings.voice.page.field.sttLanguageHint":"Code BCP-47 (par exemple en, fr). Laissez vide pour la détection automatique.","settings.voice.page.field.silenceThreshold":"Seuil de silence","settings.voice.page.field.silenceHold":"Maintien du silence","settings.voice.page.field.transcribeOnStopAria":"Transcrire à l'arrêt de l'enregistrement","settings.voice.page.field.transcribeOnStop":"Transcrire à l'arrêt","settings.voice.page.field.millisecondsUnit":"ms","settings.voice.page.field.messageReadAloudButtonAria":"Bouton de lecture du message à voix haute","settings.voice.page.field.messageReadAloudButton":"Bouton Message lu à haute voix","settings.voice.page.field.summarizeBeforePlaybackAria":"Résumer avant la lecture","settings.voice.page.field.summarizeBeforePlayback":"Résumer avant la lecture","settings.voice.page.field.summarizeVoiceModeResponsesAria":"Résumer les réponses en mode vocal","settings.voice.page.field.summarizeVoiceModeResponses":"Résumer les réponses en mode vocal","settings.voice.page.field.summarizationThreshold":"Seuil de synthèse","settings.voice.page.field.summaryMaxLength":"Longueur maximale du résumé","settings.voice.page.hint.shiftClickPrefix":"Appuyez","settings.voice.page.hint.shiftClickSuffix":"sur le bouton du micro pour basculer en mode continu","settings.voice.page.preview.browserVoiceFallback":"la voix de votre navigateur","settings.voice.page.preview.voiceLine":"Bonjour! Je m'appelle {voiceName}. C'est ainsi que je parle.","settings.voice.page.preview.customServerLine":"Bonjour! Ceci est un aperçu du serveur TTS personnalisé.","settings.openchamber.visual.section.colorMode":"Mode couleur","settings.openchamber.visual.section.colorModeAndTheme":"Mode couleur et thème","settings.openchamber.visual.section.localization":"Localisation","settings.openchamber.visual.section.spacingAndLayout":"Espacement et disposition","settings.openchamber.visual.section.densityAndType":"Densité et typographie","settings.openchamber.visual.section.appInstall":"Installation de l’app","settings.openchamber.visual.section.navigation":"Navigation","settings.openchamber.visual.section.chatRenderMode":"Mode de rendu du chat","settings.openchamber.visual.section.chatRenderModeAria":"Mode de rendu du chat","settings.openchamber.visual.section.chatDisplay":"Affichage","settings.openchamber.visual.section.chatMessageOptions":"Options des messages","settings.openchamber.visual.section.chatFeatures":"Fonctionnalités","settings.openchamber.visual.section.messageStreamTransport":"Transport de flux de messages","settings.openchamber.visual.section.activityDefault":"Activité par défaut","settings.openchamber.visual.section.activityDefaultAria":"Mode d'activité par défaut","settings.openchamber.visual.section.sessionActivity":"Activité de session","settings.openchamber.visual.section.showToolsOpenedByDefault":"Afficher les outils ouverts par défaut","settings.openchamber.visual.section.sessionAssistance":"Assistance de session","settings.openchamber.visual.section.reasoning":"Raisonnement","settings.openchamber.visual.section.streaming":"Streaming","settings.openchamber.visual.field.streamingAutoFollow":"Suivre le nouveau contenu pendant le streaming","settings.openchamber.visual.field.streamingAutoFollowAria":"Suivre automatiquement le nouveau contenu pendant la diffusion d’une réponse","settings.openchamber.visual.field.streamingAutoFollowInfo":"Pendant qu’une réponse arrive, la vue glisse vers le contenu le plus récent. Désactivez pour garder la vue immobile et défiler manuellement ; envoyer un message depuis le milieu de la conversation laisse alors aussi la vue en place.","settings.openchamber.visual.field.animatedActivityIndicators":"Indicateurs d'activité animés","settings.openchamber.visual.field.animatedActivityIndicatorsAria":"Afficher un indicateur animé sur les sessions en cours d'exécution","settings.openchamber.visual.field.animatedActivityIndicatorsInfo":"Les sessions en cours affichent un indicateur animé au lieu de leur icône d'état statique. L'indicateur se met à jour 20 fois par seconde et consomme plus d'énergie que l'icône. Cette animation est lue même si Réduire les animations est activé.","settings.openchamber.visual.section.messageAppearance":"Apparence des messages","settings.openchamber.visual.section.toolsAndFiles":"Outils et fichiers","settings.openchamber.visual.section.composer":"Zone de saisie","settings.openchamber.visual.section.userMessageRendering":"Rendu des messages utilisateur","settings.openchamber.visual.section.userMessageRenderingAria":"Mode de rendu des messages utilisateur","settings.openchamber.visual.section.mermaidRendering":"Rendu Mermaid","settings.openchamber.visual.section.mermaidRenderingAria":"Mode de rendu Mermaid","settings.openchamber.visual.section.diffLayout":"Disposition du diff","settings.openchamber.visual.section.diffLayoutAria":"Disposition du diff","settings.openchamber.visual.section.privacy":"Confidentialité","settings.openchamber.visual.field.lightTheme":"Thème clair","settings.openchamber.visual.field.darkTheme":"Thème sombre","settings.openchamber.visual.field.selectLightThemeAria":"Sélectionnez le thème clair","settings.openchamber.visual.field.selectDarkThemeAria":"Sélectionnez un thème sombre","settings.openchamber.visual.field.selectThemePlaceholder":"Sélectionner un thème","settings.openchamber.visual.field.searchThemes":"Rechercher des thèmes...","settings.openchamber.visual.field.noThemesFound":"Aucun thème trouvé.","settings.openchamber.visual.field.timeFormat":"Format de l'heure","settings.openchamber.visual.field.weekStartsOn":"La semaine commence le","settings.openchamber.visual.field.selectTimeFormatAria":"Sélectionnez le format de l'heure","settings.openchamber.visual.field.selectWeekStartAria":"Sélectionnez le début de la semaine","settings.openchamber.visual.actions.reloadThemes":"Recharger les thèmes","settings.openchamber.visual.actions.reloadingThemes":"Rechargement des thèmes...","settings.openchamber.visual.field.themeImportInfoAria":"Informations sur l'importation du thème","settings.openchamber.visual.field.themeImportInfoTooltip":"Importez des thèmes personnalisés depuis ~/.config/openchamber/themes/","settings.openchamber.visual.field.installAppName":"Nom de l’application installée","settings.openchamber.visual.field.installAppNameHint":"Utilisé par le processus d'installation de PWA.","settings.openchamber.visual.field.pwaInstallAppNameAria":"Nom de l’application installée comme PWA","settings.openchamber.visual.actions.resetInstallAppNameAria":"Réinitialiser le nom de l'application d'installation","settings.openchamber.visual.field.installOrientation":"Orientation de l'installation","settings.openchamber.visual.field.installOrientationHint":"Utilisé par l'application Web installée. Réinstallez la PWA après avoir modifié cela.","settings.openchamber.visual.field.pwaInstallOrientationAria":"Orientation d'installation de la PWA","settings.openchamber.visual.field.selectOrientationPlaceholder":"Sélectionner l'orientation","settings.openchamber.visual.actions.resetInstallOrientationAria":"Réinitialiser l'orientation d'installation","settings.openchamber.visual.field.mobileKeyboardMode":"Comportement du clavier mobile","settings.openchamber.visual.field.mobileKeyboardModeHint":"Le comportement par défaut du navigateur est le plus sûr. Redimensionner le contenu demande aux navigateurs pris en charge de réduire l'application lorsque le clavier à l'écran s'ouvre.","settings.openchamber.visual.field.mobileKeyboardModeAria":"Comportement du clavier mobile","settings.openchamber.visual.field.selectMobileKeyboardModePlaceholder":"Sélectionner le comportement du clavier","settings.openchamber.visual.actions.resetMobileKeyboardModeAria":"Réinitialiser le comportement du clavier mobile","settings.openchamber.visual.field.interfaceFontSize":"Taille de la police de l'interface","settings.openchamber.visual.field.interfaceFont":"Police d'interface","settings.openchamber.visual.field.selectInterfaceFontAria":"Sélectionnez la police de l'interface","settings.openchamber.visual.actions.resetInterfaceFontAria":"Réinitialiser la police de l'interface","settings.openchamber.visual.field.fontSizePercentageAria":"Pourcentage de taille de police","settings.openchamber.visual.actions.resetFontSizeAria":"Réinitialiser la taille de la police","settings.openchamber.visual.field.terminalFontSize":"Taille de la police du terminal","settings.openchamber.visual.field.terminalShell":"Shell du terminal","settings.openchamber.visual.field.terminalShellAria":"Sélectionner le shell du terminal","settings.openchamber.visual.field.terminalShellHint":"Redémarrez le terminal pour appliquer cette modification à la session actuelle.","settings.openchamber.visual.field.terminalLoginShell":"Démarrer comme shell de connexion","settings.openchamber.visual.option.terminalShell.auto":"Automatique","settings.openchamber.visual.field.editorFontSize":"Taille de la police de l'éditeur","settings.openchamber.visual.field.codeFont":"Police de code","settings.openchamber.visual.field.webFontsEnterprise":"Le mode entreprise utilise les polices du système : les autres se chargent depuis un CDN public.","settings.openchamber.visual.field.selectCodeFontAria":"Sélectionnez la police du code","settings.openchamber.visual.actions.resetCodeFontAria":"Réinitialiser la police du code","settings.openchamber.visual.actions.resetTerminalFontSizeAria":"Réinitialiser la taille de la police du terminal","settings.openchamber.visual.actions.resetEditorFontSizeAria":"Réinitialiser la taille de la police de l'éditeur","settings.openchamber.visual.field.spacingDensity":"Densité d'espacement","settings.openchamber.visual.actions.resetSpacingAria":"Réinitialiser l'espacement","settings.openchamber.visual.field.inputBarOffset":"Décalage de la barre d'entrée","settings.openchamber.visual.field.inputBarOffsetTooltip":"Augmentez la barre de saisie pour éviter les obstructions de l'écran au niveau du système d'exploitation, comme les barres d'accueil.","settings.openchamber.visual.actions.resetInputBarOffsetAria":"Réinitialiser le décalage de la barre d'entrée","settings.openchamber.visual.field.terminalQuickKeysAria":"Touches rapides du terminal","settings.openchamber.visual.field.terminalQuickKeys":"Touches rapides du terminal","settings.openchamber.visual.field.sessionTabsGroup":"Onglets de session","settings.openchamber.visual.field.sessionTabs":"Afficher les sessions sous forme d'onglets dans l'en-tête","settings.openchamber.visual.field.sessionTabsAria":"Basculer les onglets de session dans l'en-tête","settings.openchamber.visual.field.sessionTabsInfo":"Les sessions ouvertes s'alignent en onglets dans l'en-tête. Désactivé, l'en-tête n'affiche que le titre de la session.","settings.openchamber.visual.field.terminalQuickKeysTooltip":"Afficher Esc, Ctrl, Flèches dans la vue du terminal","settings.openchamber.visual.field.activityDefaultModeAria":"Mode d'activité par défaut : {option}","settings.openchamber.visual.field.showExpandedBashToolsAria":"Afficher les outils bash étendus","settings.openchamber.visual.field.showExpandedEditToolsAria":"Afficher les outils d'édition étendus","settings.openchamber.visual.field.bash":"Bash","settings.openchamber.visual.field.editTools":"Outils d'édition","settings.openchamber.visual.field.userMessageRenderingAria":"Rendu du message utilisateur : {option}","settings.openchamber.visual.field.mermaidRenderingAria":"Rendu Mermaid : {option}","settings.openchamber.visual.field.diffLayoutAria":"Disposition des différences : {option}","settings.openchamber.visual.field.sessionRecap":"Générer le récapitulatif de session","settings.openchamber.visual.field.sessionRecapAria":"Générer un récapitulatif quand l'agent termine","settings.openchamber.visual.field.sessionSuggestion":"Générer une suggestion de prochain message utilisateur","settings.openchamber.visual.field.sessionSuggestionAria":"Générer un prochain message utilisateur suggéré quand l'agent termine","settings.openchamber.visual.field.sessionReviewOffer":"Proposer de relire les modifications","settings.openchamber.visual.field.sessionReviewOfferInfo":"Après un tour qui a modifié le projet, propose au-dessus du champ de message une revue IA ou une visite guidée des modifications.","settings.openchamber.visual.field.sessionGoal":"Activer les objectifs de session","settings.openchamber.visual.field.sessionGoalAria":"Faire travailler la session automatiquement vers un objectif","settings.openchamber.visual.goal.sectionTitle":"Objectif","settings.openchamber.visual.goal.maxTurnsLabel":"Limite de tours","settings.openchamber.visual.goal.maxTurnsInfo":"Après ce nombre de tours automatiques, l’objectif s’arrête et vous rend la main, terminé ou non. 20 par défaut.","settings.openchamber.visual.goal.maxTurnsResetAria":"Réinitialiser la limite de tours à 20","settings.openchamber.visual.goal.budgetLabel":"Budget de tokens par défaut","settings.openchamber.visual.goal.budgetAria":"Appliquer un budget de tokens par défaut aux nouveaux objectifs","settings.openchamber.visual.goal.description":"Armez le bouton cible du composeur et le prochain message devient un objectif : l'agent continue d'y travailler automatiquement, même en votre absence, et sa progression est vérifiée après chaque tour.","settings.openchamber.visual.goal.checkerLabel":"Vérification de la progression","settings.openchamber.visual.goal.checkerInfo":"Après chaque tour, le rapport de l'agent est lu pour décider si l'objectif est atteint, vous attend ou doit continuer. Jev décide en moins d'une seconde ; le petit modèle tourne sur le fournisseur de la session et prend le relais quand Jev ne peut pas répondre.","settings.openchamber.visual.goal.checker.smallModel":"Petit modèle","settings.openchamber.visual.goal.checker.viaSmallModel":"Chaque tour est vérifié par le petit modèle.","settings.openchamber.visual.goal.checker.jevMissing":"Aucun fournisseur de classification n'est configuré pour Jev : le petit modèle vérifie donc chaque tour.","settings.openchamber.visual.goal.checker.smallModelLink":"Paramètres du petit modèle","settings.openchamber.visual.field.showReasoningTracesAria":"Afficher les traces de raisonnement","settings.openchamber.visual.field.showReasoningTraces":"Afficher les traces de raisonnement","settings.openchamber.visual.field.collapsibleThinkingBlocksAria":"Activer les blocs de raisonnement pliables","settings.openchamber.visual.field.collapsibleThinkingBlocks":"Activer les blocs de raisonnement pliables","settings.openchamber.visual.field.expandReasoningWhileStreaming":"Déplier le raisonnement pendant le streaming","settings.openchamber.visual.field.expandReasoningWhileStreamingAria":"Déplier les blocs de raisonnement pendant que le modèle réfléchit","settings.openchamber.visual.field.expandReasoningWhileStreamingInfo":"Affiche le raisonnement du modèle et le résumé de compaction au fil de l'eau. Désactivé, ces blocs restent repliés et s'ouvrent d'un clic.","settings.openchamber.visual.field.collapsibleUserMessagesAria":"Réduire les longs messages utilisateur","settings.openchamber.visual.field.collapsibleUserMessages":"Réduire les longs messages utilisateur","settings.openchamber.visual.field.stickyUserHeaderAria":"En-tête utilisateur collant","settings.openchamber.visual.field.stickyUserHeader":"En-tête utilisateur collant","settings.openchamber.visual.field.promptNavigatorEnabledAria":"Navigateur de prompts","settings.openchamber.visual.field.promptNavigatorEnabled":"Navigateur de prompts","settings.openchamber.visual.field.autoSaveEnabledAria":"Enregistrement automatique des fichiers","settings.openchamber.visual.field.autoSaveEnabled":"Enregistrement automatique des fichiers","settings.openchamber.visual.field.autoSaveEnabledInfo":"Enregistre automatiquement les modifications après l’arrêt de la saisie. Désactivez pour exiger un enregistrement manuel.","settings.openchamber.visual.field.wideChatLayoutAria":"Large disposition de discussion","settings.openchamber.visual.field.wideChatLayout":"Disposition de discussion large","settings.openchamber.visual.field.showSplitAssistantMessageActionsAria":"Actions intégrées de l'assistant","settings.openchamber.visual.field.showSplitAssistantMessageActions":"Actions intégrées de l'assistant","settings.openchamber.visual.field.showSplitAssistantMessageActionsTooltip":"Afficher Copier la réponse, Enregistrer en image et Lire à haute voix sur les blocs de texte de l'assistant qui apparaissent avant les appels d'outil suivants dans la même réponse.","settings.openchamber.visual.field.allowPromptingSubagentSessionsAria":"Autoriser les requêtes dans les sessions de sous-agents","settings.openchamber.visual.field.allowPromptingSubagentSessions":"Autoriser les requêtes dans les sessions de sous-agents","settings.openchamber.visual.field.draftStartersVisible":"Afficher les raccourcis sur l’écran de nouvelle session","settings.openchamber.visual.field.draftStartersVisibleAria":"Afficher les raccourcis sur l’écran de nouvelle session","settings.openchamber.visual.field.showToolFileIconsAria":"Afficher les icônes des fichiers d'outils","settings.openchamber.visual.field.codeBlockLineWrapAria":"Renvoyer à la ligne les blocs de code","settings.openchamber.visual.field.codeBlockLineWrap":"Renvoyer à la ligne les blocs de code","settings.openchamber.visual.field.tableCellWrap":"Renvoyer à la ligne dans les cellules de tableau","settings.openchamber.visual.field.tableCellWrapAria":"Renvoyer à la ligne dans les cellules de tableau","settings.openchamber.visual.field.tableCellWrapInfo":"Les tableaux tiennent dans la largeur du chat et le texte long des cellules passe à la ligne au lieu de défiler horizontalement.","settings.openchamber.visual.field.copyMessagesAsPlainText":"Copier les messages en texte brut","settings.openchamber.visual.field.copyMessagesAsPlainTextAria":"Copier les messages en texte brut","settings.openchamber.visual.field.copyMessagesAsPlainTextInfo":"Copier une réponse ou une sélection donne le texte tel que vous le voyez, sans symboles Markdown comme ** ou #.","settings.openchamber.visual.field.showToolFileIcons":"Afficher les icônes des fichiers d'outils","settings.openchamber.visual.field.showDotfilesAria":"Afficher les fichiers de points","settings.openchamber.visual.field.showDotfiles":"Afficher les fichiers cachés","settings.openchamber.visual.field.queueMessagesByDefaultAria":"Mettre les messages en file d'attente par défaut","settings.openchamber.visual.field.queueMessagesByDefault":"Messages en file d'attente par défaut","settings.openchamber.visual.field.queueMessagesByDefaultTooltip":"Lorsqu'il est activé, Enter met les messages en file d'attente. Utilisez {modifier}+Entrée pour envoyer.","settings.openchamber.visual.field.persistDraftMessagesAria":"Conserver les brouillons de messages","settings.openchamber.visual.field.persistDraftMessages":"Conserver les brouillons de messages","settings.openchamber.visual.field.enableSpellcheckInTextInputsAria":"Activer la vérification orthographique dans les saisies de texte","settings.openchamber.visual.field.enableSpellcheckInTextInputs":"Activer la vérification orthographique dans les entrées de texte","settings.openchamber.visual.field.largeTextPaste":"Collage de texte volumineux","settings.openchamber.visual.field.largeTextPasteHint":"Lors d’un collage de plus d’environ 2 000 caractères ou 25 lignes, choisir de joindre le texte comme fichier, de le coller en ligne ou de demander à chaque fois. En mode double collage, recoller le même texte dans la seconde le transforme en fichier.","settings.openchamber.visual.field.largeTextPasteAria":"Comportement du collage de texte volumineux","settings.openchamber.visual.field.largeTextPasteOptionAria":"Collage de texte volumineux : {option}","settings.openchamber.visual.option.largeTextPaste.ask.label":"Demander à chaque fois","settings.openchamber.visual.option.largeTextPaste.attach.label":"Joindre comme fichier","settings.openchamber.visual.option.largeTextPaste.inline.label":"Coller en ligne","settings.openchamber.visual.option.largeTextPaste.inlineDoublePaste.label":"Coller en ligne, coller deux fois pour joindre un fichier","settings.openchamber.visual.field.sendAnonymousUsageReportsAria":"Envoyer des rapports d'utilisation anonymes","settings.openchamber.visual.field.sendAnonymousUsageReports":"Envoyer des rapports d'utilisation anonymes","settings.openchamber.visual.field.sendAnonymousUsageReportsHint":"Nous aide à comprendre quelles versions de l'application sont activement utilisées afin que nous puissions prioriser les améliorations. Seules la version de l’application, la plate-forme et le runtime sont collectés – aucune donnée personnelle ni code.","settings.openchamber.visual.option.themeMode.system":"Système","settings.openchamber.visual.option.themeMode.system.description":"Suivre le réglage système","settings.openchamber.visual.option.themeMode.light":"Clair","settings.openchamber.visual.option.themeMode.light.description":"Toujours utiliser l’apparence claire","settings.openchamber.visual.option.themeMode.dark":"Sombre","settings.openchamber.visual.option.themeMode.dark.description":"Toujours utiliser l’apparence sombre","settings.openchamber.visual.option.diffLayout.dynamic.label":"Dynamique","settings.openchamber.visual.option.diffLayout.dynamic.description":"Choisit automatiquement entre la vue côte à côte et la vue intégrée selon le contenu modifié.","settings.openchamber.visual.option.diffLayout.inline.label":"Toujours intégré","settings.openchamber.visual.option.diffLayout.inline.description":"Afficher sous forme de vue unifiée unique.","settings.openchamber.visual.option.diffLayout.sideBySide.label":"Toujours côte à côte","settings.openchamber.visual.option.diffLayout.sideBySide.description":"Comparez les fichiers originaux et modifiés.","settings.openchamber.visual.option.mermaidRendering.svg.label":"SVG","settings.openchamber.visual.option.mermaidRendering.svg.description":"Rendre les diagrammes sous forme de graphiques évolutifs.","settings.openchamber.visual.option.mermaidRendering.ascii.label":"ASCII","settings.openchamber.visual.option.mermaidRendering.ascii.description":"Rendre les diagrammes sous forme de blocs de texte.","settings.openchamber.visual.option.pwaOrientation.system.label":"Suivre le système","settings.openchamber.visual.option.pwaOrientation.system.description":"Respectez le réglage de rotation de l'appareil.","settings.openchamber.visual.option.pwaOrientation.portrait.label":"Verrouillage portrait","settings.openchamber.visual.option.pwaOrientation.portrait.description":"Installez l'application verrouillée en mode portrait.","settings.openchamber.visual.option.pwaOrientation.landscape.label":"Verrouillage paysage","settings.openchamber.visual.option.pwaOrientation.landscape.description":"Installez l'application verrouillée en mode paysage.","settings.openchamber.visual.option.mobileKeyboardMode.native.label":"Suivre le navigateur","settings.openchamber.visual.option.mobileKeyboardMode.native.description":"Utilisez les paramètres par défaut du navigateur pour les modifications de panoramique et de fenêtre d'affichage lorsque le clavier s'ouvre.","settings.openchamber.visual.option.mobileKeyboardMode.resizeContent.label":"Redimensionner le contenu","settings.openchamber.visual.option.mobileKeyboardMode.resizeContent.description":"Demandez aux navigateurs pris en charge de réduire la présentation de l'application au lieu de vous fier uniquement au panoramique.","settings.openchamber.visual.option.userMessageRendering.markdown.label":"Markdown","settings.openchamber.visual.option.userMessageRendering.markdown.description":"Rendre le texte utilisateur avec un formatage markdown.","settings.openchamber.visual.option.userMessageRendering.plain.label":"Texte brut","settings.openchamber.visual.option.userMessageRendering.plain.description":"Rendre le texte utilisateur avec des espaces et des liens préservés.","chat.message.userText.showLess":"Afficher moins","chat.message.userText.showFullMessage":"Afficher le message complet","settings.openchamber.visual.option.chatRenderMode.sorted.label":"Trié","settings.openchamber.visual.option.chatRenderMode.sorted.description":"Restituez les messages de l'assistant terminés sans diffusion en direct.","settings.openchamber.visual.option.chatRenderMode.live.label":"En direct","settings.openchamber.visual.option.chatRenderMode.live.description":"Diffusez le texte et les outils de l’assistant dès leur arrivée.","settings.openchamber.visual.option.messageTransport.auto.label":"Auto","settings.openchamber.visual.option.messageTransport.auto.description":"Préférez WebSocket et revenez à SSE si besoin.","settings.openchamber.visual.option.messageTransport.ws.label":"WebSocket","settings.openchamber.visual.option.messageTransport.ws.description":"Utilisez WebSocket pour la diffusion de messages.","settings.openchamber.visual.option.messageTransport.sse.label":"SSE","settings.openchamber.visual.option.messageTransport.sse.description":"Utilisez les événements envoyés par le serveur pour la diffusion de messages.","settings.openchamber.visual.option.activityRenderMode.collapsed.label":"Réduite","settings.openchamber.visual.option.activityRenderMode.collapsed.description":"Garder l'activité réduite par défaut.","settings.openchamber.visual.option.activityRenderMode.summary.label":"Développée","settings.openchamber.visual.option.activityRenderMode.summary.description":"Développer l’activité par défaut.","settings.openchamber.visual.option.timeFormat.auto.label":"Auto","settings.openchamber.visual.option.timeFormat.auto.description":"Utiliser les préférences locales du système.","settings.openchamber.visual.option.timeFormat.24h.label":"24 heures","settings.openchamber.visual.option.timeFormat.24h.description":"Afficher l'heure à 14h15.","settings.openchamber.visual.option.timeFormat.12h.label":"12 heures","settings.openchamber.visual.option.timeFormat.12h.description":"Afficher l'heure sous la forme 02:15 PM.","settings.openchamber.visual.option.weekStart.auto.label":"Auto","settings.openchamber.visual.option.weekStart.auto.description":"Utilisez le début de semaine local.","settings.openchamber.visual.option.weekStart.monday.label":"Lundi","settings.openchamber.visual.option.weekStart.sunday.label":"Dimanche","settings.magicPrompts.page.loading.aria":"Chargement","settings.magicPrompts.page.loading.text":"Chargement des prompts magiques...","settings.magicPrompts.page.block.visiblePrompt":"Prompt visible","settings.magicPrompts.page.block.instructions":"Instructions","settings.magicPrompts.page.group.gitCommitGenerate.title":"Génération de commit","settings.magicPrompts.page.group.gitCommitGenerate.description":"Prompts utilisés pour la génération du message de commit : message utilisateur visible + instructions masquées.","settings.magicPrompts.page.group.gitPrGenerate.title":"Génération de PR","settings.magicPrompts.page.group.gitPrGenerate.description":"Prompts utilisés pour la génération du titre/corps de la PR : message utilisateur visible + instructions masquées.","settings.magicPrompts.page.group.gitConflictResolve.title":"Résolution des conflits de fusion/rebase","settings.magicPrompts.page.group.gitConflictResolve.description":"Prompts utilisés lors de la résolution des conflits de fusion/rebase avec l'IA.","settings.magicPrompts.page.group.gitCherrypickConflictResolve.title":"Résolution des conflits de cherry-pick","settings.magicPrompts.page.group.gitCherrypickConflictResolve.description":"Prompts utilisés lors de la résolution des conflits de Cherry-pick dans le flux d'intégration.","settings.magicPrompts.page.group.planImprove.title":"Améliorer le plan","settings.magicPrompts.page.group.planImprove.description":"Prompt masqué utilisé lors de l’envoi d’un plan enregistré dans un flux d’amélioration.","settings.magicPrompts.page.group.planTodo.title":"Planification des tâches","settings.magicPrompts.page.group.planTodo.description":"Prompt masqué utilisé lors de l’envoi d’une tâche dans une nouvelle session de planification.","settings.magicPrompts.page.group.planImplement.title":"Plan de mise en œuvre","settings.magicPrompts.page.group.planImplement.description":"Prompt masqué utilisé lors de l’envoi d’un plan enregistré dans un flux d’implémentation.","settings.magicPrompts.page.group.sessionSummary.title":"Résumé de la session","settings.magicPrompts.page.group.sessionSummary.description":"Prompts utilisés par la commande slash /summary : message utilisateur visible + instructions masquées. Non destructif : ne compacte pas l'historique des sessions.","settings.magicPrompts.page.group.sessionWorkspaceReview.title":"Examen de l'espace de travail","settings.magicPrompts.page.group.sessionWorkspaceReview.description":"Prompts utilisés par la commande slash /workspace-review : message utilisateur visible + instructions masquées. Examine les modifications actuelles de l’espace de travail pour ne signaler que les problèmes importants. Les instructions guident aussi les sessions de revue, y compris la boucle de revue automatique.","settings.view.search.placeholder":"Rechercher dans les paramètres","settings.view.search.aria":"Rechercher dans les paramètres","settings.view.search.clear":"Effacer la recherche des paramètres","settings.view.search.noResults":"Aucun paramètre correspondant","settings.view.nav.group.general":"OpenChamber","settings.view.nav.group.projects":"Espace de travail","settings.view.nav.group.opencode":"OpenCode","settings.view.nav.group.content":"Bibliothèque","settings.page.about.title":"À propos","settings.openchamber.tunnel.notAvailable.dependencyNotFound":"{dependency} est introuvable.","settings.magicPrompts.sidebar.item.sessionExplore":"Tour de la base de code","settings.magicPrompts.sidebar.item.sessionFeaturePlan":"Planification de fonctionnalité","settings.magicPrompts.sidebar.item.sessionCraftGoal":"Création de Goal","settings.magicPrompts.page.group.sessionCraftGoal.title":"Création de Goal","settings.magicPrompts.page.group.sessionCraftGoal.description":"Prompts utilisés par la commande slash /craft-goal : message utilisateur visible + instructions masquées. Transforme une idée ou une tâche en Goal clair et vérifiable grâce à une exploration guidée.","settings.magicPrompts.sidebar.item.sessionCatchUp":"Rattrapage","settings.magicPrompts.sidebar.item.sessionDebug":"Débogage","settings.magicPrompts.sidebar.item.sessionWeigh":"Comparer les options","settings.remoteInstances.direct.sidebarTitle":"Liens de serveur","settings.remoteInstances.direct.sidebarDescription":"Se connecter avec un lien ou un jeton","settings.remoteInstances.direct.title":"Autres serveurs OpenChamber","settings.remoteInstances.direct.description":"Serveurs vers lesquels cette application peut basculer. Importez un lien de connexion depuis un autre serveur ou ajoutez-le par adresse.","settings.remoteInstances.direct.addDialog.description":"Ajoutez un autre serveur OpenChamber par URL. Utilisez ceci lorsque le serveur est déjà lancé et que vous disposez d’un jeton de connexion.","settings.remoteInstances.direct.field.labelPlaceholder":"Libellé (facultatif)","settings.remoteInstances.direct.field.urlPlaceholder":"https://hôte:port","settings.remoteInstances.direct.field.tokenPlaceholder":"Jeton de connexion (facultatif pour les serveurs locaux de confiance)","settings.remoteInstances.direct.note":"Les jetons de connexion sont enregistrés sur cet appareil et utilisés uniquement lorsque cette application se connecte à ce serveur.","settings.remoteInstances.direct.headers.title":"En-têtes supplémentaires","settings.remoteInstances.direct.headers.description":"En-têtes HTTP facultatifs pour les requêtes API du bureau. Authorization est réservé au jeton de connexion.","settings.remoteInstances.direct.headers.field.namePlaceholder":"Nom de l’en-tête","settings.remoteInstances.direct.headers.field.valuePlaceholder":"Valeur de l’en-tête","settings.remoteInstances.direct.headers.actions.add":"Ajouter un en-tête","settings.remoteInstances.direct.headers.removeAria":"Supprimer l’en-tête","settings.remoteInstances.direct.actions.add":"Ajouter le serveur","settings.remoteInstances.direct.import.description":"Collez un lien de connexion provenant d’un autre serveur OpenChamber.","settings.remoteInstances.direct.import.placeholder":"openchamber://connect?...","settings.remoteInstances.direct.import.action":"Importer le lien","settings.remoteInstances.direct.error.invalidConnectLink":"Lien de connexion OpenChamber invalide.","settings.remoteInstances.direct.state.loading":"Chargement des instances...","settings.remoteInstances.direct.state.empty":"Aucun autre serveur ajouté pour le moment.","settings.remoteInstances.clientAuth.title":"Se connecter à ce serveur","settings.remoteInstances.clientAuth.description":"Créez un lien ou un jeton sécurisé pour permettre à OpenChamber Desktop de se connecter à ce serveur.","settings.remoteInstances.clientAuth.field.labelPlaceholder":"Nom du nouvel appareil — ex. Mon iPhone","settings.remoteInstances.clientAuth.actions.create":"Créer un jeton","settings.remoteInstances.clientAuth.actions.pair":"Créer un lien","settings.remoteInstances.clientAuth.actions.revoke":"Révoquer","settings.remoteInstances.clientAuth.actions.clearRevoked":"Effacer les révocations","settings.remoteInstances.clientAuth.qrAlt":"QR code de connexion OpenChamber","settings.remoteInstances.clientAuth.qrEnlarge":"Agrandir le QR code","settings.remoteInstances.clientAuth.qrScanHint":"Scannez-le avec l'application OpenChamber sur votre autre appareil. À usage unique et expire.","settings.remoteInstances.clientAuth.qrDialogTitle":"Scanner pour se connecter","settings.remoteInstances.clientAuth.actions.addDevice":"Ajouter un appareil","settings.remoteInstances.clientAuth.actions.copied":"Copié","settings.remoteInstances.clientAuth.addDevice.transportLabel":"Où utiliserez-vous cet appareil ?","settings.remoteInstances.clientAuth.addDevice.subtitle":"Créez un code QR à usage unique qui connecte un autre appareil à ce serveur.","settings.remoteInstances.clientAuth.addDevice.transport.local":"Cet ordinateur uniquement","settings.remoteInstances.clientAuth.addDevice.transport.localHint":"Pour les applications sur cette même machine.","settings.remoteInstances.clientAuth.addDevice.transport.lan":"Réseau domestique uniquement","settings.remoteInstances.clientAuth.addDevice.transport.lanHint":"Connexion directe via votre Wi-Fi. Ne fonctionne pas hors de ce réseau.","settings.remoteInstances.clientAuth.addDevice.transport.lanUnavailableDesktopHint":"Pour utiliser cette option, accédez à Paramètres > Accès réseau du bureau, définissez un mot de passe pour l’interface du bureau et autorisez les autres appareils de votre réseau local à ouvrir cette application.","settings.remoteInstances.clientAuth.addDevice.transport.lanUnavailableServerHint":"Ce serveur n'écoute que sur cet ordinateur. Redémarrez-le avec `--host 0.0.0.0` pour que les appareils de votre réseau puissent se connecter.","settings.remoteInstances.clientAuth.addDevice.transport.relay":"Partout","settings.remoteInstances.clientAuth.addDevice.transport.relayHint":"Fonctionne à la maison et en déplacement. En déplacement, le trafic passe par OpenChamber Private Relay — un tunnel chiffré de bout en bout. Aucune configuration.","settings.remoteInstances.clientAuth.addDevice.fallback.relay":"Autoriser aussi le relais chiffré en déplacement","settings.remoteInstances.clientAuth.addDevice.fallback.preferLocal":"Préférer la connexion domestique directe quand elle est disponible","settings.remoteInstances.clientAuth.addDevice.create":"Créer le code QR","settings.remoteInstances.clientAuth.addDevice.done":"Terminé","settings.remoteInstances.clientAuth.addDevice.connectedToast":"Appareil connecté.","settings.remoteInstances.clientAuth.pairingUrl":"Lien de connexion","settings.remoteInstances.clientAuth.createdToken":"Copiez ce jeton maintenant. Pour des raisons de sécurité, il ne sera plus affiché.","settings.remoteInstances.clientAuth.state.loading":"Chargement des jetons...","settings.remoteInstances.clientAuth.state.empty":"Aucun appareil connecté pour le moment.","settings.remoteInstances.clientAuth.state.revoked":"Révoqué","settings.remoteInstances.clientAuth.state.thisDevice":"Cet appareil","settings.remoteInstances.clientAuth.state.pending":"En attente de connexion…","settings.remoteInstances.clientAuth.state.viaRelay":"Relay","settings.remoteInstances.clientAuth.state.connectedDirect":"Connecté · Réseau local","settings.remoteInstances.clientAuth.state.connectedRelay":"Connecté · Relais","settings.remoteInstances.clientAuth.lastUsed":"Dernière utilisation le {date}","settings.remoteInstances.clientAuth.neverUsed":"Jamais utilisé","settings.remoteInstances.relay.title":"OpenChamber Relay","settings.remoteInstances.relay.autoHint":"Activé automatiquement lorsque vous associez un appareil via le relais.","settings.remoteInstances.relay.description":"Permettez à vos autres appareils de se connecter depuis n’importe où sans ouvrir de ports. Le trafic est chiffré de bout en bout — le relais ne peut pas le lire.","settings.remoteInstances.relay.enableHint":"Rien n’est partagé tant que vous n’activez pas le relais sur ce serveur.","settings.remoteInstances.relay.actions.enable":"Activer le relais","settings.remoteInstances.relay.actions.disable":"Désactiver","settings.remoteInstances.relay.confirm.disable":"Désactiver le relais ? Les appareils connectés via celui-ci seront déconnectés immédiatement.","settings.remoteInstances.relay.state.loading":"Vérification de l’état du relais...","settings.remoteInstances.relay.state.disabled":"Désactivé","settings.remoteInstances.relay.state.connecting":"Connexion","settings.remoteInstances.relay.state.connected":"Connecté","settings.remoteInstances.relay.state.reconnecting":"Reconnexion","settings.remoteInstances.relay.state.error":"Erreur","settings.remoteInstances.relay.status.clientsOne":"{count} appareil connecté","settings.remoteInstances.relay.status.clientsMany":"{count} appareils connectés","settings.remoteInstances.relay.pair.title":"Associer un appareil","settings.remoteInstances.relay.pair.labelPlaceholder":"Nom de l’appareil (facultatif)","settings.remoteInstances.relay.pair.includeToken":"Inclure le jeton d’accès (association en un seul scan)","settings.remoteInstances.relay.pair.noTokenHint":"Sans jeton, l’appareil se connecte avec le mot de passe de l’interface de ce serveur.","settings.remoteInstances.relay.pair.generate":"Créer un lien d’association","settings.remoteInstances.relay.pair.requiresConnected":"L’association devient disponible une fois le relais connecté.","settings.remoteInstances.relay.pair.linkLabel":"Lien d’association","settings.remoteInstances.relay.pair.warning":"Ce lien donne accès à ce serveur. Ne le partagez pas.","settings.remoteInstances.relay.pair.qrAlt":"Code QR d’association du relais","settings.remoteInstances.relay.pair.showQr":"Afficher le code QR","settings.remoteInstances.relay.pair.qrDialogTitle":"Scanner pour associer","settings.remoteInstances.relay.pair.qrDialogDescription":"Scannez ce code QR avec l’application OpenChamber sur votre autre appareil.","settings.remoteInstances.relay.pair.manageHint":"Gérez ou révoquez les appareils associés dans la liste « Connexion à ce serveur » ci-dessus.","settings.remoteInstances.relay.toast.enableFailed":"Échec de l’activation du relais","settings.remoteInstances.relay.toast.disableFailed":"Échec de la désactivation du relais","settings.remoteInstances.relay.toast.offerFailed":"Échec de la création du lien d’association","settings.remoteInstances.relay.toast.linkCopied":"Lien d’association copié","settings.openchamber.about.field.openCodeVersion":"Version d’OpenCode","settings.openchamber.about.field.appVersion":"Version de l’application","settings.openchamber.about.field.serverVersion":"Version du serveur","settings.openchamber.about.field.instanceUrls":"URLs de l’instance","settings.openchamber.about.field.applicationUrl":"Application","settings.openchamber.about.field.tunnelUrl":"Tunnel","settings.openchamber.about.state.unknown":"inconnue","settings.voice.page.field.ttsInputMode":"Mode d’entrée TTS","settings.voice.page.field.ttsInputModeSanitized":"Nettoyé","settings.voice.page.field.ttsInputModeRaw":"Markdown brut","settings.voice.page.field.ttsInputModeSummarized":"résumé","settings.voice.page.field.ttsChunkedMode":"Commencer à parler plus tôt pour les longues réponses","settings.voice.page.field.ttsChunkedModeAria":"Commencer à parler plus tôt pour les longues réponses","settings.voice.page.tooltip.ttsChunked":"Découpe les textes longs en phrases et lit chacune dès qu’elle est synthétisée, pour que la lecture démarre bien plus tôt. Désactivez pour synthétiser tout le texte en une seule requête.","settings.openchamber.visual.field.dockBadge":"Badge du Dock","settings.openchamber.visual.field.dockBadgeHint":"Afficher sur l’icône du Dock de macOS le nombre de discussions avec une activité non vue.","settings.openchamber.visual.actions.saveAndRestart":"Enregistrer et redémarrer","settings.openchamber.visual.actions.restarting":"Redémarrage…","settings.openchamber.visual.field.fileEditorKeymap":"Keymap de l’éditeur de fichiers","settings.openchamber.visual.option.fileEditorKeymap.default":"Par défaut","settings.openchamber.visual.option.fileEditorKeymap.vim":"Vim","settings.openchamber.visual.field.showTurnChangedFilesAria":"Afficher les fichiers modifiés pour les tours terminés","settings.openchamber.visual.field.showTurnChangedFiles":"Afficher les fichiers modifiés pour les tours terminés","settings.magicPrompts.page.group.sessionExplore.title":"Tour de la base de code","settings.magicPrompts.page.group.sessionExplore.description":"Prompts utilisés par la commande slash /explore : message utilisateur visible + instructions masquées. Analyse le dépôt et donne une orientation structurée — vue d’ensemble, principaux modules, liens entre eux et points de départ — plutôt qu’un inventaire fichier par fichier.","settings.magicPrompts.page.group.sessionFeaturePlan.title":"Planification de fonctionnalité","settings.magicPrompts.page.group.sessionFeaturePlan.description":"Prompts utilisés par la commande slash /plan-feature : message utilisateur visible + instructions masquées. Lance un dialogue guidé qui étudie le code et pose des questions de clarification par petits lots avant de produire un plan d’implémentation.","settings.magicPrompts.page.group.sessionCatchUp.title":"Rattrapage","settings.magicPrompts.page.group.sessionCatchUp.description":"Prompts utilisés par la commande slash /catch-up : message utilisateur visible + instructions masquées. Reconstruit le contexte de la branche — commits, PR et travail non commité — pour comprendre où vous en étiez, puis fournit un résumé digeste et une prochaine étape orientée produit.","settings.magicPrompts.page.group.sessionDebug.title":"Débogage","settings.magicPrompts.page.group.sessionDebug.description":"Prompts utilisés par la commande slash /debug : message utilisateur visible + instructions masquées. Mène une investigation guidée de la cause racine — capture le symptôme, formule des hypothèses, les vérifie dans le code et confirme la cause avant de proposer une correction.","settings.magicPrompts.page.group.sessionWeigh.title":"Comparer les options","settings.magicPrompts.page.group.sessionWeigh.description":"Prompts utilisés par la commande slash /weigh : message utilisateur visible + instructions masquées. Analyse le code, puis présente 2 à 3 approches distinctes avec compromis et recommandation — sans écrire de plan ni de code.","settings.magicPrompts.page.group.sessionFusion.title":"Fusion","settings.magicPrompts.page.group.sessionFusion.description":"Prompts utilisés lors de la combinaison de résultats multi-exécutions en une seule réponse finale : message utilisateur visible + instructions masquées avant les résultats source.","settings.magicPrompts.page.actions.resetting":"Réinitialisation...","settings.magicPrompts.page.actions.resetAllOverrides":"Réinitialiser tous les remplacements","settings.magicPrompts.page.actions.resetToDefault":"Réinitialiser aux valeurs par défaut","settings.magicPrompts.page.actions.save":"Enregistrer","settings.magicPrompts.page.placeholdersLabel":"Espaces réservés :","settings.magicPrompts.page.validation.visiblePromptRequired":"Le prompt visible ne peut pas être vide.","settings.magicPrompts.page.status.unsavedChanges":"Modifications non enregistrées","settings.magicPrompts.page.status.usingSavedOverride":"Utilisation du remplacement enregistré","settings.magicPrompts.page.status.usingBuiltinDefault":"Utilisation des valeurs par défaut intégrées","settings.magicPrompts.page.toast.loadFailed":"Échec du chargement des prompts magiques","settings.magicPrompts.page.toast.visiblePromptRequired":"Le prompt visible ne peut pas être vide","settings.magicPrompts.page.toast.saved":"Prompt magique enregistré","settings.magicPrompts.page.toast.saveFailed":"Échec de l'enregistrement du prompt magique","settings.magicPrompts.page.toast.resetSuccess":"Prompt réinitialisé aux valeurs par défaut","settings.magicPrompts.page.toast.resetFailed":"Échec de la réinitialisation du prompt","settings.magicPrompts.page.toast.resetAllSuccess":"Tous les prompts ont été réinitialisés","settings.magicPrompts.page.toast.resetAllFailed":"Échec de la réinitialisation de tous les prompts","settings.openchamber.visual.section.followUpBehavior":"Comportement des messages de suivi","settings.openchamber.visual.section.followUpBehaviorAria":"Comportement des messages de suivi","settings.openchamber.visual.field.followUpBehaviorAria":"Comportement des messages de suivi : {option}","settings.openchamber.visual.field.followUpBehaviorDescription":"Choisissez ce qui se passe lorsque vous appuyez sur Entrée pour un message de suivi pendant que l’agent répond encore.","settings.openchamber.visual.option.followUpBehavior.steer.label":"Guider","settings.openchamber.visual.option.followUpBehavior.queue.label":"Mettre en file d’attente","settings.gitlab.title":"GitLab","settings.gitlab.info":"Connectez GitLab.com ou une instance autogérée pour les demandes de fusion, les tickets et la CI.","settings.gitlab.instance.customLabel":"Instance GitLab","settings.gitlab.instance.customInfo":"Utilisez une origine HTTPS. HTTP est autorisé uniquement pour les adresses locales.","settings.gitlab.actions.useInstance":"Utiliser l’instance","settings.sourceControl.status.checking":"Vérification de la connexion…","settings.gitlab.status.operationFailed":"Échec de l’opération","settings.gitlab.status.tokenRejected":"GitLab n'a pas accepté ce jeton. Vérifiez qu'il appartient à cette instance et qu'il a accès à l'API.","settings.gitlab.status.notConnected":"Non connecté","settings.gitlab.status.connected":"Connecté","settings.gitlab.actions.connect":"Connecter GitLab","settings.gitlab.token.label":"Jeton d’accès personnel","settings.gitlab.token.info":"OpenChamber conserve le jeton sur son serveur et ne l’affiche plus jamais.","settings.gitlab.device.label":"Code de l’appareil","settings.gitlab.cli.label":"glab CLI","settings.gitlab.cli.info":"Utiliser les identifiants glab lorsqu’aucun compte enregistré n’est actif.","settings.gitlab.actions.enableCli":"Activer glab","settings.gitlab.actions.disableCli":"Désactiver glab","settings.gitlab.instances.title":"Instances","settings.gitlab.actions.addInstance":"Ajouter une instance","settings.gitlab.device.waiting":"Autorisez l'appareil dans GitLab, puis revenez dans OpenChamber. Cette page se mettra à jour automatiquement.","settings.gitlab.actions.openGitLab":"Ouvrir GitLab","settings.sourceControl.accounts.inUse":"Utilisé","settings.sourceControl.accounts.connectedCount":"{count} comptes","settings.sourceControl.accounts.needsAuthentication":"Authentification requise","settings.sourceControl.actions.reauthenticate":"Se réauthentifier","settings.sourceControl.actions.remove":"Supprimer","settings.sourceControl.transport.retry":"Recharger et réessayer","settings.sourceControl.transport.remoteLabel":"Dépôt distant","settings.sourceControl.transport.anonymous":"HTTPS anonyme, lecture seule","settings.sourceControl.transport.loading":"Chargement du transport du dépôt…","settings.openchamber.visual.field.inputHistoryScope":"Portée de l'historique de saisie","settings.openchamber.visual.field.inputHistoryScopeDescription":"Choisissez si les prompts envoyés sont rappelés dans tous les projets reliés à ce runtime ou seulement dans la session en cours.","settings.openchamber.visual.section.inputHistoryScopeAria":"Portée de l'historique de saisie","settings.openchamber.visual.option.inputHistoryScope.global.label":"Tous les projets","settings.openchamber.visual.option.inputHistoryScope.session.label":"Session actuelle","settings.openchamber.visual.field.inputHistoryLimit":"Prompts à mémoriser","settings.openchamber.visual.field.inputHistoryLimitDescription":"Réduire ce nombre supprime aussitôt les prompts les plus anciens de votre historique.","settings.openchamber.visual.field.inputHistoryLimitAria":"Prompts à mémoriser","settings.openchamber.visual.field.inputHistoryLimitUnit":"prompts","settings.openchamber.visual.field.enterToSend":"Raccourci d'envoi","settings.openchamber.visual.field.enterToSendHint":"Choisissez le raccourci d'envoi pour le composeur standard. Dans le composeur étendu, Entrée ajoute toujours une nouvelle ligne et Ctrl/Cmd+Entrée envoie.","settings.openchamber.visual.option.enterToSend.enter.label":"Envoyer avec Entrée","settings.openchamber.visual.option.enterToSend.modifier.label":"Envoyer avec Ctrl/Cmd+Entrée",...n.fr,...i.fr,...s.fr,...t.fr,...e.fr,"settings.page.integrations.title":"Intégrations","settings.page.integrations.description":"Connectez les services et abonnements avec lesquels OpenChamber travaille.","settings.agents.page.field.steps":"Étapes max","settings.agents.page.field.stepsTooltip":"Combien d'étapes d'outils l'agent peut effectuer en un tour avant de devoir s'arrêter.","settings.agents.page.field.clearStepsAria":"Effacer les étapes max","settings.commands.page.field.subagent":"Exécuter dans une session enfant","settings.commands.page.field.subagentTooltip":"La commande s'exécute dans une session enfant en arrière-plan plutôt que dans la session actuelle.","settings.common.legacyFormat.note":"Ce fichier utilise encore le format OpenCode 1. Le prochain enregistrement le réécrira en OpenCode 2.","settings.mcp.page.advanced.codemode":"Code Mode","settings.mcp.page.advanced.codemodeHint":"Normalement, chaque outil d'un serveur MCP devient un outil distinct que le modèle voit et appelle un par un. Avec Code Mode, le modèle reçoit un seul outil qui exécute un court script, et ce script appelle les outils de ce serveur comme des fonctions. Le contexte reste ainsi léger quand un serveur a beaucoup d'outils, et plusieurs appels tiennent en une seule étape. Les petits modèles écrivent ces scripts de façon moins fiable, d'où la possibilité de le désactiver par serveur.","settings.mcp.page.advanced.timeoutStartupMs":"Délai de démarrage (ms)","settings.mcp.page.advanced.timeoutStartupHint":"Temps d'attente pour le démarrage du processus serveur.","settings.mcp.page.advanced.timeoutCatalogMs":"Délai de catalogue (ms)","settings.mcp.page.advanced.timeoutCatalogHint":"Temps d'attente pendant que le serveur liste ses outils.","settings.mcp.page.advanced.timeoutExecutionMs":"Délai d'exécution (ms)","settings.mcp.page.advanced.timeoutExecutionHint":"Temps d'attente pour qu'un appel d'outil se termine.","settings.mcp.page.advanced.summary.startup":"démarrage {value}","settings.mcp.page.advanced.summary.catalog":"catalogue {value}","settings.mcp.page.advanced.summary.execution":"exécution {value}","settings.mcp.page.advanced.codemodeDefaultHint":"Par défaut, OpenCode décide : Code Mode est activé pour la plupart des serveurs, mais OpenCode le désactive pour ceux qui ont le leur, comme executor.sh, et demande à PostHog des outils simples au lieu de son propre Code Mode.","settings.mcp.page.advanced.codemodeOption.default":"Par défaut (OpenCode décide)","settings.mcp.page.advanced.codemodeOption.on":"Activé","settings.mcp.page.advanced.codemodeOption.off":"Désactivé","settings.mcp.page.advanced.summary.codemodeOn":"Code Mode activé","settings.mcp.page.advanced.summary.codemodeOff":"Code Mode désactivé","settings.mcp.page.advanced.protocol":"Protocole","settings.mcp.page.advanced.protocolHint":"Legacy ouvre la connexion avec le handshake initialize et parle les révisions du protocole jusqu'à 2025-11-25. Auto sonde la révision 2026-07-28 et revient à legacy quand le serveur ne la prend pas en charge. 2026-07-28 exige cette révision et échoue sinon.","settings.mcp.page.advanced.protocolOption.legacy":"Legacy (par défaut)","settings.mcp.page.advanced.protocolOption.auto":"Auto","settings.mcp.page.advanced.protocolOption.revision20260728":"2026-07-28","settings.mcp.page.advanced.oauth":"OAuth","settings.mcp.page.advanced.oauthMetadataUrl":"URL des métadonnées du serveur d'autorisation","settings.mcp.page.advanced.oauthMetadataUrlHint":"Le document de métadonnées du serveur d'autorisation OAuth ou OpenID Connect. À renseigner quand le serveur MCP ne publie pas de métadonnées de ressource protégée nommant son serveur d'autorisation.","settings.mcp.page.advanced.oauthMetadataUrlPlaceholder":"https://example.com/.well-known/oauth-authorization-server","settings.mcp.page.advanced.oauthMetadataUrlInvalid":"Saisissez une adresse http:// ou https:// complète.","settings.magicPrompts.page.block.codeFusionInstructions":"Instructions de fusion de code","settings.openchamber.desktopNetwork.field.linuxNativeFrame":"Utiliser la barre de titre du système","settings.openchamber.desktopNetwork.field.linuxNativeFrameDescription":"Nécessite un redémarrage de l’app. La fenêtre reçoit la barre de titre et les boutons de votre environnement de bureau, au-dessus de l’en-tête d’OpenChamber.","settings.openchamber.visual.field.customFont":"Personnalisée…","settings.openchamber.visual.field.customFontPlaceholder":"Nom d’une police installée, p. ex. Maple Mono NF CN","settings.openchamber.visual.field.customFontAria":"Nom de la police personnalisée","settings.openchamber.defaults.field.showChats":"Afficher les chats dans la barre latérale","settings.openchamber.visual.field.fileEditorVimMappings":"Mappages Vim","settings.openchamber.visual.field.fileEditorVimMappingsInfo":"Un mappage par ligne, écrit comme dans un vimrc. Ils s’appliquent dès que l’éditeur est en mode Vim. Prend en charge map, noremap et leurs variantes n, i, v, x et o.","settings.openchamber.visual.field.fileEditorVimMappingsInvalid":"Non appliquées, l’éditeur ne peut pas lire ces lignes : {lines}","settings.agents.page.field.color":"Couleur","settings.agents.page.field.colorTooltip":"Signale l’agent dans la zone de saisie, les menus et les messages. Enregistrée dans la configuration de l’agent, OpenCode l’utilise aussi. Sans couleur, une teinte du thème est choisie.","settings.agents.page.field.colorAutomatic":"Automatique (couleur du thème)","settings.agents.page.field.colorSwatchAria":"Utiliser la couleur {color}","settings.agents.page.field.colorCustomAria":"Choisir une couleur personnalisée","settings.agents.page.field.colorHexAria":"Couleur en hexadécimal, par exemple #ff6b6b","settings.agents.sidebar.section.disabled":"Désactivés","settings.agents.sidebar.actions.disable":"Désactiver","settings.agents.sidebar.actions.enable":"Activer","settings.agents.sidebar.actions.enableAria":"Activer {name}","settings.agents.sidebar.toast.agentDisabled":"{name} est désactivé. Son fichier est conservé ; réactivez-le depuis la liste Désactivés.","settings.agents.sidebar.toast.agentEnabled":"{name} est de nouveau activé","settings.agents.sidebar.toast.disableFailed":"Impossible de désactiver l’agent : son fichier de configuration n’a pas pu être écrit","settings.agents.sidebar.toast.enableFailed":"Impossible d’activer l’agent : son fichier de configuration n’a pas pu être écrit"},I={"opencodeCompatibility.bundled":"OpenCode est inclus dans OpenChamber. Mettez OpenChamber à jour pour obtenir OpenCode v2.","opencodeCompatibility.title":"OpenCode v2 requis","opencodeCompatibility.outdatedTitle":"Mettre à jour OpenCode","opencodeCompatibility.outdatedLocal":"OpenCode {version} est installé. Cette version d’OpenChamber nécessite OpenCode {minimum} ou une version plus récente.","opencodeCompatibility.outdatedExternal":"Le serveur connecté utilise OpenCode {version}. Mettez-le à jour vers OpenCode {minimum} ou une version plus récente, puis reconnectez-vous.","opencodeCompatibility.update":"Mettre à jour OpenCode","opencodeCompatibility.local":"OpenCode {version} est installé. Cette version d’OpenChamber nécessite OpenCode v2.","opencodeCompatibility.external":"Le serveur connecté utilise OpenCode {version}. Installez OpenCode v2 sur ce serveur, puis reconnectez-vous.","opencodeCompatibility.installDescription":"OpenChamber installera la v2 avec le programme officiel, puis redémarrera OpenCode.","opencodeCompatibility.install":"Passer à OpenCode v2","opencodeCompatibility.reconnect":"Vérifier à nouveau","opencodeCompatibility.guide":"Guide d’installation","opencodeCompatibility.installing":"Installation d’OpenCode v2…","opencodeCompatibility.reconnecting":"Reconnexion…","opencodeCompatibility.failed":"L’opération n’a pas pu être terminée. Réessayez ou suivez le guide d’installation, puis reconnectez-vous.","sessions.aiRename.action":"Renommer avec l’IA","sessions.aiRename.generating":"Génération du titre de la session...","sessions.aiRename.checking":"Vérification des échanges terminés...","sessions.aiRename.noCompletedTurns":"Disponible après la première réponse terminée.","sessions.aiRename.failed":"Impossible de renommer la session. Vérifiez les paramètres du petit modèle et réessayez.","sessions.aiRename.unsupported":"Le renommage par IA n’est pas disponible dans VS Code.","smallModel.toast.unavailable.title":"Small Model indisponible","smallModel.toast.unavailable.description":"Choisissez un autre modèle dans Paramètres → Sessions → Small Model et réessayez.","sessions.aiRename.noSmallModel":"Nécessite un Small Model. Connectez-vous à un fournisseur de modèles ou choisissez-en un dans Paramètres → Sessions.","commitComparison.mode":"Commit","pullRequestComparison.select":"Sélectionner une pull request","pullRequestComparison.pickAbove":"Choisissez une pull request ci-dessus","pullRequestComparison.partial":"Certaines pull requests n'ont pas pu être chargées","commitComparison.select":"Choisir un commit","commitComparison.search":"Rechercher des commits...","commitComparison.loadError":"Impossible de charger les commits","commitComparison.noCommits":"Aucun commit trouvé","commitComparison.emptyDiff":"Aucune modification dans ce commit","chat.liveActivity.title":"Activité","chat.liveActivity.changedFile":"{count} fichier modifié","chat.liveActivity.changedFiles":"{count} fichiers modifiés","chat.liveActivity.explored":"Base de code explorée","chat.liveActivity.ranCommand":"{count} commande exécutée","chat.liveActivity.ranCommands":"{count} commandes exécutées","chat.liveActivity.researched":"Recherche sur le web effectuée","chat.liveActivity.usedSubagent":"{count} sous-agent utilisé","chat.liveActivity.usedSubagents":"{count} sous-agents utilisés","sessions.sidebar.projectAction.active":"Action du projet en cours",...C,"gitView.operation.title":"Opération Git","gitView.operation.recovery.storage":"OpenChamber ne peut pas enregistrer ici l’état des transferts Git. Autorisez le stockage du site et rechargez ; d’ici là, push et pull sont en pause.","gitView.operation.recovery.capacity":"Trop de transferts Git inachevés sont enregistrés. Vérifiez ceux ci-dessous avant d’en lancer un autre.","gitView.operation.recovery.reconciling":"Vérification du transfert Git précédent…","gitView.operation.recovery.repository":"Impossible de lire ce dépôt. Vérifiez à nouveau avant de faire un push ou un pull.","gitView.operation.recovery.inspect":"Si l’issue reste inconnue, regardez vous-même le dépôt et le remote. OpenChamber ne relance jamais un transfert de lui-même.","gitView.operation.unknownHint":"On ne sait pas si cela est passé. Vérifiez à nouveau avant de refaire un push ou un pull.","gitView.operation.refresh":"Vérifier à nouveau","gitView.operation.cancel":"Annuler","gitView.operation.state.unavailable":"État inconnu","gitView.operation.state.planned":"Démarrage","gitView.operation.state.running":"En cours","gitView.operation.state.succeeded":"Réussie","gitView.operation.state.partial":"Fait en partie","gitView.operation.state.failed":"Échec","gitView.operation.state.cancelled":"Annulée","gitView.operation.state.outcome-unknown":"Résultat inconnu","gitView.operation.state.conflicted":"Conflit","gitView.operation.state.skipped":"Ignorée","gitView.remotes.title":"Autres dépôts distants","gitView.remotes.description":"Ces remotes sont sur un hôte ou une adresse que l’identité du dépôt n’atteint pas. Choisissez une identité pour chacun pour y faire fetch et push.","gitView.hydration.title":"Sous-modules et Git LFS","gitView.hydration.description":"Accès aux sous-modules et aux fichiers Git LFS hébergés sur d’autres serveurs.","gitView.hydration.parentRemote":"Remote","gitView.hydration.retry":"Télécharger à nouveau","gitView.hydration.endpoint":"Serveur","gitView.hydration.identity":"Identité pour ce serveur","gitView.hydration.authorizationNeeded":"Certains sous-modules ou fichiers LFS sont sur des serveurs qu’OpenChamber n’atteint pas encore. Choisissez une identité pour chacun, puis téléchargez à nouveau.","gitView.hydration.chooseEndpoint":"Choisir un serveur","gitView.hydration.lfsMissing":"Git LFS n’est pas installé. Installez git-lfs, puis téléchargez à nouveau.","gitView.hydration.kind.submodule":"Sous-module","gitView.hydration.kind.lfs":"Git LFS","gitView.hydration.status.succeeded":"Terminé","gitView.hydration.status.failed":"Échec","gitView.hydration.status.cancelled":"Annulé","gitView.hydration.status.authorization-required":"Autorisation requise","gitView.hydration.status.invalid":"Configuration incorrecte","gitView.hydration.status.client-missing":"Git LFS non installé","gitView.hydration.status.not-needed":"Non nécessaire","gitView.publish.title":"Publier","gitView.publish.commitKept":"Le commit a été créé en local, mais le push n’a pas abouti.","gitView.publish.syncTitle":"Où synchroniser","gitView.publish.description":"Choisissez où pousser {branch}.","gitView.publish.fetchSource":"Pull depuis","gitView.publish.sourceBranch":"Branche source","gitView.publish.fetchFirst":"Aucune branche n’est encore connue pour ce remote. Faites d’abord un fetch.","gitView.publish.pushDestination":"Push vers","gitView.publish.selectRemote":"Choisir un remote","gitView.publish.destinationBranch":"Branche de destination","gitView.publish.noGrants":"Ce dépôt n'a aucun dépôt distant où publier.","gitView.toast.pushFailed":"Échec du push","gitView.publish.trackingRemoteMismatch":"Cette branche suit un autre dépôt distant.","gitView.publish.trackingRequired":"Cette branche n'a pas encore d'upstream. Publiez-la d'abord.","gitView.publish.remoteNotGranted":"L’identité du dépôt n’atteint pas ce remote. Choisissez-lui une identité dans Configurer le dépôt.","gitView.publish.needsAttention":"L'identité du dépôt demande votre attention. Choisissez-la de nouveau depuis le bouton d'identité.","gitView.publish.contributorCommitFirst":"Vous choisirez où pousser après le commit. Si vous annulez à ce moment, le commit reste en local.","gitView.publish.detached":"Passez sur une branche avant de pousser.","gitView.publish.stale":"La branche ou ses remotes ont changé entre-temps. Rien n’a été poussé ; choisissez à nouveau où pousser.","gitView.publish.cancelled":"Push annulé. Rien n’a été envoyé.","gitView.publish.succeeded":"Poussé",...k.fr,...w.fr,...f.fr,...v.fr,...b.fr,...h.fr,...g.fr,...m.fr,...p.fr,...u.fr,...d.fr,...c.fr,...l.fr,...r.fr,...a.fr,...o.fr,"terminalView.actions.attachSelection":"Joindre la sortie sélectionnée","terminalView.actions.copySelection":"Copier la sortie sélectionnée","terminalView.toast.selectionCopied":"Sortie copiée","terminalView.toast.copyFailed":"Échec de la copie","terminalView.actions.copy":"Copier","terminalView.actions.paste":"Coller","terminalView.toast.pasteFailed":"Impossible de lire le presse-papiers. Utilisez le raccourci clavier pour coller.","terminalView.actions.restart":"Redémarrer le terminal","chat.message.terminalContext":"{terminal}, lignes {start}-{end}","chat.message.context.codeComment":"Commentaire sur {file}, lignes {start}-{end}","chat.message.context.codeCommentLine":"Commentaire sur {file}, ligne {line}","chat.message.context.chatQuote":"Citation d’un message précédent","chat.message.context.showQuoteSource":"Afficher dans le message original","chat.message.context.fileQuote":"Sélection de {file}","chat.chatInput.chatQuoteContext":"Citations du chat","chat.chatInput.chatQuoteContextRemove":"Supprimer les citations du chat","chat.chatInput.contextPreview.selectedLabel":"Texte sélectionné","chat.chatInput.contextPreview.commentLabel":"Commentaire de l’utilisateur","chat.chatInput.contextPreview.edit":"Modifier le commentaire","chat.chatInput.contextPreview.remove":"Supprimer","chat.message.context.browserAnnotation":"Annotation du navigateur ({page})","chat.message.context.prComment":"Commentaire de PR GitHub ({label})","chat.message.context.mrComment":"Commentaire de MR GitLab ({label})","chat.message.context.prCheck":"Vérification de PR GitHub échouée ({label})","chat.message.context.mrCheck":"Job de pipeline GitLab échoué ({label})","chat.chatInput.terminalContext":"{terminal}, lignes {start}-{end}","chat.chatInput.terminalContextRemove":"Supprimer le contexte du terminal","chat.chatInput.prCommentContext":"Commentaires de PR","chat.chatInput.mrCommentContext":"Commentaires de MR","chat.chatInput.prCommentContextRemove":"Retirer le contexte des commentaires de PR","chat.chatInput.prCheckContext":"Vérifications de PR échouées","chat.chatInput.mrCheckContext":"Jobs de pipeline échoués","chat.chatInput.prCheckContextRemove":"Retirer le contexte des vérifications de PR","common.loading":"Chargement...","common.unavailable":"Indisponible","common.language.english":"Anglais","common.language.german":"Allemand","common.language.french":"Français","common.language.simplifiedChinese":"Chinois (simplifié)","common.language.traditionalChinese":"Chinois (traditionnel)","common.language.ukrainian":"Ukrainien","common.language.spanish":"Espagnol","common.language.brazilianPortuguese":"Portugais brésilien","common.language.korean":"Coréen","common.language.polish":"Polonais","common.language.japanese":"Japonais","common.language.turkish":"Turc","common.language.dutch":"Néerlandais","common.revealPath.finder":"Révéler dans le Finder","common.revealPath.fileExplorer":"Ouvrir dans l'explorateur de fichiers","common.revealPath.fileManager":"Ouvrir dans le gestionnaire de fichiers","pwa.installPrompt.description":"Installez OpenChamber pour un accès plus rapide","pwa.installPrompt.action":"Installer","pwa.installPrompt.dismiss":"Ignorer","pwa.installPrompt.started":"Installation démarrée","pwa.installPrompt.installed":"OpenChamber installé","layout.mainTab.chat":"Chat","layout.mainTab.plan":"Plan","layout.mainTab.diff":"Diff","layout.mainTab.files":"Fichiers","layout.mainTab.terminal":"Terminal","layout.mainTab.context":"Contexte","layout.rightSidebar.git":"Git","layout.rightSidebar.files":"Fichiers","layout.rightSidebar.context":"Contexte","layout.services.instance":"Instance","layout.services.usage":"Usage","sessions.sidebar.header.actions.closeSessions":"Fermer les sessions","sessions.sidebar.header.actions.addProject":"Ajouter un projet","sessions.sidebar.header.actions.newSession":"Nouvelle session","sessions.sidebar.header.actions.scheduledTasks":"Tâches planifiées","sessions.scheduledTasks.dialog.title":"Tâches planifiées","sessions.scheduledTasks.dialog.description":"Tâches côté serveur qui envoient des prompts à des sessions nouvelles ou existantes.","sessions.scheduledTasks.dialog.project.label":"Où exécuter","sessions.scheduledTasks.dialog.project.placeholder":"Sélectionnez un projet","sessions.scheduledTasks.dialog.project.empty":"Aucun projet","sessions.scheduledTasks.dialog.project.chats":"Discussions","sessions.scheduledTasks.dialog.actions.newTask":"Nouvelle tâche","sessions.scheduledTasks.dialog.actions.runNow":"Exécuter maintenant","sessions.scheduledTasks.dialog.actions.edit":"Modifier","sessions.scheduledTasks.dialog.actions.editAria":"Modifier {taskName}","sessions.scheduledTasks.dialog.actions.deleteAria":"Supprimer {taskName}","sessions.scheduledTasks.dialog.loading":"Chargement des tâches...","sessions.scheduledTasks.dialog.empty.noTasks":"Aucune tâche planifiée pour l'instant.","sessions.scheduledTasks.dialog.empty.selectProject":"Sélectionnez un projet pour gérer les tâches planifiées.","sessions.scheduledTasks.dialog.error.chooseProjectFirst":"Choisissez d'abord un projet","sessions.scheduledTasks.dialog.toast.loadFailed":"Échec du chargement des tâches planifiées","sessions.scheduledTasks.dialog.toast.saved":"Tâche planifiée enregistrée","sessions.scheduledTasks.dialog.toast.updateFailed":"Échec de la mise à jour de la tâche","sessions.scheduledTasks.dialog.toast.deleted":"Tâche planifiée supprimée","sessions.scheduledTasks.dialog.toast.deleteFailed":"Échec de la suppression de la tâche","sessions.scheduledTasks.dialog.toast.started":"Tâche démarrée","sessions.scheduledTasks.dialog.toast.startedPersistWarning":"Tâche démarrée, mais son statut n’a pas pu être enregistré. Elle peut encore apparaître comme en cours jusqu’à la prochaine exécution réussie.","sessions.scheduledTasks.dialog.toast.runFailed":"Échec de l'exécution de la tâche","sessions.scheduledTasks.dialog.confirm.deleteTask":"Supprimer la tâche planifiée « {taskName} » ?","sessions.scheduledTasks.dialog.confirm.deleteLoopFile":"Supprimer la tâche en boucle « {taskName} » et son fichier Markdown ?","sessions.scheduledTasks.dialog.schedule.daily":"Chaque jour à {time}","sessions.scheduledTasks.dialog.schedule.dailyWithTimezone":"Chaque jour à {time} ({timezone})","sessions.scheduledTasks.dialog.schedule.weekly":"Chaque semaine {days} à {time}","sessions.scheduledTasks.dialog.schedule.weeklyWithTimezone":"Chaque semaine {days} à {time} ({timezone})","sessions.scheduledTasks.dialog.schedule.once":"Une fois le {date} à {time}","sessions.scheduledTasks.dialog.schedule.onceWithTimezone":"Une fois le {date} à {time} ({timezone})","sessions.scheduledTasks.dialog.schedule.cron":"Cron : {cron}","sessions.scheduledTasks.dialog.schedule.cronWithTimezone":"Cron : {cron} ({timezone})","sessions.scheduledTasks.dialog.schedule.unknownDate":"Date inconnue","sessions.scheduledTasks.dialog.schedule.weekdayShort.sun":"Dim","sessions.scheduledTasks.dialog.schedule.weekdayShort.mon":"Lun","sessions.scheduledTasks.dialog.schedule.weekdayShort.tue":"Mar","sessions.scheduledTasks.dialog.schedule.weekdayShort.wed":"Mer","sessions.scheduledTasks.dialog.schedule.weekdayShort.thu":"Jeu","sessions.scheduledTasks.dialog.schedule.weekdayShort.fri":"Ven","sessions.scheduledTasks.dialog.schedule.weekdayShort.sat":"Sam","sessions.scheduledTasks.dialog.schedule.weekdayShort.unknown":"?","sessions.scheduledTasks.dialog.relativeTime.inLessThanOneMinute":"dans <1 m","sessions.scheduledTasks.dialog.relativeTime.justNow":"à l’instant","sessions.scheduledTasks.dialog.relativeTime.inMinutes":"en {count}m","sessions.scheduledTasks.dialog.relativeTime.minutesAgo":"il y a {count} min","sessions.scheduledTasks.dialog.relativeTime.inDuration":"dans {duration}","sessions.scheduledTasks.dialog.relativeTime.durationAgo":"il y a {duration}","sessions.scheduledTasks.dialog.status.success":"Succès","sessions.scheduledTasks.dialog.status.error":"Erreur","sessions.scheduledTasks.dialog.status.running":"En cours d'exécution","sessions.scheduledTasks.dialog.status.idle":"Inactif","sessions.scheduledTasks.dialog.status.queued":"En attente","sessions.scheduledTasks.dialog.status.sent":"Envoyé","sessions.scheduledTasks.dialog.status.skipped":"Ignoré","sessions.scheduledTasks.dialog.status.cancelled":"Annulé","sessions.scheduledTasks.dialog.nextRun.label":"Suivant","sessions.scheduledTasks.dialog.lastRun.label":"Dernière exécution","sessions.scheduledTasks.dialog.lastRun.runningNow":"en cours d’exécution","sessions.scheduledTasks.dialog.lastRun.never":"jamais","sessions.scheduledTasks.dialog.taskToggle.enableAria":"Activer {taskName}","sessions.scheduledTasks.dialog.taskToggle.pauseAria":"Mettre {taskName} en pause","sessions.scheduledTasks.dialog.taskToggle.enabled":"Activé","sessions.scheduledTasks.dialog.taskToggle.paused":"En pause","sessions.scheduledTasks.dialog.loopFile.note":"Gérée par le fichier de boucle {file}","sessions.scheduledTasks.dialog.loopFile.toggleDisabled":"L'activation est contrôlée par le fichier de boucle ; définissez enabled dans le frontmatter Markdown","sessions.scheduledTasks.dialog.loopFile.actionsDisabled":"Les tâches de boucle sont configurées dans leur fichier Markdown .agents/loops","sessions.scheduledTasks.dialog.loopFile.enableOnThisComputer":"Provient de ce dépôt. Activez-la pour l'exécuter sur cet ordinateur.","sessions.scheduledTasks.dialog.loopFile.changedSinceEnabled":"Modifiée depuis son activation. Réactivez-la pour l'exécuter.","sessions.scheduledTasks.editor.title.edit":"Modifier une tâche planifiée","sessions.scheduledTasks.editor.title.new":"Nouvelle tâche planifiée","sessions.scheduledTasks.editor.description":"Planifiez un prompt pour une session nouvelle ou existante.","sessions.scheduledTasks.editor.sessionMode":"Mode de session","sessions.scheduledTasks.editor.newSession":"Nouvelle session","sessions.scheduledTasks.editor.existingSession":"Session existante","sessions.scheduledTasks.editor.targetSession":"Session cible","sessions.scheduledTasks.editor.targetHint":"Attend dans la file de messages que la session soit inactive. Les valeurs par défaut conservent la sélection de la session cible.","sessions.scheduledTasks.editor.targetRequired":"Sélectionnez une session cible.","sessions.scheduledTasks.editor.taskName.label":"Nom de la tâche","sessions.scheduledTasks.editor.taskName.placeholder":"Synchronisation quotidienne","sessions.scheduledTasks.editor.scheduleType.label":"Type d'horaire","sessions.scheduledTasks.editor.scheduleType.daily":"Tous les jours","sessions.scheduledTasks.editor.scheduleType.weekly":"Hebdomadaire","sessions.scheduledTasks.editor.scheduleType.once":"Une fois","sessions.scheduledTasks.editor.scheduleType.cron":"Cron","sessions.scheduledTasks.editor.date.label":"Date","sessions.scheduledTasks.editor.date.placeholder":"Sélectionnez une date","sessions.scheduledTasks.editor.date.previousMonth":"Mois précédent","sessions.scheduledTasks.editor.date.nextMonth":"Mois prochain","sessions.scheduledTasks.editor.date.jumpToToday":"Aller à aujourd'hui","sessions.scheduledTasks.editor.date.today":"Aujourd'hui","sessions.scheduledTasks.editor.time.label":"Heure","sessions.scheduledTasks.editor.time.hourAria":"Heures","sessions.scheduledTasks.editor.time.minuteAria":"Minutes","sessions.scheduledTasks.editor.time.periodAria":"Période","sessions.scheduledTasks.editor.time.period.am":"AM","sessions.scheduledTasks.editor.time.period.pm":"PM","sessions.scheduledTasks.editor.times.label":"Heures","sessions.scheduledTasks.editor.times.add":"Ajouter une heure","sessions.scheduledTasks.editor.times.removeAria":"Supprimer l'heure","sessions.scheduledTasks.editor.timezone.label":"Fuseau horaire","sessions.scheduledTasks.editor.weekdays.label":"Jours de la semaine","sessions.scheduledTasks.editor.model.label":"Modèle","sessions.scheduledTasks.editor.thinkingLevel.label":"Niveau de réflexion","sessions.scheduledTasks.editor.thinkingLevel.default":"Défaut","sessions.scheduledTasks.editor.agent.label":"Agent","sessions.scheduledTasks.editor.prompt.label":"Prompt","sessions.scheduledTasks.editor.prompt.placeholder":"Résumer les tâches ouvertes et proposer les prochaines actions","sessions.scheduledTasks.editor.enabled.aria":"Activer la tâche","sessions.scheduledTasks.editor.enabled.label":"Activé","sessions.scheduledTasks.editor.goal.label":"Exécuter comme objectif","sessions.scheduledTasks.editor.goal.aria":"Exécuter cette tâche comme un objectif que l'agent poursuit jusqu'au bout","sessions.scheduledTasks.editor.goal.budgetLabel":"Budget de tokens","sessions.scheduledTasks.editor.goal.budgetAria":"Limiter l’objectif à un budget de tokens","sessions.scheduledTasks.editor.permissionAutoAccept.label":"Accepter automatiquement les autorisations","sessions.scheduledTasks.editor.permissionAutoAccept.aria":"Démarrer la session de la tâche avec l’acceptation automatique des autorisations activée","sessions.scheduledTasks.editor.actions.closeAria":"Fermer","sessions.scheduledTasks.editor.actions.cancel":"Annuler","sessions.scheduledTasks.editor.actions.save":"Enregistrer","sessions.scheduledTasks.editor.actions.saving":"Enregistrement...","sessions.scheduledTasks.editor.toast.saveFailed":"Échec de l'enregistrement de la tâche","sessions.scheduledTasks.editor.validation.taskNameRequired":"Le nom de la tâche est obligatoire","sessions.scheduledTasks.editor.validation.promptRequired":"Un prompt est requis","sessions.scheduledTasks.editor.validation.modelRequired":"Le modèle est requis","sessions.scheduledTasks.editor.validation.dateFormat":"La date doit utiliser AAAA-MM-JJ","sessions.scheduledTasks.editor.validation.timeFormat":"L'heure doit utiliser HH : mm","sessions.scheduledTasks.editor.validation.atLeastOneTime":"Ajoutez au moins une heure valide","sessions.scheduledTasks.editor.validation.atLeastOneWeekday":"Sélectionnez au moins un jour de la semaine","sessions.scheduledTasks.editor.validation.timezoneRequired":"Le fuseau horaire est requis","sessions.scheduledTasks.editor.validation.cronRequired":"Une expression cron est requise","sessions.scheduledTasks.editor.validation.cronInvalid":"Expression cron invalide","sessions.scheduledTasks.editor.cronExpression.label":"Expression cron","sessions.scheduledTasks.editor.cronExpression.placeholder":"*/5 * * * *","sessions.scheduledTasks.editor.cronExpression.nextRuns":"Prochaines exécutions","sessions.scheduledTasks.editor.cronExpression.examples":"Exemples","sessions.scheduledTasks.editor.cronExpression.examples.every5min":"Toutes les 5 minutes","sessions.scheduledTasks.editor.cronExpression.examples.everyHour":"Toutes les heures","sessions.scheduledTasks.editor.cronExpression.examples.monday9am":"Chaque lundi à 9 h","sessions.scheduledTasks.editor.cronExpression.examples.9am5pm":"9 h et 17 h chaque jour","sessions.scheduledTasks.editor.cronExpression.examples.firstOfMonth":"Premier jour de chaque mois","multirun.launcher.project.empty":"Ajoutez d'abord un projet.","multirun.launcher.toast.partialFailure":"Certaines sessions n’ont pas pu être créées. Échecs : {failed}.","multirun.modelMultiSelect.actions.addModel":"Ajouter un modèle","multirun.modelMultiSelect.search.placeholder":"Rechercher des modèles","multirun.modelMultiSelect.search.noResults":"Aucun modèle trouvé","multirun.modelMultiSelect.sections.favorites":"Favoris","multirun.modelMultiSelect.sections.recent":"Récents","multirun.modelMultiSelect.variant.placeholder":"Pensée","multirun.modelMultiSelect.variant.default":"Défaut","multirun.modelMultiSelect.keyboard.hint":"↑↓ naviguer • Entrer sélectionner • Esc fermer","multirun.modelMultiSelect.validation.minOnly":"Sélectionnez au moins {min} modèles.","multirun.modelMultiSelect.validation.minToMax":"Sélectionnez entre {min} et {max} modèles.","multirun.agentSelector.placeholder":"Sélectionnez un agent","multirun.fusion.model.placeholder":"Modèle","multirun.fusion.actions.start":"Démarrer la fusion","multirun.fusion.actions.starting":"Démarrage...","multirun.fusion.toast.noOutputs":"Aucune sortie assistante trouvée pour fusionner.","multirun.fusion.toast.failed":"Échec du démarrage de la fusion.","sessions.sidebar.header.actions.searchSessions":"Rechercher des sessions","sessions.sidebar.header.actions.exitSelection":"Quitter la sélection","sessions.sidebar.header.actions.selectSessions":"Sélectionner des sessions","sessions.sidebar.header.actions.sortProjects":"Trier les projets","sessions.sidebar.header.actions.sortWorktrees":"Trier les worktrees","sessions.sidebar.header.worktreeSort.recent":"Activité récente","sessions.sidebar.header.actions.sessionDisplayMode":"Mode d'affichage des sessions","sessions.sidebar.header.displayMode.label":"Mode d'affichage","sessions.sidebar.header.displayMode.default":"Défaut","sessions.sidebar.header.displayMode.minimal":"Minimal","sessions.sidebar.header.displayMode.showRecent":"Afficher la section récente","sessions.sidebar.header.displayMode.collapseAll":"Tout réduire","sessions.sidebar.header.displayMode.expandAll":"Tout développer","sessions.sidebar.header.projectSort.manual":"Manuel","sessions.sidebar.header.projectSort.aToZ":"A → Z","sessions.sidebar.header.projectSort.zToA":"Z → A","sessions.sidebar.header.projectSort.dateAdded":"Les plus récentes","sessions.sidebar.header.projectSort.recent":"Récentes","sessions.sidebar.header.search.matchCountSingle":"Correspondance {count}","sessions.sidebar.header.search.matchCountPlural":"Correspondances {count}","sessions.sidebar.header.search.escapeHint":"Echap pour effacer","sessions.sidebar.header.search.placeholder":"Rechercher des sessions...","sessions.sidebar.header.search.clear":"Effacer la recherche","sessions.sidebar.footer.actions.settings":"Paramètres","sessions.sidebar.footer.actions.shortcuts":"Raccourcis","sessions.sidebar.footer.actions.aboutOpenChamber":"À propos de OpenChamber","sessions.sidebar.footer.actions.update":"Mise à jour","sessions.sidebar.footer.actions.updateApp":"Mettre à jour l’app","sessions.sidebar.empty.noSessions.title":"Aucune session pour l'instant","sessions.sidebar.empty.noSessions.description":"Créez votre première session pour commencer à coder.","sessions.sidebar.empty.noMatches.title":"Aucune session correspondante","sessions.sidebar.empty.noMatches.description":"Essayez un autre titre, branche, dossier ou chemin.","sessions.sidebar.empty.noMatches.searchArchive":"Rechercher dans les archives","sessions.sidebar.activity.recentTitle":"récent","sessions.sidebar.activity.chatsTitle":"discussions","sessions.sidebar.activity.timelineTitle":"Projets","sessions.sidebar.header.viewMode.label":"Affichage","sessions.sidebar.header.viewMode.projects":"Groupé","sessions.sidebar.header.viewMode.timeline":"Chronologie","sessions.sidebar.activity.chatsEmpty":"Aucune discussion pour le moment.","chat.chatInput.chooseProject":"Choisir un projet","sessions.archivePage.allDirectories":"Tous les répertoires","sessions.sidebar.header.projectDisplay.label":"Afficher les projets","sessions.sidebar.header.projectDisplay.all":"Tous les projets","sessions.sidebar.header.projectDisplay.single":"Un projet","sessions.sidebar.project.selectAria":"Sélectionner un projet, actuellement {project}","sessions.sidebar.project.actions.manageWorktrees":"Gérer les worktrees","sessions.worktreesPage.title":"Worktrees dans {project}","sessions.worktreesPage.description":"Créez, inspectez et supprimez les worktrees git de ce projet.","sessions.worktreesPage.closeAria":"Fermer les worktrees","sessions.scheduledTasks.page.closeAria":"Fermer les tâches planifiées","sessions.sidebar.nav.archive":"Archives","sessions.archivePage.title":"Archives","sessions.archivePage.countSingle":"{count} session archivée","sessions.archivePage.countPlural":"{count} sessions archivées","sessions.archivePage.closeAria":"Fermer les archives","sessions.archivePage.searchPlaceholder":"Rechercher des sessions archivées","sessions.archivePage.empty.noArchived":"Aucune session archivée","sessions.archivePage.empty.noMatches":"Aucune session archivée correspondante","sessions.archivePage.otherProjects":"autres projets","sessions.archivePage.deleteProject":"Supprimer toutes les sessions archivées de ce projet","sessions.archivePage.deleteProjectAria":"Supprimer toutes les sessions archivées de {label}","sessions.archivePage.deleteSessionAria":"Supprimer {title}","sessions.archivePage.restoreSessionAria":"Restaurer {title}","sessions.switcher.openAria":"Sélecteur de session ouvert","header.sessionTabs.stripAria":"Sessions ouvertes","header.github.connectedWithLogin":"GitHub : {login}","header.github.connected":"GitHub connecté","header.github.avatarWithLogin":"Avatar {login}","header.github.avatar":"Avatar GitHub","header.gitlab.avatar":"Avatar GitLab","header.github.accountsTitle":"Comptes GitHub","header.github.accountSource.oauth":"OAuth","header.github.accountSource.cli":"CLI","header.sessionTabs.tabMenuAria":"Actions de l'onglet de session","header.sessionTabs.closeTab":"Fermer l'onglet","header.sessionTabs.closeOtherTabs":"Fermer les autres onglets","sessions.switcher.empty":"Aucune session récente","sessions.switcher.draftTitle":"Nouvelle session","sessions.sidebar.updateCheck.errorTitle":"Échec de la vérification des mises à jour","sessions.sidebar.updateCheck.latestVersion":"Vous êtes sur la dernière version","sessions.sidebar.directory.errorAddProjectTitle":"Échec de l'ajout du projet","sessions.sidebar.directory.errorAddProjectDescription":"Veuillez sélectionner un répertoire valide.","sessions.sidebar.directory.errorSelectDirectoryTitle":"Échec de la sélection du répertoire","sessions.sidebar.folder.newFolderName":"Nouveau dossier","sessions.sidebar.bulkActions.delete":"Supprimer","sessions.sidebar.bulkActions.archive":"Archive","sessions.sidebar.bulkActions.selectedCount":"{count} sélectionné","sessions.sidebar.bulkActions.moveToFolder":"Déplacer vers le dossier","sessions.sidebar.bulkActions.deletedSingle":"Session {count} supprimée","sessions.sidebar.bulkActions.deletedPlural":"Sessions {count} supprimées","sessions.sidebar.bulkActions.failedDeleteSingle":"Échec de la suppression de la session {count}","sessions.sidebar.bulkActions.failedDeletePlural":"Échec de la suppression des sessions {count}","sessions.sidebar.bulkActions.archivedSingle":"Session {count} archivée","sessions.sidebar.bulkActions.archivedPlural":"Sessions {count} archivées","sessions.sidebar.bulkActions.failedArchiveSingle":"Échec de l'archivage de la session {count}","sessions.sidebar.bulkActions.failedArchivePlural":"Échec de l'archivage des sessions {count}","sessions.sidebar.bulkActions.restore":"Restaurer","sessions.sidebar.bulkActions.restoredSingle":"Session {count} restaurée","sessions.sidebar.bulkActions.restoredPlural":"Sessions {count} restaurées","sessions.sidebar.bulkActions.failedRestoreSingle":"Échec de la restauration de la session {count}","sessions.sidebar.bulkActions.failedRestorePlural":"Échec de la restauration des sessions {count}","sessions.sidebar.folders.none":"Aucun dossier pour l'instant","sessions.sidebar.folders.newFolderEllipsis":"Nouveau dossier...","sessions.sidebar.folders.removeFromFolder":"Supprimer du dossier","sessions.sidebar.folders.moveToFolder":"Déplacer vers le dossier","sessions.sidebar.project.actions.newWorktree":"Nouveau worktree","sessions.sidebar.project.actions.newWorktreeEllipsis":"Nouveau worktree...","sessions.sidebar.project.actions.projectMenu":"Menu Projet","sessions.sidebar.project.actions.newSession":"Nouvelle session","sessions.sidebar.project.actions.closeProject":"Fermer le projet","sessions.sidebar.project.actions.edit":"Modifier","sessions.sidebar.project.actions.newDraftSession":"Nouveau brouillon de session","sessions.sidebar.session.menu.rename":"Renommer","sessions.sidebar.session.menu.copyId":"Copier l’ID de session","sessions.sidebar.session.copyId.success":"ID de session copié","sessions.sidebar.session.copyId.error":"Impossible de copier l’ID de session","header.sessionActions.openAria":"Ouvrir les actions de session","sessions.sidebar.session.rename.save":"Enregistrer le nom de la session","sessions.sidebar.session.rename.cancel":"Annuler le renommage de la session","sessions.sidebar.session.menu.unpin":"Désépingler la session","sessions.sidebar.session.menu.pin":"Épingler la session","sessions.sidebar.work.title":"En cours","sessions.sidebar.session.work.track":"Suivre comme en cours","sessions.sidebar.session.work.markDone":"Marquer comme terminé","sessions.sidebar.session.work.doneSuggested":"Semble terminé","sessions.sidebar.session.work.updateFailed":"Impossible de mettre à jour la session","chat.work.doneHint.text":"Ce travail semble terminé.","chat.work.doneHint.action":"Marquer comme terminé","chat.work.reviewHint.text":"Les modifications sont prêtes à être relues.","chat.work.reviewHint.aiReview":"Revue IA","chat.backgroundShells.aria":"Commandes en arrière-plan","chat.backgroundShells.count":"Commandes en arrière-plan : {count}","chat.backgroundShells.subagent":"sous-agent","chat.backgroundShells.stop":"Arrêter","chat.backgroundShells.stopAria":"Arrêter {command}","chat.backgroundShells.elapsed":"En cours depuis {duration}","sessions.sidebar.session.menu.share":"Partager","sessions.sidebar.session.menu.copied":"Copié","sessions.sidebar.session.menu.copyLink":"Copier le lien","sessions.sidebar.session.menu.unshare":"Annuler le partage","sessions.sidebar.session.menu.exportMarkdown":"Exporter le Markdown","sessions.sidebar.session.menu.moveToWorktree":"Déplacer vers un nouveau worktree","sessions.sidebar.session.menu.moveToWorktreeTargets":"Déplacer vers un worktree","sessions.sidebar.session.menu.newWorktree":"Nouveau worktree...","sessions.sidebar.session.moveToWorktree.success":"Session déplacée vers un nouveau worktree","sessions.sidebar.session.moveToWorktree.failed":"Impossible de déplacer la session vers un nouveau worktree","sessions.sidebar.session.moveToWorktree.outcomeUnknown":"Le nouveau worktree a été conservé : le déplacement peut encore aboutir côté serveur.","sessions.sidebar.session.moveToWorktree.main":"Worktree principal","sessions.sidebar.session.moveToWorktree.refreshing":"Actualisation des worktrees...","sessions.sidebar.session.moveToWorktree.loadFailed":"Impossible de charger les worktrees","sessions.sidebar.session.moveToWorktree.current":"Worktree actuel","sessions.sidebar.session.moveToWorktree.existingSuccess":"Session déplacée vers le worktree","sessions.sidebar.session.moveToWorktree.existingFailed":"Impossible de déplacer la session vers le worktree","sessions.sidebar.session.moveToWorktree.tooltipTargets":"Affiche les worktrees existants et l’option d’en créer un nouveau pour cette session.","sessions.sidebar.session.moveToWorktree.tooltip":"Crée un nouveau worktree depuis la branche actuelle et y déplace cette session et ses sous-sessions. Les modifications non validées restent dans le worktree source.","sessions.sidebar.session.moveToWorktree.tooltipBusy":"Disponible lorsque la session est inactive. Arrêtez l’activité en cours ou attendez sa fin.","sessions.sidebar.session.moveToWorktree.tooltipMoving":"Cette session est déjà en cours de déplacement vers un nouveau worktree.","sessions.sidebar.session.menu.openInSidePanel":"Ouvrir dans le panneau latéral","sessions.sidebar.session.actions.openInEditor":"Ouvrir dans l'éditeur","sessions.sidebar.session.menu.betaBadge":"bêta","sessions.sidebar.session.menu.label":"Menu des sessions","sessions.sidebar.session.untitled":"Session sans titre","sessions.sidebar.session.export.nothingToExport":"Rien à exporter","sessions.sidebar.session.export.failedLoadHistory":"Impossible de charger l’historique complet de la session","sessions.sidebar.session.export.success":"Session exportée","sessions.sidebar.session.export.failedRevealPath":"Impossible de révéler le chemin","sessions.sidebar.session.export.untitledSubagent":"Sous-agent sans titre","sessions.sidebar.session.export.skippedSubtaskSingle":"Session exportée, mais tâche de sous-agent {count} ignorée qui n'a pas pu être chargée.","sessions.sidebar.session.export.skippedSubtaskMany":"Session exportée, mais tâches du sous-agent {count} ignorées qui n'ont pas pu être chargées.","sessions.sidebar.session.export.dialog.title":"Exporter le Markdown","sessions.sidebar.session.export.dialog.descriptionSingle":"Cette session comporte une tâche de sous-agent {count}. L'inclure dans l'exportation ?","sessions.sidebar.session.export.dialog.descriptionMany":"Cette session comporte des tâches de sous-agent {count}. Les inclure dans l'exportation ?","sessions.sidebar.session.export.dialog.includeSubtasks":"Inclure les tâches des sous-agents","sessions.sidebar.session.export.dialog.confirm":"Exporter","sessions.sidebar.session.status.active":"Session active","sessions.sidebar.session.status.unread":"Mises à jour non lues","sessions.sidebar.session.status.backgroundSubagent":"Sous-agent en cours en arrière-plan","sessions.sidebar.session.status.backgroundCommand":"Commande en cours en arrière-plan","sessions.sidebar.session.status.pinned":"Session épinglée","sessions.sidebar.session.status.movingToWorktree":"Déplacement de la session vers un nouveau worktree","sessions.sidebar.session.status.permissionRequired":"Autorisation requise","sessions.sidebar.session.status.questionPendingSingle":"1 question en attente","sessions.sidebar.session.status.questionPendingMany":"{count} questions en attente","sessions.sidebar.session.status.questionPending":"Question en attente","sessions.sidebar.session.status.activeFor":"Active depuis {duration}","sessions.sidebar.session.status.lastTurnDuration":"Le dernier tour a duré {duration}","sessions.sidebar.session.subsessions.collapse":"Réduire les sous-sessions","sessions.sidebar.session.subsessions.expand":"Développer les sous-sessions","sessions.sidebar.dialogs.deleteSession.title":"Supprimer la session ?","sessions.sidebar.dialogs.archiveSession.title":"Archiver la session ?","sessions.sidebar.dialogs.deleteSession.withOneSubtask":'"{sessionTitle}" et sa sous-tâche {count} seront définitivement supprimées.',"sessions.sidebar.dialogs.deleteSession.withManySubtasks":'"{sessionTitle}" et ses sous-tâches {count} seront définitivement supprimées.',"sessions.sidebar.dialogs.archiveSession.withOneSubtask":'"{sessionTitle}" et sa sous-tâche {count} seront archivées.',"sessions.sidebar.dialogs.archiveSession.withManySubtasks":'"{sessionTitle}" et ses sous-tâches {count} seront archivées.',"sessions.sidebar.dialogs.deleteSession.single":'"{sessionTitle}" sera définitivement supprimé.',"sessions.sidebar.dialogs.archiveSession.single":'"{sessionTitle}" sera archivé.',"sessions.sidebar.dialogs.neverAsk":"Ne plus demander","sessions.sidebar.dialogs.cancel":"Annuler","sessions.sidebar.dialogs.deleteSession.titleAction":"Supprimer la session","sessions.sidebar.dialogs.deleteSessions.titleAction":"Supprimer des sessions","sessions.sidebar.dialogs.deleteSessions.title":"Supprimer des sessions ?","sessions.sidebar.dialogs.archiveSessions.title":"Archiver des sessions ?","sessions.sidebar.dialogs.deleteSessions.singleDescription":"La session {count} sera définitivement supprimée.","sessions.sidebar.dialogs.deleteSessions.pluralDescription":"Les sessions {count} seront définitivement supprimées.","sessions.sidebar.dialogs.archiveSessions.singleDescription":"La session {count} sera archivée.","sessions.sidebar.dialogs.archiveSessions.pluralDescription":"Les sessions {count} seront archivées.","sessions.sidebar.dialogs.deleteFolder.title":"Supprimer le dossier ?","sessions.sidebar.dialogs.deleteFolder.withOneSubfolder":'"{folderName}" sera supprimé avec le sous-dossier {count}. Les sessions à l’intérieur ne seront pas supprimées.',"sessions.sidebar.dialogs.deleteFolder.withManySubfolders":'"{folderName}" sera supprimé avec les sous-dossiers {count}. Les sessions à l’intérieur ne seront pas supprimées.',"sessions.sidebar.dialogs.deleteFolder.withContentsNoSubfolders":'"{folderName}" sera supprimé. Les sessions à l’intérieur ne seront pas supprimées.',"sessions.sidebar.dialogs.deleteFolder.single":'"{folderName}" sera définitivement supprimé.',"sessions.sidebar.dialogs.deleteResult.singleFailedToDelete":"La session {count} n'a pas pu être supprimée.","sessions.sidebar.dialogs.deleteResult.manyFailedToDelete":"Les sessions {count} n'ont pas pu être supprimées.","sessions.sidebar.dialogs.deleteResult.removedFromDate":"Suppression de toutes les sessions de {dateLabel}.","sessions.sidebar.dialogs.deleteResult.tryAgain":"Veuillez réessayer dans un instant.","sessions.sidebar.dialogs.worktreeDelete.descriptionNoLinked":"Cela supprime le worktree sélectionné.","sessions.sidebar.dialogs.worktreeDelete.descriptionOneLinked":"Cela supprime le worktree sélectionné et archive la session liée {count}.","sessions.sidebar.dialogs.worktreeDelete.descriptionManyLinked":"Cela supprime le worktree sélectionné et archive les {count} sessions liées.","sessions.sidebar.dialogs.sessionDelete.descriptionOne":"Cette action supprime définitivement 1 session.","sessions.sidebar.dialogs.sessionDelete.descriptionOneWithDate":"Cette action supprime définitivement 1 session de {dateLabel}.","sessions.sidebar.dialogs.sessionDelete.descriptionMany":"Cette action supprime définitivement les sessions {count}.","sessions.sidebar.dialogs.sessionDelete.descriptionManyWithDate":"Cette action supprime définitivement les sessions {count} de {dateLabel}.","sessions.sidebar.dialogs.sessionList.more":"+ {count} de plus","sessions.sidebar.session.share.successTitle":"Session partagée","sessions.sidebar.session.share.successDescription":"Le lien de partage a été copié dans le presse-papiers.","sessions.sidebar.session.share.error":"Impossible de partager la session","sessions.sidebar.session.rename.error":"Impossible de renommer la session. {detail}","sessions.sidebar.session.action.upstreamErrorWithRef":"OpenCode a répondu {status} {name} (réf {ref}). Cherchez cette réf dans le journal OpenCode.","sessions.sidebar.session.action.upstreamError":"OpenCode a répondu {status} : {message}","sessions.sidebar.session.action.noDetails":"aucun détail","sessions.sidebar.session.share.copyUrlError":"Échec de la copie de l’URL","sessions.sidebar.session.unshare.success":"Session non partagée","sessions.sidebar.session.unshare.error":"Impossible d'annuler le partage de session","sessions.sidebar.session.delete.success":"Session supprimée","sessions.sidebar.session.delete.error":"Échec de la suppression de la session","sessions.sidebar.session.archive.success":"Session archivée","sessions.sidebar.session.archive.undo":"Annuler","sessions.sidebar.session.archive.error":"Échec de l'archivage de la session","sessions.sidebar.session.restore.success":"Session restaurée","sessions.sidebar.session.restore.error":"Échec de la restauration de la session","sessions.sidebar.group.pr.checksPassed":"Contrôles {success}/{total} réussis","sessions.sidebar.group.pr.failingCount":"Échec de {count}","sessions.sidebar.group.pr.pendingCount":"{count} en attente","sessions.sidebar.group.pr.conflictsOrBlocked":"Conflits ou blocage","sessions.sidebar.group.pr.mergeable":"Fusionnable","sessions.sidebar.group.pr.mergeState":"État de fusion : {state}","sessions.sidebar.group.pr.status.merged":"Fusionné","sessions.sidebar.group.pr.status.readyToMerge":"Prêt à fusionner","sessions.sidebar.group.pr.status.open":"PR ouverte","sessions.sidebar.group.mr.status.open":"MR ouverte","sessions.sidebar.group.pr.status.mergeConflicts":"Conflits de fusion","sessions.sidebar.group.pr.status.mergeBlocked":"Fusion bloquée","sessions.sidebar.group.pr.status.checksFailing":"Vérifications en échec","sessions.sidebar.group.issue.status.open":"Issue ouverte","sessions.sidebar.group.issue.status.completed":"Terminée","sessions.sidebar.group.issue.status.notPlanned":"Non planifiée","sessions.sidebar.group.pr.status.draft":"PR en brouillon","sessions.sidebar.group.mr.status.draft":"MR en brouillon","sessions.sidebar.group.pr.status.closed":"Fermé","sessions.sidebar.group.empty.noArchivedSessions":"Aucune session archivée pour l'instant.","sessions.sidebar.group.empty.noSessionsInWorkspace":"Aucune session dans cet espace de travail pour le moment.","sessions.sidebar.group.empty.startSession":"Démarrer une session","sessions.sidebar.group.showMoreSingle":"Afficher {count} session de plus","sessions.sidebar.group.showMorePlural":"Afficher {count} sessions de plus","sessions.sidebar.group.showFewer":"Afficher moins de sessions","sessions.sidebar.group.expandAria":"Développer {label}","sessions.sidebar.group.collapseAria":"Réduire {label}","sessions.sidebar.group.actions.deleteArchivedInGroupAria":"Supprimer les sessions archivées dans {label}","sessions.sidebar.group.actions.deleteArchivedSessions":"Supprimer les sessions archivées","sessions.sidebar.group.actions.deleteGroupAria":"Supprimer {label}","sessions.sidebar.group.actions.deleteWorktree":"Supprimer ce worktree","sessions.sidebar.group.actions.deleteWorktreeAndBranch":"Supprimer ce worktree et la branche locale","sessions.sidebar.group.actions.deleteGroupAndBranchAria":"Supprimer {label} et sa branche locale","sessions.sidebar.group.actions.newDraftInGroupAria":"Nouvelle session de brouillon dans {label}","sessions.sidebar.grouping.projectRoot":"racine du projet","sessions.sidebar.grouping.projectRootWithBranch":"racine du projet : {branch}","sessions.sidebar.grouping.archived":"archivé","sessions.sidebar.grouping.archivedDescription":"Sessions archivées et non attribuées","sessions.sidebar.folderItem.expandAria":"Développer le dossier {folderName}","sessions.sidebar.folderItem.collapseAria":"Réduire le dossier {folderName}","sessions.sidebar.folderItem.namePlaceholder":"Nom du dossier","sessions.sidebar.folderItem.newSessionAria":"Nouvelle session dans {folderName}","sessions.sidebar.folderItem.newSubfolderAria":"Nouveau sous-dossier dans {folderName}","sessions.sidebar.folderItem.newSubfolder":"Nouveau sous-dossier","sessions.sidebar.folderItem.renameAria":"Renommer le dossier {folderName}","sessions.sidebar.folderItem.deleteArchivedInFolderAria":"Supprimer les sessions archivées dans le dossier {folderName}","sessions.sidebar.folderItem.deleteFolderAria":"Supprimer le dossier {folderName}","sessions.sidebar.folderItem.emptyFolder":"Dossier vide","sessions.sidebar.sessionDialogs.ok":"OK","sessions.sidebar.sessionDialogs.linkedSessionSingle":"Session liée","sessions.sidebar.sessionDialogs.linkedSessionPlural":"Sessions liées","sessions.sidebar.sessionDialogs.delete.note":"Les répertoires Worktree restent intacts. Les sous-sessions liées aux sessions sélectionnées seront également supprimées.","sessions.sidebar.sessionDialogs.directory.errorSelectTitle":"Échec de la sélection du répertoire","sessions.sidebar.sessionDialogs.directory.errorOpenTitle":"Échec de l'ouverture du répertoire","sessions.sidebar.sessionDialogs.directory.errorOpenDescription":"Desktop n'a pas pu accorder l'accès aux fichiers.","sessions.sidebar.sessionDialogs.directory.errorAddProjectTitle":"Échec de l'ajout du projet","sessions.sidebar.sessionDialogs.directory.errorAddProjectDescription":"Veuillez sélectionner un chemin de répertoire valide.","sessions.sidebar.sessionDialogs.worktree.errorRemoveTitle":"Échec de la suppression du worktree « {name} »","sessions.sidebar.sessionDialogs.worktree.removingTitle":"Suppression du worktree « {name} »…","sessions.sidebar.sessionDialogs.worktree.removedTitle":"Worktree « {name} » supprimé","sessions.sidebar.sessionDialogs.worktree.removed":"Worktree supprimé.","sessions.sidebar.sessionDialogs.worktree.removedWithRemote":"Worktree et branche du dépôt distant supprimés.","sessions.sidebar.sessionDialogs.worktree.attachedArchived":"Worktree associé archivé.","sessions.sidebar.sessionDialogs.worktree.attachedArchivedPlural":"Worktrees associés archivés.","sessions.sidebar.sessionDialogs.worktree.archivedAndRemoteRemoved":"Worktrees archivés et branches du dépôt distant supprimées.","sessions.sidebar.group.worktreeMissing":"Le dossier du worktree est introuvable","sessions.mergedCleanup.toast.removedTitle":"{name} nettoyé : PR #{number} fusionnée","sessions.mergedCleanup.toast.mr.removedTitle":"{name} nettoyé : MR !{number} fusionnée","sessions.mergedCleanup.toast.removedDescription":"Ses sessions sont archivées, le worktree et sa branche locale sont supprimés.","sessions.mergedCleanup.toast.archivedTitle":"Sessions de {name} archivées : PR #{number} fusionnée","sessions.mergedCleanup.toast.mr.archivedTitle":"Sessions de {name} archivées : MR !{number} fusionnée","sessions.mergedCleanup.toast.archivedDescription":"Le worktree est conservé : il contient des modifications ou des commits absents de la PR fusionnée.","sessions.mergedCleanup.toast.mr.archivedDescription":"Le worktree est conservé : il contient des modifications ou des commits absents de la MR fusionnée.","sessions.mergedCleanup.toast.failedTitle":"Impossible de nettoyer {name} après la fusion de la PR #{number}","sessions.mergedCleanup.toast.mr.failedTitle":"Impossible de nettoyer {name} après la fusion de la MR !{number}","sessions.sidebar.session.restore.relocatedTitle":"Session déplacée dans le dossier du projet","sessions.sidebar.session.restore.relocatedDescription":"Son dossier de worktree n'existe plus, elle travaille donc désormais dans {project}.","sessions.sidebar.session.restore.relocateFailed":"Impossible de déplacer la session restaurée hors de son dossier de worktree introuvable","sessions.sidebar.group.worktreeRemoving":"Suppression du worktree…","sessions.sidebar.project.folderMissing":"Le dossier du projet est introuvable ou indisponible","sessions.sidebar.group.space":"Espace isolé","sessions.sidebar.group.spaceStale":"L’espace ne répond pas. Les sessions sont peut-être obsolètes.","sessions.sidebar.grouping.spaceUnnamed":"Espace isolé","sessions.sidebar.sessionDialogs.worktree.label":"Worktree","sessions.sidebar.sessionDialogs.worktree.pathUnavailable":"Chemin du worktree indisponible.","sessions.sidebar.sessionDialogs.worktree.uncommittedWarning":"Les modifications non validées seront ignorées.","sessions.sidebar.sessionDialogs.actions.deleteRemoteBranch":"Supprimer la branche du dépôt distant","sessions.sidebar.sessionDialogs.actions.remoteBranchInfoUnavailable":"Informations sur la branche du dépôt distant indisponibles","sessions.sidebar.sessionDialogs.actions.deleteLocalBranch":"Supprimer la branche locale","sessions.sidebar.sessionDialogs.actions.deleting":"Suppression…","sessions.sidebar.sessionDialogs.actions.deleteWorktree":"Supprimer le worktree","gitView.branch.branchToMergeInto":"Branche à fusionner avec {branch}","gitView.branch.branchToRebaseOnto":"Branche sur laquelle rebaser","gitView.branch.create":"Créer une nouvelle branche...","gitView.branch.currentBadge":"Actuel","gitView.branch.currentBranchFallback":"branche actuelle","gitView.branch.currentBranchTooltip":"Branche actuelle","gitView.branch.detachedHead":"HEAD détaché","gitView.branch.dialogDescriptionPrefix":"Choisissez comment intégrer une autre branche","gitView.branch.empty":"Aucune branche trouvée.","gitView.branch.localBranches":"Branches locales","gitView.branch.mergeDescription":"Créez un commit de fusion et conservez l’historique des branches.","gitView.branch.mergeRebase":"Fusionner/Rebase","gitView.branch.mergeRebaseTooltip":"Mettez à jour cette branche depuis une autre branche.","gitView.branch.mergingInProgress":"Fusion en cours","gitView.branch.namePlaceholder":"Nom de la branche","gitView.branch.newBranchPlaceholder":"Nouveau nom de branche","gitView.branch.noLocalBranches":"Aucune branche locale","gitView.branch.noRemoteBranches":"Aucune branche du dépôt distant","gitView.branch.operation":"Opération","gitView.branch.operationCompleted":"Opération terminée","gitView.branch.operationFailed":"Échec de l'opération","gitView.branch.rebaseDescription":"Rejouez vos commits au-dessus de la branche sélectionnée.","gitView.branch.rebasingInProgress":"Rebasage en cours","gitView.branch.remoteBranches":"Branches du dépôt distant","gitView.branch.renameTitle":"Renommer la branche","gitView.branch.renameSave":"Enregistrer le nom de la branche","gitView.branch.renameSaving":"Enregistrer le nom de la branche","gitView.branch.renameCancel":"Annuler le changement de nom de la branche","gitView.branch.searchPlaceholder":"Rechercher des branches...","gitView.branch.selectBranch":"Sélectionnez une branche","gitView.branch.summaryMergeInfix":"dans","gitView.branch.summaryMergePrefix":"Cela fusionnera","gitView.branch.summaryRebaseInfix":"sur","gitView.branch.summaryRebasePrefix":"Cela va rebaser","gitView.branch.updateDescriptionPrefix":"Apportez les dernières modifications dans","gitView.branch.updateTitle":"Mettre à jour la branche","gitView.changes.changedFilesAria":"Fichiers modifiés","gitView.changes.clearSelectionAria":"Effacer la sélection de fichiers","gitView.changes.collapseDirectoryAria":"Réduire le répertoire","gitView.changes.expandDirectoryAria":"Développer le répertoire","gitView.changes.revertAll":"Tout rétablir","gitView.changes.revertAllDescriptionPlural":"Rétablir toutes les modifications sélectionnées ?","gitView.changes.revertAllDescriptionSingle":"Rétablir la modification sélectionnée ?","gitView.changes.revertAllDialogTitle":"Annuler toutes les modifications ?","gitView.changes.revertFileAria":"Rétablir le fichier","gitView.changes.revertFileTooltip":"Annuler les modifications","gitView.changes.reverting":"Revenant...","gitView.changes.selectAllAria":"Sélectionnez tous les fichiers","gitView.changes.selectFileAria":"Sélectionner le fichier","gitView.changes.stagedTitle":"Mise en scène","gitView.changes.resizeSplitAria":"Redimensionner les modifications planifiées et non planifiées","gitView.changes.stageAllAria":"Organiser tous les changements","gitView.changes.stageDirectoryAria":"Ajoutez à l’index tous les changements dans {path}","gitView.changes.stageFileAria":"Ajouter à l’index {path}","gitView.changes.title":"Changements","gitView.changes.toggleDirectorySelectionAria":"Basculer la sélection du répertoire","gitView.changes.unstageAllAria":"Annuler toutes les modifications","gitView.changes.unstageDirectoryAria":"Annuler toutes les modifications dans {path}","gitView.changes.unstageFileAria":"Retirer de l’index {path}","gitView.commit.addGitmoji":"Ajouter un gitmoji","gitView.commit.aiHighlights.insertAria":"Insérer","gitView.commit.aiHighlights.insertTooltip":"Insérer une info-bulle","gitView.commit.aiHighlights.title":"Points forts","gitView.commit.commit":"Créer le commit","gitView.commit.commitAria":"Valider le commit","gitView.commit.committing":"Création du commit...","gitView.commit.generate":"Générer","gitView.commit.generateAria":"Générer un message de commit","gitView.commit.messagePlaceholder":"Message de commit","gitView.commit.push":"Valider et synchroniser","gitView.commit.pushAria":"Valider et synchroniser","gitView.commit.pushing":"Synchronisation...","gitView.commit.selectFilesHint":"Sélectionnez les fichiers dans Modifications pour activer le commit.","gitView.commit.stageFilesHint":"Ajoutez des fichiers à l’index pour activer le commit.","gitView.commit.title":"Commit","gitView.common.cancel":"Annuler","gitView.branch.switchBlockedNotice":"Modifications non commitées — le changement passe d’abord par un commit ou une annulation.","gitView.branch.unpushedSingle":"1 commit non poussé","gitView.branch.unpushedPlural":"{count} commits non poussés","gitView.branch.recentBranches":"Branches récentes","gitView.dirtySwitch.title":"Modifications non commitées","gitView.dirtySwitch.descriptionSingle":"Le passage à {branch} est suspendu pour ne pas perdre votre fichier modifié. Commitez-le ou annulez-le d’abord.","gitView.dirtySwitch.descriptionPlural":"Le passage à {branch} est suspendu pour ne pas perdre vos {count} fichiers modifiés. Commitez-les ou annulez-les d’abord.","gitView.dirtySwitch.commitAndSwitch":"Commiter et changer","gitView.dirtySwitch.committedNotPushed":"Commité sur {branch}. Le commit est local uniquement — il n’a pas été poussé.","gitView.dirtySwitch.pushAfterCommit":"Pousser après le commit","gitView.dirtySwitch.pushFailed":"Commité, mais le push a échoué — la branche n’a pas été changée.","gitView.dirtySwitch.actionFailed":"L’action a échoué ; la branche n’a pas été changée.","gitView.dirtySwitch.revertAndSwitch":"Annuler et changer","gitView.dirtySwitch.revertIncomplete":"Certaines modifications n’ont pas pu être annulées, la branche n’a donc pas été changée.","gitView.common.close":"Fermer","gitView.common.done":"Fait","gitView.common.processing":"Traitement...","gitView.common.reset":"Réinitialiser","gitView.conflict.abortOperation":"Abandonner l’opération","gitView.conflict.conflictedFiles":"Fichiers en conflit :","gitView.conflict.continueLater":"Continuer plus tard","gitView.conflict.detectedDescription":"Un conflit Git a été détecté.","gitView.conflict.detectedTitle":"Conflit détecté","gitView.conflict.errorLoadingDetails":"Erreur de chargement des détails","gitView.conflict.headInfo":"Informations HEAD :","gitView.conflict.loadFailed":"Échec du chargement","gitView.conflict.loading":"Chargement des détails du conflit...","gitView.conflict.noActiveSession":"Aucune session active","gitView.conflict.noActiveSessionDescription":"Ouvrez une session active pour continuer.","gitView.conflict.resolveCurrentSession":"Résoudre dans la session en cours","gitView.conflict.resolveNewSession":"Résoudre dans une nouvelle session","gitView.empty.cleanDescription":"Tous les changements ont été validés","gitView.empty.cleanTitle":"Worktree sans modifications","gitView.empty.pullBehindPlural":"Extraire les commits {count}","gitView.empty.pullBehindSingle":"Extraire le commit {count}","gitView.header.identityTooltip":"Identité Git","gitView.context.configure":"Configurer le dépôt","gitView.context.description":"Les remotes que l’identité du dépôt n’atteint pas, et l’accès pour les sous-modules et Git LFS. Les identités se gèrent dans les paramètres Git.","gitView.context.needsAttention":"À vérifier","gitView.identity.system":"Identité système","gitView.identity.systemNoAuthor":"Aucun auteur configuré sur cet ordinateur","gitView.identity.configChanged":"La configuration Git du dépôt a changé après l'application de cette identité. Choisissez de nouveau l'identité pour la mettre à jour.","gitView.identity.unavailableHost":"Ce dépôt n’est pas sur {host}","gitView.identity.unavailableNeedsHttps":"Pousse en HTTPS, mais ce dépôt utilise SSH","gitView.identity.unavailableNeedsSsh":"Pousse en SSH, mais ce dépôt utilise HTTPS","gitView.context.settings":"Ouvrir les paramètres Git","gitView.header.noIdentity":"Aucune identité","gitView.header.noProfiles":"Aucun profil disponible à appliquer.","gitView.header.repositoryViews":"Vues du dépôt","gitView.header.updateBranch":"Mettre à jour la branche","gitView.header.openPullRequest":"Ouvrir la pull request","gitView.header.removeRemoteAria":"Supprimer le remote","gitView.header.removeRemoteTitle":"Supprimer le remote","gitView.header.upstreamSynced":"synchronisé","gitView.header.upstreamTooltip":"Par rapport au {target}.","gitView.header.upstreamTooltipTracking":"Par rapport au {target}. Les badges de synchronisation principaux reflètent toujours {tracking}.","gitView.history.actions.cancelButton":"Annuler","gitView.history.actions.checkout":"Basculer","gitView.history.actions.checkoutConfirm":"Basculer sur ce commit en HEAD détaché ?","gitView.history.actions.cherryPick":"Cherry-pick","gitView.history.actions.cherryPickConfirm":"Cherry-pick ce commit sur la branche actuelle ?","gitView.history.actions.conflictToastDescription":"Conflits dans : {files}. Résolvez manuellement et validez, ou abandonnez avec git Cherry-pick/revert --abort.","gitView.history.actions.conflictToastTitle":"Conflit","gitView.history.actions.confirmButton":"Confirmer","gitView.history.actions.createBranch":"Créer une branche ici","gitView.history.actions.createBranchConfirm":"Créer","gitView.history.actions.createBranchPlaceholder":"Nom de la branche","gitView.history.actions.detachedHead":"Checkout (HEAD détaché)","gitView.history.actions.merge":"Fusionner avec le courant","gitView.history.actions.mergeConfirm":"Fusionner ce commit dans la branche actuelle ?","gitView.history.actions.rebase":"Rebase sur ce commit","gitView.history.actions.rebaseConfirm":"Rebaser la branche actuelle sur ce commit ?","gitView.history.actions.reset":"Réinitialiser...","gitView.history.actions.resetHard":"Hard — annuler toutes les modifications","gitView.history.actions.resetHardConfirm":"Réinitialisation matérielle - HEAD se déplace, toutes les modifications non validées sont définitivement supprimées.","gitView.history.actions.resetHardConfirmButton":"Ignorer les modifications","gitView.history.actions.resetMixed":"Mixte – modifications hors index","gitView.history.actions.resetMixedConfirm":"Réinitialisation mixte - HEAD bouge, change hors index.","gitView.history.actions.resetSoft":"Soft — conserver l'index","gitView.history.actions.resetSoftConfirm":"Réinitialisation logicielle - HEAD se déplace, modifications dans l’index préservées.","gitView.history.actions.revert":"Revenir","gitView.history.actions.revertConfirm":"Organiser un retour à ce commit ?","gitView.history.binary":"Binaire","gitView.history.binaryNoDiff":"Fichier binaire — aucune différence disponible","gitView.history.commitsPlaceholder":"Rechercher des commits","gitView.history.copySha":"Copier SHA","gitView.history.diffError":"Échec du chargement du diff. Cliquez pour réessayer.","gitView.history.largeDiffDescription":"Le rendu peut être lent. Vous pouvez toujours voir la différence en cliquant ci-dessous.","gitView.history.largeDiffTitle":"Grand diff ({count} a modifié les lignes)","gitView.history.loadingDiff":"Chargement du différentiel...","gitView.history.loadingFiles":"Chargement des fichiers...","gitView.history.loadMore":"Charger plus","gitView.history.loadingMore":"Chargement...","gitView.history.logSize100":"Taille du journal 100","gitView.history.logSize25":"Taille du journal25","gitView.history.logSize50":"Taille du journal50","gitView.history.noCommits":"Aucun commit trouvé","gitView.history.noFiles":"Aucun fichier","gitView.history.renamedNoDiff":"Fichier renommé – diff non pris en charge","gitView.history.renderDiffAnyway":"Rendre quand même","gitView.history.title":"Historique","gitView.history.refresh":"Actualiser","gitView.graph.title":"Graphique","gitView.integrate.checking":"Vérification…","gitView.integrate.cherryPickAbortedToast":"Cherry-pick annulé","gitView.integrate.cherryPickConflictDescription":"Des conflits sont apparus pendant le Cherry-pick.","gitView.integrate.cherryPickConflictToast":"Conflits pendant le Cherry-pick","gitView.integrate.cherryPickContinueFailedToast":"Impossible de continuer le Cherry-pick","gitView.integrate.cherryPickFinishedToast":"Cherry-pick terminé","gitView.integrate.commitsMovedDescriptionPlural":"{count} commits déplacés","gitView.integrate.commitsMovedDescriptionSingle":"1 commit déplacé","gitView.integrate.commitsMovedToast":"Commits déplacés","gitView.integrate.commitsToMove":"Commits à déplacer","gitView.integrate.conflictsInFiles":"Conflits dans les fichiers","gitView.integrate.currentCommit":"Commit actuel","gitView.integrate.currentSession":"Session en cours","gitView.integrate.failedToMoveToast":"Échec du déplacement des commits","gitView.integrate.moreFiles":"Plus de fichiers","gitView.integrate.move":"Se déplacer","gitView.integrate.moveCommits":"Déplacer les commits","gitView.integrate.moving":"Déplacement…","gitView.integrate.newSession":"Nouvelle session","gitView.integrate.noActiveSession":"Aucune session active","gitView.integrate.noActiveSessionDescription":"Ouvrez une session active pour déplacer des commits.","gitView.integrate.noCommitsToMove":"Aucun commit à déplacer.","gitView.integrate.noCommitsToMoveToast":"Aucun commit à déplacer","gitView.integrate.previewUnavailable":"Aperçu indisponible","gitView.integrate.showAll":"Afficher tout","gitView.integrate.showLess":"Afficher moins","gitView.integrate.showingFirstCommits":"Affichage des premiers commits","gitView.integrate.target":"Cible","gitView.integrate.title":"Réintégrer les commits","gitView.integrate.toMoveCount":"Nombre de commits à déplacer","gitView.operation.abort":"Avorter","gitView.operation.continue":"Continuer","gitView.operation.inProgressTitle":"{operation} en cours","gitView.operation.inProgressTitleManyConflicts":"{operation} en cours : {count} conflits","gitView.operation.inProgressTitleOneConflict":"{operation} en cours : {count} conflit","gitView.operation.merge":"Fusionner","gitView.operation.mergeInProgressWithHead":"Fusion de {head}","gitView.operation.mergingMessage":"Fusion : {message}","gitView.operation.rebase":"Rebase","gitView.operation.rebaseInProgress":"Rebase en cours","gitView.operation.rebasingOnto":"Rebaser {headName} sur {onto}","gitView.operation.readyToContinueHint":"Tous les conflits sont résolus. Poursuivez pour terminer l’opération.","gitView.operation.resolveConflictsHint":"Résolvez les conflits, puis poursuivez l'opération.","gitView.operation.resolveWithAi":"Résoudre avec l'IA","gitView.stash.confirmButton":"Confirmer","gitView.stash.description":"Des modifications locales doivent être mises en stash pour continuer.","gitView.stash.mergeWith":"Fusionner avec","gitView.stash.rebaseOnto":"Rebase sur","gitView.stash.restoreAfterOperation":"Restaurer après l'opération","gitView.stash.restoreAria":"Restaurer le stash","gitView.stash.stepRestore":"Restaurer vos modifications mises en stash","gitView.stash.stepStash":"Mettre vos modifications non commitées en stash","gitView.stash.thisWill":"Cela va :","gitView.stash.title":"Modifications non validées","gitView.stashes.actions.apply":"Appliquer","gitView.stashes.actions.drop":"Drop","gitView.stashes.actions.pop":"Pop","gitView.stashes.actions.stashCurrent":"Mettre les modifications actuelles en stash","gitView.stashes.actions.stashCurrentWithCount":"Mettre {count} fichiers en stash","gitView.stashes.confirm.drop":"Supprimer {ref} ?","gitView.stashes.description":"Enregistrez, restaurez et nettoyez les stashes Git pour ce dépôt.","gitView.stashes.empty.list":"Aucun stash pour l'instant.","gitView.stashes.empty.search":"Aucun stash correspondant.","gitView.stashes.includeUntrackedHint":"Les fichiers non suivis sont inclus automatiquement.","gitView.stashes.fileCount":"Fichiers {count}","gitView.stashes.fileCountLoading":"compter les fichiers...","gitView.stashes.itemNumber":"#{number}","gitView.stashes.latestLabel":"Dernier","gitView.stashes.messagePlaceholder":"Nom du stash","gitView.stashes.searchPlaceholder":"Rechercher des stashes","gitView.stashes.title":"Stashes","gitView.stashes.toast.applyFailed":"Échec de l'application du stash","gitView.stashes.toast.applySuccess":"Stash appliqué","gitView.stashes.toast.createFailed":"Échec de la sauvegarde des modifications","gitView.stashes.toast.created":"Modifications mises en stash","gitView.stashes.toast.dropFailed":"Échec de la suppression du stash","gitView.stashes.toast.dropSuccess":"Stash supprimé","gitView.stashes.toast.loadFailed":"Échec du chargement des stashes","gitView.stashes.toast.noChanges":"Aucune modification locale à stocker","gitView.stashes.toast.popFailed":"Échec du pop du stash","gitView.stashes.toast.popSuccess":"Le stash a été pop","gitView.stashes.untitled":"Stash sans titre","gitView.sync.fetch":"Récupérer","gitView.sync.fetchFromRemote":"Récupérer depuis {name}","gitView.sync.fetchTooltip":"Récupérer depuis le dépôt distant","gitView.sync.commitOrStashTooltip":"Commitez ou mettez vos modifications en stash avant la synchronisation","gitView.sync.moreActionsAria":"Plus d'actions de synchronisation","gitView.sync.noRemoteTooltip":"Aucun dépôt distant n’est configuré","gitView.sync.pull":"Pull","gitView.sync.pullRebase":"Tirer (rebase)","gitView.sync.pullTooltip":"Extraire les modifications","gitView.sync.pullTooltipBehind":"Pull des modifications ({count} en retard)","gitView.sync.push":"Pousser","gitView.sync.pushTooltip":"Pousser les modifications","gitView.sync.pushTooltipAhead":"Pousser les modifications ({count} en avance)","gitView.sync.sync":"synchroniser","gitView.sync.syncChanges":"Synchroniser les modifications","gitView.sync.syncChangesTooltip":"Synchroniser les modifications ({behind} en retard, {ahead} en avance)","gitView.sync.syncChangesWithCounts":"Synchroniser les modifications {behind}↓ {ahead}↑","gitView.sync.syncCounts":"{behind}↓ {ahead}↑","gitView.branch.actionsUnavailable":"Actions de branchement indisponibles dans cet état du dépôt","gitView.conflict.noDetailsAvailable":"Aucun détail de conflit disponible","gitView.empty.notGitRepository":"Ce répertoire n'est pas un dépôt Git","gitView.empty.notGitRepositoryDescription":"Initialisez Git dans ce répertoire ou ouvrez un dépôt.","gitView.empty.selectSessionOrDirectory":"Sélectionnez une session ou un répertoire pour afficher l'état de Git","gitView.empty.worktreeFeaturesUnavailable":"Les fonctionnalités Worktree ne sont pas disponibles dans ce mode d’espace de travail.","gitView.empty.worktreeSetupDescription":"Terminez la configuration du worktree et préparez l'état du dépôt.","gitView.empty.worktreeSetupInProgress":"Configuration de worktree en cours","gitView.empty.discoveringRepositories":"Recherche des dépôts Git...","gitView.empty.discoverFailed":"Impossible d’analyser les dépôts Git","gitView.empty.retryDiscovery":"Réessayer","gitView.empty.initializeGit":"Initialiser Git","gitView.toast.initializeGitFailed":"Impossible d’initialiser Git","gitView.toast.initializeGitNeedsNewerOpenCode":"L’initialisation de Git nécessite OpenCode 2.0.23 ou une version plus récente.","gitView.toast.initializeGitNotDetected":"Git a été initialisé, mais OpenChamber ne voit pas de dépôt ici. Cela arrive quand OpenCode s’exécute sur une autre machine ou dans un conteneur.","gitView.empty.selectRepositoryPlaceholder":"Sélectionnez un dépôt...","gitView.gitmoji.empty":"Aucun gitmoji trouvé","gitView.gitmoji.searchPlaceholder":"Rechercher des gitmoji...","gitView.gitmoji.title":"Insérer un gitmoji","gitView.history.dialogDescription":"Parcourez les commits récents et inspectez les fichiers modifiés.","gitView.loading.checkingRepository":"Vérification du dépôt...","gitView.loading.loading":"Chargement...","gitView.pr.actions.createPr":"Créer une PR","gitView.pr.actions.openOnProvider":"Ouvrir sur {provider}","gitView.pr.actions.openOnProviderAria":"Ouvrir la demande de fusion sur {provider}","gitView.pr.actions.openSettings":"Ouvrir les paramètres","gitView.pr.actions.repo":"Dépôt","gitView.pr.actions.resolveFailedChecks":"Joindre les vérifications échouées","gitView.pr.actions.sendToAgent":"Joindre au chat","gitView.pr.actions.refresh":"Actualiser le statut PR","gitView.pr.actions.refreshAria":"Actualiser l'état de la demande d'extraction","gitView.pr.checkingStatus":"Vérification de l'état de la PR...","gitView.pr.checks.label":"checks","gitView.pr.checks.completedLabel":"Terminé","gitView.pr.checks.conclusionLabel":"Conclusion","gitView.pr.checks.startedLabel":"Commencé","gitView.pr.checks.statusLabel":"Statut","gitView.pr.checks.stepLabel":"Étape","gitView.pr.checks.steps":"Étapes","gitView.pr.checks.openRun":"Ouvrir","gitView.pr.checks.failedAnnotations":"Annotations en échec","gitView.pr.checks.failedAnnotationsShown":"Annotations en échec ({shown} sur {total} affichées)","gitView.pr.field.baseBranch":"Branche de base","gitView.pr.field.description":"Description","gitView.pr.field.title":"Titre","gitView.pr.providerNotConnected":"{provider} n'est pas connecté","gitView.pr.history.merged":"La PR #{number} a été fusionnée dans {base}.","gitView.pr.history.closed":"La PR #{number} a été fermée.","gitView.pr.mergeMethod.merge":"Créer un commit de fusion","gitView.pr.mergeMethod.rebase":"Rebaser et fusionner","gitView.pr.mergeMethod.squash":"Squasher et fusionner","gitView.pr.notMergeable":"Non fusionnable","gitView.pr.numberLabel":"PR #{number}","gitView.pr.segment.checks":"Vérifications","gitView.pr.comments.addAll":"Tout joindre au chat","gitView.pr.placeholder.additionalContext":"Toute contrainte, note de déploiement ou contexte du réviseur...","gitView.pr.placeholder.main":"Résumez votre PR","gitView.pr.placeholder.selectBaseBranch":"Sélectionnez la branche de base","gitView.pr.placeholder.title":"Titre de la PR","gitView.pr.placeholder.whatChanged":"Qu'est-ce qui a changé et pourquoi ?","gitView.pr.statusUnavailable":"Statut PR indisponible","gitView.pr.capabilitiesUnavailable":"Impossible de charger les fonctionnalités du fournisseur","gitView.pr.toast.baseBranchRequired":"Sélectionnez une branche de base","gitView.pr.toast.baseMustDifferFromHead":"La branche de base doit différer de la branche actuelle","gitView.pr.toast.createPrFailed":"Échec de la création de la PR","gitView.pr.toast.generateDescriptionFailed":"Échec de la génération de la description de la PR","gitView.pr.toast.noActiveSession":"Aucune session de chat active","gitView.pr.toast.noActiveSessionDescription":"Ouvrez ou créez une session de discussion pour envoyer du contexte à un agent.","gitView.pr.toast.noFailedChecks":"Aucun check échoué trouvé","gitView.pr.toast.prCreated":"PR créée","gitView.pr.toast.titleRequired":"Le titre est requis","gitView.pullRequest.createHint":"Créez et gérez les PR depuis cette branche.","gitView.pullRequest.availableOnFeatureBranches":"Disponible lorsque la branche actuelle peut ouvrir une PR.","gitView.pullRequest.title":"PR","gitView.tabs.worktree":"Worktree","gitView.toast.abortOperationFailed":"Échec de l'annulation de l'opération","gitView.toast.appliedIdentity":"Identité appliquée : {name}","gitView.toast.applyIdentityFailed":"Échec de l'application de l'identité","gitView.toast.branchCreatedLocally":"Branche créée localement, mais n'a pas pu être configurée en amont.","gitView.toast.cannotCheckout":"Impossible de basculer sur la branche : {reason}","gitView.toast.cannotCreateBranch":"Impossible de créer une branche : {reason}","gitView.toast.cannotRemoveOriginRemote":"Impossible de supprimer le dépôt distant origin","gitView.toast.cannotRenameBranch":"Impossible de renommer la branche : {reason}","gitView.toast.checkedOut":"Branche active : {name}","gitView.toast.checkoutFailed":"Échec du checkout de {name}","gitView.toast.commitCreated":"Commit créé","gitView.toast.commitHashCopied":"Hachage du commit copié","gitView.toast.continueOperationFailed":"Échec de la poursuite de l'opération","gitView.toast.copyFailed":"Échec de la copie","gitView.toast.createBranchFailed":"Échec de la création de la branche","gitView.toast.createCommitFailed":"Échec de la création du commit","gitView.toast.createdBranch":"Branche créée {name}","gitView.toast.enterCommitMessage":"Entrez un message de commit","gitView.toast.fetchedFromRemote":"Récupéré depuis {name}","gitView.toast.pulledFromRemote":"Récupéré et intégré depuis {name}","gitView.toast.generateCommitMessageFailed":"Échec de la génération du message de commit","gitView.toast.mergeAborted":"Fusion interrompue","gitView.toast.mergeCompleted":"Fusion terminée","gitView.toast.mergeConflictsDetected":"Conflits de fusion détectés","gitView.toast.mergedIntoBranch":"Fusion de {branch} dans {currentBranch}","gitView.toast.pushedToUpstream":"Poussé vers {name}","gitView.toast.syncedChanges":"Modifications synchronisées","gitView.toast.alreadyUpToDate":"Déjà à jour","gitView.toast.rebaseAborted":"Rebase abandonné","gitView.toast.rebaseConflictsDetected":"Conflits de rebase détectés","gitView.toast.rebaseStepCompleted":"Étape de rebase terminée","gitView.toast.rebasedOntoBranch":"Rebasage de {currentBranch} sur {branch}","gitView.toast.refreshRepositoryFailed":"Échec de l'actualisation du dépôt","gitView.toast.remoteNameRequired":"Le nom du dépôt distant est requis","gitView.toast.removedRemote":"Remote supprimé : {name}","gitView.toast.renameBranchFailed":"Échec du renommage de {oldName} en {newName}","gitView.toast.renamedBranch":"Renommé {oldName} en {newName}","gitView.toast.restoreStashFailed":"Échec de la restauration du stash","gitView.toast.restoreStashManually":"Restauration manuelle du stash requise","gitView.toast.revertFailed":"Échec de l'annulation des modifications","gitView.toast.revertedFile":"{path} rétabli","gitView.toast.revertedFilesPlural":"Fichiers {count} rétablis","gitView.toast.revertedFilesSingle":"Fichier {count} rétabli","gitView.toast.revertedSomePlural":"Fichiers {success} annulés, échec de {failed}","gitView.toast.revertedSomeSingle":"Fichier {success} rétabli, échec de {failed}","gitView.toast.stageFileFailed":"Échec de l'ajout des modifications à l'index","gitView.toast.stageFileToCommit":"Préparez au moins un fichier à valider","gitView.toast.stageFileToDescribe":"Ajoutez au moins un fichier à l'index pour le décrire","gitView.toast.selectFileToCommit":"Sélectionnez au moins un fichier à valider","gitView.toast.selectFileToDescribe":"Sélectionnez au moins un fichier à décrire","gitView.toast.stashedRestored":"Modifications mises en stash restaurées","gitView.toast.syncActionFailed":"Échec du {action}","gitView.contributor.chooseDestination":"Où envoyer cette branche ?","gitView.contributor.destination.contributor-fork":"Fork du contributeur","gitView.contributor.destination.own-fork":"Votre fork","gitView.contributor.destination.bound-repository":"Ce dépôt","gitView.contributor.destination.other":"Autre dépôt distant","gitView.toast.contributorPublishCancelled":"La publication a été annulée. Aucun dépôt distant n’a été modifié.","gitView.toast.contributorPublishCancelledAfterUpdate":"Les modifications ont été mises à jour localement, mais la publication a été annulée.","gitView.toast.unstageFileFailed":"Échec de l'annulation du transfert des modifications","gitView.worktree.availableInWorktreeMode":"Disponible uniquement en mode worktree","contextPanel.mode.chat":"Chat","contextPanel.mode.files":"Fichiers","contextPanel.mode.diff":"Changements","contextPanel.mode.stagedDiff":"Diff indexé","contextPanel.mode.workingDiff":"Diff de travail","contextPanel.mode.plan":"Plan","contextPanel.mode.pr":"Pull Request","contextPanel.mode.mr":"Merge Request","gitView.mergeRequest.title":"MR","gitView.mergeRequest.availableOnFeatureBranches":"Disponible lorsque la branche actuelle peut ouvrir une MR.","gitView.mr.openMergeRequest":"Ouvrir la merge request","gitView.mr.actions.createMr":"Créer une MR","gitView.pr.actions.createDraftPr":"Créer une PR brouillon","gitView.mr.actions.createDraftMr":"Créer une MR brouillon","gitView.pr.actions.pushAndCreatePr":"Pousser et créer la PR","gitView.mr.actions.pushAndCreateMr":"Pousser et créer la MR","gitView.pr.actions.pushAndCreateDraftPr":"Pousser et créer une PR brouillon","gitView.mr.actions.pushAndCreateDraftMr":"Pousser et créer une MR brouillon","gitView.pr.createKindAria":"Comment la créer","gitView.pr.unpushed.unpublished":"Cette branche n’est pas encore sur le dépôt distant ; elle sera poussée d’abord","gitView.pr.unpushed.one":"1 commit n’est pas encore poussé ; il sera poussé d’abord","gitView.pr.unpushed.many":"{count} commits ne sont pas encore poussés ; ils seront poussés d’abord","gitView.pr.generate.optionsAria":"Autres façons de générer","gitView.pr.generate.withNotes":"Générer avec des notes…","gitView.pr.generate.notesAria":"Notes pour la description générée","gitView.pr.generate.removeNotesAria":"Retirer les notes","gitView.pr.toast.gitBusy":"Un autre transfert Git est encore en cours. Réessayez quand il sera terminé.","gitView.mr.actions.openOnProviderAria":"Ouvrir la merge request sur {provider}","gitView.mr.actions.refresh":"Actualiser le statut MR","gitView.mr.actions.refreshAria":"Actualiser l'état de la merge request","gitView.mr.checkingStatus":"Vérification de l'état de la MR...","gitView.mr.history.closed":"La MR !{number} a été fermée.","gitView.mr.history.merged":"La MR !{number} a été fusionnée dans {base}.","gitView.mr.placeholder.main":"Résumez votre MR","gitView.mr.placeholder.title":"Titre de la MR","gitView.mr.statusUnavailable":"Statut MR indisponible","gitView.mr.toast.createMrFailed":"Échec de la création de la MR","gitView.mr.toast.generateDescriptionFailed":"Échec de la génération de la description de la MR","gitView.mr.toast.mrCreated":"MR créée","gitView.mr.comparison.mode":"MR","gitView.mr.comparison.select":"Sélectionner une merge request","gitView.mr.comparison.pickAbove":"Choisissez une merge request ci-dessus","gitView.mr.comparison.partial":"Certaines merge requests n'ont pas pu être chargées","gitView.mr.comparison.searchPlaceholder":"Rechercher des MR","gitView.mr.comparison.loading":"Chargement des MR...","gitView.mr.comparison.empty":"Aucune MR trouvée","gitView.mr.comparison.notConnected":"GitLab non connecté. Connectez votre compte GitLab dans les paramètres.","gitView.mr.comparison.runtimeUnavailable":"API GitLab indisponible dans ce runtime","gitView.mr.comparison.loadMoreFailed":"Échec du chargement d'autres MR","gitView.mr.walkthroughScope":"MR !{number}","gitView.mr.createHint":"Créez et gérez les MR depuis cette branche.","header.gitlab.connectedWithLogin":"GitLab : {login}","header.gitlab.connected":"GitLab connecté","header.gitlab.accountsTitle":"Comptes GitLab","contextPanel.mode.context":"Contexte","contextPanel.mode.preview":"Aperçu","contextPanel.mode.browser":"Navigateur","contextRail.configure.open":"Configurer les panneaux","contextRail.configure.dialogTitle":"Panneaux de la barre","contextRail.configure.dialogDescription":"Choisissez les panneaux affichés par la barre. Les panneaux masqués conservent leurs données et restent accessibles via la palette de commandes.","contextRail.configure.showAll":"Tout afficher","contextRail.configure.noneWarning":"Tous les panneaux sont masqués.","contextRail.aria.rail":"Surfaces du panneau","contextPanel.editorEmpty.title":"Aucun fichier ouvert","contextPanel.editorEmpty.description":"Choisissez un fichier dans l’arborescence pour commencer.","contextRail.surface.editor.description":"Modifier les fichiers du projet","contextRail.surface.git.description":"Commits, branches et pull requests","contextRail.surface.git.changesCountAriaSingle":"{label}, {count} fichier modifié","contextRail.surface.git.changesCountAriaPlural":"{label}, {count} fichiers modifiés","contextRail.surface.git.changesCountTooltipSingle":"{count} fichier modifié","contextRail.surface.git.changesCountTooltipPlural":"{count} fichiers modifiés","contextRail.surface.terminal.description":"Terminal intégré","contextRail.surface.diff.description":"Passer en revue les modifications","contextPanel.mode.walkthrough":"Parcours","contextRail.surface.walkthrough.description":"Un parcours de vos modifications guidé par l’IA","walkthrough.scope.all":"Tout non validé","walkthrough.scope.group.workingTree":"Copie de travail","walkthrough.scope.staged":"Indexées","walkthrough.scope.working":"Non indexées","walkthrough.scope.branch":"Cette branche","walkthrough.scope.selectorAria":"Choisir ce qui est examiné","walkthrough.language.menuLabel":"Langue du parcours","walkthrough.missing.language":"Pas encore de parcours en {requested} — voici celui en {shown}.","walkthrough.missing.model":"Pas encore de parcours généré par {model} — voici le dernier généré ici.","walkthrough.missing.languageAndModel":"Pas encore de parcours dans cette langue avec ce modèle — voici le dernier généré ici.","walkthrough.language.selectorAria":"Choisir la langue du parcours","walkthrough.scope.pullRequest":"PR n° {number}","walkthrough.action.generate":"Générer le parcours","walkthrough.action.regenerate":"Régénérer","walkthrough.action.cancel":"Annuler","walkthrough.action.next":"Étape suivante","walkthrough.action.previous":"Étape précédente","walkthrough.action.refresh":"Actualiser","walkthrough.action.open":"Parcours","walkthrough.stage.collecting":"Collecte des modifications","walkthrough.stage.asking":"En attente du modèle","walkthrough.stage.assembling":"Assemblage du parcours","walkthrough.empty.title":"Aucun parcours pour l’instant","walkthrough.empty.description":"Construisez un parcours de lecture guidé à travers ces modifications. Cela appelle le petit modèle et consomme des jetons, donc rien ne se lance sans votre demande.","walkthrough.stale.banner":"Le code a changé après cette revue. Étapes obsolètes : {count}","walkthrough.stop.staleAll":"Tout le code décrit par cette étape a changé.","walkthrough.stop.stalePartial":"Une partie du code décrit par cette étape a changé. Fragments manquants : {count}","walkthrough.stop.staleShort":"Obsolète","walkthrough.stop.noCode":"Le code de cette étape est absent du diff actuel.","walkthrough.uncovered.title":"Modifications non traitées par la revue : {count}","walkthrough.uncovered.description":"La revue les a jugées courantes. Dépliez pour les vérifier vous-même.","walkthrough.toc.moreFiles":"Autres fichiers : {count}","walkthrough.toc.uncovered":"Non traité : {count}","walkthrough.toc.resize":"Redimensionner la colonne du sommaire","walkthrough.importance.critical":"Changement clé","walkthrough.importance.criticalHint":"Cette étape porte l'essentiel du changement, lisez-la attentivement. Ce n'est pas un problème détecté dans votre code.","walkthrough.importance.context":"Contexte","walkthrough.importance.contextHint":"Un changement de soutien, présent pour que le reste ait du sens.","walkthrough.help.guide":"Comment fonctionnent les walkthroughs","walkthrough.blocked.noModel.title":"Aucun petit modèle disponible","walkthrough.blocked.noModel.description":"Connectez-vous à un fournisseur de modèles pour générer une revue.","walkthrough.blocked.emptyDiff.title":"Rien à examiner","walkthrough.blocked.emptyDiff.description":"Il n’y a encore aucune modification dans cette portée.","walkthrough.blocked.contextTooSmall.title":"Ce diff est trop volumineux pour le modèle actuel","walkthrough.blocked.contextTooSmall.description":"{model} accepte environ {available} k caractères et ce diff en demande environ {required} k. Rien n’est tronqué : choisissez un modèle au contexte plus large.","walkthrough.blocked.structuredOutput.title":"Ce modèle ne produit pas de sortie structurée","walkthrough.blocked.structuredOutput.description":"{model} ne prend pas en charge les réponses structurées nécessaires à un parcours.","walkthrough.blocked.chooseModel":"Choisissez le petit modèle","walkthrough.blocked.outputExhausted.title":"Le modèle a épuisé son budget de réponse","walkthrough.blocked.outputExhausted.description":"{model} a dépensé toute sa marge de sortie en raisonnement et n’a rien renvoyé. Les modèles de raisonnement le font souvent sur de gros diffs : essayez un modèle qui réfléchit moins, ou une portée plus étroite.","walkthrough.blocked.outputExhausted.descriptionUnknownModel":"Le petit modèle a dépensé toute sa marge de sortie en raisonnement et n’a rien renvoyé. Les modèles de raisonnement le font souvent sur de gros diffs : essayez un modèle qui réfléchit moins, ou une portée plus étroite.","walkthrough.blocked.onlyGenerated.title":"Seuls des fichiers générés ont changé","walkthrough.blocked.onlyGenerated.description":"Toutes les modifications concernent des fichiers de verrouillage ou d’autres sorties générées, que la revue ignore délibérément.","walkthrough.blocked.serverUnsupported.title":"Ce serveur ne prend pas en charge les walkthroughs","walkthrough.blocked.serverUnsupported.description":"Le serveur OpenChamber auquel cette application est connectée n'a pas répondu à l'API walkthrough : il est donc plus ancien que l'application. Mettez le serveur à jour en 1.18 ou plus récent, puis actualisez.","walkthrough.blocked.contextTooSmall.descriptionUnknownModel":"Le petit modèle accepte environ {available} k caractères et ce diff en demande environ {required} k. Rien n’est tronqué : choisissez un modèle au contexte plus large.","walkthrough.blocked.structuredOutput.descriptionUnknownModel":"Le petit modèle ne prend pas en charge les réponses structurées nécessaires à un parcours.","contextRail.surface.plan.description":"Voir le plan actuel","contextRail.surface.pr.description":"Créer, relire et fusionner la pull request de la branche actuelle","contextRail.surface.mr.description":"Créer, relire et fusionner la merge request de la branche actuelle","contextRail.surface.notes.description":"Notes, tâches, plans et mémoire de l’agent pour le projet","contextRail.surface.context.description":"Contexte de session et utilisation des tokens","contextRail.surface.browser.description":"Navigateur web intégré","contextRail.surface.preview.description":"Aperçu du serveur de développement","contextRail.surface.chat.description":"Session ouverte côte à côte","contextRail.surface.notes":"Connaissances du projet","contextRail.editorTree.toggle":"Afficher/masquer l’arborescence de fichiers","contextRail.editor.toggle":"Afficher/masquer l’éditeur de fichiers","contextPanel.browser.open":"Ouvrir le panneau du navigateur","contextPanel.browser.addressAria":"Adresse du navigateur","contextPanel.browser.history.label":"Adresses récentes","contextPanel.browser.history.forget":"Retirer de l’historique","contextPanel.browser.newTab":"Nouvel onglet du navigateur","contextPanel.browser.empty":"Navigateur Internet","contextPanel.browser.emptyHint":"Entrez une adresse ci-dessus pour commencer à naviguer sur le Web","contextPanel.tab.closeTabAria":"Fermer l'onglet {label}","contextPanel.tab.menu.close":"Fermer","contextPanel.tab.menu.closeOthers":"Fermer les autres","contextPanel.tab.menu.closeToLeft":"Fermer les onglets à gauche","contextPanel.tab.menu.closeToRight":"Fermer les onglets à droite","contextPanel.tab.menu.closeAll":"Fermer tous les onglets","contextPanel.actions.collapsePanel":"Réduire le panneau","contextPanel.actions.expandPanel":"Agrandir le panneau","contextPanel.actions.closePanel":"Fermer le panneau","contextPanel.actions.resizePanelAria":"Redimensionner le panneau contextuel","contextPanel.iframe.sessionChatTitle":"Session de discussion {sessionID}","contextPanel.preview.actions.reload":"Recharger l'aperçu","contextPanel.preview.actions.openExternal":"Ouvrir dans le navigateur","contextPanel.preview.actions.retry":"Réessayer","contextPanel.preview.iframeTitle":"Aperçu","contextPanel.preview.invalidUrl":"L'aperçu nécessite un http(s) URL valide.","contextPanel.preview.empty":"Pas d'aperçu URL","contextPanel.preview.loading":"Connexion du proxy d'aperçu...","contextPanel.preview.proxyError":"Impossible de démarrer le proxy d'aperçu.","contextPanel.preview.upstreamUnreachable":"Le serveur de développement ne répond pas.","contextPanel.preview.upstreamUnreachableHint":"Assurez-vous que votre serveur de développement est toujours en cours d'exécution, puis réessayez.","contextPanel.preview.startingServer":"Démarrage du serveur de développement...","contextPanel.preview.startingServerHint":"En attente que le serveur accepte les connexions.","contextPanel.preview.title":"Aperçu","contextPanel.preview.description":"Utilisez les actions du projet ou un bouton Aperçu du terminal pour ouvrir un aperçu.","contextPanel.preview.startPreview":"Démarrer l'aperçu","contextPanel.preview.starting":"Démarrage...","contextPanel.preview.noDevServer":'Aucune commande de serveur de développement trouvée. Configurez une action de projet ou ajoutez un script "dev" à package.json.',"contextPanel.preview.startFailed":"Échec du démarrage du serveur d'aperçu.","contextPanel.preview.serverExited":"Le serveur de développement s'est arrêté de manière inattendue.","contextPanel.preview.noUrlDetected":"Le serveur de développement a démarré, mais aucun URL n'a été détecté dans sa sortie. Ouvrez l'onglet Aperçu du terminal pour vérifier les journaux.","contextPanel.preview.serverExitedWithLog":`Le serveur de développement s'est arrêté de manière inattendue. Dernière sortie :
|
|
8
|
+
|
|
9
|
+
{log}`,"contextPanel.preview.noUrlDetectedWithLog":`Le serveur de développement n'est pas devenu accessible. Dernière sortie :
|
|
10
|
+
|
|
11
|
+
{log}`,"contextPanel.preview.console.open":"Ouvrir la console d'aperçu","contextPanel.preview.console.waiting":"En attente de la console de prévisualisation","contextPanel.preview.console.title":"Console de prévisualisation","contextPanel.preview.console.attach":"Attacher","contextPanel.preview.console.copy":"Copie","contextPanel.preview.console.clear":"Effacer","contextPanel.preview.console.empty":"Aucun événement de console d’aperçu pour l’instant.","contextPanel.preview.console.noFilteredEvents":"Aucun événement ne correspond à ce filtre.","contextPanel.preview.console.runtimeError":"Erreur d'exécution","contextPanel.preview.console.copied":"Console d'aperçu copiée","contextPanel.preview.console.copyFailed":"Échec de la copie de la console d'aperçu","contextPanel.preview.console.attached":"Console de prévisualisation attachée au chat","contextPanel.preview.console.attachNoSession":"Ouvrir une session de discussion avant de joindre les journaux d'aperçu","contextPanel.preview.console.attachAnnotation":"Il s'agit des journaux de la console du navigateur du serveur de développement exécuté pour ce projet.","contextPanel.preview.inspect.toggle":"Inspecter l'élément d'aperçu","contextPanel.preview.inspect.attached":"Aperçu de l'annotation jointe au chat","contextPanel.preview.inspect.attachNoSession":"Ouvrir une session de discussion avant de joindre des annotations d'aperçu","contextPanel.preview.inspect.attachAnnotation":"Il s'agit d'un élément DOM sélectionné dans l'aperçu de l'application.","contextPanel.preview.inspect.attachAnnotationWithScreenshot":"Il s'agit d'un élément DOM sélectionné dans l'aperçu de l'application. Une capture d'écran de la zone d'aperçu visible avec l'élément sélectionné en surbrillance est jointe.","contextPanel.preview.console.filter.all":"Tous","contextPanel.preview.console.filter.errors":"Erreurs","contextPanel.preview.console.filter.warnings":"Avertissements","contextPanel.preview.console.filter.logs":"Journaux","terminalView.preview.open":"Aperçu","terminalView.preview.openTitle":"Ouvrir le volet d'aperçu","sidebarFilesTree.menu.rename":"Renommer","sidebarFilesTree.menu.copyPath":"Copier le chemin","sidebarFilesTree.menu.save":"Enregistrer","sidebarFilesTree.menu.download":"Télécharger","sidebarFilesTree.menu.newFile":"Nouveau fichier","sidebarFilesTree.menu.newFolder":"Nouveau dossier","sidebarFilesTree.menu.uploadFiles":"Téléverser des fichiers","sidebarFilesTree.menu.delete":"Supprimer","sidebarFilesTree.toast.pathCopied":"Chemin copié","sidebarFilesTree.toast.copyFailed":"Échec de la copie","sidebarFilesTree.toast.revealFailed":"Impossible de révéler le chemin","sidebarFilesTree.toast.filenameRequired":"Le nom du fichier est obligatoire","sidebarFilesTree.toast.writeNotSupported":"Écriture non prise en charge","sidebarFilesTree.toast.fileCreated":"Fichier créé","sidebarFilesTree.toast.operationFailed":"L'opération a échoué","sidebarFilesTree.toast.uploaded":"Fichiers téléversés","sidebarFilesTree.toast.uploadedWithoutConflicts":"Les fichiers sans conflit ont été téléversés","sidebarFilesTree.toast.uploadFailed":"Certains fichiers n’ont pas pu être téléversés","sidebarFilesTree.drop.target":"Téléverser dans {path}","sidebarFilesTree.drop.uploading":"Téléversement des fichiers dans {path}","sidebarFilesTree.dialog.uploadConflicts.title":"Remplacer les fichiers existants ?","sidebarFilesTree.dialog.uploadConflicts.description":"Des fichiers portant ces noms existent déjà dans {path}. Leur remplacement est irréversible.","sidebarFilesTree.dialog.uploadConflicts.replace":"Remplacer","sidebarFilesTree.toast.folderNameRequired":"Le nom du dossier est requis","sidebarFilesTree.toast.folderCreated":"Dossier créé","sidebarFilesTree.toast.nameRequired":"Le nom est requis","sidebarFilesTree.toast.renameNotSupported":"Renommer non pris en charge","sidebarFilesTree.toast.renamedSuccessfully":"Renommé avec succès","sidebarFilesTree.toast.deleteNotSupported":"Suppression non prise en charge","sidebarFilesTree.toast.deletedSuccessfully":"Supprimé avec succès","sidebarFilesTree.search.placeholder":"Rechercher des fichiers...","sidebarFilesTree.search.clearAria":"Effacer la recherche","sidebarFilesTree.actions.newFileTitle":"Nouveau fichier","sidebarFilesTree.actions.newFolderTitle":"Nouveau dossier","sidebarFilesTree.actions.uploadFilesTitle":"Téléverser des fichiers","sidebarFilesTree.actions.refreshTitle":"Rafraîchir","sidebarFilesTree.actions.collapseAllTitle":"Réduire tous les dossiers","sidebarFilesTree.actions.fileMenuTitle":"Menu Fichier","sidebarFilesTree.state.searching":"Recherche...","sidebarFilesTree.state.loading":"Chargement...","sidebarFilesTree.dialog.createFile.title":"Créer un fichier","sidebarFilesTree.dialog.createFolder.title":"Créer un dossier","sidebarFilesTree.dialog.rename.title":"Renommer","sidebarFilesTree.dialog.delete.title":"Supprimer","sidebarFilesTree.dialog.createFile.description":"Créer un nouveau fichier dans {path}","sidebarFilesTree.dialog.createFolder.description":"Créez un nouveau dossier dans {path}","sidebarFilesTree.dialog.rename.description":"Renommer {name}","sidebarFilesTree.dialog.delete.description":"Etes-vous sûr de vouloir supprimer {name} ? Cette action ne peut pas être annulée.","sidebarFilesTree.dialog.rootFallback":"racine","sidebarFilesTree.dialog.rename.placeholder":"Nouveau nom","sidebarFilesTree.dialog.namePlaceholder":"Nom","sidebarFilesTree.dialog.cancel":"Annuler","sidebarFilesTree.dialog.confirm":"Confirmer","sidebarFilesTree.dialog.delete.confirm":"Supprimer","filesView.dialog.createFile.title":"Créer un fichier","filesView.dialog.createFolder.title":"Créer un dossier","filesView.dialog.rename.title":"Renommer","filesView.dialog.delete.title":"Supprimer","filesView.dialog.createFile.description":"Créer un nouveau fichier dans {path}","filesView.dialog.createFolder.description":"Créez un nouveau dossier dans {path}","filesView.dialog.rename.description":"Renommer {name}","filesView.dialog.delete.description":"Etes-vous sûr de vouloir supprimer {name} ? Cette action ne peut pas être annulée.","filesView.dialog.rootFallback":"racine","filesView.dialog.rename.placeholder":"Nouveau nom","filesView.dialog.namePlaceholder":"Nom","filesView.dialog.cancel":"Annuler","filesView.dialog.confirm":"Confirmer","filesView.dialog.delete.confirm":"Supprimer","filesView.editor.saving":"Enregistrement...","filesView.editor.saved":"Enregistré","filesView.editor.autoSaveOn":"Sauvegarde automatique activée","filesView.editor.manualSave":"Sauvegarde manuelle","filesView.editor.saveNowTitle":"Enregistrer maintenant ({shortcut}) - sauvegarde automatique après 1.5s","filesView.editor.saveNowManualTitle":"Enregistrer maintenant ({shortcut})","filesView.editor.saveAria":"Enregistrer ({shortcut})","filesView.editor.openInDesktopApp":"Ouvrir dans l'application de bureau","filesView.editor.refreshApps":"Actualiser les applications","filesView.editor.disableLineWrap":"Désactiver le retour à la ligne","filesView.editor.enableLineWrap":"Activer le retour à la ligne","filesView.editor.findInFile":"Rechercher dans le fichier","filesView.preview.find.placeholder":"Rechercher dans l'aperçu","filesView.preview.find.nextAria":"Correspondance suivante","filesView.preview.find.previousAria":"Correspondance précédente","filesView.preview.find.closeAria":"Fermer la recherche","filesView.preview.find.noMatches":"Aucune correspondance","filesView.preview.find.countAria":"{current} sur {total}","filesView.editor.goToLine":"Aller à la ligne","filesView.editor.symbols":"Symboles du fichier","filesView.symbols.placeholder":"Aller au symbole…","filesView.symbols.noneInFile":"Aucune fonction, classe ni titre trouvé dans ce fichier","filesView.symbols.noMatches":"Aucun symbole correspondant","filesView.editor.switchToEditMode":"Passer en mode édition","filesView.editor.switchToPreviewMode":"Passer en mode aperçu","filesView.editor.switchToTextView":"Passer à l'affichage texte","filesView.editor.switchToTreeView":"Passer à l'arborescence","filesView.toast.copyFailed":"Échec de la copie","filesView.toast.openInAppFailed":"Échec de l'ouverture dans {app}","filesView.toast.savingNotSupported":"Enregistrement non pris en charge","filesView.toast.writeFileFailed":"Échec de l'écriture du fichier","filesView.toast.saveFailed":"Échec de l'enregistrement","filesView.editor.copyFileContents":"Copier le contenu du fichier","filesView.editor.copyFilePathTitle":"Copier le chemin du fichier ({path})","filesView.editor.saveFile":"Enregistrer le fichier","filesView.editor.exitFullscreen":"Quitter le plein écran","filesView.editor.fullscreen":"Plein écran","filesView.unsaved.title":"Modifications non enregistrées","filesView.unsaved.description":"Enregistrer vos modifications avant de continuer ?","filesView.unsaved.saveChanges":"Enregistrer les modifications","filesView.unsaved.discard":"Jeter","filesView.editor.back":"Retour","filesView.editor.openFilesAria":"Ouvrir des fichiers","filesView.editor.closeFileAria":"Fermer {name}","filesView.editor.selectFile":"Sélectionnez un fichier","filesView.editor.showControlsAria":"Afficher les contrôles de l'éditeur","filesView.editor.controlsTitle":"Contrôles de l'éditeur","filesView.editor.pickFileFromTree":"Choisissez un fichier dans l'arborescence.","filesView.editor.cannotPreviewBinary":"Impossible de prévisualiser le fichier binaire","filesView.editor.binaryFileDescription":"Ce fichier est binaire et ne peut pas être modifié dans OpenChamber. Téléchargez-le pour l’ouvrir avec une autre application.","filesView.state.loading":"Chargement...","filesView.state.openingFileAtChange":"Ouverture du fichier lors du changement...","filesView.tree.search.placeholder":"Rechercher des fichiers...","filesView.tree.search.clearAria":"Effacer la recherche","filesView.tree.search.searching":"Recherche...","filesView.tree.actions.newFileTitle":"Nouveau fichier","filesView.tree.actions.newFolderTitle":"Nouveau dossier","filesView.tree.actions.refreshTitle":"Rafraîchir","filesView.tree.actions.showGitignored":"Afficher les fichiers ignorés par git","filesView.tree.actions.hideGitignored":"Masquer les fichiers ignorés par git","filesView.editor.imageAltFallback":"Image","filesView.error.jsonViewerUnavailable":"Visionneuse JSON indisponible","filesView.error.switchToTextMode":"Passez en mode texte pour afficher le contenu brut.","filesView.warning.largeFilePreviewLimited":"Ce fichier est volumineux ({sizeKb}KB). L'aperçu peut être limité.","filesView.error.previewUnavailable":"Aperçu indisponible","filesView.error.switchToEditMode":"Passez en mode édition pour résoudre le problème.","filesView.error.readFileFailed":"Échec de la lecture du fichier","filesView.editor.htmlPreviewTitle":"Aperçu HTML","contextUsage.aria.label":"Utilisation du contexte","contextUsage.mobile.title":"Utilisation du contexte","contextUsage.mobile.usedTokens":"Jetons utilisés","contextUsage.mobile.contextLimit":"Limite de contexte","contextUsage.mobile.outputLimit":"Limite de sortie","contextUsage.mobile.cost":"Coût","contextUsage.mobile.usage":"Usage","contextUsage.tooltip.usedTokens":"Jetons utilisés : {tokens}","contextUsage.tooltip.contextLimit":"Limite de contexte : {tokens}","contextUsage.tooltip.outputLimit":"Limite de sortie : {tokens}","contextUsage.tooltip.cost":"Coût : {cost}","contextUsage.compacted.description":"Contexte compacté. L’utilisation sera mise à jour après la prochaine réponse.","contextSidebar.session.untitled":"Session sans titre","contextSidebar.empty.openSession":"Ouvrez une session pour inspecter le contexte.","contextSidebar.section.context":"Contexte","contextSidebar.section.lastAssistantMessage":"Dernier message de l'assistant","contextSidebar.section.rawMessages":"Messages bruts","contextSidebar.context.percentUsed":"{percent}% utilisé","contextSidebar.breakdown.user":"Utilisateur","contextSidebar.breakdown.assistant":"Assistant","contextSidebar.breakdown.toolCalls":"Appels d'outils","contextSidebar.breakdown.other":"Autre","contextSidebar.stats.messages":"Messages","contextSidebar.stats.user":"Utilisateur","contextSidebar.stats.assistant":"Assistant","contextSidebar.stats.cost":"Coût","contextSidebar.tokens.input":"Entrée","contextSidebar.tokens.output":"Sortie","contextSidebar.tokens.reasoning":"Raisonnement","contextSidebar.tokens.cacheRead":"Lecture du cache","contextSidebar.tokens.cacheWrite":"Écriture du cache","contextSidebar.tokens.cacheHit":"Succès du cache","contextSidebar.actions.copyJson":"Copier JSON","contextSidebar.actions.copy":"Copie","contextSidebar.actions.copied":"Copié","planView.file.defaultName":"plan","planView.title.default":"Plan","planView.error.saveFailed":"Échec de l'enregistrement","planView.error.loadFailed":"Impossible de charger ce plan","planView.error.previewUnavailable":"Aperçu indisponible","planView.error.switchToEditMode":"Passez en mode édition pour résoudre le problème.","planView.error.writeFailed":"Échec de l'écriture","planView.error.writePlanFileFailed":"Échec de l'écriture du fichier de plan ({status})","planView.actions.improvePlanAria":"Améliorer le plan","planView.actions.improve":"Améliorer","planView.actions.implementPlanAria":"Plan de mise en œuvre","planView.actions.implement":"Mettre en œuvre","planView.actions.sendToNewSession":"Envoyer à une nouvelle session","planView.actions.sendToNewWorktreeSession":"Envoyer à une nouvelle session Worktree","planView.actions.copyPlanContents":"Copier le contenu du plan","planView.state.loading":"Chargement...","diffView.binary.unavailable":"Le contenu de ce fichier ne peut pas être visualisé.","diffView.state.whitespaceOnly":"Seuls les espacements ont changé dans ce fichier.","diffView.change.untracked":"Fichier non suivi","diffView.change.new":"Nouveau fichier","diffView.change.deleted":"Fichier supprimé","diffView.change.renamed":"Fichier renommé","diffView.change.copied":"Fichier copié","diffView.change.modified":"Fichier modifié","diffView.change.conflicted":"Fichier en conflit","diffView.selector.selectFile":"Sélectionner un fichier","diffView.image.original":"Original","diffView.image.modified":"Modifié","diffView.image.new":"Nouveau","diffView.image.originalAlt":"Original: {path}","diffView.image.modifiedAlt":"Modifié : {path}","diffView.section.files":"Fichiers","diffView.fileTree.showAsList":"Vue en liste","diffView.fileTree.showAsTree":"Vue en arborescence","diffView.fileTree.collapseDirectoryAria":"Réduire {path}","diffView.fileTree.expandDirectoryAria":"Développer {path}","diffView.fileTree.resize":"Redimensionner l’arborescence des fichiers","diffView.state.selectSessionDirectory":"Sélectionnez un répertoire de session pour afficher les différences","diffView.state.loadingRepositoryStatus":"Chargement de l'état du dépôt...","diffView.state.notGitRepository":"Pas un dépôt git. Utilisez l'onglet Git pour initialiser ou modifier des répertoires.","diffView.state.cleanWorkingTree":"Worktree sans modifications, rien à afficher","diffView.state.noLastTurnChanges":"Aucun changement du dernier tour à afficher","diffView.state.failedToLoadDiff":"Échec du chargement du différentiel","diffView.unavailable.missingTitle":"Le fichier n’existe plus","diffView.unavailable.missingDescription":"Il a été supprimé après le chargement de la liste des modifications. La liste est en cours d’actualisation.","diffView.unavailable.nestedRepositoryTitle":"Dépôt Git distinct","diffView.unavailable.nestedRepositoryDescription":"Ce dossier a son propre historique Git. Ouvrez-le comme projet pour voir ses modifications.","diffView.unavailable.untrackedDirectoryTitle":"Dossier de nouveaux fichiers","diffView.unavailable.untrackedDirectoryDescription":"Ce dossier contient trop de nouveaux fichiers pour les lister un par un. Indexez-le ou ajoutez-le à .gitignore s’il n’a pas sa place dans le dépôt.","diffView.submodule.title":"Sous-module","diffView.submodule.commitChanged":"Commit {from} → {to}","diffView.submodule.commitUnchanged":"Toujours sur le commit {commit}","diffView.submodule.added":"Nouveau sous-module au commit {commit}","diffView.submodule.removed":"Sous-module supprimé, était au commit {commit}","diffView.submodule.notCheckedOut":"Non extrait. Commit enregistré : {commit}","diffView.submodule.trackedChanges":"Contient des modifications non validées","diffView.submodule.untrackedFiles":"Contient des fichiers non suivis","diffView.submodule.conflict":"Conflit de fusion sur le commit enregistré","diffView.state.loadingDiff":"Chargement du différentiel...","diffView.state.loadingChanges":"Chargement des modifications...","diffView.state.largeDiff":"Diff volumineux ({count} lignes modifiées)","diffView.state.largeDiffDescription":"Le rendu peut être lent. Vous pouvez tout de même afficher le diff avec le bouton ci-dessous.","diffView.summary.changedFilesSingle":"Le fichier {count} a été modifié","diffView.summary.changedFilesPlural":"Fichiers {count} modifiés","diffView.scope.changed":"Modifiés","diffView.scope.staged":"Staged","diffView.scope.lastTurn":"Dernier tour","diffView.scope.branch":"Branche","diffView.branch.resolvingBase":"Détection de la branche de base...","diffView.branch.noBaseTitle":"Aucune branche de base","diffView.branch.noBaseDescription":"Git ne conserve aucune trace de la branche d’origine de cette branche. Choisissez une branche de base pour la comparaison.","diffView.branch.loadError":"Échec du chargement des modifications de la branche","diffView.branch.loadingFiles":"Chargement des modifications de la branche...","diffView.branch.empty":"Aucune modification sur cette branche par rapport à {base}","diffView.scope.selectorAria":"Sélectionner le mode de changements","diffView.actions.retry":"Réessayer","diffView.actions.renderAnyway":"Afficher quand même","diffView.actions.showLinesBelow":"Afficher les lignes suivantes","diffView.actions.expandAll":"Tout développer","diffView.actions.collapseAll":"Tout réduire","diffView.actions.disableLineWrap":"Désactiver le retour à la ligne","diffView.actions.enableLineWrap":"Activer le retour à la ligne","diffView.actions.hideWhitespace":"Masquer les changements d’espacement","diffView.actions.showWhitespace":"Afficher les changements d’espacement","diffView.actions.openFileInEditorAtChange":"Ouvrez ce fichier dans l'éditeur lors du changement","diffView.actions.openFileAtFirstChangedLine":"Ouvrez ce fichier à la première ligne modifiée","diffView.actions.review":"Revoir","diffView.actions.reviewAria":"Revoir les changements","diffView.reviewDialog.title":"Revoir les changements","diffView.reviewDialog.description":"Démarre une session de revue séparée pour les changements actuels.","diffView.reviewDialog.generateHandoff":"Générer un handoff","diffView.reviewDialog.autoReview":"Lancer la boucle de revue automatique","diffView.reviewDialog.info":"Ce flux fonctionne mieux lorsqu’il est lancé depuis la session où les changements ont été implémentés.","diffView.reviewDialog.actions.cancel":"Annuler","diffView.reviewDialog.actions.start":"Revoir","diffView.reviewDialog.actions.starting":"Démarrage...","diffView.reviewDialog.toast.noSessionDirectory":"Le dossier de session est indisponible","diffView.reviewDialog.toast.startFailed":"Impossible de démarrer le flux de revue","chat.history.loadOlder":"Charger les messages précédents","chat.appLink.confirm.title":"Ouvrir ce lien dans une autre application ?","chat.appLink.confirm.description":"Ce lien de discussion utilise le protocole {scheme} et s'ouvrira dans une autre application.","chat.appLink.confirm.descriptionPlain":"Ce lien de discussion s'ouvrira dans une autre application.","chat.appLink.confirm.cancel":"Annuler","chat.appLink.confirm.open":"Ouvrir une fois","chat.appLink.confirm.trustAndOpen":"Approuver et ouvrir","chat.autoReview.title":"La boucle de revue de code est en cours","chat.autoReview.status.waitingForReviewer":"En attente du reviewer","chat.autoReview.status.waitingForImplementer":"En attente de l’implémenteur","chat.autoReview.reviewSessionLabel":"Session de revue","chat.autoReview.actions.open":"Ouvrir","chat.autoReview.actions.stop":"Arrêter","chat.draftDirtyNotice.tooltip":`Vous avez des modifications non commitées sur cette branche.
|
|
12
|
+
Une nouvelle session pourrait entrer en conflit avec elles. Vous voudrez peut-être les commiter d’abord ou utiliser un autre worktree.`,"chat.draftDirtyNotice.indicatorAria":"Modifications non commitées dans ce répertoire","diffView.hunk.label":"Sections","diffView.hunk.stage":"Préparer","diffView.hunk.unstage":"Retirer","diffView.hunk.discard":"Annuler","diffView.hunk.stageTitle":"Préparer la section {index}","diffView.hunk.unstageTitle":"Retirer la section {index} de la préparation","diffView.hunk.discardTitle":"Annuler la section {index}","diffView.hunk.unavailable":"Cette section n'est plus disponible. Actualisez le diff et réessayez.","diffView.hunk.unsupported":"La préparation de sections individuelles n'est pas prise en charge dans cet environnement.","rightSidebar.contextNotesTodo.plan.defaultTitle":"Plan","rightSidebar.contextNotesTodo.empty.selectProject":"Sélectionnez un projet pour ajouter des notes et des tâches.","rightSidebar.contextNotesTodo.notes.placeholder":"Capturez le contexte, les rappels ou les liens","rightSidebar.contextNotesTodo.notes.addAria":"Ajouter une note","rightSidebar.contextNotesTodo.notes.empty":"Aucune note pour le moment. Notez du contexte, des rappels ou des liens.","rightSidebar.contextNotesTodo.notes.actions.expand":"Développer la note","rightSidebar.contextNotesTodo.notes.actions.collapse":"Réduire la note","rightSidebar.contextNotesTodo.notes.actions.delete":"Supprimer la note","rightSidebar.contextNotesTodo.notes.actions.pin":"Épingler au contexte de l'agent","rightSidebar.contextNotesTodo.notes.actions.unpin":"Détacher du contexte de l'agent","rightSidebar.contextNotesTodo.notes.source.selection":"Depuis le chat","rightSidebar.contextNotesTodo.notes.source.agent":"Depuis l'agent","rightSidebar.contextNotesTodo.search.placeholder":"Rechercher","rightSidebar.contextNotesTodo.search.clear":"Effacer la recherche","rightSidebar.contextNotesTodo.search.noResults":'Aucun résultat pour "{query}".',"rightSidebar.contextNotesTodo.toast.deleteNoteFailed":"Échec de la suppression de la note","rightSidebar.contextNotesTodo.toast.createNoteFailed":"Échec de la création de la note","rightSidebar.contextNotesTodo.tabs.notes":"Notes","rightSidebar.contextNotesTodo.tabs.todos":"Tâches","rightSidebar.contextNotesTodo.tabs.plans":"Plans","rightSidebar.contextNotesTodo.plans.actions.back":"Retour aux plans","rightSidebar.contextNotesTodo.tabs.memory":"Mémoire","rightSidebar.contextNotesTodo.sections.label":"Sections du contexte du projet","rightSidebar.contextNotesTodo.sections.resize":"Redimensionner la barre des sections","rightSidebar.contextNotesTodo.memory.scope.project":"Projet","rightSidebar.contextNotesTodo.memory.scope.label":"Portée de la mémoire","rightSidebar.contextNotesTodo.memory.scope.global":"À votre sujet","rightSidebar.contextNotesTodo.memory.type.fact":"fait","rightSidebar.contextNotesTodo.memory.badge.new":"nouveau","rightSidebar.contextNotesTodo.memory.flagged":"Retenu — se lit comme une instruction","rightSidebar.contextNotesTodo.memory.badge.changed":"modifié","rightSidebar.contextNotesTodo.memory.type.preference":"préférence","rightSidebar.contextNotesTodo.memory.type.reference":"référence","rightSidebar.contextNotesTodo.memory.actions.delete":"Oublier cette mémoire","rightSidebar.contextNotesTodo.memory.actions.editTitle":"Titre de la mémoire","rightSidebar.contextNotesTodo.memory.actions.editBody":"Texte de la mémoire","rightSidebar.contextNotesTodo.memory.toast.saveFailed":"Impossible d’enregistrer la mémoire","rightSidebar.contextNotesTodo.memory.toast.deleteFailed":"Impossible d’oublier la mémoire","rightSidebar.contextNotesTodo.memory.empty.nothing":"L’agent n’a encore rien enregistré ici.","rightSidebar.contextNotesTodo.memory.empty.noMatches":"Aucune mémoire enregistrée ne correspond à votre recherche.","rightSidebar.contextNotesTodo.memory.empty.noProject":"Ouvrez un projet pour voir ce que l’agent en retient.","rightSidebar.contextNotesTodo.memory.empty.unavailable":"Impossible de charger la mémoire enregistrée. Rien n’est perdu — réessayez.","rightSidebar.contextNotesTodo.todo.clearCompleted":"Effacer les tâches terminées","rightSidebar.contextNotesTodo.todo.inputPlaceholder":"Ajouter une tâche","rightSidebar.contextNotesTodo.todo.addAria":"Ajouter une tâche","rightSidebar.contextNotesTodo.todo.empty":"Aucune tâche pour l'instant. Ajoutez une petite liste de contrôle pour ce projet.","rightSidebar.contextNotesTodo.todo.actions.markComplete":'Marquer "{text}" comme terminée',"rightSidebar.contextNotesTodo.todo.actions.collapse":'Réduire la tâche "{text}"',"rightSidebar.contextNotesTodo.todo.actions.expand":'Développer la tâche "{text}"',"rightSidebar.contextNotesTodo.todo.actions.delete":'Supprimer "{text}"',"rightSidebar.contextNotesTodo.todo.actions.send":'Envoyer "{text}"',"rightSidebar.contextNotesTodo.todo.actions.reorder":'Réordonner "{text}"',"rightSidebar.contextNotesTodo.todo.sendMenu.currentSession":"Envoyer à la session en cours","rightSidebar.contextNotesTodo.todo.sendMenu.newSession":"Envoyer à une nouvelle session","rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession":"Envoyer à une nouvelle session Worktree","rightSidebar.contextNotesTodo.plans.importFromFile":"Importer un plan à partir d'un fichier","rightSidebar.contextNotesTodo.plans.empty":"Aucun plan enregistré pour l'instant.","rightSidebar.contextNotesTodo.plans.deletePlan":"Supprimer le plan","rightSidebar.contextNotesTodo.plans.sharedBadge":"Dans le dépôt","rightSidebar.contextNotesTodo.plans.share":"Déplacer vers le dossier des plans du dépôt, pour que tous ceux qui le récupèrent le voient","rightSidebar.contextNotesTodo.plans.makePersonal":"Déplacer vers mes plans, hors du dépôt","rightSidebar.contextNotesTodo.plans.deletePlanWithTitle":'Supprimer le plan "{title}"',"rightSidebar.contextNotesTodo.sendDialog.title.newSession":"Envoyer à une nouvelle session","rightSidebar.contextNotesTodo.sendDialog.title.newWorktree":"Envoyer vers un nouvel worktree","rightSidebar.contextNotesTodo.sendDialog.variant.default":"Défaut","rightSidebar.contextNotesTodo.sendDialog.actions.cancel":"Annuler","rightSidebar.contextNotesTodo.sendDialog.actions.send":"Envoyer","rightSidebar.contextNotesTodo.sendDialog.actions.sending":"Envoi","rightSidebar.contextNotesTodo.toast.saveNotesFailed":"Échec de l'enregistrement des notes du projet","rightSidebar.contextNotesTodo.toast.loadNotesFailed":"Échec du chargement des notes de projet","rightSidebar.contextNotesTodo.toast.noActiveSession":"Aucune session active sélectionnée","rightSidebar.contextNotesTodo.toast.sentToCurrentSession":"Tâche envoyée à la session en cours","rightSidebar.contextNotesTodo.toast.worktreeRequiresGitRepo":"Les actions Worktree ne sont disponibles que pour les dépôts Git","rightSidebar.contextNotesTodo.toast.createSessionFailed":"Échec de la création de la session","rightSidebar.contextNotesTodo.toast.sentToNewSession":"Tâche envoyée à une nouvelle session","rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession":"Tâche envoyée à une nouvelle session Worktree","rightSidebar.contextNotesTodo.toast.sendTodoFailed":"Échec de l'envoi de la tâche","rightSidebar.contextNotesTodo.toast.updatePlanFailed":"Échec de la mise à jour du plan","rightSidebar.contextNotesTodo.toast.deletePlanFailed":"Échec de la suppression du plan","rightSidebar.contextNotesTodo.toast.movePlanFailed":"Impossible de déplacer le plan","rightSidebar.contextNotesTodo.toast.planFileEmpty":"Le fichier de plan est vide","rightSidebar.contextNotesTodo.toast.importPlanFailed":"Échec de l'importation du plan","rightSidebar.contextNotesTodo.toast.planImported":"Plan importé","rightSidebar.contextNotesTodo.toast.readPlanFileFailed":"Échec de la lecture du fichier de plan","inlineComment.range.lines":"Lignes {start}-{end}","inlineComment.input.placeholder":"Ajouter un commentaire... ({shortcut} pour enregistrer)","inlineComment.actions.cancel":"Annuler","inlineComment.actions.save":"Enregistrer","inlineComment.actions.comment":"Commentaire","inlineComment.actions.showLess":"Afficher moins","inlineComment.actions.showMore":"Afficher plus","inlineComment.actions.editComment":"Modifier le commentaire","inlineComment.actions.deleteComment":"Supprimer le commentaire","inlineComment.toast.selectSessionToSave":"Sélectionnez une session pour enregistrer le commentaire","header.services.openWithCurrent":"Ouvrir l'instance, l'utilisation et MCP (actuel : {current})","header.services.open":"Ouvrir les services, l'utilisation et MCP","header.services.title":"Services","header.services.viewAria":"Voir les services","header.services.closeAria":"Fermer les services","header.services.rateLimits":"Limites de taux","header.services.refreshRateLimitsAria":"Actualiser les limites de taux","header.services.noRateLimits":"Aucune limite de taux disponible.","header.services.noRateLimitsReported":"Aucune limite de taux signalée.","header.services.usageRefreshFailedStale":"Les données d’utilisation précédentes sont affichées. Échec de l’actualisation : {error}","header.services.used":"Utilisé","header.services.remaining":"Restant","header.services.modelFamily.other":"Autre","header.actions.openPlanAria":"Ouvrir le plan","header.actions.toggleChangesPanel":"Panneau des changements","header.actions.toggleChangesPanelAria":"Basculer le panneau des changements","header.actions.planWithShortcut":"Plan ({shortcut})","header.actions.terminalPanelWithShortcut":"Panneau du terminal ({shortcut})","chat.recap.aria":"Récapitulatif de la session","chat.recap.label":"Récap :","chat.sessionError.title":"OpenCode a interrompu cette réponse","chat.sessionError.noDetails":"OpenCode n’a fourni aucun détail. Le rapport d’état affiche les erreurs récentes.","chat.sessionError.showStatus":"Afficher le statut OpenCode","chat.sessionError.noReply":"OpenCode n'a pas commencé de réponse à ce message.","chat.sessionError.interrupted":"OpenCode a interrompu cette réponse.","chat.longError.expand":"Afficher l’erreur complète","chat.longError.collapse":"Afficher moins","chat.errorDetails.show":"Afficher les détails de la réponse","chat.errorDetails.hide":"Masquer les détails de la réponse","chat.goal.dialog.titleCreate":"Définir un objectif de session","chat.goal.dialog.titleManage":"Objectif de session","chat.goal.dialog.objectiveLabel":"Objectif","chat.goal.dialog.objectivePlaceholder":"Décrivez l'état final que l'agent doit atteindre et vérifier…","chat.goal.dialog.budgetLabel":"Budget de tokens","chat.goal.dialog.evaluationModelLabel":"Modèle d’évaluation","chat.goal.status.active":"Actif","chat.goal.status.evaluating":"Évaluation…","chat.goal.status.paused":"En pause","chat.goal.status.blocked":"Bloqué","chat.goal.status.budgetLimited":"Budget atteint","chat.goal.status.complete":"Terminé","chat.goal.usage.tokens":"{used} tokens","chat.goal.usage.tokensWithBudget":"{used}/{budget} tokens","chat.goal.usage.turns":"{turns} continuations","chat.goal.action.pause":"Mettre en pause","chat.goal.action.resume":"Reprendre","chat.goal.action.markComplete":"Marquer comme terminé","chat.goal.action.clear":"Supprimer l'objectif","chat.goal.action.cancel":"Annuler","chat.goal.action.save":"Enregistrer l'objectif","chat.goal.action.start":"Lancer l'objectif","chat.goal.toast.actionFailed":"Échec de la mise à jour de l'objectif","chat.goal.toast.distillFallback":"L'objectif dépassait la limite et n'a pas pu être condensé — l'auditeur utilise une version tronquée","chat.goal.row.aria":"Objectif de session — ouvrir les détails","chat.goal.button.createAria":"Définir un objectif de session","chat.goal.button.manageAria":"Gérer l'objectif de session","chat.goal.button.armAria":"Démarrer un objectif avec le prochain message","chat.goal.counter.aria":"Limite de longueur de l'objectif","chat.goal.button.disarmAria":"Objectif armé — touchez pour désarmer","chat.goal.button.noSmallModel":"Les objectifs nécessitent un Small Model. Connectez-vous à un fournisseur de modèles ou choisissez-en un dans Paramètres → Sessions.","chat.goal.dialog.noSmallModel":"Les objectifs nécessitent un Small Model pour vérifier la progression. Connectez-vous à un fournisseur de modèles ou choisissez-en un dans Paramètres → Sessions.","chat.goal.button.cancelAria":"Objectif en cours — touchez pour l’annuler","chat.goal.cancelDialog.title":"Annuler cet objectif ?","chat.goal.cancelDialog.description":"L'agent cessera de travailler automatiquement vers cet objectif.","chat.goal.cancelDialog.keep":"Garder l'objectif","chat.goal.cancelDialog.confirm":"Annuler l'objectif","chat.suggestion.applyAria":"Utiliser le message suggéré","chat.suggestion.dismissAria":"Ignorer la suggestion","header.actions.toggleTerminalPanelAria":"Afficher/masquer le panneau du terminal","terminalView.stream.processExitedMessage":"[Processus terminé{exitCodeSegment}{signalSegment}]","terminalView.stream.processExitedWithCode":"avec le code {exitCode}","terminalView.stream.processExitedWithSignal":"(signal {signal})","terminalView.error.sessionEnded":"Session terminale terminée","terminalView.error.connectionFailed":"Échec de la connexion : {message}","terminalView.error.startSessionFailed":"Échec du démarrage de la session de terminal","terminalView.error.restartFailed":"Échec du redémarrage du terminal","terminalView.error.sendInputFailed":"Échec de l'envoi de l'entrée","terminalView.empty.noWorkingDirectory":"Aucun répertoire de travail disponible pour le terminal.","terminalView.empty.selectSession":"Sélectionnez une session pour ouvrir le terminal.","terminalView.empty.noWorkingDirectoryForSession":"Aucun répertoire de travail disponible pour cette session.","terminalView.actions.retry":"Réessayer","terminalView.actions.hardRestart":"Redémarrage forcé","terminalView.actions.hardRestartTitle":"Forcer l'arrêt et créer une nouvelle session","terminalView.quickKeys.escape":"Échap","terminalView.quickKeys.tabAria":"Tabulation","terminalView.quickKeys.controlLabel":"Ctrl","terminalView.quickKeys.controlModifierAria":"Touche Contrôle","terminalView.quickKeys.altLabel":"Alt","terminalView.quickKeys.altModifierAria":"Modificateur Alt","terminalView.quickKeys.commandModifierAria":"Touche Commande","terminalView.quickKeys.arrowUpAria":"Flèche vers le haut","terminalView.quickKeys.arrowLeftAria":"Flèche vers la gauche","terminalView.quickKeys.arrowDownAria":"Flèche vers le bas","terminalView.quickKeys.arrowRightAria":"Flèche vers la droite","terminalView.quickKeys.enterAria":"Entrée","terminalView.tabs.closeTabTitle":"Fermer l'onglet","terminalView.tabs.newTabTitle":"Nouvel onglet","terminalView.tabs.menu.rename":"Renommer","terminalView.tabs.renameDialog.title":"Renommer le terminal","terminalView.tabs.renameDialog.placeholder":"Nom du terminal","terminalView.tabs.renameDialog.cancel":"Annuler","terminalView.tabs.renameDialog.save":"Renommer","terminalView.viewport.inputAria":"Entrée du terminal","terminalView.viewport.scrollbarAria":"Historique du terminal","directoryExplorerDialog.title":"Ajouter un répertoire de projet","directoryExplorerDialog.description":"Choisissez un dossier à ajouter en tant que projet.","directoryExplorerDialog.toggle.showHidden":"Afficher masqué","directoryExplorerDialog.pathInput.placeholder":"Entrez le chemin ou sélectionnez dans l'arborescence...","directoryExplorerDialog.actions.openingFinder":"Ouverture...","directoryExplorerDialog.actions.openInFinder":"Ouvrir dans le Finder","directoryExplorerDialog.actions.adding":"Ajout...","directoryExplorerDialog.actions.addProject":"Ajouter un projet","directoryExplorerDialog.actions.addSelected":"Ajouter la sélection","directoryExplorerDialog.actions.addLocalProject":"Ajouter un projet local","directoryExplorerDialog.actions.cloneRepository":"Cloner le dépôt","directoryExplorerDialog.actions.cloneAndAdd":"Cloner et ajouter","directoryExplorerDialog.actions.cloning":"Clonage...","directoryExplorerDialog.actions.createAndAdd":"Créer et ajouter","directoryExplorerDialog.actions.alreadyAdded":"Déjà ajouté","directoryExplorerDialog.clone.remoteUrlPlaceholder":"URL du dépôt (HTTPS ou SSH)","directoryExplorerDialog.clone.setupRequired":"Cloné et ajouté. Terminez la configuration de l’accès dans le panneau Git ; inutile de cloner à nouveau.","directoryExplorerDialog.clone.identityMismatch":"Cette identité n’atteint pas cette adresse. Choisissez-en une qui utilise le même type d’adresse (HTTPS ou SSH).","directoryExplorerDialog.clone.unsupported":"Le clonage n'est pas pris en charge dans l'environnement VS Code.","directoryExplorerDialog.existing.bindFailed":"Projet ajouté, mais son compte n’a pas pu être défini. Choisissez-le dans le panneau Git.","directoryExplorerDialog.browse.directories":"Répertoires","directoryExplorerDialog.browse.loading":"Chargement des répertoires...","directoryExplorerDialog.browse.empty":"Aucun répertoire correspondant.","directoryExplorerDialog.browse.permissionDenied":"OpenChamber doit accéder à ce dossier.","directoryExplorerDialog.browse.loadFailed":"Impossible de charger ce dossier.","directoryExplorerDialog.browse.grantAccess":"Autoriser l’accès","directoryExplorerDialog.browse.retry":"Réessayer","directoryExplorerDialog.browse.parentDirectory":"Répertoire parent","directoryExplorerDialog.browse.addedBadge":"Ajouté","directoryExplorerDialog.browse.quickAdd":"Ajouter","directoryExplorerDialog.browse.selectForAdd":"Sélectionner pour ajouter","directoryExplorerDialog.footer.navigate":"Naviguer","directoryExplorerDialog.footer.select":"Sélectionner","directoryExplorerDialog.footer.add":"Ajouter","directoryExplorerDialog.shortcut.enter":"Entrée","directoryExplorerDialog.toast.unableToAccessDirectory":"Impossible d'accéder au répertoire","directoryExplorerDialog.toast.desktopDeniedAccess":"Le bureau a refusé l'accès au répertoire.","directoryExplorerDialog.toast.failedToOpenDirectory":"Échec de l'ouverture du répertoire","directoryExplorerDialog.toast.desktopCouldNotGrantAccess":"Desktop n'a pas pu accorder l'accès aux fichiers.","directoryExplorerDialog.toast.addedProjects":"{count} projet(s) ajouté(s)","directoryExplorerDialog.toast.failedToAddProject":"Échec de l'ajout du projet","directoryExplorerDialog.toast.cloneUrlRequired":"Entrez dans un dépôt URL avant le clonage.","directoryExplorerDialog.toast.selectValidDirectoryPath":"Veuillez sélectionner un chemin de répertoire valide.","directoryExplorerDialog.toast.failedToSelectDirectory":"Échec de la sélection du répertoire","directoryExplorerDialog.toast.unknownError":"Une erreur inconnue s'est produite.","directoryTree.actions.createNewDirectory":"Créer un nouveau répertoire","directoryTree.actions.pinDirectory":"Répertoire des épingles","directoryTree.actions.unpinDirectory":"Détacher le répertoire","directoryTree.actions.createDirectory":"Créer un répertoire","directoryTree.actions.cancel":"Annuler","directoryTree.actions.selectWorkingDirectoryAria":"Sélectionnez le répertoire de travail","directoryTree.state.locatingHomeDirectory":"Localisation du répertoire personnel...","directoryTree.state.loading":"Chargement...","directoryTree.state.noDirectoriesFound":"Aucun répertoire trouvé","directoryTree.section.pinned":"Épinglé","directoryTree.section.browse":"Parcourir","aboutDialog.versionLabel":"Version {version}","aboutDialog.openChamberVersionLabel":"Version OpenChamber {version}","aboutDialog.openCodeVersionLabel":"Version OpenCode {version}","aboutDialog.appVersionLabel":"Version de l'app {version}","aboutDialog.actions.copyDiagnostics":"Copier les diagnostics","aboutDialog.actions.preparingDiagnostics":"Préparation du diagnostic...","aboutDialog.actions.diagnosticsCopied":"Diagnostic copié","aboutDialog.diagnosticsDescription":"Comprend l’état OpenChamber, l’état de santé OpenCode, les répertoires et les projets.","aboutDialog.footerNote":"Fabriqué avec amour pour la communauté","aboutDialog.toast.copyFailed":"Échec de la copie","aboutDialog.toast.diagnosticsNotReady":"Les diagnostics ne sont pas encore prêts. Attendez une seconde et réessayez.","aboutDialog.toast.diagnosticsCopied":"Diagnostic copié","helpDialog.title":"Raccourcis clavier","helpDialog.description":"Utilisez ces raccourcis clavier pour naviguer efficacement dans OpenChamber","helpDialog.section.navigationCommands":"Navigation et commandes","helpDialog.section.sessionManagement":"Gestion des sessions","helpDialog.section.panels":"Panneaux","helpDialog.section.interface":"Interface","helpDialog.item.openCommandPalette":"Ouvrir la palette de commandes","helpDialog.item.showKeyboardShortcuts":"Afficher les raccourcis clavier (cette boîte de dialogue)","helpDialog.item.toggleSessionSidebar":"Afficher/masquer la barre latérale des sessions","helpDialog.item.addSelectionToChat":"Ajouter la sélection au chat","helpDialog.item.cycleAgent":"Changer d'agent (entrée de chat)","helpDialog.item.openModelSelector":"Ouvrir le sélecteur de modèle","helpDialog.item.navigateModels":"Naviguer dans les modèles (dans le sélecteur)","helpDialog.item.adjustThinkingMode":"Ajuster le mode de réflexion (dans le sélecteur, lorsqu'il est pris en charge)","helpDialog.item.cycleThinkingVariant":"Changer de variante de réflexion (raccourci global)","helpDialog.item.newWindow":"Nouvelle fenêtre (desktop uniquement)","helpDialog.item.createNewSession":"Créer une nouvelle session","helpDialog.item.createNewWorktreeDraft":"Créer un nouveau brouillon de worktree","helpDialog.item.focusChatInput":"Activer la saisie du chat","helpDialog.item.togglePromptNavigator":"Afficher ou masquer le navigateur de prompts","helpDialog.item.abortActiveRun":"Abandonner l’exécution active (double pression)","helpDialog.item.toggleTerminalDock":"Afficher/masquer le panneau du terminal","helpDialog.item.toggleTerminalExpanded":"Agrandir/réduire le terminal","helpDialog.item.cycleTheme":"Basculer le thème (clair → sombre → système)","helpDialog.item.switchSessionTab":"Basculer l’onglet de session","helpDialog.item.switchContextSurface":"Basculer la surface du panneau contextuel (touche numérique)","helpDialog.item.toggleServicesMenu":"Basculer le menu des services","helpDialog.item.openSettings":"Ouvrir les paramètres","helpDialog.keyCombiner.or":"ou","helpDialog.proTips.commandPalette":"Utilisez la palette de commandes ({shortcut}) pour accéder rapidement à toutes les actions","helpDialog.proTips.recentSessions":"Les 5 sessions les plus récentes apparaissent dans la palette de commandes","helpDialog.proTips.leaderSequences":"Raccourcis en deux temps : appuyez sur la combinaison, puis sur la seconde touche — Échap annule","header.actions.rightSidebarWithShortcut":"Barre latérale droite ({shortcut})","header.actions.toggleRightSidebarAria":"Basculer la barre latérale droite","header.actions.openAppMenu":"Menu de OpenChamber","header.actions.openAppMenuAria":"Ouvrir le menu OpenChamber","header.actions.openSessionsWithShortcut":"Ouvrir les sessions ({shortcut})","header.actions.openSessionsAria":"Ouvrir les sessions","header.actions.closeSessionsAria":"Fermer les sessions","header.actions.newSessionAria":"Nouvelle session","header.actions.newSessionWithShortcut":"Nouvelle session ({shortcut})","header.actions.backAria":"Retour","header.navigation.mainAria":"Navigation principale","header.sessions.title":"Sessions","header.changes.availableAria":"Modifications disponibles","session.githubIssuePicker.actions.refresh":"Rafraîchir","session.githubPrPicker.error.runtimeUnavailable":"API GitHub indisponible dans ce runtime","session.githubPrPicker.error.repoNotResolvable":"Impossible de résoudre le dépôt","session.githubPrPicker.toast.loadMoreFailed":"Échec du chargement d'autres PR","session.githubPrPicker.searchPlaceholder":"Rechercher par titre ou #123, ou coller l'URL de la PR","session.githubPrPicker.empty.notConnected":"GitHub non connecté. Connectez votre compte GitHub dans les paramètres.","session.githubPrPicker.empty.noPullRequestsFound":"Aucune PR trouvée","session.githubPrPicker.loading.pullRequests":"Chargement des PR...","session.githubPrPicker.actions.loadMore":"Charger plus","session.newWorktree.title":"Nouveau worktree","session.newWorktree.mode.newBranch":"Nouvelle branche","session.newWorktree.mode.existingBranch":"Branche existante","session.newWorktree.selectBranch":"Sélectionnez une branche","session.newWorktree.chooseBranch":"Choisissez une branche...","session.newWorktree.fetchBranches":"Récupérer des branches","session.newWorktree.searchBranches":"Rechercher des branches...","session.newWorktree.loadingBranches":"Chargement des branches...","session.newWorktree.noBranchesFound":"Aucune branche trouvée","session.newWorktree.matchingBranches":"Branches correspondantes","session.newWorktree.noMatchingBranches":"Aucune branche correspondante","session.newWorktree.localBranches":"Branches locales","session.newWorktree.remoteBranches":"Branches du dépôt distant","session.newWorktree.branchName":"Nom de la branche","session.newWorktree.branchNamePlaceholder":"fonctionnalité/ma-fonctionnalité-géniale","session.newWorktree.actions.startFromGitHubIssuePr":"À partir d'une issue/PR GitHub","session.newWorktree.actions.startFromGitLabIssueMr":"Un ticket ou une merge request GitLab","session.newWorktree.worktreeDirectory":"Répertoire du worktree","session.newWorktree.worktreeDirectoryPlaceholder":"mon-répertoire-worktree","session.newWorktree.resetToMatchBranchName":"Réinitialiser pour correspondre au nom de la branche","session.newWorktree.sourceBranch":"Branche source","session.newWorktree.selectSourceBranch":"Sélectionnez la branche source","session.newWorktree.selectSourceBranchPlaceholder":"Sélectionnez la branche source...","session.newWorktree.issueNumber":"Issue #{number}","session.newWorktree.prNumber":"PR #{number}","session.newWorktree.includeDiffBadge":"+diff","session.newWorktree.fromSource":"de {source}","session.newWorktree.actions.cancel":"Annuler","session.newWorktree.actions.creating":"Création...","session.newWorktree.actions.createWorktree":"Créer un worktree","session.newWorktree.actions.reset":"Réinitialiser","session.newWorktree.actions.unlink":"Délier","session.newWorktree.start.title":"Point de départ","session.newWorktree.start.newBranchHint":"Une nouvelle branche, basée sur la branche choisie.","session.newWorktree.start.existingBranchHint":"Extraire une branche qui existe déjà.","session.newWorktree.start.fromItemHint":"Une PR utilise sa propre branche, une issue en reçoit une nouvelle. Les deux sont joints à votre premier message.","session.newWorktree.mr.fromItemHint":"Une MR utilise sa propre branche, une issue en reçoit une nouvelle. Les deux sont joints à votre premier message.","session.newWorktree.start.fromItemUnavailable":"Connectez GitHub ou Linear pour partir d’une PR ou d’une issue.","session.newWorktree.mr.fromItemUnavailable":"Connectez GitLab ou Linear pour partir d’une MR ou d’une issue.","session.newWorktree.item.title":"PR ou issue","session.newWorktree.baseBranchNotApplicable":"Inutile pour ce choix","session.newWorktree.mode.fromItem":"PR ou issue","session.newWorktree.mr.item":"MR ou issue","session.newWorktree.error.attachLinkedFailed":"Impossible de joindre {item}","session.newWorktree.error.noActiveProject":"Aucun projet actif","session.newWorktree.error.branchNameRequired":"Le nom de la branche est requis","session.newWorktree.error.worktreeDirectoryRequired":"Le répertoire du worktree est requis","session.newWorktree.error.createWorktreeFailed":"Échec de la création du worktree","session.newWorktree.error.changeRequestAuthorityMissing":"Cette pull request n’est plus disponible. Choisissez-la à nouveau.","session.newWorktree.mr.authorityMissing":"Cette merge request n’est plus disponible. Choisissez-la à nouveau.","session.newWorktree.trust.confirmation":`Ce checkout contient des actions exécutables :
|
|
13
|
+
|
|
14
|
+
{actions}
|
|
15
|
+
|
|
16
|
+
Les exécuter maintenant ? Annuler laisse le checkout prêt pour Git sans les exécuter.`,"session.newWorktree.toast.worktreeCreated":"Worktree créé","session.newWorktree.toast.worktreeCreatedDescription":"{target} - démarrage en arrière-plan","session.newWorktree.toast.fetchSourceFailed":"Impossible de récupérer depuis le dépôt distant — création à partir de l'état local","session.newWorktree.toast.fetchSourceAccess":"Récupération impossible : l'accès à ce dépôt doit être vérifié dans Configurer le dépôt. Création à partir de l'état local.","session.githubIntegration.tabs.pullRequests":"PR","session.githubIntegration.validation.branchAlreadyCheckedOut":"La branche est déjà active dans un worktree","session.githubIntegration.validation.failed":"Échec de la validation","chat.fileAttachment.toast.attachFailed":"Impossible de joindre le fichier","chat.fileAttachment.toast.someFilesSkipped":`Certains fichiers ont été ignorés :
|
|
17
|
+
{summary}`,"chat.fileAttachment.toast.vscodePickFailed":"Échec de la sélection des fichiers dans VS Code","chat.fileAttachment.fileFallback":"fichier","chat.fileAttachment.skippedFallback":"ignoré","chat.fileAttachment.actions.attachAria":"Joindre des fichiers","chat.fileAttachment.actions.attach":"Joindre des fichiers","chat.fileAttachment.actions.removeNamed":"Supprimer {name}","chat.fileAttachment.actions.removeImage":"Supprimer l'image","chat.fileAttachment.activeEditor.addFile":"Ajouter le fichier : {name} au contexte","chat.fileAttachment.activeEditor.pinSelection":"Épingler la sélection au contexte","chat.fileAttachment.activeEditor.remove":"Retirer du contexte","chat.changedFiles.title":"Fichiers modifiés","chat.changedFiles.actions.openFileTitle":"Ouvrir {path}","chat.changedFiles.actions.otherFiles":"Autres fichiers modifiés ({count})","chat.changedFiles.actions.showFewer":"Afficher moins de fichiers","chat.emptyState.opencodeUnreachable":"OpenCode n'est pas accessible","chat.emptyState.startNewChat":"Démarrer une nouvelle discussion","chat.emptyState.draftTitle":"Sur quoi travaillons-nous ?","chat.emptyState.draftTitleWithProject":"Sur quoi travaillons-nous dans {project} ?","chat.scrollToBottom.aria":"Faire défiler vers le bas","chat.promptNavigator.aria":"Navigation des prompts","chat.promptNavigator.currentPrompt":"Prompt actuel","chat.promptNavigator.loadMore":"Charger plus de prompts","chat.timeline.relative.justNow":"à l’instant","chat.timeline.relative.minutesAgo":"il y a {count} min","chat.timeline.relative.hoursAgo":"il y a {count} h","chat.timeline.relative.daysAgo":"il y a {count} j","chat.timeline.title":"Chronologie des conversations","chat.timeline.description":"Accédez à n’importe quel point de la conversation ou créez une nouvelle session","chat.timeline.searchPlaceholder":"Rechercher des messages...","chat.timeline.empty.search":"Aucun message trouvé","chat.timeline.empty.session":"Aucun message dans cette session pour le moment","chat.timeline.noTextContent":"[Aucun contenu textuel]","chat.timeline.actions.title":"Actions","chat.timeline.actions.revertFromHere":"Revenir à partir d'ici","chat.timeline.actions.forkFromHere":"Fork à partir d'ici","chat.timeline.actions.previousTurn":"Tour précédent","chat.timeline.actions.latest":"Dernier","chat.timeline.help.clickMessage":"Cliquez sur un message pour y faire défiler la conversation","chat.timeline.help.undoToPoint":"Annuler jusqu'à ce point (le texte du message remplira la saisie)","chat.timeline.help.createSessionFromHere":"Créer une nouvelle session à partir d'ici","chat.statusRow.todo.status.inProgress":"En cours","chat.statusRow.todo.status.pending":"En attente","chat.statusRow.todo.status.completed":"Terminé","chat.statusRow.todo.status.cancelled":"Annulé","chat.statusRow.todo.priority.high":"Haute priorité","chat.statusRow.todo.priority.medium":"Priorité moyenne","chat.statusRow.todo.priority.low":"Faible priorité","chat.statusRow.actions.stopGeneratingAria":"Arrêter de générer","chat.statusRow.tasksTitle":"Tâches","chat.statusRow.modelStatus":"{model} · {status}","chat.statusRow.summary.activeLeft":"{active} actif · {left} restant","chat.revertIndicator.redo":"Refaire","chat.revertIndicator.redoAria":"Rétablir : restaurer les messages annulés","chat.revertPopover.title":"Rétabli","chat.revertPopover.noTextContent":"Aucun contenu textuel","chat.revertPopover.forkFromHere":"Fork à partir d'ici","chat.revertPopover.forkFromMessage":"Fork de ce message","chat.revertPopover.restoreAll":"Tout restaurer","chat.revertPopover.restore":"Restaurer","chat.revertPopover.revert":"Revenir","chat.revertPopover.fork":"Fork","chat.revert.toast.undo":"Revenu à {preview}","chat.revert.toast.redo":"Refait","chat.revert.toast.restored":"Restauré tous les messages","chat.toast.opencodeRestartInterrupted.title":"Discussion interrompue","chat.toast.opencodeRestartInterrupted.description":"OpenCode a redémarré alors qu’une réponse était encore en cours. Envoyez un message pour continuer.","chat.toast.opencodeRestartInterrupted.openSession":"Ouvrir la session","chat.errorBoundary.title":"Erreur de discussion","chat.errorBoundary.description":"L'interface de discussion a rencontré une erreur. Cela peut être dû à un problème de réseau temporaire ou à des données de message corrompues.","chat.errorBoundary.sessionLabel":"Session","chat.errorBoundary.detailsSummary":"Détails de l'erreur","chat.errorBoundary.resetAction":"Réinitialiser le chat","chat.errorBoundary.persistentHint":"Si le problème persiste, essayez d'actualiser la page.","chat.autocomplete.tabs.commands":"Commandes","chat.autocomplete.tabs.agents":"Agents","chat.autocomplete.tabs.files":"Fichiers","chat.autocomplete.keyboardHint":"↑↓ naviguer • Entrer sélectionner • Esc fermer","chat.commandAutocomplete.command.initDescription":"Créer/mettre à jour le fichier AGENTS.md","chat.commandAutocomplete.command.undoDescription":"Annuler le dernier message","chat.commandAutocomplete.command.redoDescription":"Refaire les messages précédemment annulés","chat.commandAutocomplete.command.timelineDescription":"Ouvrir la chronologie de la conversation","chat.commandAutocomplete.command.compactDescription":"Compresser l'historique des sessions à l'aide de l'IA pour réduire la taille du contexte","chat.commandAutocomplete.command.summaryDescription":"Résumé de session non destructif. Indice de sujet facultatif après la commande.","chat.commandAutocomplete.command.workspaceReviewDescription":"Examine les modifications actuelles de l’espace de travail pour ne signaler que les problèmes importants.","chat.commandAutocomplete.badge.command":"commande","chat.commandAutocomplete.badge.system":"système","chat.commandAutocomplete.empty":"Aucune commande trouvée","chat.agentMentionAutocomplete.badge.system":"système","chat.agentMentionAutocomplete.empty":"Aucun agent trouvé","chat.fileMentionAutocomplete.searchMoreAgents":"Tapez pour rechercher plus d'agents","chat.fileMentionAutocomplete.empty":"Aucune correspondance trouvée","chat.queuedMessage.attachments":"+ {count} fichier(s)","chat.queuedMessage.empty":"(vide)","chat.queuedMessage.title":"Messages en file d'attente","chat.queuedMessage.edit":"modifier","chat.queuedMessage.send":"envoyer","chat.queuedMessage.removeAria":"Supprimer de la file d'attente","chat.queuedMessage.reorderAria":"Glisser pour réorganiser","chat.queuedMessage.toast.queueFailed":"Impossible de mettre le message en file d'attente. Il est de retour dans l'éditeur.","chat.queuedMessage.toast.takeFailed":"Impossible de charger le message en file d'attente. Veuillez réessayer.","chat.container.returnToParent.aria":"Retour à la session parente","chat.container.returnToParent.titleNamed":"Retourner à : {title}","chat.container.returnToParent.title":"Retour à la session parente","chat.container.returnToParent.label":"Parente","chat.btw.destroyAria":"Détruire cette session btw","chat.btw.titleFallback":"session btw","chat.btw.mainComposerPlaceholder":"Poser une question dans cette session btw…","chat.btw.loading":"Démarrage de la session btw…","chat.btw.toast.emptyArgument":"Saisissez une question après /btw","chat.btw.toast.createFailed":"Échec du démarrage de la session btw","chat.btw.toast.destroyFailed":"Échec de la suppression de la session btw. Elle restera dans la barre latérale.","chat.btw.working":"En cours…","chat.btw.collapseAria":"Réduire le panneau btw","chat.btw.draftHint":"Posez votre question","chat.btw.cancelAria":"Annuler cette question BTW","chat.btw.expandAria":"Développer le panneau btw","chat.btw.promoteAria":"Conserver comme session à part","chat.btw.toast.promoteFailed":"Échec de la conservation de la session btw","chat.container.readOnlySubagentPromptBanner":"Les sessions de sous-agent ne peuvent pas être invitées.","chat.container.sessionLoadError.title":"Impossible de charger la session","chat.container.sessionLoadError.description":"Impossible de récupérer la conversation — le serveur est peut-être hors ligne ou injoignable. Rien n'est perdu ; réessayez quand il sera de retour.","chat.container.sessionLoadError.authDescription":"Votre session a expiré, le serveur a donc refusé la requête. Connectez-vous et la conversation se chargera.","chat.container.sessionLoadError.retry":"Réessayer","sessions.sidebar.group.empty.loadingSessions":"Chargement des sessions…","sessions.sidebar.group.empty.loadFailed":"Impossible d’actualiser les sessions.","sessions.sidebar.group.empty.initializationFailed":"Impossible d’initialiser l’espace de travail.","sessions.search.submitHint":"Appuyez sur Entrée pour rechercher","sessions.sidebar.group.empty.retry":"Réessayer","sessions.sidebar.group.empty.permissionDenied":"L’accès au dossier est requis.","sessions.sidebar.group.empty.grantAccess":"Autoriser l’accès","chat.unifiedControls.title":"Contrôles","chat.unifiedControls.model.title":"Modèle","chat.unifiedControls.model.noRecent":"Aucun modèle récent","chat.unifiedControls.model.moreAria":"Plus de modèles","chat.unifiedControls.effort.title":"Effort","chat.unifiedControls.effort.moreAria":"Plus d'options d'effort","chat.questionCard.summaryTab":"Résumé","chat.questionCard.noAnswer":"(pas de réponse)","chat.questionCard.inputNeeded":"Entrée nécessaire","chat.questionCard.fromSubagent":"Du sous-agent","chat.questionCard.questionFallback":"Question {index}","chat.questionCard.selectMultiple":"Sélectionnez plusieurs","chat.questionCard.recommended":"recommandé","chat.questionCard.other":"Autre…","chat.questionCard.yourAnswer":"Votre réponse","chat.questionCard.submit":"Soumettre","chat.questionCard.next":"Suivant","chat.questionCard.dismiss":"Ignorer","chat.questionCard.copyMarkdown":"Copier en Markdown","chat.questionCard.copyJson":"Copier en JSON","chat.questionCard.copiedMarkdown":"Question copiée en Markdown","chat.questionCard.copiedJson":"Question copiée en JSON","chat.questionCard.copyFailed":"Échec de la copie de la question","chat.textSelection.toast.noProject":"Aucun projet trouvé pour cette session","chat.textSelection.toast.addToNotesFailed":"Échec de l'ajout aux notes","chat.textSelection.toast.addToNotesSuccess":"Ajout du texte sélectionné aux notes","chat.textSelection.toast.addToNotesSummaryFailed":"Impossible de résumer la sélection, ajout du texte sélectionné aux notes","chat.textSelection.actions.addToInput":"Citer","chat.textSelection.actions.read":"Lire","chat.textSelection.actions.stopReading":"Arrêter","chat.textSelection.actions.comment":"Commenter","chat.textSelection.actions.askOpenChamber":"Au fait…","chat.textSelection.title.askOpenChamber":"Ouvrir un brouillon BTW avec la sélection","chat.textSelection.title.commentOnSelection":"Commenter la sélection","chat.textSelection.comment.placeholder":"Ajouter un commentaire facultatif...","chat.textSelection.comment.attach":"Joindre","chat.textSelection.comment.save":"Enregistrer le commentaire","chat.textSelection.comment.attachFailed":"Impossible de joindre le commentaire. Raccourcissez-le ou retirez du contexte joint, puis réessayez.","chat.textSelection.actions.addToNotes":"Ajouter aux notes","chat.textSelection.title.addToCurrentChat":"Ajouter au chat actuel","chat.textSelection.title.saveInsightToNotes":"Enregistrer le texte sélectionné dans les notes","chat.messageBody.actions.revertAria":"Revenir à ce message","chat.messageBody.actions.revert":"Revenir à partir d'ici","chat.messageBody.actions.forkAria":"Fork à partir de ce message","chat.messageBody.actions.fork":"Fork à partir d'ici","chat.messageBody.actions.copyMessageAria":"Copier le texte du message","chat.messageBody.actions.copyMessage":"Copier le message","chat.messageBody.actions.copyLink":"Copier le lien","chat.messageBody.toast.linkCopied":"Lien copié","chat.messageBody.toast.linkCopyFailed":"Impossible de copier le lien","chat.messageLink.notFound":"Le message lié n’est pas dans cette session","chat.messageBody.actions.pinContext":"Épingler dans le contexte (conservé après compactage)","chat.messageBody.actions.unpinContext":"Désépingler du contexte (non conservé après compactage)","chat.messageBody.actions.contextPinFailed":"Impossible de modifier l’épinglage dans le contexte","chat.messageBody.actions.openPreviewAria":"Ouvrir l'aperçu","chat.messageBody.actions.openPreview":"Ouvrir l'aperçu","chat.messageBody.actions.copyAnswer":"Copier la réponse","chat.messageBody.actions.moreActions":"Plus d’actions","chat.messageBody.toast.copied":"Copié dans le presse-papiers","chat.messageBody.actions.savingImage":"Enregistrement de l'image...","chat.messageBody.actions.saveAsImage":"Enregistrer sous image","chat.messageBody.actions.saveAsPlan":"Enregistrer comme plan","chat.messageBody.actions.startNewSession":"Démarrer une nouvelle session à partir de cette réponse","chat.messageBody.actions.startNewMultiRun":"Démarrer une nouvelle exécution multiple à partir de cette réponse","chat.messageBody.actions.branchMenu":"Continuer à partir de cette réponse","chat.generatedResult.actions.copy":"Copier","chat.generatedResult.actions.copied":"Copié","chat.generatedResult.commit.title":"Message de commit généré","chat.generatedResult.commit.highlights":"Points forts","chat.generatedResult.pullRequest.title":"PR générée","chat.generatedResult.mergeRequest.title":"Merge request générée","chat.generatedResult.pullRequest.titleLabel":"Titre","chat.generatedResult.pullRequest.bodyLabel":"Corps","chat.messageBody.tts.stopSpeaking":"Arrêter la lecture","chat.messageBody.tts.readAloud":"Lire à haute voix","chat.messageBody.tts.readAloudWithProvider":"Lire à haute voix (voix {provider})","chat.messageBody.toast.noProject":"Aucun projet trouvé pour cette session","chat.messageBody.toast.savePlanFailed":"Échec de l'enregistrement du plan","chat.messageBody.toast.planSaved":"Plan enregistré","chat.messageBody.toast.imageSaved":"Image enregistrée","chat.messageBody.toast.generateImageFailed":"Échec de la génération de l'image","chat.chatInput.actions.commands":"Commandes","chat.chatInput.actions.attachFiles":"Joindre des fichiers","chat.chatInput.actions.addAttachment":"Ajouter une pièce jointe","chat.chatInput.actions.modelAgentSettings":"Paramètres du modèle et de l'agent","chat.chatInput.actions.sendMessageAria":"Envoyer un message","chat.chatInput.actions.queueMessageAria":"Mettre le message en file d'attente","chat.chatInput.actions.stopGeneratingAria":"Arrêter de générer","chat.chatInput.focusMode.toggleAria":"Activer/désactiver le mode focus","chat.chatInput.focusMode.label":"Mode focus","chat.chatInput.linked.byAuthor":"par {author}","chat.chatInput.linked.issue.openInBrowserAria":"Ouvrir l'issue dans le navigateur","chat.chatInput.linked.issue.removeAria":"Supprimer l'issue liée","chat.chatInput.linked.pr.openInBrowserAria":"Ouvrir la PR dans le navigateur","chat.chatInput.linked.mr.openInBrowserAria":"Ouvrir la merge request dans le navigateur","chat.chatInput.linked.pr.number":"PR #{number}","chat.chatInput.linked.pr.removeAria":"Supprimer la PR liée","chat.chatInput.linked.mr.removeAria":"Retirer la merge request liée","chat.chatInput.placeholder.shell":"Entrez la commande shell...","chat.chatInput.placeholder.chat":"Planifiez, construisez ou demandez. @ pour mentionner, $ pour les skills, / pour les commandes","chat.chatInput.placeholder.chatCompact":"Planifiez, construisez ou demandez","chat.chatInput.placeholder.selectSession":"Sélectionnez ou créez une session pour commencer à discuter","chat.dictation.start":"Démarrer la dictée","chat.dictation.overlayAria":"Dictée","chat.dictation.downloadingModel":"Téléchargement du modèle vocal...","chat.dictation.downloadingModelProgress":"Téléchargement du modèle vocal... {percent}%","chat.dictation.listening":"Écoute...","chat.dictation.processing":"Transcription...","chat.dictation.failed":"Échec de la transcription","chat.dictation.cancel":"Abandonner la dictée","chat.dictation.insert":"Insérer la transcription","chat.dictation.insertAndSend":"Insérer et envoyer","chat.dictation.retry":"Réessayer la transcription","chat.dictation.discard":"Abandonner l'enregistrement","chat.snippetAutocomplete.action.addNew":"+ Ajouter un nouvel extrait","chat.snippetAutocomplete.empty":"Aucun extrait trouvé","chat.snippetAutocomplete.footer":"↑↓ naviguer • Entrer sélectionner • Esc fermer","snippets.source.global":"mondial","snippets.source.project":"projet","chat.chatInput.toast.compactFailed":"Échec du compactage de la session","chat.chatInput.toast.forkFailed":"Impossible de dupliquer la session","chat.chatInput.toast.forkNothingToFork":"Rien à dupliquer pour l'instant : aucune réponse n'est terminée dans cette session","chat.chatInput.toast.forkSendFailed":"Session dupliquée, mais le message n'a pas été envoyé. Il est de retour dans la zone de saisie.","chat.chatInput.toast.summaryFailed":"Échec de la génération du résumé","chat.chatInput.toast.reviewFailed":"Échec de l'examen des modifications","chat.chatInput.toast.attachmentsTooLarge":"Les pièces jointes sont trop volumineuses pour être envoyées. Veuillez essayer de réduire le nombre ou la taille des images.","chat.chatInput.toast.sendAttachmentsFailed":"Échec de l'envoi des pièces jointes. Essayez moins de fichiers ou des images plus petites.","chat.chatInput.toast.messageSendFailed":"Le message n'a pas pu être envoyé. Pièces jointes restaurées.","chat.chatInput.toast.noModelSelected":"Sélectionnez un fournisseur et un modèle avant d'envoyer.","chat.chatInput.toast.clipboardAttachFailed":"Échec de la pièce jointe de l'image du presse-papiers","chat.chatInput.toast.clipboardTextAttachFailed":"Échec de la pièce jointe du texte collé comme fichier","chat.chatInput.toast.largeTextPaste.title":"Texte volumineux détecté","chat.chatInput.toast.largeTextPaste.attach":"Joindre comme fichier","chat.chatInput.toast.largeTextPaste.inline":"Coller en ligne","chat.chatInput.toast.addedFileMentions":"Ajout des mentions du fichier {count}","chat.chatInput.toast.attachFileFailed":"Impossible de joindre le fichier","chat.chatInput.toast.attachNamedFailed":"Échec de la connexion du {name}","chat.chatInput.toast.unsupportedAttachmentModalities":"{model} ne prend pas en charge l’entrée {modalities} requise par {files}. Vous pouvez tout de même envoyer le message, mais ces pièces jointes risquent d’être ignorées.","chat.chatInput.toast.someFilesSkipped":`Certains fichiers ont été ignorés :
|
|
18
|
+
{summary}`,"chat.chatInput.toast.vscodePickFailed":"Échec de la sélection des fichiers dans VS Code","chat.chatInput.toast.openSessionFirst":"Ouvrir d'abord une session","chat.chatInput.toast.dictationKeptForOriginalSession":"Dictée enregistrée comme brouillon dans la session où vous l'avez démarrée","chat.chatInput.toast.togglePermissionAutoAcceptFailed":"Échec de l'activation de l'acceptation automatique des autorisations","chat.chatInput.reviewComments":"Commentaires de révision :","chat.chatInput.previewAnnotations":"Aperçu des annotations :","chat.chatInput.previewContext":"Contexte d'aperçu :","chat.chatInput.previewContextRemove":"Supprimer le contexte d'aperçu","chat.chatInput.projectRoot":"Racine du projet","chat.chatInput.branch":"Branche","chat.chatInput.draftPicker.projectTitle":"Projet","chat.chatInput.draftPicker.searchProjects":"Rechercher des projets...","chat.chatInput.draftPicker.searchBranches":"Rechercher des branches...","chat.chatInput.draftPicker.noProjectsFound":"Aucun projet trouvé.","chat.chatInput.worktrees":"Worktrees","chat.chatInput.worktreeQuick":"Worktree rapide","chat.chatInput.worktreeCustom":"Nouveau worktree…","chat.chatInput.drop.insertMention":"Déposer pour insérer comme mention","chat.chatInput.drop.attachFiles":"Déposez les fichiers ici pour les joindre","chat.chatInput.fileFallback":"fichier","chat.toolOutputDialog.image.previousAria":"Image précédente","chat.toolOutputDialog.image.nextAria":"Image suivante","chat.toolOutputDialog.image.closeAria":"Fermer l'aperçu de l'image","chat.toolOutputDialog.mermaid.missingSource":"URL de source Mermaid manquante.","chat.toolOutputDialog.mermaid.loadFailed":"Impossible de charger le diagramme Mermaid.","chat.toolOutputDialog.mermaid.dataUrlMalformed":"L'URL de données Mermaid est mal formée.","chat.toolOutputDialog.mermaid.invalidLocalPath":"Le chemin du fichier Mermaid local est invalide.","chat.toolOutputDialog.mermaid.readFileFailedWithStatus":"Impossible de lire le fichier Mermaid. Statut : {status}.","chat.toolOutputDialog.mermaid.unsupportedUrlProtocol":"Le protocole de l'URL Mermaid n'est pas pris en charge.","chat.toolOutputDialog.mermaid.loadFailedWithStatus":"Impossible de charger le diagramme Mermaid. Statut : {status}.","chat.toolOutputDialog.mermaid.closeAria":"Fermer l'aperçu du diagramme","chat.toolOutputDialog.mermaid.loading":"Chargement du diagramme...","chat.toolOutputDialog.mermaid.renderFailed":"Impossible d'afficher le diagramme Mermaid.","chat.toolOutputDialog.mermaid.retry":"Réessayer","chat.toolOutputDialog.commandCompleted":"Commande terminée avec succès","chat.toolOutputDialog.noOutputProduced":"Aucune sortie n'a été produite","chat.statusRow.background.action":"Passer en arrière-plan : l'agent cesse d'attendre et continue","chat.statusRow.background.failed":"Impossible de passer le travail en arrière-plan","chat.toolPart.background.label":"en arrière-plan","chat.toolPart.subagent.stop":"Arrêter le sous-agent","chat.toolPart.subagent.stopFailed":"Impossible d'arrêter le sous-agent","chat.toolPart.background.stop":"Arrêter la commande","chat.toolPart.background.stopLabel":"Arrêter","chat.toolPart.background.stopFailed":"Impossible d'arrêter la commande","chat.toolPart.background.stoppedLabel":"arrêtée","chat.toolPart.background.stoppedNotice":"Arrêtée par vous. L'agent sait qu'il s'agit de votre arrêt, pas d'un échec.","chat.toolPart.lspErrors":"Erreurs LSP","chat.toolPart.moreErrors":"+ {count} erreurs de plus","chat.toolPart.moreRows":"+{count} lignes de plus","chat.toolPart.error":"Erreur:","chat.toolPart.awaitingResponse":"En attente de réponse...","chat.toolPart.noOutputProduced":"Aucune sortie produite","chat.toolPart.questionsAsked":"Questions posées : {count}","chat.toolPart.filesCount":"Fichiers : {count}","chat.toolPart.moreToolCalls":"+{count} de plus","chat.toolPart.scriptCalls":"Appels d’outils","chat.toolPart.outputTruncated":"La sortie a été tronquée","chat.toolPart.output":"Sortie","chat.toolPart.openSubtask":"Ouvrir la sous-tâche {type}","chat.todo.total":"Total","chat.todo.inProgress":"En cours","chat.todo.pending":"En attente","chat.todo.completed":"Terminé","chat.todo.cancelled":"Annulé","chat.permissionCard.workingDirectory":"Répertoire de travail :","chat.permissionCard.timeout":"Délai d'expiration :","chat.permissionCard.request":"Requête :","chat.permissionCard.headers":"En-têtes :","chat.permissionCard.body":"Corps :","chat.permissionCard.action":"Action :","chat.permissionCard.patterns":"Motifs :","chat.permissionToast.sessionFallback":"Session","chat.permissionToast.permissionFallback":"Détails de l'autorisation indisponibles","chat.permissionToast.labels.session":"Session :","chat.permissionToast.labels.permission":"Autorisation :","chat.permissionToast.actions.once":"Une fois","chat.permissionToast.actions.always":"Toujours","chat.permissionToast.actions.deny":"Refuser","chat.permissionToast.actions.approveOnceAria":"Approuver une fois","chat.permissionToast.actions.approveOnceAriaWithSession":"Approuver une fois pour {session}","chat.permissionToast.actions.approveAlwaysAria":"Approuver toujours","chat.permissionToast.actions.approveAlwaysAriaWithSession":"Approuver toujours pour {session}","chat.permissionToast.actions.denyAria":"Refuser l'autorisation","chat.permissionToast.actions.denyAriaWithSession":"Refuser l'autorisation pour {session}","chat.permissionRequest.required":"Autorisation requise :","chat.permissionRequest.actions.once":"Une fois","chat.permissionRequest.actions.always":"Toujours","chat.permissionRequest.actions.reject":"Refuser","chat.modelControls.provider":"Fournisseur","chat.modelControls.capability.toolCalling":"Appel d'outils","chat.modelControls.capability.reasoning":"Raisonnement","chat.modelControls.modality.text":"Texte","chat.modelControls.modality.image":"Image","chat.modelControls.modality.video":"Vidéo","chat.modelControls.modality.audio":"Audio","chat.modelControls.modality.pdf":"PDF","chat.modelControls.capabilities":"Capacités","chat.modelControls.modalities":"Modalités","chat.modelControls.input":"Entrée","chat.modelControls.output":"Sortie","chat.modelControls.limits":"Limites","chat.modelControls.context":"Contexte","chat.modelControls.metadata":"Métadonnées","chat.modelControls.knowledge":"Connaissances","chat.modelControls.release":"Version","chat.modelControls.mode":"Mode","chat.modelControls.model":"Modèle","chat.modelControls.temperature":"Température","chat.modelControls.topP":"Top P","chat.modelControls.permissions":"Autorisations","chat.modelControls.edit":"Modifier","chat.modelControls.bash":"Bash","chat.modelControls.webFetch":"WebFetch","chat.modelControls.customPrompt":"Prompt personnalisé","chat.modelControls.selectModel":"Sélectionner un modèle","chat.modelControls.searchProvidersOrModels":"Rechercher des fournisseurs ou des modèles","chat.modelControls.clearSearch":"Effacer la recherche","chat.modelControls.current":"Actuel","chat.modelControls.thinking":"Pensée","chat.modelControls.default":"Défaut","chat.modelControls.selectAgent":"Sélectionner un agent","chat.modelControls.costPerMillion":"Coût ($/1 million de jetons)","chat.modelControls.metadataUnavailable":"Métadonnées du modèle indisponibles.","chat.modelControls.addNewProvider":"Ajouter un nouveau fournisseur","chat.modelControls.noAgentSelected":"Aucun agent sélectionné.","chat.modelControls.resetToDefault":"Réinitialiser aux valeurs par défaut","chat.modelControls.searchModels":"Rechercher des modèles","chat.modelControls.searchAgents":"Rechercher des agents","chat.modelControls.noModelsFound":"Aucun modèle trouvé","chat.modelControls.favorites":"Favoris","chat.modelControls.recent":"Récents","chat.modelControls.addToFavorites":"Ajouter aux favoris","chat.modelControls.removeFromFavorites":"Supprimer des favoris","chat.modelControls.favoriteAria":"Préféré","chat.modelControls.unfavoriteAria":"Supprimer des favoris","chat.modelControls.collapseProvider":"Réduire le fournisseur","chat.modelControls.expandProvider":"Développer le fournisseur","chat.modelControls.keyboardHint":"↑↓ naviguer{thinking} • Entrer sélectionner • Esc fermer","chat.modelControls.keyboardHintNavigate":"↑↓ naviguer","chat.modelControls.keyboardHintSwitchAgent":"Changer d'agent {shortcut}","chat.modelControls.keyboardHintThinking":"←→ réflexion","chat.modelControls.showThinkingModes":"Afficher les modes de réflexion","chat.modelControls.hideThinkingModes":"Masquer les modes de réflexion","chat.modelControls.moreThinkingModes":"Plus de modes de réflexion","chat.modelControls.noProvidersOrModelsFound":"Aucun fournisseur ou modèle ne correspond à votre recherche.","chat.modelControls.reorderFavoriteAria":"Réorganiser les favoris","chat.modelControls.reorderFavoriteTitle":"Faites glisser pour réorganiser les favoris","chat.modelControls.reorderProviderTitle":"Faites glisser pour réorganiser les fournisseurs","chat.modelControls.permissionLabel.custom":"Personnalisé","chat.modelControls.permissionLabel.allow":"Autoriser","chat.modelControls.permissionLabel.deny":"Refuser","chat.modelControls.permissionLabel.ask":"Demander","chat.modelControls.modeValue.primary":"Primaire","chat.modelControls.modeValue.subagent":"Sous-agent","chat.modelControls.modeValue.all":"Tous","chat.modelControls.modeValue.none":"—","chat.reasoningTrace.thinking":"Pensée","chat.reasoningTrace.justification":"Justification","chat.reasoningTrace.expandAria":"Développer la trace du raisonnement","chat.reasoningTrace.collapseAria":"Réduire la trace du raisonnement","chat.reasoningTrace.thought":"Pensée","chat.messageBody.subtask.title":"Tâche déléguée","chat.messageBody.subtask.hidePrompt":"Masquer le prompt","chat.messageBody.subtask.showPrompt":"Afficher le prompt","chat.messageBody.subtask.openSession":"Ouvrir une session de sous-tâche","chat.messageBody.shellCommand.copied":"Copié","chat.messageBody.shellCommand.copyOutput":"Copier la sortie","commandPalette.title":"Palette de commandes","commandPalette.description":"Recherchez des fichiers, des sessions et des commandes.","commandPalette.input.placeholder":"Rechercher des fichiers, des sessions, des commandes...","commandPalette.empty.noResults":"Aucun résultat trouvé.","commandPalette.empty.searchingFiles":"Recherche de fichiers...","commandPalette.item.newSession":"Nouvelle session","commandPalette.item.newMiniChat":"Nouvelle mini-fenêtre de discussion","commandPalette.item.quickWorktree":"Worktree rapide","commandPalette.item.newWorktreeDialog":"Nouveau worktree…","commandPalette.item.addProject":"Ajouter un projet","commandPalette.item.showSessionSwitcher":"Afficher le sélecteur de session","commandPalette.item.toggleSidebar":"Basculer la barre latérale","commandPalette.item.showContextUsage":"Afficher l'utilisation du contexte","commandPalette.item.toggleTerminal":"Basculer le terminal","commandPalette.item.cycleTheme":"Changer de thème","commandPalette.item.showOpenCodeStatus":"Afficher le statut OpenCode","commandPalette.item.restartOpenCode":"Redémarrer OpenCode","commandPalette.item.toggleMemoryDebug":"Basculer le panneau de débogage mémoire","commandPalette.item.pinSession":"Épingler ou désépingler la session","commandPalette.item.copySessionId":"Copier l'ID de session","commandPalette.item.openMultiRun":"Exécuter en parallèle","commandPalette.item.openArchive":"Ouvrir les sessions archivées","commandPalette.item.openNotes":"Ouvrir le panneau de notes","commandPalette.item.openTodos":"Ouvrir le panneau de tâches","commandPalette.item.openSettings":"Ouvrez les paramètres...","commandPalette.session.untitled":"Session sans titre","commandPalette.item.reloadUi":"Recharger l’interface","commandPalette.group.openFiles":"Fichiers ouverts","commandPalette.group.commands":"Commandes","commandPalette.group.settings":"Paramètres","chat.search.placeholder":"Rechercher dans cette conversation","chat.search.position":"{current} sur {total}","chat.search.noResults":"Aucun résultat","chat.search.searching":"Recherche…","chat.search.tooShort":"3 caractères min.","chat.search.error":"Échec de la recherche","chat.search.unavailable":"Indisponible ici","chat.search.previous":"Résultat précédent","chat.search.next":"Résultat suivant","chat.search.close":"Fermer la recherche","commandPalette.group.sessions":"Sessions","commandPalette.group.messages":"Messages","commandPalette.messages.showAll":"Afficher tous les résultats dans les messages","commandPalette.messages.placeholder":"Rechercher dans les messages…","commandPalette.messages.back":"Retour","commandPalette.messages.filter.scopeLabel":"Où","commandPalette.messages.filter.allProjects":"Tous les projets","commandPalette.messages.filter.thisProject":"Ce projet","commandPalette.messages.filter.authorLabel":"Écrit par","commandPalette.messages.filter.anyone":"N'importe qui","commandPalette.messages.filter.you":"Vous","commandPalette.messages.filter.agent":"Agent","commandPalette.messages.filter.reasoning":"Pensée","commandPalette.messages.inReasoning":"Pensée","commandPalette.messages.tooShort":"Saisissez au moins 3 caractères pour rechercher des messages","commandPalette.messages.searching":"Recherche dans les messages…","commandPalette.messages.error":"Impossible de rechercher les messages","commandPalette.messages.unavailable":"La recherche de messages n'est pas disponible sur ce serveur","commandPalette.messages.empty":"Aucun message trouvé","commandPalette.messages.indexing":"Indexation des anciennes conversations en cours : {done} sur {total}.","commandPalette.messages.loadMore":"Charger plus","commandPalette.messages.byYou":"Votre message","commandPalette.messages.byAgent":"Réponse de l'agent","commandPalette.group.files":"Fichiers","commandPalette.group.projects":"Projets","commandPalette.footer.navigate":"naviguer","commandPalette.footer.open":"ouvrir","commandPalette.footer.close":"fermer","openCodeStatusDialog.title":"Statut OpenCode","openCodeStatusDialog.description":"Inspectez l’état et les diagnostics actuels du OpenCode.","openCodeStatusDialog.actions.copy":"Copie","openCodeStatusDialog.empty.noData":"Aucune donnée.","openCodeStatusDialog.toast.copiedTitle":"Copié","openCodeStatusDialog.toast.copiedDescription":"Statut copié dans le presse-papiers","openCodeStatusDialog.toast.copyFailed":"Échec de la copie du statut","saveProjectPlanDialog.title":"Enregistrer le plan de projet","saveProjectPlanDialog.description":"Enregistrez ce plan dans votre projet en tant que fichier Markdown.","saveProjectPlanDialog.field.title":"Titre","saveProjectPlanDialog.field.titlePlaceholder":"Titre du plan","saveProjectPlanDialog.field.contentPreview":"Aperçu du contenu","saveProjectPlanDialog.actions.cancel":"Annuler","saveProjectPlanDialog.actions.save":"Enregistrer","saveProjectPlanDialog.actions.saving":"Enregistrement...","branchPickerDialog.title":"Sélecteur de branches","branchPickerDialog.description.localBranchesForProject":"Branches locales pour {project}","branchPickerDialog.description.selectProject":"Sélectionnez un projet pour afficher les branches","branchPickerDialog.search.placeholder":"Rechercher des branches...","branchPickerDialog.search.renameBranchPlaceholder":"Renommer la branche","branchPickerDialog.state.noProjectSelected":"Aucun projet sélectionné","branchPickerDialog.state.loadingBranches":"Chargement des branches...","branchPickerDialog.state.noMatchingBranches":"Aucune branche correspondante","branchPickerDialog.state.noBranchesFound":"Aucune branche trouvée","branchPickerDialog.badge.head":"HEAD","branchPickerDialog.badge.worktree":"worktree","branchPickerDialog.actions.createWorktreeAria":"Créer un worktree à partir d'une branche","branchPickerDialog.actions.renameAria":"Renommer la branche","branchPickerDialog.actions.deleteAria":"Supprimer la branche","branchPickerDialog.actions.deleteWorktreeAria":"Supprimer le worktree","branchPickerDialog.actions.confirmRenameAria":"Confirmer le changement de nom","branchPickerDialog.actions.cancelRenameAria":"Annuler le changement de nom","branchPickerDialog.actions.confirmDeleteAria":"Confirmer la suppression de la branche","branchPickerDialog.actions.cancelDeleteAria":"Annuler la suppression de la branche","branchPickerDialog.actions.deletePrompt":"Supprimer","branchPickerDialog.actions.forceDeletePrompt":"Forcer la suppression","branchPickerDialog.tooltip.createWorktree":"Créer un worktree","branchPickerDialog.tooltip.worktreeAlreadyExists":"Le worktree existe déjà","branchPickerDialog.tooltip.rename":"Renommer la branche","branchPickerDialog.tooltip.renameDisabledForRoot":"Impossible de renommer la branche racine","branchPickerDialog.tooltip.delete":"Supprimer la branche","branchPickerDialog.tooltip.deleteCurrentBranch":"Impossible de supprimer la branche actuelle","branchPickerDialog.tooltip.deleteDisabledForRoot":"Impossible de supprimer la branche racine","branchPickerDialog.tooltip.deleteWorktree":"Supprimer le worktree","branchPickerDialog.tooltip.deleteWorktreeRootProtected":"Impossible de supprimer le worktree racine","branchPickerDialog.toast.branchRenamed":"Branche renommée","branchPickerDialog.toast.failedToRenameBranch":"Échec du renommage de la branche","branchPickerDialog.toast.branchDeleted":"Branche supprimée","branchPickerDialog.toast.branchNotMerged":"La branche n'est pas entièrement fusionnée","branchPickerDialog.toast.confirmAgainToForceDelete":"Confirmez à nouveau pour forcer la suppression","branchPickerDialog.toast.failedToDeleteBranch":"Échec de la suppression de la branche","branchPickerDialog.toast.worktreeCreated":"Worktree créé","branchPickerDialog.toast.failedToCreateWorktree":"Échec de la création du worktree","branchPickerDialog.error.failedToLoad":"Échec du chargement des branches","branchPickerDialog.error.renameRejected":"Le changement de nom a été refusé","branchPickerDialog.error.renameFailed":"Échec du renommage de la branche","branchPickerDialog.error.deleteRejected":"La suppression a été refusée","branchPickerDialog.error.deleteFailed":"Échec de la suppression de la branche","branchPickerDialog.error.createWorktreeFailed":"Échec de la création du worktree","projectEditDialog.title":"Modifier le projet","projectEditDialog.field.name":"Nom","projectEditDialog.field.namePlaceholder":"Nom du projet","projectEditDialog.field.color":"Couleur","projectEditDialog.field.icon":"Icône","projectEditDialog.field.preview":"Aperçu","projectEditDialog.field.iconBackground":"Fond d'icône","projectEditDialog.field.iconBackgroundAria":"Couleur d’arrière-plan de l’icône du projet","projectEditDialog.option.none":"Aucun","projectEditDialog.actions.uploadIcon":"Icône de téléchargement","projectEditDialog.actions.uploading":"Téléchargement...","projectEditDialog.actions.discoverFavicon":"Découvrez Favicon","projectEditDialog.actions.discovering":"Découverte...","projectEditDialog.actions.removeProjectIcon":"Supprimer l'icône du projet","projectEditDialog.actions.removing":"Suppression...","projectEditDialog.actions.undoRemove":"Annuler Supprimer","projectEditDialog.actions.clear":"Effacer","projectEditDialog.actions.cancel":"Annuler","projectEditDialog.actions.save":"Enregistrer","projectEditDialog.toast.failedToUploadIcon":"Échec du téléchargement de l'icône du projet","projectEditDialog.toast.iconUpdated":"Icône du projet mise à jour","projectEditDialog.toast.failedToRemoveIcon":"Échec de la suppression de l'icône du projet","projectEditDialog.toast.iconRemoved":"Icône du projet supprimée","projectEditDialog.toast.failedToDiscoverIcon":"Échec de la découverte de l'icône du projet","projectEditDialog.toast.customIconAlreadySet":"Icône personnalisée déjà définie pour ce projet","projectEditDialog.toast.iconDiscovered":"Icône de projet découverte","openInApp.actions.open":"Ouvrir","openInApp.actions.openInAria":"Ouvert dans {app}","openInApp.actions.chooseAppAria":"Choisissez l'application à ouvrir","openInApp.actions.copyPath":"Copier le chemin","openInApp.actions.refreshApps":"Actualiser les applications","openInApp.toast.pathCopied":"Chemin copié dans le presse-papiers","projectActions.actions.addActionAria":"Ajouter une action","projectActions.actions.addAction":"Ajouter une action","projectActions.actions.addNewAction":"Ajouter une nouvelle action","projectActions.actions.autoDiscover":"Découverte automatique","projectActions.menu.sharedBadge":"dépôt","projects.sharedTrust.title":"Exécuter les commandes enregistrées dans ce dépôt ?","projects.sharedTrust.description":"{path} dans ce dépôt définit des commandes qui s'exécutent sur cette machine. Faites-leur confiance une fois, et OpenChamber ne redemandera que si elles changent.","projects.sharedTrust.setupCommands":"Commandes de configuration du worktree","projects.sharedTrust.actions":"Actions","projects.sharedTrust.skip":"Pas cette fois","projects.sharedTrust.trust":"Faire confiance et exécuter","projectActions.actions.autoDiscoverTooltip":"Détecte et lance automatiquement le serveur de développement","projectActions.actions.chooseActionAria":"Choisir l'action du projet","projectActions.actions.openPreview":"Ouvrir l'aperçu","projectActions.actions.runNamedAria":"Exécutez {name}","projectActions.actions.stopNamedAria":"Arrêter {name}","projectActions.label.fallbackAction":"Action","projectActions.toast.openedUrlFromOutput":"URL ouvert à partir de la sortie d'action","projectActions.toast.openedForwardedUrl":"Ouvert transmis URL","projectActions.toast.openedActionUrl":"Action ouverte URL","projectActions.error.noActiveDirectory":"Pas de répertoire actif","projectActions.error.noActiveDirectoryForAction":"Pas de répertoire actif pour l'action","projectActions.error.failedToCreateTerminalSession":"Échec de la création d'une session de terminal","projectActions.error.invalidCustomUrlFormat":"Format URL personnalisé non valide","projectActions.error.openUrlTemplateUnresolved":"Impossible de lire la branche pour l’URL de l’action","projectActions.error.selectedDesktopSshForwardUnavailable":"Le transfert du bureau SSH sélectionné n'est pas disponible","projectActions.error.failedToRunAction":"Échec de l'exécution de l'action","mcpDropdown.title":"Serveurs MCP","mcpDropdown.actions.refreshAria":"Rafraîchir","mcpDropdown.actions.openAria":"Serveurs MCP","mcpDropdown.statusAria":"Statut MCP","mcpDropdown.status.unknown":"Inconnu","mcpDropdown.status.connected":"Connecté","mcpDropdown.status.failed":"Échec : {error}","mcpDropdown.status.unknownError":"Erreur inconnue","mcpDropdown.status.needsAuth":"Nécessite une authentification","mcpDropdown.status.needsRegistration":"Nécessite un enregistrement : {error}","mcpDropdown.empty.configureInConfig":"Configurez les serveurs MCP dans la configuration OpenCode.","sessionAuth.error.rateLimitTitle":"Trop de tentatives","sessionAuth.error.networkTitle":"Impossible d'atteindre le serveur","sessionAuth.error.rateLimitDescriptionSingle":"Veuillez attendre {minutes} minute avant de réessayer.","sessionAuth.error.rateLimitDescriptionPlural":"Veuillez attendre {minutes} minutes avant de réessayer.","sessionAuth.error.networkDescription":"Nous n'avons pas pu vérifier la session d'interface utilisateur. Si vous ouvrez OpenChamber depuis un autre appareil sur votre réseau local, activez l'accès au réseau du bureau dans l'application de bureau et utilisez l'adresse LAN indiquée dans les paramètres.","sessionAuth.error.retry":"Réessayer","sessionAuth.error.passkeySetupFailed":"La configuration du mot de passe a échoué.","sessionAuth.error.incorrectPassword":"Mot de passe incorrect. Essayer à nouveau.","sessionAuth.error.unexpectedResponse":"Réponse inattendue du serveur.","sessionAuth.error.networkRetry":"Erreur réseau. Vérifiez la connexion et réessayez.","sessionAuth.error.passkeySignInCanceled":"La connexion par mot de passe a été annulée.","sessionAuth.error.enterPasswordForPasskey":"Entrez votre mot de passe pour ajouter un mot de passe.","sessionAuth.locked.tunnelTitle":"Accès au tunnel requis","sessionAuth.expired.banner":"Votre session a expiré — connectez-vous pour continuer.","sessionAuth.expired.loginAction":"Se connecter","sessionAuth.expired.sendBlocked":"Session expirée — connectez-vous pour envoyer des messages.","sessionAuth.locked.unlockTitle":"Débloquez OpenChamber","sessionAuth.locked.tunnelDescription":"Ouvrez ce tunnel à l'aide du lien de connexion unique depuis l'application de bureau.","sessionAuth.locked.passwordDescription":"Cette session est protégée par mot de passe.","sessionAuth.locked.hostSwitcherHint":"Utilisez local si la remote est inaccessible.","sessionAuth.actions.cancelPasskey":"Annuler le mot de passe","sessionAuth.actions.usePasskey":"Utiliser le mot de passe","sessionAuth.actions.unlockingAria":"Déverrouillage","sessionAuth.actions.unlockAria":"Ouvrir","sessionAuth.actions.trustDevice":"Faites confiance à cet appareil","sessionAuth.actions.trustDeviceAria":"Faites confiance à cet appareil","sessionAuth.actions.cancelPasskeySetup":"Annuler la configuration du mot de passe","sessionAuth.actions.addPasskey":"Ajouter un mot de passe","sessionAuth.password.placeholder":"Entrez le mot de passe","sessionAuth.toast.passkeyAdded":"Clé d'accès ajoutée","sessionAuth.toast.passkeySetupCanceled":"Configuration du mot de passe annulée","desktopHostSwitcher.title":"Instance","desktopHostSwitcher.description":"Basculer entre les serveurs OpenChamber locaux et distants","desktopHostSwitcher.header.current":"Actuel","desktopHostSwitcher.header.default":"Défaut","desktopHostSwitcher.header.currentColon":"Actuel:","desktopHostSwitcher.header.currentDefaultColon":"Valeur par défaut actuelle :","desktopHostSwitcher.status.connected":"Connecté","desktopHostSwitcher.status.authRequired":"Authentification requise","desktopHostSwitcher.status.wrongService":"Mauvais service","desktopHostSwitcher.status.unreachable":"Injoignable","desktopHostSwitcher.status.unknown":"Inconnu","desktopHostSwitcher.status.ping":"· Ping {ms}ms","desktopHostSwitcher.statusAria":"Statut de l'instance","desktopHostSwitcher.sshPhase.ready":"Prêt","desktopHostSwitcher.sshPhase.error":"Erreur","desktopHostSwitcher.sshPhase.reconnecting":"Reconnexion","desktopHostSwitcher.sshPhase.resolvingConfig":"Résolution de la configuration","desktopHostSwitcher.sshPhase.checkingAuth":"Vérification de l'authentification","desktopHostSwitcher.sshPhase.connectingSsh":"Connexion du SSH","desktopHostSwitcher.sshPhase.probingRemote":"Sondage à distance","desktopHostSwitcher.sshPhase.installing":"Installation","desktopHostSwitcher.sshPhase.updating":"Mise à jour","desktopHostSwitcher.sshPhase.detectingServer":"Serveur de détection","desktopHostSwitcher.sshPhase.startingServer":"Démarrage du serveur","desktopHostSwitcher.sshPhase.forwardingPorts":"Ports de transfert","desktopHostSwitcher.sshPhase.idle":"Inactif","desktopHostSwitcher.ssh.needInstancesHint":"Besoin d'instances SSH ? Gérez-les dans Paramètres.","desktopHostSwitcher.ssh.instanceFallback":"Instance SSH","desktopHostSwitcher.ssh.connectingTo":"Connexion à {host}","desktopHostSwitcher.actions.refresh":"Rafraîchir","desktopHostSwitcher.actions.refreshInstancesAria":"Actualiser les instances","desktopHostSwitcher.actions.remoteSsh":"SSH remote","desktopHostSwitcher.actions.instanceActionsAria":"Actions d'instance","desktopHostSwitcher.actions.edit":"Modifier","desktopHostSwitcher.actions.delete":"Supprimer","desktopHostSwitcher.actions.connect":"Connecter","desktopHostSwitcher.actions.defaultInstanceAria":"Instance par défaut","desktopHostSwitcher.actions.setAsDefaultAria":"Définir par défaut","desktopHostSwitcher.actions.setAsDefault":"Définir par défaut","desktopHostSwitcher.actions.openInNewWindowAria":"Ouvrir dans une nouvelle fenêtre","desktopHostSwitcher.actions.openInNewWindow":"Ouvrir dans une nouvelle fenêtre","desktopHostSwitcher.actions.addInstance":"Ajouter une instance","desktopHostSwitcher.actions.cancel":"Annuler","desktopHostSwitcher.actions.save":"Enregistrer","desktopHostSwitcher.actions.add":"Ajouter","desktopHostSwitcher.actions.switchToLocal":"Passer au local","desktopHostSwitcher.actions.retry":"Réessayer","desktopHostSwitcher.actions.switchInstanceAria":"Changer d'instance","desktopHostSwitcher.actions.switchInstance":"Changer d'instance","desktopHostSwitcher.actions.switchToAria":"Passer à {instance}","desktopHostSwitcher.field.labelPlaceholder":"Étiquette","desktopHostSwitcher.field.labelOptionalPlaceholder":"Étiquette (facultatif)","desktopHostSwitcher.field.urlPlaceholder":"https://hôte:port","desktopHostSwitcher.state.limitedOnPage":"Le sélecteur d'instance est limité sur cette page. Utilisez Local pour récupérer.","desktopHostSwitcher.state.loading":"Chargement...","desktopHostSwitcher.state.instanceUnreachable":"Instance inaccessible","desktopHostSwitcher.edit.title":"Modifier l'instance","desktopHostSwitcher.add.title":"Ajouter une instance","desktopHostSwitcher.error.failedToSave":"Échec de l'enregistrement","desktopHostSwitcher.error.failedToLoad":"Échec du chargement","desktopHostSwitcher.error.invalidUrl":"URL non valide (doit être http/https)","desktopHostSwitcher.error.pairingRejected":"Le lien de jumelage est invalide ou a expiré. Générez-en un nouveau.","desktopHostSwitcher.error.pairingFailed":"Échec du jumelage (HTTP {status}).","desktopHostSwitcher.error.pairingInvalidResponse":"Le serveur a renvoyé une réponse de jumelage invalide.","desktopHostSwitcher.error.failedToOpenNewWindow":"Échec de l'ouverture d'une nouvelle fenêtre","desktopHostSwitcher.instance.local":"Local","desktopHostSwitcher.instance.fallback":"Instance","desktopHostSwitcher.startup.title":"Instance SSH par défaut indisponible","desktopHostSwitcher.startup.connectingTo":"Connexion à {host}...","desktopHostSwitcher.startup.failed":"Échec de la connexion de l'instance SSH par défaut.","desktopHostSwitcher.toast.sshConnected":'Instance SSH "{host}" connectée',"desktopHostSwitcher.toast.sshFailedToConnect":`L'instance SSH "{host}" n'a pas réussi à se connecter`,"desktopHostSwitcher.toast.instanceUnreachable":`L'instance "{host}" est inaccessible`,"miniChat.header.newSession":"Nouvelle session","miniChat.header.session":"Session","miniChat.header.defaultAgent":"Agent par défaut","miniChat.header.noModel":"Aucun modèle","miniChat.status.busy":"En cours d'exécution","miniChat.status.retry":"Réessayer","miniChat.status.idle":"Inactif","miniChat.actions.pin":"Épingler au-dessus des autres fenêtres","miniChat.actions.unpin":"Détacher la fenêtre","miniChat.actions.pinAria":"Épingler la fenêtre Mini Chat","miniChat.actions.unpinAria":"Désépingler la fenêtre Mini Chat","miniChat.actions.openMain":"Ouvrir dans la fenêtre principale","miniChat.actions.openMainAria":"Ouvrir la session dans la fenêtre principale","miniChat.unavailable.title":"Session indisponible","miniChat.unavailable.description":"Cette session n'a pas pu être chargée. Il peut avoir été supprimé, archivé ou ouvert à partir d'un contexte de projet différent.","sessions.sidebar.session.menu.openMiniChatWindow":"Ouvrir dans la mini-fenêtre de discussion","header.actions.newMiniChat":"Nouvelle mini-fenêtre de discussion","header.actions.newMiniChatAria":"Ouvrir une nouvelle fenêtre de mini-chat","header.actions.openSessionMiniChat":"Session ouverte dans le mini-chat","header.actions.openSessionMiniChatAria":"Ouvrir la session en cours dans Mini Chat","header.windowControls.groupAria":"Champs de fenêtre","header.windowControls.minimize":"Réduire la fenêtre","header.windowControls.maximize":"Agrandir la fenêtre","header.windowControls.restore":"Fenêtre de restauration","header.windowControls.close":"Fermer la fenêtre","errorBoundary.title":"Quelque chose s'est mal passé","errorBoundary.description":"L'application a rencontré une erreur inattendue. Cela a été enregistré pour le débogage.","errorBoundary.state.unknownError":"Erreur inconnue","errorBoundary.state.componentStackLabel":"Pile de composants :","errorBoundary.actions.errorDetails":"Détails de l'erreur","errorBoundary.actions.tryAgain":"Essayer à nouveau","errorBoundary.actions.copy":"Copie","errorBoundary.actions.copied":"Copié","jsonTreeView.error.emptyJson":"Contenu JSON vide","jsonTreeView.error.invalidJson":"JSON invalide","jsonTreeView.error.invalidJsonTitle":"JSON invalide","jsonTreeView.actions.expandAll":"Développer tout","jsonTreeView.actions.collapseAll":"Réduire tout","numberInput.actions.decreaseAria":"Diminuer la valeur","numberInput.actions.increaseAria":"Augmenter la valeur","goToLineDialog.field.linePlaceholderShort":"Ligne","goToLineDialog.field.linePlaceholder":"Numéro de ligne","goToLineDialog.actions.go":"Aller","goToLineDialog.helper.editorUnavailable":"Éditeur indisponible.","goToLineDialog.helper.currentLineRange":"Ligne actuelle : {current}. Tapez un numéro de ligne compris entre 1 et {max} vers lequel accéder.","goToLineDialog.helper.goToLine":"Aller à la ligne {line}","dialog.common.actions.close":"Fermer","session.newWorktree.trust.run":"Les exécuter","session.newWorktree.trust.title":"Exécuter les actions du checkout ?","gitView.publish.contributorCommitFirstAction":"Continuer","gitView.publish.contributorCommitFirstTitle":"Commiter, puis choisir où pousser ?","dialog.common.actions.cancel":"Annuler","filesView.toast.relativePathCopied":"Chemin relatif copié","filesView.tree.menu.copyRelativePath":"Copier le chemin relatif","multiRun.branchSelector.placeholder.selectSourceBranch":"Sélectionnez la branche source...","multiRun.branchSelector.status.loadingBranches":"Chargement des branches...","multiRun.branchSelector.status.noBranchesFound":"Aucune branche trouvée","multiRun.branchSelector.status.notInGitRepository":"Pas dans un dépôt git.","multiRun.branchSelector.groups.localBranches":"Branches locales","multiRun.branchSelector.groups.remoteBranches":"Branches du dépôt distant","multiRun.window.actions.closeAria":"Fermer le multi-exécution","multiRun.window.description":"Fenêtre multi-exécution OpenChamber.","voice.status.idle":"Prêt pour la voix","voice.status.listening":"Écoute...","voice.status.processing":"Traitement...","voice.status.speaking":"Parlant...","voice.status.error":"Erreur vocale","voice.status.conversationModeActiveAria":"Mode conversation actif","voice.action.finishAndTranscribe":"Terminer et transcrire la saisie vocale","onboarding.common.actions.back":"Retour","onboarding.common.copyToClipboard":"Copier dans le presse-papier","onboarding.common.status.copiedToClipboard":"Copié dans le presse-papiers","onboarding.chooser.title":"Bienvenue sur OpenChamber","onboarding.chooser.description":"Choisissez comment vous souhaitez vous connecter pour commencer.","onboarding.chooser.tabs.localInstall":"Installation locale","onboarding.chooser.tabs.connectRemote":"Se connecter en remote","onboarding.localSetup.title":"Configuration de OpenCode","onboarding.localSetup.description":"Installez OpenCode v2 CLI pour continuer.","onboarding.localSetup.dialog.selectOpencodeBinary":"Sélectionnez le binaire OpenCode","onboarding.localSetup.errors.cliNotReady":"OpenCode CLI n’est pas encore prêt. Veuillez confirmer que l'installation est terminée et réessayer.","onboarding.localSetup.errors.detectionFailed":"Échec de la détection","onboarding.localSetup.windows.title":"Configuration de Windows (WSL recommandé)","onboarding.localSetup.windows.stepInstallWsl":"Installez WSL (si nécessaire) avec","onboarding.localSetup.windows.stepInstallWslSuffix":"dans PowerShell.","onboarding.localSetup.windows.stepRunInstallInWsl":"Exécutez la commande d'installation ci-dessous dans votre terminal WSL.","onboarding.localSetup.windows.stepSetBinaryPath":"Si OpenChamber ne détecte pas automatiquement OpenCode, définissez le chemin binaire ci-dessous.","onboarding.localSetup.intro":"Installez OpenCode v2 CLI pour continuer.","onboarding.localSetup.docs.windows":"Guide d’installation","onboarding.localSetup.docs.default":"Guide d’installation","onboarding.localSetup.actions.checking":"Vérification…","onboarding.localSetup.actions.checkNow":"Vérifiez maintenant","onboarding.localSetup.actions.checkAndContinue":"J’ai terminé l’installation, vérifier et continuer","onboarding.localSetup.helper.checkAndContinue":"Cliquez pour vérifier si OpenCode CLI est disponible. En cas de succès, vous entrerez automatiquement dans l'écran principal.","onboarding.localSetup.status.watching":"En attendant OpenCode v2","onboarding.localSetup.status.autoContinue":"Nous continuerons automatiquement une fois qu’il sera détecté.","onboarding.localSetup.field.alreadyInstalled":"Déjà installé ? Définissez le chemin OpenCode CLI :","onboarding.localSetup.advanced.title":"Définir un chemin binaire personnalisé","onboarding.localSetup.troubleshoot.title":"Vous avez des problèmes ?","onboarding.localSetup.actions.browse":"Parcourir","onboarding.localSetup.actions.apply":"Appliquer","onboarding.localSetup.helper.saveAndReload":"Enregistre dans les paramètres OpenChamber et recharge la configuration OpenCode.","onboarding.localSetup.helper.pinnedByAdministrator":"Votre administrateur a défini ce chemin. Si OpenCode n’y est pas, demandez-lui de l’installer.","onboarding.localSetup.remotePreference":"Vous préférez utiliser un serveur distant ?","onboarding.localSetup.actions.connectRemoteServer":"Se connecter au serveur distant →","onboarding.localSetup.windows.hintInstallInWsl":"Sous Windows, installez et exécutez OpenCode dans WSL pour une meilleure compatibilité.","onboarding.localSetup.windows.hintDetectionFailed":"Si la détection échoue, définissez un chemin natif (opencode.cmd/opencode.exe), wsl.exe ou wsl:/usr/local/bin/opencode.","onboarding.localSetup.hint.ensurePath":"Déjà installé ? Assurez-vous qu'OpenCode est dans votre PATH.","onboarding.localSetup.hint.setEnv":"Ou définissez la variable d'environnement OPENCODE_BINARY.","onboarding.localSetup.hint.missingRuntime":"Si vous voyez « env: node : No such file or directory » ou « env: bun : No such file or directory », installez ce runtime ou assurez-vous qu'il se trouve sur PATH.","onboarding.remoteConnection.title":"Se connecter au serveur distant","onboarding.remoteConnection.titleRecovery":"Connectez-vous à un autre serveur","onboarding.remoteConnection.description":"Saisissez l'adresse d'un serveur OpenChamber auquel vous connecter.","onboarding.remoteConnection.field.serverAddress":"Adresse du serveur","onboarding.remoteConnection.field.serverAddressPlaceholder":"https://your-server.example.com:4096","onboarding.remoteConnection.field.nameOptional":"Nom (facultatif)","onboarding.remoteConnection.field.namePlaceholder":"Mon serveur distant","onboarding.remoteConnection.errors.connectionTestFailed":"Le test de connexion a échoué","onboarding.remoteConnection.errors.failedToSaveConnection":"Échec de l'enregistrement de la connexion","onboarding.remoteConnection.status.connectedSuccessfully":"Connecté avec succès ({latencyMs}ms)","onboarding.remoteConnection.status.authWarning":"Le serveur nécessite une authentification. Vous pouvez toujours vous connecter.","onboarding.remoteConnection.status.connectionFailed":"Échec de la connexion","onboarding.remoteConnection.status.suggestionsUnreachable":"Suggestions : vérifiez l'adresse du serveur, vérifiez que le serveur est en cours d'exécution ou vérifiez votre connexion réseau.","onboarding.remoteConnection.status.suggestionsWrongService":"Suggestions : vérifiez que l’URL pointe vers un serveur OpenChamber ou contactez l'administrateur du serveur.","onboarding.remoteConnection.actions.testing":"Essai…","onboarding.remoteConnection.actions.testConnection":"Tester la connexion","onboarding.remoteConnection.actions.connectAndRestart":"Connectez-vous et redémarrez","onboarding.remoteConnection.actions.whatToDo":"Qu'aimeriez-vous faire ?","onboarding.remoteConnection.actions.chooseDifferentServer":"Choisissez un autre serveur","onboarding.remoteConnection.actions.useLocalInstead":"Utilisez plutôt local","onboarding.remoteConnection.probe.authMessage":"Le serveur nécessite une authentification. Vous pouvez toujours vous connecter, mais vous devrez peut-être fournir des informations d'identification.","onboarding.remoteConnection.probe.wrongServiceMessage":"Le serveur a répondu mais n'exécute pas OpenChamber. Vérifiez que l'adresse pointe vers un serveur OpenChamber.","onboarding.remoteConnection.probe.unreachableMessage":"Le serveur est inaccessible. Vérifiez votre connexion réseau et vérifiez l'adresse du serveur.","onboarding.desktopRecovery.localUnavailable.title":"OpenCode local indisponible","onboarding.desktopRecovery.localUnavailable.description":"OpenCode CLI n'a pas pu être démarré ou n'est pas installé. Installez OpenCode ou connectez-vous plutôt à un serveur distant.","onboarding.desktopRecovery.localUnavailable.retry":"Réessayer en local","onboarding.desktopRecovery.localUnavailable.useLocal":"Configurer localement","onboarding.desktopRecovery.noDefaultConnection.title":"Aucune connexion par défaut","onboarding.desktopRecovery.noDefaultConnection.description":"Votre connexion par défaut enregistrée est introuvable. Choisissez comment vous souhaitez vous connecter.","onboarding.desktopRecovery.remoteUnreachable.title":"Serveur distant inaccessible","onboarding.desktopRecovery.remoteUnreachable.description":`Impossible de se connecter à "{host}". Vérifiez votre connexion réseau et vérifiez l'adresse du serveur.`,"onboarding.desktopRecovery.remoteUnreachable.retry":"Réessayer la connexion","onboarding.desktopRecovery.incompatibleServer.title":"Serveur incompatible","onboarding.desktopRecovery.incompatibleServer.description":"Le serveur « {host} » n'exécute pas OpenChamber. Vérifiez que l'adresse pointe vers un serveur OpenChamber.","onboarding.desktopRecovery.common.useLocal":"Utiliser local","onboarding.desktopRecovery.common.useRemote":"Utiliser le remote","onboarding.desktopRecovery.actions.retrying":"Nouvelle tentative…","onboarding.desktopRecovery.actions.retryConnection":"Réessayer la connexion","projectConfigError.toast.title":"OpenCode ne peut pas charger la configuration de ce projet","projectConfigError.toast.unknownFile":"Configuration du projet","projectConfigError.toast.hint":"Corrigez le fichier, puis réessayez. Les autres projets continuent de fonctionner.","projectConfigError.toast.retry":"Réessayer","projectConfigError.toast.retrying":"Nouvelle tentative…","startup.initRecovery.title":"Le démarrage a échoué","startup.serverOutdated.title":"Mise à jour du serveur requise","startup.serverOutdated.description":"Le serveur exécute OpenChamber {version}, et cette application a besoin de la 2.0 ou plus récente. Mettez OpenChamber à jour sur le serveur pour continuer.","startup.serverOutdated.checking":"Vérification du serveur...","startup.serverOutdated.noUpdate":"Le serveur n’a pas proposé de mise à jour qu’il peut installer lui-même.","startup.initRecovery.openCodeUnavailable":"OpenChamber est accessible, mais OpenCode n’est pas prêt. Vérifiez OpenCode sur le serveur, puis réessayez.","startup.initRecovery.binary":"Exécutable OpenCode","startup.initRecovery.error":"Erreur OpenCode","startup.initRecovery.serverUnreachable":"OpenChamber n’a pas pu joindre son serveur. Vérifiez que le serveur est en cours d’exécution, puis réessayez.","startup.initRecovery.loadAgentsFailed":"Le serveur fonctionne, mais OpenCode n’a pas pu charger les agents. Réessayez une fois la cause corrigée.","startup.initRecovery.unexpected":"OpenChamber n’a pas pu terminer son démarrage. Réessayez une fois la cause corrigée.","startup.initRecovery.lastError":"Dernière erreur","startup.initRecovery.retry":"Réessayer","startup.initRecovery.retrying":"Nouvelle tentative…","startup.overlay.slow":"Le démarrage prend plus de temps que prévu…","onboarding.desktopRecovery.placeholders.remoteServer":"le serveur distant","onboarding.desktopRecovery.placeholders.unknownServer":"inconnu","vscodeLayout.title.chat":"Chat","vscodeLayout.title.newSession":"Nouvelle session","vscodeLayout.title.sessions":"Sessions","vscodeLayout.title.sessionFallback":"Session","vscodeLayout.actions.backToSessionsAria":"Retour aux sessions","vscodeLayout.actions.newSessionAria":"Nouvelle session","vscodeLayout.actions.resizeSessionsSidebarAria":"Redimensionner la barre latérale des sessions","vscodeLayout.actions.settingsAria":"Paramètres","vscodeLayout.quota.title":"Limites de taux","vscodeLayout.quota.mode.used":"Utilisé","vscodeLayout.quota.mode.remaining":"Restant","vscodeLayout.quota.lastUpdated":"Dernière mise à jour {time}","vscodeLayout.quota.noRateLimitsAvailable":"Aucune limite de taux disponible.","vscodeLayout.quota.noRateLimitsReported":"Aucune limite de taux signalée.","vscodeLayout.quota.actions.rateLimitsAria":"Limites de taux","vscodeLayout.quota.actions.showUsedAria":"Afficher le quota utilisé","vscodeLayout.quota.actions.showRemainingAria":"Afficher le quota restant","vscodeLayout.quota.actions.refreshAria":"Limites du taux de rafraîchissement","updateDialog.header.updateAvailable":"Mise à jour disponible","updateDialog.header.updating":"Mise à jour de OpenChamber...","updateDialog.status.installingUpdate":"Installation de la mise à jour...","updateDialog.status.serverRestarting":"Redémarrage du serveur...","updateDialog.status.waitingForServer":"En attente du serveur...","updateDialog.status.autoReloadHint":"La page se rechargera automatiquement une fois la mise à jour terminée.","updateDialog.fallback.updateViaTerminal":"Ou mettre à jour via le terminal :","updateDialog.actions.copyCommand":"Commande Copier","updateDialog.actions.copied":"Copié!","updateDialog.status.downloadingPayload":"Téléchargement de la charge utile de la mise à jour...","updateDialog.actions.downloadUpdate":"Télécharger la mise à jour","updateDialog.status.downloading":"Téléchargement...","updateDialog.actions.restartToUpdate":"Redémarrer pour mettre à jour","updateDialog.status.restarting":"Redémarrage...","updateDialog.actions.updateNow":"Mettre à jour maintenant","updateDialog.actions.openMobileUpdate":"Ouvrir la mise à jour","updateDialog.changelog.title":"Nouveautés","updateDialog.status.updating":"Mise à jour...","updateDialog.error.updateFailed":"La mise à jour a échoué","updateDialog.error.takingLonger":"La mise à jour prend plus de temps que prévu. Attendez un peu et actualisez, ou exécutez : openchamber update","updateDialog.error.signatureRejected":"La mise à jour téléchargée a été rejetée : sa signature de code ne correspond pas à cette installation. Cela signifie généralement que la copie en cours n’a pas été installée depuis une version officielle signée. Installez OpenChamber depuis une version officielle, puis relancez la mise à jour.","updateDialog.error.updaterDisabled":"Le programme de mise à jour s’est arrêté après une installation échouée. Quittez OpenChamber, rouvrez-le, puis réessayez la mise à jour.","updateDialog.error.restartFailed":"Impossible de redémarrer pour installer la mise à jour.","updateDialog.error.restartUnavailable":"L’installation de la mise à jour nécessite l’application de bureau OpenChamber.","mobileUpdate.toast.available.title":"Mise à jour OpenChamber disponible","mobileUpdate.toast.available.description":"La version {version} est prête pour Android.","mobileUpdate.toast.actions.download":"Télécharger","mobileUpdate.toast.actions.dismiss":"Ignorer","opencodeUpdate.toast.available.title":"Mise à jour OpenCode","opencodeUpdate.toast.available.description":"Version {version} disponible.","opencodeUpdate.toast.available.manualDescription":"Version {version} disponible. Mettez à jour OpenCode comme vous l’avez installé, puis redémarrez OpenChamber.","opencodeUpdate.toast.actions.update":"Mise à jour","opencodeUpdate.toast.actions.dismiss":"Ignorer","opencodeUpdate.toast.actions.reload":"Recharger OpenCode","opencodeUpdate.toast.upgrading.title":"Mise à jour de OpenCode...","opencodeUpdate.toast.upgrading.description":"Gardez OpenChamber ouvert.","opencodeUpdate.toast.updated.title":"OpenCode mis à jour","opencodeUpdate.toast.updated.description":"Mise à jour installée.","opencodeUpdate.toast.updated.descriptionWithVersion":"Version {version} installée.","opencodeUpdate.toast.failed.title":"Impossible de mettre à jour OpenCode","opencodeUpdate.toast.failed.description":"La mise à niveau du OpenCode a échoué.","opencodeUpdate.toast.reload.message":"Redémarrage de OpenCode...","memoryDebugPanel.title":"Panneau de débogage","memoryDebugPanel.tabs.memory":"Mémoire","memoryDebugPanel.tabs.streaming":"Streaming","memoryDebugPanel.tabs.requests":"Requêtes","memoryDebugPanel.section.sessionsInMemory":"Sessions en mémoire","memoryDebugPanel.section.uiStreamingMetrics":"Métriques de streaming de l'interface utilisateur","memoryDebugPanel.section.vscodeBridgeMetrics":"Métriques du pont VS Code","memoryDebugPanel.section.noUiSamples":"Aucun échantillon de streaming d'interface utilisateur pour l'instant. Démarrez un flux et gardez ce panneau ouvert.","memoryDebugPanel.section.noVscodeSamples":"Aucun échantillon de pont VS Code pour l'instant.","memoryDebugPanel.metric.totalMessages":"Nombre total de messages","memoryDebugPanel.metric.cachedSessions":"Sessions mises en cache","memoryDebugPanel.metric.userMessages":"Messages utilisateur","memoryDebugPanel.metric.assistantMessages":"Messages assistant","memoryDebugPanel.metric.viewportWindow":"Fenêtre d'affichage","memoryDebugPanel.metric.zombieTimeout":"Délai d'attente des zombies","memoryDebugPanel.metric.githubTotalRequests":"GitHub Total des demandes","memoryDebugPanel.metric.metrics":"Métrique","memoryDebugPanel.metric.samples":"Échantillons","memoryDebugPanel.metric.lastUpdate":"Dernière mise à jour","memoryDebugPanel.metric.uiMetrics":"Métriques de l'interface utilisateur","memoryDebugPanel.metric.vscodeMetrics":"VS Code Métriques","memoryDebugPanel.metric.messageListRenders":"Rendus de liste de messages","memoryDebugPanel.metric.messageListStreamRenders":"Rendus de flux MsgList","memoryDebugPanel.metric.chatMessageRenders":"Rendus de messages de chat","memoryDebugPanel.metric.chatMessageStreamRenders":"Rendus de flux de messages ChatMessage","memoryDebugPanel.metric.chatMessageStaticDuringStream":"ChatMessage statique pendant le flux","memoryDebugPanel.metric.chatMessageStaticOutsideActiveTurn":"ChatMessage statique en dehors du tour actif","memoryDebugPanel.metric.messagesValue":"Messages {count}","memoryDebugPanel.metric.minutesValue":"Minutes {count}","memoryDebugPanel.metric.msgsValue":"Messages {count}","memoryDebugPanel.metric.roleMsgsValue":"U {user} / A {assistant}","memoryDebugPanel.metric.countValue":"compter {value}","memoryDebugPanel.metric.avgValue":"moyenne {value}","memoryDebugPanel.metric.maxValue":"maximum {value}","memoryDebugPanel.metric.totalValue":"total {value}","memoryDebugPanel.actions.logState":"État du journal","memoryDebugPanel.actions.copyJson":"Copier JSON","memoryDebugPanel.tooltip.logCurrentState":"Enregistrer l'état actuel de la mémoire sur la console du navigateur","memoryDebugPanel.streaming.copy.copied":"Débogage en streaming JSON copié","memoryDebugPanel.streaming.copy.failed":"Échec de la copie de JSON","memoryDebugPanel.streaming.copy.hint":"La copie exporte les métriques de streaming de l'interface utilisateur et de VS Code en tant que JSON.","memoryDebugPanel.requests.inFlight":"En cours","memoryDebugPanel.requests.peak":"Pic","memoryDebugPanel.requests.duration":"Durée","memoryDebugPanel.requests.totalRequests":"Requêtes totales","memoryDebugPanel.requests.tracking":"Suivi","memoryDebugPanel.requests.now":"maintenant","memoryDebugPanel.requests.noSamples":"Aucune requête enregistrée. Gardez ce panneau ouvert pour enregistrer l'activité fetch.","memoryDebugPanel.requests.chartLabel":"Requêtes fetch en cours dans le temps, pic {peak}","memoryDebugPanel.requests.windowHint":"{seconds}s dernières","memoryDebugPanel.requests.percentileChartLabel":"Percentiles d'âge des requêtes en cours (p50, p90, p99, max) dans le temps","memoryDebugPanel.common.idle":"inactif","memoryDebugPanel.common.live":"en direct","memoryDebugPanel.common.notAvailable":"n / A","memoryDebugPanel.common.untitled":"Sans titre","directoryTree.field.newDirectoryPlaceholder":"nouveau_répertoire","textarea.resizeHandleAria":"Redimensionner la zone de texte","sidebar.resize.leftPanelAria":"Redimensionner le panneau de gauche","sidebar.resize.rightPanelAria":"Redimensionner le panneau de droite","mainLayout.mobile.closeDrawerAria":"Fermer le tiroir","sortableTabsStrip.aria.tabs":"Onglets","openChamberLogo.aria.logo":"Logo OpenChamber","markdownRenderer.code.actions.copyTitle":"Copier le code","markdownRenderer.code.actions.copiedTitle":"Copié","markdownRenderer.table.actions.copyTitle":"Copier le tableau","markdownRenderer.code.actions.enableWrapTitle":"Activer le retour à la ligne","markdownRenderer.code.actions.disableWrapTitle":"Désactiver le retour à la ligne","markdownRenderer.table.actions.enableWrapTitle":"Activer le retour à la ligne des cellules","markdownRenderer.table.actions.disableWrapTitle":"Désactiver le retour à la ligne des cellules","markdownRenderer.table.actions.downloadTitle":"Télécharger le tableau","markdownRenderer.table.toast.downloadedAsFormat":"Table téléchargée sous le nom {format}","markdownRenderer.mermaid.actions.copyTitle":"Copie","markdownRenderer.mermaid.actions.copySourceTitle":"Copier la source","markdownRenderer.mermaid.actions.downloadSvgTitle":"Télécharger SVG","markdownRenderer.mermaid.actions.zoomInTitle":"Zoom avant","markdownRenderer.mermaid.actions.zoomOutTitle":"Zoom arrière","markdownRenderer.mermaid.actions.resetViewTitle":"Réinitialiser la vue","markdownRenderer.mermaid.toast.downloadFailed":"Échec du téléchargement du diagramme","common.date.today":"Aujourd’hui","common.date.yesterday":"Hier","common.date.yesterdayWithTime":"Hier {time}","common.relative.justNow":"À l’instant","common.relative.minutesAgoShort":"il y a {count} min","common.relative.hoursAgoShort":"il y a {count} h","common.relative.daysAgoShort":"il y a {count} j","common.relative.weeksAgoShort":"il y a {count} sem","common.relative.yearsAgoShort":"il y a {count} a","common.relative.daysAgoCompact":"{count} j","common.relative.weeksAgoCompact":"{count} sem","common.relative.yearsAgoCompact":"{count} a","common.duration.secondsCompact":"{seconds}s","common.duration.minutesSecondsCompact":"{minutes}m {seconds}s","common.duration.hoursMinutesCompact":"{hours}h {minutes}m","contextFileOpen.failure.tooLarge":"Le fichier est trop volumineux pour être ouvert (> {count} lignes)","contextFileOpen.failure.missing":"Fichier introuvable","contextFileOpen.failure.unreadable":"Impossible d’ouvrir le fichier","quota.window.5h":"5 heures","quota.window.7d":"Limite sur 7 jours","quota.window.extraUsage":"Utilisation supplémentaire","quota.window.weekly":"Hebdomadaire","quota.window.daily":"Quotidien","quota.window.monthly":"Mensuel","quota.window.credits":"Crédits","quota.window.creditsBalance":"Solde de crédits","quota.window.monthlyCredits":"Crédits mensuels","quota.window.purchasedCredits":"Crédits achetés","quota.window.freeCredits":"Crédits gratuits","quota.window.billingCycle":"Cycle de facturation","quota.window.auto":"Auto","quota.window.api":"API","quota.window.planLimit":"Limite du forfait","quota.window.onDemand":"À la demande","quota.window.session":"Session","quota.window.premium":"Interactions premium","quota.window.chat":"Requêtes de chat","quota.window.completions":"Complétions","quota.window.premiumInteractions":"Crédits IA","layout.mainTab.diagram":"Diagramme","mobile.nav.aria":"Navigation mobile","mobile.connect.welcome.title":"Se connecter à OpenChamber","mobile.connect.welcome.description":"Ajoutez une URL de serveur ou scannez un code QR d'appairage pour commencer à utiliser l'app mobile.","mobile.connect.url.label":"URL du serveur","mobile.connect.url.placeholder":"http://192.168.1.74:2606","mobile.connect.token.label":"Jeton client","mobile.connect.token.placeholder":"Collez le jeton d'accès","mobile.connect.token.hint":"Nécessaire uniquement si votre serveur exige un jeton au lieu d'un mot de passe.","mobile.connect.password.label":"Mot de passe","mobile.connect.password.placeholder":"Mot de passe OpenChamber","mobile.connect.connectButton":"Se connecter","mobile.connect.unlockButton":"Déverrouiller et se connecter","mobile.connect.cancelPassword":"Utiliser un autre serveur","mobile.connect.connecting":"Connexion...","mobile.connect.notice.unreachable":"Impossible de joindre {label}. Vérifiez que le serveur est en marche.","mobile.connect.notice.authExpired":"L'accès à {label} a expiré ou a été révoqué. Reconnectez-vous.","mobile.connect.recovery.description":"Connexion au serveur enregistré impossible. Vérifiez qu'il est en marche ou choisissez une autre instance.","mobile.connect.scanQr":"Scanner le code QR","mobile.connect.welcome.scanHint":"Sur votre ordinateur, ouvrez « Ajouter un appareil » pour afficher un code QR, puis scannez-le ici.","mobile.connect.advanced":"Avancé","mobile.connect.manual.toggle":"Connexion par adresse","mobile.connect.scan.permissionDenied":"L'accès à la caméra est désactivé. Activez-le dans les Réglages pour scanner un code QR.","mobile.connect.scan.failed":"Impossible de scanner ce code QR. Réessayez ou saisissez l'URL manuellement.","mobile.connect.scan.invalid":"Ce code QR n'est pas un code de connexion OpenChamber.","mobile.connect.scan.unsupported":"Le scan QR est disponible uniquement dans l'app mobile installée.","mobile.connect.saved.title":"Connexions enregistrées","mobile.connect.saved.empty":"Aucune connexion enregistrée pour le moment.","mobile.connect.relay.badge":"via OpenChamber Relay","mobile.connect.error.urlRequired":"Saisissez une URL de serveur.","mobile.connect.splash.connectingTo":"Connexion à l’appareil :","mobile.connect.error.invalidUrl":"Cette URL de serveur n'est pas valide.","mobile.connect.error.unreachable":"Impossible de joindre ce serveur OpenChamber.","mobile.connect.error.authRequired":"Ce serveur nécessite un mot de passe ou un jeton client.","mobile.connect.error.passwordFailed":"Impossible de déverrouiller ce serveur. Vérifiez le mot de passe.","mobile.instances.addTitle":"Ajouter une instance","mobile.instances.addManual":"Ajouter par adresse","mobile.instances.editTitle":"Modifier l'instance","mobile.instances.edit":"Modifier","mobile.instances.delete":"Supprimer","mobile.instances.deleteAria":"Supprimer {label}","mobile.instances.confirmDeleteAria":"Confirmer la suppression de {label}","mobile.instances.cancelDeleteAria":"Conserver {label}","mobile.instances.cancelEdit":"Annuler","mobile.instances.label.label":"Nom","mobile.instances.label.placeholder":"Nom d'affichage facultatif","mobile.instances.saveNew":"Enregistrer l'instance","mobile.instances.status.connectedDirect":"Connecté · Réseau local","mobile.instances.status.connectedRelay":"Connecté · Relais privé","mobile.instances.saveEdit":"Enregistrer les modifications","mobile.connectionDebug.title":"Journal de connexion","mobile.connectionDebug.copy":"Copier","mobile.connectionDebug.copied":"Copié","mobile.connectionDebug.close":"Fermer","mobile.connectionDebug.empty":"Aucun événement de connexion pour le moment.","mobile.nav.changes":"Modifications","mobile.nav.settings":"Paramètres","mobile.surface.closeAria":"Fermer","mobile.header.openWorkspaceAria":"Ouvrir le panneau de travail","mobile.header.openWorkspaceWithChangesAria":"Ouvrir le panneau de travail, modifications non validées","mobile.header.openMetadataAria":"Ouvrir les métadonnées de session","mobile.header.metadata.context":"Contexte","mobile.header.metadata.contextPending":"L'utilisation du contexte apparaît dès que la session démarre.","mobile.header.metadata.usage":"Utilisation","mobile.menu.titleAria":"Outils de l’espace de travail","mobile.menu.files":"Fichiers","mobile.menu.changes":"Modifications","mobile.menu.terminal":"Terminal","mobile.menu.mcp":"MCP","mobile.menu.instances":"Instances","mobile.menu.update":"Mettre à jour","mobile.menu.settings":"Paramètres","mobile.sessions.newChatCta":"Nouveau chat dans {project}","mobile.sessions.dateGroup.today":"Aujourd’hui","mobile.sessions.dateGroup.yesterday":"Hier","mobile.sessions.dateGroup.thisWeek":"Plus tôt cette semaine","mobile.sessions.dateGroup.older":"Plus ancien","mobile.sessions.section.worktrees":"Worktrees","mobile.sessions.section.otherProjects":"Changer de projet","mobile.sessions.section.projects":"Projets","mobile.sessions.viewMode.label":"Affichage","mobile.sessions.viewMode.projects":"Groupé","mobile.sessions.viewMode.timeline":"Chronologie","mobile.sessions.section.chats":"Discussions","mobile.sessions.section.recent":"Récents","mobile.sessions.empty.noProjectsTitle":"Aucun projet pour le moment","mobile.sessions.empty.noProjectsDescription":"Ajoutez un projet pour commencer à discuter avec votre code.","mobile.sessions.empty.noSessionsTitle":"Aucune session pour le moment","mobile.sessions.empty.noSessionsDescription":"Démarrez votre premier chat pour le voir ici.","mobile.sessions.empty.searchTitle":"Aucun résultat","mobile.sessions.empty.searchDescription":"Essayez un autre terme de recherche.","mobile.sessions.showArchived":"Afficher les archivées ({count})","mobile.sessions.hideArchived":"Masquer les archivées","mobile.sessions.activeWorktreeAria":"Worktree actif","mobile.sessions.startNewChat":"Démarrer un nouveau chat","mobile.sessions.newChat":"Nouveau chat","mobile.sessions.editOrder":"Réordonner les projets","mobile.sessions.doneEditing":"Terminé","mobile.sessions.editOrderHint":"Faites glisser la poignée pour réorganiser les projets. Touchez un projet pour afficher ses worktrees et les faire glisser aussi. Touchez la coche pour terminer.","mobile.sessions.editProjectAria":"Modifier {label}","mobile.sessions.newSessionInProjectAria":"Nouvelle session dans {label}","mobile.sessions.dragHandleAria":"Faire glisser {label} pour réordonner","mobile.sessions.moveUpAria":"Déplacer {label} vers le haut","mobile.sessions.moveDownAria":"Déplacer {label} vers le bas","mobile.sessions.removeProjectAria":"Supprimer {label}","mobile.sessions.confirmRemoveProjectAria":"Confirmer la suppression de {label}","mobile.sessions.toast.projectRemoved":"{label} supprimé","mobile.sessions.archiveSessionAria":"Archiver {title}","mobile.sessions.cancelArchiveAria":"Annuler l’archivage de {title}","mobile.sessions.renameSessionAria":"Renommer {title}","mobile.sessions.renameError":"Échec du renommage de la session","mobile.sessions.deleteSessionAria":"Supprimer {title}","mobile.sessions.confirmDeleteSessionAria":"Confirmer la suppression de {title}","mobile.projectEdit.worktreesTitle":"Worktrees","mobile.projectEdit.worktreesEmpty":"Aucun worktree dans ce projet pour le moment.","mobile.projectEdit.reorderHint":"Faites glisser pour réordonner les worktrees.","mobile.projectEdit.dragWorktreeAria":"Faire glisser {label} pour réordonner","mobile.projectEdit.deleteWorktreeAria":"Supprimer le worktree {label}","mobile.projectEdit.deleteWorktreeTitle":"Supprimer le worktree","mobile.projectEdit.deleteWorktreeConfirmButton":"Supprimer","mobile.projectEdit.deleteWorktreeConfirm":"Supprimer le worktree « {name} » ? Cette action est irréversible.","mobile.projectEdit.deleteWorktreeDirty":"Ce worktree contient des modifications non commitées qui seront perdues.","mobile.projectEdit.deleteWorktreeArchiveNote":"{count} session(s) associée(s) seront archivées.","mobile.projectEdit.deleteLocalBranch":"Supprimer aussi la branche locale","mobile.projectEdit.deleteRemoteBranch":"Supprimer aussi la branche distante","mobile.sessions.showMore":"Afficher {count} de plus","mobile.sessions.search.section.sessions":"Sessions","mobile.sessions.search.section.archived":"Archivées","mobile.sessions.search.section.projects":"Projets","mobile.sessions.clearSearchAria":"Effacer la recherche","mobile.header.noProject":"Sélectionnez un projet","mobile.header.activeSession":"Session active","mobile.header.noSession":"Aucune session active","mobile.sessions.openSheetAria":"Ouvrir les sessions et projets","mobile.sessions.closeSheetAria":"Fermer les sessions et projets","mobile.sessions.sheet.title":"Sessions","mobile.sessions.sheet.description":"Changez de projet, ouvrez des sessions ou démarrez un nouveau chat.","mobile.sessions.search.placeholder":"Rechercher des sessions","mobile.sessions.empty":"Aucune session trouvée.","mobile.sessions.unassignedProject":"Autres sessions","mobile.sessions.newSessionAria":"Démarrer une nouvelle session dans ce projet","mobile.sessions.untitled":"Session sans titre","mobile.sessions.project.sessionsSingle":"1 session","mobile.sessions.project.sessionsPlural":"{count} sessions","mobile.files.refreshAria":"Actualiser les fichiers","mobile.files.backToParentAria":"Retour à {name}","mobile.files.rootDirectory":"Fichiers du projet","mobile.files.search.placeholder":"Rechercher des fichiers","mobile.files.search.empty":"Aucun fichier trouvé.","mobile.files.parentDirectory":"Dossier parent","mobile.files.empty.noDirectory":"Sélectionnez un projet pour parcourir les fichiers.","mobile.files.empty.directory":"Ce dossier est vide.","mobile.files.error.listFailed":"Impossible de charger les fichiers","mobile.files.error.readUnavailable":"L’aperçu du fichier n’est pas disponible dans ce runtime.","mobile.files.file.truncated":"Aperçu du fichier tronqué sur mobile.","mobile.files.copyPathAria":"Copier le chemin du fichier","mobile.files.copyContent":"Copier le contenu","mobile.files.copyContentAria":"Copier le contenu du fichier","mobile.files.editAria":"Modifier le fichier","mobile.files.doneEditingAria":"Terminer la modification","mobile.files.toast.pathCopied":"Chemin copié","mobile.files.toast.contentCopied":"Contenu copié","mobile.files.toast.copyFailed":"Échec de la copie","mobile.changes.placeholder.title":"Modifications","mobile.changes.placeholder.description":"La revue du working tree, la synchronisation et les actions de commit seront ici.","mobile.changes.branchLabel":"Branche : {branch}","mobile.changes.noRemote":"Aucun remote disponible","mobile.changes.cleanDescription":"Aucun fichier modifié dans cet espace de travail.","mobile.changes.diffDetail.subtitle":"Diff en lecture seule","mobile.changes.diffDetail.loadFailed":"Impossible de charger le diff","mobile.changes.diffDetail.missingTitle":"Le fichier n’est plus modifié","mobile.changes.diffDetail.missingDescription":"Retournez aux modifications et actualisez la liste.","mobile.changes.diffDetail.imageUnavailable":"Les diffs d’images ne sont pas encore disponibles dans les modifications mobile.","mobile.settings.placeholder.title":"Paramètres","mobile.settings.placeholder.description":"Les paramètres mobiles ciblés de connexion et d’application seront ici.","sessions.sidebar.header.displayMode.showArchived":"Afficher les sessions archivées","sessions.sidebar.group.showMore":"Afficher plus de sessions","gitView.changes.revertDirectoryAria":"Annuler les modifications dans {path}","gitView.changes.revertDirectory":"Annuler le dossier","gitView.changes.revertDirectoryDescriptionPlural":"Cela supprimera les modifications locales dans {count} fichiers sous {path}.","gitView.changes.revertDirectoryDescriptionSingle":"Cela supprimera les modifications locales dans {count} fichier sous {path}.","gitView.changes.revertDirectoryDialogTitle":"Annuler les modifications du dossier ?","gitView.changes.revertDirectoryTooltip":"Annuler les modifications du dossier","worktree.bootstrap.toast.failed":"Échec de la configuration du worktree","worktree.bootstrap.toast.failedDescription":"Le worktree a été créé, mais la configuration en arrière-plan ne s’est pas terminée.","worktree.bootstrap.toast.authorizationRequired":"OpenChamber n’atteint pas le dépôt ou ses sous-modules. Configurez l’accès dans Configurer le dépôt, puis réessayez.","worktree.bootstrap.toast.lfsClientMissing":"Installez Git LFS sur le serveur, puis relancez la configuration du worktree.","worktree.bootstrap.toast.invalidConfiguration":"Vérifiez la configuration des sous-modules et de Git LFS du dépôt, puis réessayez.","worktree.bootstrap.toast.repositoryTooManyFiles":"Le dépôt contient trop de fichiers.","worktree.bootstrap.toast.cancelled":"La configuration du worktree a été annulée. Réessayez lorsque vous êtes prêt.","worktree.bootstrap.toast.transportFailed":"Vérifiez l’accès au dépôt et la connexion réseau, puis réessayez.","worktree.bootstrap.toast.timeoutDescription":"Le worktree a été créé, mais la configuration en arrière-plan a expiré.","contextPanel.browser.inspectUnavailable":"Cette page ne peut pas être inspectée depuis le panneau de navigateur.","contextPanel.browser.back":"Retour","contextPanel.browser.forward":"Suivant","contextPanel.browser.reload":"Recharger","contextPanel.browser.hardReload":"Recharger en ignorant le cache","contextPanel.browser.zoomIn":"Zoom avant","contextPanel.browser.zoomOut":"Zoom arrière","contextPanel.browser.zoomReset":"Réinitialiser le zoom","contextPanel.browser.clearCookies":"Effacer les cookies","contextPanel.browser.clearCache":"Vider le cache","contextPanel.browser.clearedCookies":"Cookies effacés","contextPanel.browser.clearedCache":"Cache vidé","contextPanel.browser.clearFailed":"Impossible d’effacer les données de navigation","contextPanel.browser.stop":"Arrêter","contextPanel.browser.openExternal":"Ouvrir dans le navigateur système","contextPanel.browser.devTools":"Ouvrir les DevTools","contextPanel.browser.deviceToolbar":"Barre d’appareils","contextPanel.browser.device.preset":"Préréglage d’appareil","contextPanel.browser.device.responsive":"Adaptatif","contextPanel.browser.device.width":"Largeur du viewport","contextPanel.browser.device.height":"Hauteur du viewport","contextPanel.browser.device.rotate":"Pivoter","contextPanel.browser.device.schemeSystem":"Auto","contextPanel.browser.device.schemeLight":"Clair","contextPanel.browser.device.schemeDark":"Sombre","contextPanel.browser.device.schemeFailed":"Impossible de changer l’apparence de la page","contextPanel.browser.frameTitle":"Navigateur","contextPanel.browser.loadFailed":"Impossible de charger cette page","contextPanel.browser.waitingForServer":"En attente du serveur de développement","contextPanel.browser.waitingForServerHint":"Il n’accepte pas encore de connexions. La page se chargera dès que ce sera le cas.","contextPanel.browser.tunnelFailed":"Ce serveur de dev n’a pas pu être atteint","contextPanel.browser.remoteLoopback.title":"{url} est sur la machine d’OpenChamber","contextPanel.browser.remoteLoopback.hint":"Un onglet de navigateur ne peut pas ouvrir les pages qui y tournent. Ouvrez-la dans l’app de bureau.","contextPanel.browser.tunnelFailedHint":"{url} tourne sur la machine où se trouve OpenChamber, et la connexion vers elle n’a pas pu être ouverte. Rien de votre propre machine n’est affiché ici.","contextPanel.browser.loadFailedUnknown":"La page n’a pas pu être atteinte.","contextPanel.browser.crashed":"Cette page ne répond plus","contextPanel.browser.crashedHint":"La page a planté plusieurs fois de suite. Rechargez pour réessayer.","contextPanel.browser.devServers.title":"Serveurs de développement actifs","projectActions.toast.multipleServers":"Plusieurs serveurs ont démarré — choisissez-en un dans le panneau navigateur","contextPanel.browser.devServers.justStarted":"Démarrés à l’instant","contextPanel.browser.devServers.unavailable":"Impossible de vérifier les serveurs de développement actifs.","contextPanel.browser.devServers.remoteOnly":"Ils tournent sur la machine qui héberge OpenChamber. Les ouvrir nécessite l’application de bureau.","contextPanel.browser.annotate.toggle":"Annoter la page","contextPanel.browser.annotate.intro":"Ceci est une sélection annotée du navigateur intégré.","contextPanel.browser.annotate.attached":"Annotation jointe à la discussion","contextPanel.browser.annotate.noSession":"Ouvrez une session de discussion avant de joindre une annotation","contextPanel.browser.annotate.noPage":"Chargez une page avant d’annoter","contextPanel.browser.annotate.failed":"Impossible d’annoter cette page","contextPanel.browser.annotate.tool.element":"Élément","contextPanel.browser.annotate.tool.region":"Zone","contextPanel.browser.annotate.tool.draw":"Dessin","contextPanel.browser.annotate.commentPlaceholder":"Décrivez le changement...","contextPanel.browser.annotate.submit":"Joindre","contextPanel.browser.trustNotice":"Les pages ouvertes ici s’exécutent avec un accès complet à OpenChamber — nécessaire pour l’inspection et les captures d’écran. N’ouvrez que des sites de confiance : une page malveillante pourrait lire vos données ou agir en votre nom.","filesView.diagram.closeDiagramView":"Fermer la vue diagramme","filesView.diagram.saveDiagram":"Enregistrer le diagramme","filesView.excalidraw.installHint":"Installez l’extension Excalidraw pour dessiner dans ce fichier.","filesView.excalidraw.installAction":"Installer","filesView.fileEditor.save":"Enregistrer","filesView.fileEditor.snapshotFailed":"Impossible de récupérer vos modifications depuis {editor}. Réessayez.","filesView.fileEditor.unsupported":"{editor} ne peut pas ouvrir ce fichier. La source s’affiche à la place.","filesView.fileEditor.tooLarge":"Ce fichier est trop volumineux pour {editor}. Modifiez plutôt la source.","inlineComment.input.placeholderShort":"Ajouter un commentaire...","header.services.remoteUpdate.title":"Mise à jour de l’instance distante","header.services.remoteUpdate.checking":"Recherche de mises à jour...","header.services.remoteUpdate.upToDate":"Cette instance est à jour.","header.services.remoteUpdate.available":"La version {version} est disponible pour cette instance.","header.services.remoteUpdate.error":"Impossible de vérifier les mises à jour de l’instance distante","header.services.remoteUpdate.actions.open":"Mettre à jour","chat.fileAttachment.openInDiagram":"Ouvrir dans la vue diagramme","chat.draftPresets.explore.label":"Explorer le codebase","chat.draftPresets.catchup.label":"Me remettre à niveau","chat.draftPresets.weigh.label":"Comparer mes options","chat.draftPresets.plan.label":"Lancer la planification de fonctionnalité","chat.draftPresets.craftGoal.label":"Créer un Goal","chat.draftPresets.scheduleTask.label":"Planifier une tâche","chat.draftPresets.debug.label":"Déboguer un problème","chat.draftPresets.review.label":"Revoir mes modifications","chat.draftStarters.add":"Ajouter un démarrage","chat.draftStarters.searchPlaceholder":"Rechercher des commandes et skills…","chat.draftStarters.empty":"Rien à ajouter","chat.draftStarters.sectionBuiltIn":"Intégré","chat.draftStarters.sectionCommands":"Commandes","chat.draftStarters.sectionSkills":"Skills","chat.draftStarters.remove":"Retirer","chat.draftStarters.sharedTitle":"Épinglé dans la configuration du dépôt ; à modifier là-bas","chat.draftStarters.share":"Déplacer vers la configuration du dépôt","chat.draftStarters.makePersonal":"Déplacer vers mes réglages","chat.commandAutocomplete.command.handoffReviewDescription":"Créer ou réutiliser une session de revue séparée à partir d’un handoff généré.","chat.commandAutocomplete.command.featurePlanDescription":"Lancer une session guidée et interactive de planification pour une nouvelle fonctionnalité.","chat.commandAutocomplete.command.craftGoalDescription":"Transformer une idée ou une tâche en Goal clair et vérifiable.","chat.commandAutocomplete.command.scheduleTaskDescription":"Définir une tâche planifiée via un dialogue guidé.","chat.chatInput.toast.craftGoalFailed":"Impossible de démarrer la création du Goal","chat.chatInput.toast.scheduleTaskFailed":"Impossible de démarrer la configuration de la tâche planifiée","chat.commandAutocomplete.command.catchUpDescription":"Rétablir le contexte : ce que vous faisiez et où reprendre.","chat.commandAutocomplete.command.debugDescription":"Investigation guidée de la cause racine d’un bug avant de proposer une correction.","chat.commandAutocomplete.command.weighDescription":"Comparer 2 à 3 approches avec compromis et recommandation avant de vous engager.","chat.commandAutocomplete.command.btwDescription":"Posez une question annexe dans une session enfant temporaire sans interrompre cette conversation.","chat.commandAutocomplete.command.forkDescription":"Dupliquer cette conversation à partir de la dernière réponse terminée et continuer là-bas ; le texte après /fork est envoyé à la copie.","chat.commandAutocomplete.command.exploreDescription":"Vous orienter dans ce codebase : tour d’ensemble de l’architecture et des parties principales.","chat.questionCard.submitFailed":"Impossible d’envoyer la réponse","chat.questionCard.dismissFailed":"Impossible d’ignorer la question","chat.questionCard.noLongerPending":"Cette question n’attend plus de réponse.","chat.questionCard.tryAgain":"Veuillez réessayer dans un instant.","chat.messageBody.forkDialog.instructions.label":"Instructions","chat.messageBody.forkDialog.instructions.placeholder":"Ajouter des instructions pour la nouvelle session…","chat.messageBody.forkDialog.createWorktree":"Créer un worktree","planView.tts.readAloud":"Lire le plan à voix haute","planView.tts.stopSpeaking":"Arrêter la lecture","filesView.tts.readAloud":"Lire le fichier à voix haute","filesView.tts.stopSpeaking":"Arrêter la lecture","chat.messageBody.actions.sendReviewFeedback":"Envoyer le retour de revue à l’agent d’implémentation","chat.messageBody.actions.sendImplementationResponse":"Envoyer la réponse d’implémentation à l’agent de revue","chat.chatInput.toast.planFeatureFailed":"Impossible de lancer la planification de fonctionnalité","chat.chatInput.toast.catchUpFailed":"Impossible de rattraper le contexte","chat.chatInput.toast.debugFailed":"Impossible de lancer le débogage","chat.chatInput.toast.weighFailed":"Impossible de comparer les options","chat.chatInput.toast.exploreFailed":"Impossible de lancer le tour","chat.chatInput.reviewCommentsRemove":"Retirer les commentaires de revue","chat.toolPart.showRawJson":"Afficher le JSON brut","chat.toolPart.showFormattedJson":"Afficher le JSON formaté","chat.toolPart.showNavigableJson":"Afficher le JSON navigable","chat.toolPart.openFile":"Ouvrir le fichier","chat.toolPart.openFileAtFirstChange":"Ouvrir le fichier à la première modification","chat.toolPart.openFileDiff":"Ouvrir les différences du fichier","chat.toolPart.copyOutput":"Copier la sortie","chat.toolPart.copiedOutput":"Sortie copiée","chat.toolPart.copyOutputFailed":"Impossible de copier la sortie","desktopHostSwitcher.status.checking":"Vérification","desktopHostSwitcher.status.updateRecommended":"Mise à jour recommandée","desktopHostSwitcher.status.incompatible":"Incompatible","onboarding.remoteConnection.probe.updateRecommendedMessage":"Cette instance utilise une version différente d’OpenChamber. Vous pouvez vous connecter, mais mettez les deux applications à jour si quelque chose ne fonctionne pas.","onboarding.remoteConnection.probe.incompatibleMessage":"Le serveur exécute OpenChamber mais n’est pas compatible avec cette version de l’application. Mettez OpenChamber à jour sur le serveur, puis réessayez.","onboarding.desktopRecovery.remoteIncompatible.title":"Mise à jour du serveur requise","onboarding.desktopRecovery.remoteIncompatible.description":"Le serveur OpenChamber à l’adresse « {host} » n’est pas compatible avec cette version de l’application. Mettez OpenChamber à jour sur le serveur, puis réessayez.","onboarding.desktopRecovery.remoteIncompatible.updateServer":"Mettre à jour le serveur","onboarding.desktopRecovery.remoteIncompatible.updatingServer":"Mise à jour du serveur...","onboarding.desktopRecovery.remoteIncompatible.updatingHint":"Le serveur installe la mise à jour puis redémarre. L’application se connecte dès qu’il est de retour.","onboarding.desktopRecovery.remoteIncompatible.updateRefused":"Le serveur n’a pas pu se mettre à jour lui-même.","onboarding.desktopRecovery.remoteIncompatible.updateAuth":"Le serveur a refusé la connexion de cette application, il ne peut donc pas être mis à jour d’ici.","onboarding.desktopRecovery.remoteIncompatible.updateTimeout":"Le serveur n’est pas encore revenu avec la nouvelle version. Vérifiez-le, puis réessayez la connexion.","onboarding.desktopRecovery.remoteIncompatible.manualUpdate":"Pour le mettre à jour manuellement, exécutez ceci sur le serveur, puis redémarrez OpenChamber sur celui-ci :","vscodeLayout.actions.archiveAllAria":"Archiver toutes les sessions","vscodeLayout.actions.archiveAllConfirm":"Tout archiver","vscodeLayout.actions.archiveAllSuccess":"{count} session(s) archivée(s)","vscodeLayout.actions.archiveAllError":"Impossible d’archiver {count} session(s)","vscodeLayout.actions.cancel":"Annuler","chat.workStatus.ariaLabel":"État du travail","chat.workStatus.context.label":"Contexte","chat.workStatus.cost.breakdown":"Session {session} · Sous-agents {subagents}","chat.workStatus.git.changedFileSingle":"{count} fichier modifié","chat.workStatus.git.changedFilePlural":"{count} fichiers modifiés","chat.workStatus.pr.untitled":"Pull request sans titre","chat.workStatus.mr.untitled":"Merge request sans titre","chat.workStatus.pr.draft":"Brouillon","chat.workStatus.pr.checks":"Vérifications","chat.workStatus.pr.checksFailed":"{count} en échec","chat.workStatus.pr.checksPending":"{count} en cours","chat.workStatus.pr.checksPassed":"{count} réussies","chat.workStatus.attention.merge":"Fusion en cours","chat.workStatus.attention.rebase":"Rebase en cours","chat.workStatus.attention.cherryPick":"Cherry-pick en cours","chat.workStatus.attention.revert":"Revert en cours","chat.workStatus.attention.bisect":"Bisect en cours","chat.workStatus.subagent.done":"Terminé","chat.workStatus.subagent.failed":"Échec","chat.workStatus.subagent.untitled":"Sous-agent","chat.workStatus.mcp.toggle":"Basculer {name}","chat.workStatus.mcp.needsAuth":"Se connecter","chat.workStatus.mcp.failed":"Échec","chat.workStatus.pinned.unavailable":"Message épinglé","chat.workStatus.section.session":"Session","chat.workStatus.section.project":"Projet","chat.workStatus.section.subagents":"Sous-agents","chat.workStatus.section.mcp":"MCP","chat.workStatus.section.pinned":"Messages épinglés","chat.workStatus.section.tasks":"Tâches","chat.workStatus.subagent.working":"travaille","chat.workStatus.subagent.needsPermission":"demande une autorisation","chat.workStatus.subagent.askedQuestion":"a posé une question","chat.workStatus.section.contextBreakdown":"Sources de contexte","chat.workStatus.breakdown.skills":"Compétences","chat.workStatus.breakdown.pinnedNote":"note","chat.workStatus.breakdown.unpin":"Détacher du contexte","chat.workStatus.breakdown.pinnedPlan":"plan","chat.workStatus.breakdown.memory":"Mémoire de l’agent","chat.workStatus.breakdown.pinnedKnowledgeSingle":"{count} épinglé","chat.workStatus.breakdown.pinnedKnowledgePlural":"{count} épinglés","chat.workStatus.breakdown.mcp":"Serveurs MCP","chat.workStatus.action.openChanges":"Ouvrir les modifications","chat.workStatus.action.openGit":"Ouvrir le panneau Git","chat.workStatus.action.openPr":"Ouvrir la pull request","chat.workStatus.action.openMr":"Ouvrir la merge request","chat.workStatus.action.openSubagent":"Ouvrir {name}","chat.workStatus.section.usage":"Utilisation","chat.workStatus.section.telemetry":"Stats du tour","chat.workStatus.telemetry.responseSpeed":"Réponse","chat.workStatus.telemetry.responseSpeedDescription":"La vitesse à laquelle le texte final est arrivé. Sans attente initiale, raisonnement ni appels précédents aux outils. Une estimation basée sur les horodatages du texte, pas une mesure du fournisseur.","chat.workStatus.telemetry.speed":"Requête","chat.workStatus.telemetry.elapsed":"Temps écoulé","chat.workStatus.telemetry.elapsedDescription":"Temps réel entre le premier message de l’utilisateur et la réponse finale de l’assistant. Inclut l’attente du modèle, l’exécution des outils, la compaction et les autres intervalles.","chat.workStatus.telemetry.llmDuration":"Modèle","chat.workStatus.telemetry.llmDurationDescription":"Durée de toutes les étapes du modèle, attente des réponses comprise. Le temps des outils est soustrait. Ce ne sont pas uniquement les secondes de génération du texte.","chat.workStatus.telemetry.toolDuration":"Outils","chat.workStatus.telemetry.toolDurationDescription":"Temps passé à exécuter les outils, y compris les appels échoués. Les outils exécutés en parallèle ne sont comptés qu’une fois.","chat.workStatus.telemetry.ttft":"TTFT moyen","chat.workStatus.telemetry.ttftDescription":"Attente moyenne avant le premier texte ou raisonnement de chaque étape du modèle. Masquée si une étape n’a pas de début après sa création, ce qui arrive souvent pour les étapes limitées aux outils et pour les parties horodatées à leur création.","chat.workStatus.telemetry.steps":"Étapes","chat.workStatus.telemetry.stepsDescription":"Nombre d’appels au modèle pour ce prompt. Lire les résultats d’un outil et décider de la suite demande généralement une nouvelle étape.","chat.workStatus.telemetry.tokens":"Jetons","chat.workStatus.telemetry.tokens.inOut":"{input} ↑ · {output} ↓","chat.workStatus.telemetry.speedDescription":"Jetons générés à toutes les étapes, raisonnement compris, divisés par la durée hors exécution des outils. L’attente du modèle compte, donc de nombreux appels courts peuvent réduire ce chiffre.","chat.workStatus.telemetry.tokensDescription":"↑ Entrée hors cache : {input}. ↓ Jetons générés : {output} pour le texte et les appels aux outils, plus {reasoning} pour le raisonnement. Totaux de toutes les étapes de ce prompt.","chat.workStatus.telemetry.cacheHit":"Cache","chat.workStatus.telemetry.cacheHitDescription":"Part des jetons d’entrée réutilisés depuis le cache du prompt, sur toutes les étapes. Réutiliser le contexte peut réduire le coût et l’attente, mais ce n’est pas un indice de vitesse.","chat.workStatus.telemetry.cost":"Coût","chat.workStatus.telemetry.costDescription":"Coût indiqué par le fournisseur pour toutes les étapes de ce prompt, en dollars américains. Les sessions séparées des sous-agents sont exclues. Zéro peut signifier un modèle gratuit ou un fournisseur sans indication de coût.","chat.workStatus.goal.open":"Gérer l’objectif","chat.workStatus.goal.pause":"Mettre en pause","chat.workStatus.goal.resume":"Reprendre","chat.workStatus.goal.updateFailed":"Impossible de mettre à jour l’objectif","chat.workStatus.pinned.unpin":"Détacher le message","chat.workStatus.pinned.reveal":"Aller au message","chat.workStatus.pinned.unpinFailed":"Impossible de détacher le message","chat.workStatus.action.openContext":"Ouvrir le panneau de contexte","chat.workStatus.section.linkedIssues":"Liés","chat.workStatus.linkedIssues.open":"Ouvrir #{number} sur GitHub","chat.workStatus.linkedIssues.openGitLab":"Ouvrir {reference} sur GitLab","chat.workStatus.linkedIssues.unlink":"Retirer le lien","chat.workStatus.linkedIssues.unlinkFailed":"Impossible de retirer le lien","chat.workStatus.linkedIssues.link":"Lier à la session","chat.workStatus.linkedIssues.linkFailed":"Impossible de lier","chat.workStatus.breakdown.issueCountSingle":"{count} ticket","chat.workStatus.breakdown.issueCountPlural":"{count} tickets","chat.workStatus.breakdown.prCountSingle":"{count} PR","chat.workStatus.breakdown.mrCountSingle":"{count} MR","chat.workStatus.breakdown.prCountPlural":"{count} PR","chat.workStatus.breakdown.mrCountPlural":"{count} MR","chat.workStatus.breakdown.skillCountSingle":"{count} compétence","chat.workStatus.breakdown.skillCountPlural":"{count} compétences","chat.workStatus.breakdown.mcpCountSingle":"{count} MCP","chat.workStatus.breakdown.mcpCountPlural":"{count} MCP","chat.workStatus.sections.open":"Choisir les sections","chat.workStatus.sections.dialogTitle":"Sections du panneau","chat.workStatus.sections.reorder":"Faites glisser {label} pour réordonner","chat.workStatus.sections.dragInstructions":"Appuyez sur Espace pour saisir une section, déplacez-la avec les flèches et appuyez sur Espace pour la déposer. Appuyez sur Échap pour annuler.","chat.workStatus.sections.position":"{label}, position {position} sur {count}.","chat.workStatus.sections.dragCancelled":"Réorganisation annulée.","chat.workStatus.sections.dialogDescription":"Choisis ce qu'affiche le panneau d'état. Les sections masquées conservent leurs données, elles sont seulement absentes du panneau.","chat.workStatus.sections.allHidden":"Aucune section sélectionnée","chat.workStatus.sections.showAll":"Tout afficher","chat.workStatus.sections.noneWarning":"Le panneau apparaîtra vide.","header.workStatusPanel.toggleAria":"Basculer le panneau d'état","header.workStatusPanel.hide":"Masquer l'état du travail","header.workStatusPanel.show":"Afficher l'état du travail","chat.workStatus.mcp.authorizeOpenFailed":"Impossible d'ouvrir la page d'autorisation","chat.workStatus.mcp.authorizeFailed":"Échec de l'autorisation","mcpDropdown.toast.authorizeOpenFailed":"Impossible d'ouvrir la page d'autorisation","mcpDropdown.toast.authorizeFailed":"Échec de l'autorisation","header.services.tooltip.currentInstance":"Instance actuelle : {current} ({toggle})","header.workStatusPanel.showOverlay":"Afficher l'état par-dessus le chat","settings.mcp.page.connection.title":"Comment le joindre","settings.mcp.page.connection.description":"Colle la commande qui le démarre, ou le lien vers un serveur hébergé.","settings.mcp.page.registration.title":"Ce serveur exige sa propre app","settings.mcp.page.registration.description":"Il ne fournit pas d’identifiants automatiquement. Crée une app dans les réglages du service, colle ses informations ici, puis connecte-toi.","settings.mcp.page.registration.callbackLabel":"Donne cette adresse au service","settings.mcp.page.registration.clientId":"ID de l’app","settings.mcp.page.registration.clientSecret":"Secret de l’app","settings.mcp.page.registration.afterSaving":"Enregistre, puis appuie sur Autoriser.","settings.mcp.page.toast.copiedCallbackUrl":"Adresse copiée","settings.mcp.page.toast.clipboardWriteFailed":"Impossible de copier dans le presse-papiers","settings.mcp.page.scope.everywhere":"Disponible dans tous les projets","settings.mcp.page.scope.thisProject":"Seulement dans ce projet","settings.mcp.page.env.description":"Valeurs dont le serveur a besoin, par exemple une clé d’API.","settings.mcp.page.connection.kindCommand":"Commande","settings.mcp.page.connection.kindLink":"Lien","settings.mcp.page.connection.hintCommand":"S’exécute sur cette machine. Collez une commande entière : elle est découpée en un argument par ligne.","settings.mcp.page.connection.hintLink":"Se connecte à un serveur hébergé par quelqu’un d’autre. Collez son adresse https.","chat.formCard.inputNeeded":"Réponse requise","chat.formCard.fromSubagent":"d’un sous-agent","chat.formCard.required":"Obligatoire","chat.formCard.openLink":"Ouvrir le lien","chat.formCard.yes":"Oui","chat.formCard.other":"Autre","chat.formCard.yourAnswer":"Votre réponse","chat.formCard.submit":"Envoyer","chat.formCard.cancel":"Annuler","chat.formCard.missingRequired":"Remplissez d’abord les champs obligatoires.","chat.formCard.submitFailed":"Impossible d’envoyer la réponse","chat.formCard.cancelFailed":"Impossible d’annuler la demande","chat.formCard.tryAgain":"Réessayez.","chat.formDock.progress":"{current} sur {total}","chat.formDock.waiting":"{count} de plus en attente","chat.formDock.back":"Retour","chat.formDock.expandAria":"Développer la question","chat.formDock.collapseAria":"Réduire la question","chat.formDock.stepAria":"Question {index} : {title}","chat.formDock.linkInfo":"Ouvrez le lien, puis continuez.","chat.permissionCard.title":"Autorisation requise","chat.permissionCard.summary.externalDirectory":"Accéder à des fichiers hors du projet","chat.permissionCard.summary.read":"Lire un fichier","chat.permissionCard.summary.edit":"Modifier des fichiers","chat.permissionCard.summary.shell":"Exécuter une commande","chat.permissionCard.summary.glob":"Trouver des fichiers","chat.permissionCard.summary.grep":"Rechercher dans le contenu des fichiers","chat.permissionCard.summary.webfetch":"Ouvrir une page web","chat.permissionCard.summary.websearch":"Rechercher sur le web","chat.permissionCard.summary.skill":"Charger un skill","chat.permissionCard.summary.tool":"Utiliser {tool}","chat.permissionCard.summary.inPath":"dans {path}","chat.permissionCard.showDetails":"Afficher les détails","chat.permissionDock.expandAria":"Déplier la demande d’autorisation","chat.permissionDock.collapseAria":"Replier la demande d’autorisation","chat.permissionDock.stepAria":"Demande {index} : {tool}","chat.permissionCard.allowOnce":"Autoriser une fois","chat.permissionCard.alwaysAllow":"Toujours autoriser","chat.permissionCard.alwaysAllowPatterns":"Toujours : {patterns}","chat.permissionCard.deny":"Refuser","chat.permissionCard.replaceAll":"Remplace toutes les occurrences","chat.compaction.running":"Compaction de la conversation","chat.compaction.completed":"Conversation compactée","chat.compaction.failed":"La compaction a échoué","chat.compaction.showSummary":"Afficher le résumé","chat.compaction.hideSummary":"Masquer le résumé","chat.dispatchedSession.completed":"Session terminée : {title}","chat.dispatchedSession.failed":"Échec de la session : {title}","chat.dispatchedSession.cancelled":"Session arrêtée : {title}","chat.dispatchedSession.completedUntitled":"Session terminée","chat.dispatchedSession.failedUntitled":"Échec de la session","chat.dispatchedSession.cancelledUntitled":"Session arrêtée","chat.dispatchedSession.showAnswer":"Afficher la réponse","chat.dispatchedSession.hideAnswer":"Masquer la réponse","chat.dispatchedSession.open":"Ouvrir la session","chat.revertPopover.staged":"Annulés : {count}","chat.revertPopover.clear":"Conserver","chat.revertPopover.commit":"Supprimer","chat.workStatus.mcp.needsAuthHint":"Connectez-vous à ce serveur MCP depuis Paramètres → MCP.","chat.messageBody.actions.askOtherModels":"Demander à d'autres modèles","chat.modelControls.runInParallel":"Exécuter sur plusieurs modèles","chat.parallel.defaultTitle":"Exécution en parallèle","chat.parallel.exit":"Quitter le mode parallèle","chat.parallel.fuse.judge":"Fusion avec {model}","chat.parallel.fuse.off":"Fusion : désactivée","chat.parallel.isolation.shared":"Dossier partagé","chat.parallel.isolation.worktrees":"Worktrees séparés","chat.parallel.models.add":"Ajouter un modèle","chat.parallel.models.decrement":"Exécuter {model} une fois de moins","chat.parallel.models.increment":"Exécuter {model} une fois de plus","chat.parallel.runAria":"Lancer les exécutions en parallèle ({count})","chat.parallel.setup.dialogDescription":"Les commandes s'exécutent dans chaque nouveau worktree avant son prompt, une par ligne.","chat.parallel.toast.failed":"Impossible de lancer l'exécution en parallèle.","chat.parallel.toast.incomplete":"Chaque variante de prompt a besoin d'un texte et d'au moins un modèle.","chat.parallel.variant.removeAria":"Supprimer la variante {variant}","chat.parallel.variant.runsPlural":"{count} exécutions","chat.parallel.variant.runsSingle":"{count} exécution","chat.parallel.variant.tabsAria":"Variantes de prompt","multirun.ask.checking":"Vérification de cette réponse…","multirun.ask.description":"Ce chat devient la première exécution. Chaque modèle reçoit le même premier prompt dans son propre worktree.","multirun.ask.failed":"Impossible de demander à d'autres modèles.","multirun.ask.notFirstTurn":"Pour l'instant, seule la première réponse d'un chat peut être comparée.","multirun.ask.startPlural":"Lancer {count} de plus","multirun.ask.startSingle":"Lancer {count} de plus","multirun.ask.title":"Demander à d'autres modèles","multirun.overview.archive.action":"Archiver l'exécution","multirun.overview.archive.failed":"Certaines exécutions n'ont pas pu être archivées.","multirun.overview.ask.failed":"Impossible d'ajouter le modèle à cette exécution.","multirun.overview.ask.working":"Ajout…","multirun.overview.bar.fuse":"Fusionner les résultats","multirun.overview.bar.hint":"Fusionnez les réponses en un seul résultat","multirun.overview.cancel":"Annuler","multirun.overview.card.changesUnavailable":"Modifications indisponibles","multirun.overview.card.diff":"Diff","multirun.overview.card.filesPlural":"{count} fichiers","multirun.overview.card.filesSingle":"{count} fichier","multirun.overview.card.noChanges":"Aucune modification de fichier","multirun.overview.card.noReply":"Pas encore de réponse","multirun.overview.card.openChat":"Ouvrir le chat","multirun.overview.card.replyUnavailable":"Réponse indisponible","multirun.overview.card.selectAria":"Sélectionner {name}","multirun.overview.card.working":"En cours…","multirun.overview.fuse.modeAnswers":"Combine les réponses finales","multirun.overview.fuse.modeCode":"Travaille dans son propre worktree et lit chaque exécution avec git","multirun.overview.fuse.selected":"{count} sur {total} sélectionnées","multirun.overview.fuse.with":"Fusion avec","multirun.overview.fusedResult":"Résultat fusionné","multirun.overview.headerTitle":"Exécuter en parallèle","multirun.overview.keep.confirm":"Garder et nettoyer","multirun.overview.keep.confirmPlural":"Garder {name} ? Les {count} autres exécutions sont archivées et leurs worktrees supprimés. Leur travail reste récupérable.","multirun.overview.keep.confirmSingle":"Garder {name} ? L'autre exécution est archivée et son worktree supprimé. Son travail reste récupérable.","multirun.overview.keep.done":"{name} conservé","multirun.overview.keep.failed":"Impossible de nettoyer les autres exécutions.","multirun.overview.keep.partialPlural":"{name} conservé. {count} exécutions n'ont pas pu être nettoyées et sont restées telles quelles.","multirun.overview.keep.partialSingle":"{name} conservé. Une exécution n'a pas pu être nettoyée et est restée telle quelle.","multirun.overview.keep.working":"Nettoyage…","multirun.overview.meta.autoFusion":"Fusion avec {model} quand toutes seront terminées","multirun.overview.meta.progress":"{done} sur {total} terminées","multirun.overview.meta.runsPlural":"{count} exécutions","multirun.overview.meta.runsSingle":"{count} exécution","multirun.overview.meta.sharedDirectory":"Dossier partagé","multirun.overview.meta.variants":"{count} variantes de prompt","multirun.overview.meta.worktrees":"Worktrees séparés","multirun.overview.missing":"Cette exécution n'est plus disponible.","multirun.overview.rename.aria":"Renommer l'exécution","multirun.overview.rename.failed":"Certaines exécutions ont gardé l'ancien nom.","sessions.sidebar.run.collapse":"Masquer les exécutions","sessions.sidebar.run.expand":"Afficher les exécutions","sessions.sidebar.run.laneCountPlural":"{count} exécutions","sessions.sidebar.run.laneCountSingle":"{count} exécution","sessions.sidebar.run.openOverviewAria":"Ouvrir l'exécution en parallèle {title}","sessions.sidebar.session.menu.openRunOverview":"Ouvrir l'aperçu de l'exécution","chat.parallel.models.effortAria":"Effort de réflexion : {effort}","chat.parallel.settings.title":"Réglages du lancement","chat.parallel.settings.whereTitle":"Où travaillent les exécutions","chat.parallel.settings.setupTitle":"Commandes de préparation","chat.parallel.settings.fusionTitle":"Fusion","chat.parallel.settings.variantsTitle":"Variantes de prompt","chat.parallel.settings.variantsDescription":"Envoyez des prompts différents, par exemple pour comparer des skills ou des formulations. Chaque variante a son propre onglet.","chat.parallel.settings.addVariant":"Ajouter une variante de prompt","chat.parallel.settings.done":"Terminé","chat.parallel.settings.openAria":"Réglages du lancement : {summary}","multirun.overview.card.keep":"Garder celui-ci","multirun.overview.addModel.action":"Ajouter un modèle","multirun.overview.addModel.hint":"Le même prompt sur un modèle de plus dans cette exécution","chat.parallel.settings.whereShared":"Dossier du projet","chat.parallel.settings.whereSharedHint":"Toutes les exécutions travaillent dans votre copie. Idéal pour les questions et la recherche.","chat.parallel.settings.whereWorktrees":"Worktrees séparés","chat.parallel.settings.whereWorktreesHint":"Chaque exécution a sa propre branche, les modifications de code ne se heurtent jamais. Gardez la meilleure.","chat.parallel.settings.baseBranchTitle":"Branche de base","chat.parallel.settings.fusionOff":"Désactivée","chat.parallel.settings.fusionOffHint":"Comparez les résultats vous-même.","chat.parallel.settings.fusionAuto":"Automatique","chat.parallel.settings.fusionAutoHint":"Fusionner les résultats dès que toutes les exécutions sont terminées.","chat.parallel.settings.judgeTitle":"Modèle de fusion","multirun.overview.card.detach":"En faire une session séparée","multirun.overview.card.detachHint":"Quitter cette exécution et continuer comme une session normale","multirun.overview.card.detachDone":"{name} est maintenant une session séparée","multirun.overview.card.detachFailed":"Impossible de sortir cette session de l'exécution.","multirun.overview.card.archive":"Archiver cette session","multirun.overview.addModel.confirm":"Lancer","multirun.overview.status.permission":"Attend votre autorisation","multirun.overview.status.question":"Attend votre réponse","multirun.overview.status.working":"En cours","multirun.overview.status.failed":"Échec","multirun.overview.status.stopped":"Arrêtée","multirun.overview.status.notStarted":"Pas démarrée","multirun.overview.status.noReply":"Terminée sans réponse","multirun.overview.status.finished":"Terminée","multirun.overview.status.count.permission":"autorisation requise : {count}","multirun.overview.status.count.question":"question posée : {count}","multirun.overview.status.count.working":"en cours : {count}","multirun.overview.status.count.failed":"en échec : {count}","multirun.overview.status.count.stopped":"arrêtées : {count}","multirun.overview.status.count.notStarted":"pas démarrées : {count}","multirun.overview.status.count.noReply":"sans réponse : {count}","multirun.overview.status.count.finished":"terminées : {count}","multirun.overview.card.body.permission":"Attend votre autorisation pour continuer. Ouvrez le chat pour répondre.","multirun.overview.card.body.question":"Vous a posé une question. Ouvrez le chat pour répondre.","multirun.overview.card.body.failed":"Échec. Les détails sont dans le chat.","multirun.overview.card.body.notStarted":"N'a pas encore démarré.","multirun.overview.card.body.stopped":"Arrêtée avant de répondre.","multirun.overview.bar.waiting":"Exécutions en attente de vous : {count}. L'exécution ne se termine pas tant que vous n'avez pas répondu.","multirun.overview.prompt.expand":"Tout afficher","multirun.overview.prompt.collapse":"Réduire","gitView.changes.revertFileDialogTitle":"Annuler les modifications du fichier ?","gitView.changes.revertFileDescription":"Vos modifications locales dans {path} seront perdues.","gitView.changes.revertFileConfirm":"Annuler les modifications","diffView.hunk.discardDialogTitle":"Abandonner ce bloc ?","diffView.hunk.discardDescription":"Ces modifications locales dans {path} seront perdues.","sessions.sidebar.project.actions.archiveAll":"Archiver toutes les sessions","sessions.sidebar.project.archiveAll.title":"Archiver les sessions de {project} ?","sessions.sidebar.project.archiveAll.descriptionSingle":"{count} session passe dans les archives. Les sessions épinglées, en cours d’exécution et « En cours » restent.","sessions.sidebar.project.archiveAll.descriptionPlural":"{count} sessions passent dans les archives. Les sessions épinglées, en cours d’exécution et « En cours » restent.","sessions.sidebar.project.archiveAll.nothing":"Rien à archiver : chaque session ici est épinglée, en cours d’exécution ou « En cours ».","contextPanel.browser.devServers.hide":"Masquer le port {port} de cette liste","contextPanel.browser.devServers.showHiddenSingle":"Afficher {count} port masqué","contextPanel.browser.devServers.showHiddenPlural":"Afficher {count} ports masqués","sidebarFilesTree.menu.openInDefaultApp":"Ouvrir avec l’app par défaut","sessions.sidebar.header.displayMode.showChats":"Afficher la section des chats","sessions.scheduledTasks.editor.useDefaults.label":"Utiliser les valeurs par défaut des sessions","sessions.scheduledTasks.editor.useDefaults.hint":"Chaque exécution prend, au démarrage, le modèle, le niveau de réflexion et l’agent par défaut de Réglages → Sessions (ou ceux du projet).","sessions.scheduledTasks.dialog.usesDefaults":"Valeurs par défaut des sessions","sessions.moveChatToProject.menu":"Déplacer vers un projet…","sessions.moveChatToProject.hint":"Poursuivre cette conversation dans un projet","sessions.moveChatToProject.title":"Déplacer le chat vers un projet","sessions.moveChatToProject.description":"La conversation se poursuit dans le dossier du projet. Les fichiers créés par le chat restent où ils sont.","sessions.moveChatToProject.success":"Chat déplacé vers le projet","sessions.moveChatToProject.failed":"Impossible de déplacer le chat","chat.worktreeSetup.running":"Préparation du worktree : exécution des commandes de configuration du projet…","desktopHostSwitcher.startup.fellBackToLocal":"Sa connexion ne s’est pas ouverte, OpenChamber a donc démarré sur Local. Connectez-la depuis le sélecteur d’instances dès qu’elle est joignable.","chat.chatInput.contextPreview.saveEdit":"Enregistrer le commentaire","chat.chatInput.contextPreview.cancelEdit":"Annuler la modification","sessions.scheduledTasks.dialog.actions.openSession":"Ouvrir la session","sessions.scheduledTasks.dialog.actions.openSessionAria":"Ouvrir la session de la dernière exécution de {taskName}","sessions.scheduledTasks.dialog.toast.alreadyRunningSince":"Cette tâche a déjà une exécution en cours, lancée à {time}","sessions.scheduledTasks.dialog.toast.alreadyRunning":"Cette tâche a déjà une exécution en cours","sessions.scheduledTasks.dialog.toast.alreadyQueued":"Cette tâche attend déjà dans la file et s’exécutera dès qu’une place se libère","chat.modelControls.agentFavoriteAdd":"Ajouter aux favoris. Avec des favoris, Tab ne passe que par eux"};export{I as dict};
|