@jonsoc/app 1.1.34

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.
Files changed (139) hide show
  1. package/AGENTS.md +30 -0
  2. package/README.md +51 -0
  3. package/bunfig.toml +2 -0
  4. package/e2e/context.spec.ts +45 -0
  5. package/e2e/file-open.spec.ts +23 -0
  6. package/e2e/file-viewer.spec.ts +35 -0
  7. package/e2e/fixtures.ts +40 -0
  8. package/e2e/home.spec.ts +21 -0
  9. package/e2e/model-picker.spec.ts +43 -0
  10. package/e2e/navigation.spec.ts +9 -0
  11. package/e2e/palette.spec.ts +15 -0
  12. package/e2e/prompt-mention.spec.ts +26 -0
  13. package/e2e/prompt-slash-open.spec.ts +22 -0
  14. package/e2e/prompt.spec.ts +62 -0
  15. package/e2e/session.spec.ts +21 -0
  16. package/e2e/settings.spec.ts +44 -0
  17. package/e2e/sidebar.spec.ts +21 -0
  18. package/e2e/terminal-init.spec.ts +25 -0
  19. package/e2e/terminal.spec.ts +16 -0
  20. package/e2e/tsconfig.json +8 -0
  21. package/e2e/utils.ts +38 -0
  22. package/happydom.ts +75 -0
  23. package/index.html +23 -0
  24. package/package.json +72 -0
  25. package/playwright.config.ts +43 -0
  26. package/public/_headers +17 -0
  27. package/public/apple-touch-icon-v3.png +1 -0
  28. package/public/apple-touch-icon.png +1 -0
  29. package/public/favicon-96x96-v3.png +1 -0
  30. package/public/favicon-96x96.png +1 -0
  31. package/public/favicon-v3.ico +1 -0
  32. package/public/favicon-v3.svg +1 -0
  33. package/public/favicon.ico +1 -0
  34. package/public/favicon.svg +1 -0
  35. package/public/oc-theme-preload.js +28 -0
  36. package/public/site.webmanifest +1 -0
  37. package/public/social-share-zen.png +1 -0
  38. package/public/social-share.png +1 -0
  39. package/public/web-app-manifest-192x192.png +1 -0
  40. package/public/web-app-manifest-512x512.png +1 -0
  41. package/script/e2e-local.ts +143 -0
  42. package/src/addons/serialize.test.ts +319 -0
  43. package/src/addons/serialize.ts +591 -0
  44. package/src/app.tsx +150 -0
  45. package/src/components/dialog-connect-provider.tsx +428 -0
  46. package/src/components/dialog-edit-project.tsx +259 -0
  47. package/src/components/dialog-fork.tsx +104 -0
  48. package/src/components/dialog-manage-models.tsx +59 -0
  49. package/src/components/dialog-select-directory.tsx +208 -0
  50. package/src/components/dialog-select-file.tsx +196 -0
  51. package/src/components/dialog-select-mcp.tsx +96 -0
  52. package/src/components/dialog-select-model-unpaid.tsx +130 -0
  53. package/src/components/dialog-select-model.tsx +162 -0
  54. package/src/components/dialog-select-provider.tsx +70 -0
  55. package/src/components/dialog-select-server.tsx +249 -0
  56. package/src/components/dialog-settings.tsx +112 -0
  57. package/src/components/file-tree.tsx +112 -0
  58. package/src/components/link.tsx +17 -0
  59. package/src/components/model-tooltip.tsx +91 -0
  60. package/src/components/prompt-input.tsx +2076 -0
  61. package/src/components/session/index.ts +5 -0
  62. package/src/components/session/session-context-tab.tsx +428 -0
  63. package/src/components/session/session-header.tsx +343 -0
  64. package/src/components/session/session-new-view.tsx +93 -0
  65. package/src/components/session/session-sortable-tab.tsx +56 -0
  66. package/src/components/session/session-sortable-terminal-tab.tsx +187 -0
  67. package/src/components/session-context-usage.tsx +113 -0
  68. package/src/components/session-lsp-indicator.tsx +42 -0
  69. package/src/components/session-mcp-indicator.tsx +34 -0
  70. package/src/components/settings-agents.tsx +15 -0
  71. package/src/components/settings-commands.tsx +15 -0
  72. package/src/components/settings-general.tsx +306 -0
  73. package/src/components/settings-keybinds.tsx +437 -0
  74. package/src/components/settings-mcp.tsx +15 -0
  75. package/src/components/settings-models.tsx +15 -0
  76. package/src/components/settings-permissions.tsx +234 -0
  77. package/src/components/settings-providers.tsx +15 -0
  78. package/src/components/terminal.tsx +315 -0
  79. package/src/components/titlebar.tsx +156 -0
  80. package/src/context/command.tsx +308 -0
  81. package/src/context/comments.tsx +140 -0
  82. package/src/context/file.tsx +409 -0
  83. package/src/context/global-sdk.tsx +106 -0
  84. package/src/context/global-sync.tsx +898 -0
  85. package/src/context/language.tsx +161 -0
  86. package/src/context/layout-scroll.test.ts +73 -0
  87. package/src/context/layout-scroll.ts +118 -0
  88. package/src/context/layout.tsx +648 -0
  89. package/src/context/local.tsx +578 -0
  90. package/src/context/notification.tsx +173 -0
  91. package/src/context/permission.tsx +167 -0
  92. package/src/context/platform.tsx +59 -0
  93. package/src/context/prompt.tsx +245 -0
  94. package/src/context/sdk.tsx +48 -0
  95. package/src/context/server.tsx +214 -0
  96. package/src/context/settings.tsx +166 -0
  97. package/src/context/sync.tsx +320 -0
  98. package/src/context/terminal.tsx +267 -0
  99. package/src/custom-elements.d.ts +17 -0
  100. package/src/entry.tsx +76 -0
  101. package/src/env.d.ts +8 -0
  102. package/src/hooks/use-providers.ts +31 -0
  103. package/src/i18n/ar.ts +656 -0
  104. package/src/i18n/br.ts +667 -0
  105. package/src/i18n/da.ts +582 -0
  106. package/src/i18n/de.ts +591 -0
  107. package/src/i18n/en.ts +665 -0
  108. package/src/i18n/es.ts +585 -0
  109. package/src/i18n/fr.ts +592 -0
  110. package/src/i18n/ja.ts +579 -0
  111. package/src/i18n/ko.ts +580 -0
  112. package/src/i18n/no.ts +602 -0
  113. package/src/i18n/pl.ts +661 -0
  114. package/src/i18n/ru.ts +664 -0
  115. package/src/i18n/zh.ts +574 -0
  116. package/src/i18n/zht.ts +570 -0
  117. package/src/index.css +57 -0
  118. package/src/index.ts +2 -0
  119. package/src/pages/directory-layout.tsx +57 -0
  120. package/src/pages/error.tsx +290 -0
  121. package/src/pages/home.tsx +125 -0
  122. package/src/pages/layout.tsx +2599 -0
  123. package/src/pages/session.tsx +2505 -0
  124. package/src/sst-env.d.ts +10 -0
  125. package/src/utils/dom.ts +51 -0
  126. package/src/utils/id.ts +99 -0
  127. package/src/utils/index.ts +1 -0
  128. package/src/utils/perf.ts +135 -0
  129. package/src/utils/persist.ts +377 -0
  130. package/src/utils/prompt.ts +203 -0
  131. package/src/utils/same.ts +6 -0
  132. package/src/utils/solid-dnd.tsx +55 -0
  133. package/src/utils/sound.ts +110 -0
  134. package/src/utils/speech.ts +302 -0
  135. package/src/utils/worktree.ts +58 -0
  136. package/sst-env.d.ts +9 -0
  137. package/tsconfig.json +26 -0
  138. package/vite.config.ts +15 -0
  139. package/vite.js +26 -0
package/src/i18n/fr.ts ADDED
@@ -0,0 +1,592 @@
1
+ export const dict = {
2
+ "command.category.suggested": "Suggéré",
3
+ "command.category.view": "Affichage",
4
+ "command.category.project": "Projet",
5
+ "command.category.provider": "Fournisseur",
6
+ "command.category.server": "Serveur",
7
+ "command.category.session": "Session",
8
+ "command.category.theme": "Thème",
9
+ "command.category.language": "Langue",
10
+ "command.category.file": "Fichier",
11
+ "command.category.terminal": "Terminal",
12
+ "command.category.model": "Modèle",
13
+ "command.category.mcp": "MCP",
14
+ "command.category.agent": "Agent",
15
+ "command.category.permissions": "Permissions",
16
+ "command.category.workspace": "Espace de travail",
17
+
18
+ "theme.scheme.system": "Système",
19
+ "theme.scheme.light": "Clair",
20
+ "theme.scheme.dark": "Sombre",
21
+
22
+ "command.sidebar.toggle": "Basculer la barre latérale",
23
+ "command.project.open": "Ouvrir un projet",
24
+ "command.provider.connect": "Connecter un fournisseur",
25
+ "command.server.switch": "Changer de serveur",
26
+ "command.session.previous": "Session précédente",
27
+ "command.session.next": "Session suivante",
28
+ "command.session.archive": "Archiver la session",
29
+
30
+ "command.palette": "Palette de commandes",
31
+
32
+ "command.theme.cycle": "Changer de thème",
33
+ "command.theme.set": "Utiliser le thème : {{theme}}",
34
+ "command.theme.scheme.cycle": "Changer de schéma de couleurs",
35
+ "command.theme.scheme.set": "Utiliser le schéma de couleurs : {{scheme}}",
36
+
37
+ "command.language.cycle": "Changer de langue",
38
+ "command.language.set": "Utiliser la langue : {{language}}",
39
+
40
+ "command.session.new": "Nouvelle session",
41
+ "command.file.open": "Ouvrir un fichier",
42
+ "command.file.open.description": "Rechercher des fichiers et des commandes",
43
+ "command.terminal.toggle": "Basculer le terminal",
44
+ "command.review.toggle": "Basculer la revue",
45
+ "command.terminal.new": "Nouveau terminal",
46
+ "command.terminal.new.description": "Créer un nouvel onglet de terminal",
47
+ "command.steps.toggle": "Basculer les étapes",
48
+ "command.steps.toggle.description": "Afficher ou masquer les étapes du message actuel",
49
+ "command.message.previous": "Message précédent",
50
+ "command.message.previous.description": "Aller au message utilisateur précédent",
51
+ "command.message.next": "Message suivant",
52
+ "command.message.next.description": "Aller au message utilisateur suivant",
53
+ "command.model.choose": "Choisir le modèle",
54
+ "command.model.choose.description": "Sélectionner un modèle différent",
55
+ "command.mcp.toggle": "Basculer MCP",
56
+ "command.mcp.toggle.description": "Basculer les MCPs",
57
+ "command.agent.cycle": "Changer d'agent",
58
+ "command.agent.cycle.description": "Passer à l'agent suivant",
59
+ "command.agent.cycle.reverse": "Changer d'agent (inverse)",
60
+ "command.agent.cycle.reverse.description": "Passer à l'agent précédent",
61
+ "command.model.variant.cycle": "Changer l'effort de réflexion",
62
+ "command.model.variant.cycle.description": "Passer au niveau d'effort suivant",
63
+ "command.permissions.autoaccept.enable": "Accepter automatiquement les modifications",
64
+ "command.permissions.autoaccept.disable": "Arrêter l'acceptation automatique des modifications",
65
+ "command.session.undo": "Annuler",
66
+ "command.session.undo.description": "Annuler le dernier message",
67
+ "command.session.redo": "Rétablir",
68
+ "command.session.redo.description": "Rétablir le dernier message annulé",
69
+ "command.session.compact": "Compacter la session",
70
+ "command.session.compact.description": "Résumer la session pour réduire la taille du contexte",
71
+ "command.session.fork": "Bifurquer à partir du message",
72
+ "command.session.fork.description": "Créer une nouvelle session à partir d'un message précédent",
73
+ "command.session.share": "Partager la session",
74
+ "command.session.share.description": "Partager cette session et copier l'URL dans le presse-papiers",
75
+ "command.session.unshare": "Ne plus partager la session",
76
+ "command.session.unshare.description": "Arrêter de partager cette session",
77
+
78
+ "palette.search.placeholder": "Rechercher des fichiers et des commandes",
79
+ "palette.empty": "Aucun résultat trouvé",
80
+ "palette.group.commands": "Commandes",
81
+ "palette.group.files": "Fichiers",
82
+
83
+ "dialog.provider.search.placeholder": "Rechercher des fournisseurs",
84
+ "dialog.provider.empty": "Aucun fournisseur trouvé",
85
+ "dialog.provider.group.popular": "Populaire",
86
+ "dialog.provider.group.other": "Autre",
87
+ "dialog.provider.tag.recommended": "Recommandé",
88
+ "dialog.provider.anthropic.note": "Connectez-vous avec Claude Pro/Max ou une clé API",
89
+ "dialog.provider.openai.note": "Connectez-vous avec ChatGPT Pro/Plus ou une clé API",
90
+ "dialog.provider.copilot.note": "Connectez-vous avec Copilot ou une clé API",
91
+
92
+ "dialog.model.select.title": "Sélectionner un modèle",
93
+ "dialog.model.search.placeholder": "Rechercher des modèles",
94
+ "dialog.model.empty": "Aucun résultat de modèle",
95
+ "dialog.model.manage": "Gérer les modèles",
96
+ "dialog.model.manage.description": "Personnalisez les modèles qui apparaissent dans le sélecteur.",
97
+
98
+ "dialog.model.unpaid.freeModels.title": "Modèles gratuits fournis par JonsOC",
99
+ "dialog.model.unpaid.addMore.title": "Ajouter plus de modèles de fournisseurs populaires",
100
+
101
+ "dialog.provider.viewAll": "Voir tous les fournisseurs",
102
+
103
+ "provider.connect.title": "Connecter {{provider}}",
104
+ "provider.connect.title.anthropicProMax": "Connexion avec Claude Pro/Max",
105
+ "provider.connect.selectMethod": "Sélectionnez la méthode de connexion pour {{provider}}.",
106
+ "provider.connect.method.apiKey": "Clé API",
107
+ "provider.connect.status.inProgress": "Autorisation en cours...",
108
+ "provider.connect.status.waiting": "En attente d'autorisation...",
109
+ "provider.connect.status.failed": "Échec de l'autorisation : {{error}}",
110
+ "provider.connect.apiKey.description":
111
+ "Entrez votre clé API {{provider}} pour connecter votre compte et utiliser les modèles {{provider}} dans JonsOC.",
112
+ "provider.connect.apiKey.label": "Clé API {{provider}}",
113
+ "provider.connect.apiKey.placeholder": "Clé API",
114
+ "provider.connect.apiKey.required": "La clé API est requise",
115
+ "provider.connect.jonsocZen.line1":
116
+ "JonsOC Zen vous donne accès à un ensemble sélectionné de modèles fiables et optimisés pour les agents de codage.",
117
+ "provider.connect.jonsocZen.line2":
118
+ "Avec une seule clé API, vous aurez accès à des modèles tels que Claude, GPT, Gemini, GLM et plus encore.",
119
+ "provider.connect.jonsocZen.visit.prefix": "Visitez ",
120
+ "provider.connect.jonsocZen.visit.suffix": " pour récupérer votre clé API.",
121
+ "provider.connect.oauth.code.visit.prefix": "Visitez ",
122
+ "provider.connect.oauth.code.visit.link": "ce lien",
123
+ "provider.connect.oauth.code.visit.suffix":
124
+ " pour récupérer votre code d'autorisation afin de connecter votre compte et utiliser les modèles {{provider}} dans JonsOC.",
125
+ "provider.connect.oauth.code.label": "Code d'autorisation {{method}}",
126
+ "provider.connect.oauth.code.placeholder": "Code d'autorisation",
127
+ "provider.connect.oauth.code.required": "Le code d'autorisation est requis",
128
+ "provider.connect.oauth.code.invalid": "Code d'autorisation invalide",
129
+ "provider.connect.oauth.auto.visit.prefix": "Visitez ",
130
+ "provider.connect.oauth.auto.visit.link": "ce lien",
131
+ "provider.connect.oauth.auto.visit.suffix":
132
+ " et entrez le code ci-dessous pour connecter votre compte et utiliser les modèles {{provider}} dans JonsOC.",
133
+ "provider.connect.oauth.auto.confirmationCode": "Code de confirmation",
134
+ "provider.connect.toast.connected.title": "{{provider}} connecté",
135
+ "provider.connect.toast.connected.description": "Les modèles {{provider}} sont maintenant disponibles.",
136
+
137
+ "model.tag.free": "Gratuit",
138
+ "model.tag.latest": "Dernier",
139
+
140
+ "common.search.placeholder": "Rechercher",
141
+ "common.goBack": "Retour",
142
+ "common.loading": "Chargement",
143
+ "common.cancel": "Annuler",
144
+ "common.submit": "Soumettre",
145
+ "common.save": "Enregistrer",
146
+ "common.saving": "Enregistrement...",
147
+ "common.default": "Défaut",
148
+ "common.attachment": "pièce jointe",
149
+
150
+ "prompt.placeholder.shell": "Entrez une commande shell...",
151
+ "prompt.placeholder.normal": 'Demandez n\'importe quoi... "{{example}}"',
152
+ "prompt.mode.shell": "Shell",
153
+ "prompt.mode.shell.exit": "esc pour quitter",
154
+
155
+ "prompt.example.1": "Corriger un TODO dans la base de code",
156
+ "prompt.example.2": "Quelle est la pile technique de ce projet ?",
157
+ "prompt.example.3": "Réparer les tests échoués",
158
+ "prompt.example.4": "Expliquer comment fonctionne l'authentification",
159
+ "prompt.example.5": "Trouver et corriger les vulnérabilités de sécurité",
160
+ "prompt.example.6": "Ajouter des tests unitaires pour le service utilisateur",
161
+ "prompt.example.7": "Refactoriser cette fonction pour être plus lisible",
162
+ "prompt.example.8": "Que signifie cette erreur ?",
163
+ "prompt.example.9": "Aidez-moi à déboguer ce problème",
164
+ "prompt.example.10": "Générer la documentation de l'API",
165
+ "prompt.example.11": "Optimiser les requêtes de base de données",
166
+ "prompt.example.12": "Ajouter une validation d'entrée",
167
+ "prompt.example.13": "Créer un nouveau composant pour...",
168
+ "prompt.example.14": "Comment déployer ce projet ?",
169
+ "prompt.example.15": "Vérifier mon code pour les meilleures pratiques",
170
+ "prompt.example.16": "Ajouter la gestion des erreurs à cette fonction",
171
+ "prompt.example.17": "Expliquer ce modèle regex",
172
+ "prompt.example.18": "Convertir ceci en TypeScript",
173
+ "prompt.example.19": "Ajouter des logs dans toute la base de code",
174
+ "prompt.example.20": "Quelles dépendances sont obsolètes ?",
175
+ "prompt.example.21": "Aidez-moi à écrire un script de migration",
176
+ "prompt.example.22": "Implémenter la mise en cache pour ce point de terminaison",
177
+ "prompt.example.23": "Ajouter la pagination à cette liste",
178
+ "prompt.example.24": "Créer une commande CLI pour...",
179
+ "prompt.example.25": "Comment fonctionnent les variables d'environnement ici ?",
180
+
181
+ "prompt.popover.emptyResults": "Aucun résultat correspondant",
182
+ "prompt.popover.emptyCommands": "Aucune commande correspondante",
183
+ "prompt.dropzone.label": "Déposez des images ou des PDF ici",
184
+ "prompt.slash.badge.custom": "personnalisé",
185
+ "prompt.context.active": "actif",
186
+ "prompt.context.includeActiveFile": "Inclure le fichier actif",
187
+ "prompt.context.removeActiveFile": "Retirer le fichier actif du contexte",
188
+ "prompt.context.removeFile": "Retirer le fichier du contexte",
189
+ "prompt.action.attachFile": "Joindre un fichier",
190
+ "prompt.attachment.remove": "Supprimer la pièce jointe",
191
+ "prompt.action.send": "Envoyer",
192
+ "prompt.action.stop": "Arrêter",
193
+
194
+ "prompt.toast.pasteUnsupported.title": "Collage non supporté",
195
+ "prompt.toast.pasteUnsupported.description": "Seules les images ou les PDF peuvent être collés ici.",
196
+ "prompt.toast.modelAgentRequired.title": "Sélectionnez un agent et un modèle",
197
+ "prompt.toast.modelAgentRequired.description": "Choisissez un agent et un modèle avant d'envoyer un message.",
198
+ "prompt.toast.worktreeCreateFailed.title": "Échec de la création de l'arbre de travail",
199
+ "prompt.toast.sessionCreateFailed.title": "Échec de la création de la session",
200
+ "prompt.toast.shellSendFailed.title": "Échec de l'envoi de la commande shell",
201
+ "prompt.toast.commandSendFailed.title": "Échec de l'envoi de la commande",
202
+ "prompt.toast.promptSendFailed.title": "Échec de l'envoi du message",
203
+
204
+ "dialog.mcp.title": "MCPs",
205
+ "dialog.mcp.description": "{{enabled}} sur {{total}} activés",
206
+ "dialog.mcp.empty": "Aucun MCP configuré",
207
+
208
+ "mcp.status.connected": "connecté",
209
+ "mcp.status.failed": "échoué",
210
+ "mcp.status.needs_auth": "nécessite auth",
211
+ "mcp.status.disabled": "désactivé",
212
+
213
+ "dialog.fork.empty": "Aucun message à partir duquel bifurquer",
214
+
215
+ "dialog.directory.search.placeholder": "Rechercher des dossiers",
216
+ "dialog.directory.empty": "Aucun dossier trouvé",
217
+
218
+ "dialog.server.title": "Serveurs",
219
+ "dialog.server.description": "Changez le serveur JonsOC auquel cette application se connecte.",
220
+ "dialog.server.search.placeholder": "Rechercher des serveurs",
221
+ "dialog.server.empty": "Aucun serveur pour l'instant",
222
+ "dialog.server.add.title": "Ajouter un serveur",
223
+ "dialog.server.add.url": "URL du serveur",
224
+ "dialog.server.add.placeholder": "http://localhost:4096",
225
+ "dialog.server.add.error": "Impossible de se connecter au serveur",
226
+ "dialog.server.add.checking": "Vérification...",
227
+ "dialog.server.add.button": "Ajouter",
228
+ "dialog.server.default.title": "Serveur par défaut",
229
+ "dialog.server.default.description":
230
+ "Se connecter à ce serveur au lancement de l'application au lieu de démarrer un serveur local. Nécessite un redémarrage.",
231
+ "dialog.server.default.none": "Aucun serveur sélectionné",
232
+ "dialog.server.default.set": "Définir le serveur actuel comme défaut",
233
+ "dialog.server.default.clear": "Effacer",
234
+ "dialog.server.action.remove": "Supprimer le serveur",
235
+
236
+ "dialog.project.edit.title": "Modifier le projet",
237
+ "dialog.project.edit.name": "Nom",
238
+ "dialog.project.edit.icon": "Icône",
239
+ "dialog.project.edit.icon.alt": "Icône du projet",
240
+ "dialog.project.edit.icon.hint": "Cliquez ou faites glisser une image",
241
+ "dialog.project.edit.icon.recommended": "Recommandé : 128x128px",
242
+ "dialog.project.edit.color": "Couleur",
243
+ "dialog.project.edit.color.select": "Sélectionner la couleur {{color}}",
244
+
245
+ "context.breakdown.title": "Répartition du contexte",
246
+ "context.breakdown.note":
247
+ "Répartition approximative des jetons d'entrée. \"Autre\" inclut les définitions d'outils et les frais généraux.",
248
+ "context.breakdown.system": "Système",
249
+ "context.breakdown.user": "Utilisateur",
250
+ "context.breakdown.assistant": "Assistant",
251
+ "context.breakdown.tool": "Appels d'outils",
252
+ "context.breakdown.other": "Autre",
253
+
254
+ "context.systemPrompt.title": "Prompt système",
255
+ "context.rawMessages.title": "Messages bruts",
256
+
257
+ "context.stats.session": "Session",
258
+ "context.stats.messages": "Messages",
259
+ "context.stats.provider": "Fournisseur",
260
+ "context.stats.model": "Modèle",
261
+ "context.stats.limit": "Limite de contexte",
262
+ "context.stats.totalTokens": "Total des jetons",
263
+ "context.stats.usage": "Utilisation",
264
+ "context.stats.inputTokens": "Jetons d'entrée",
265
+ "context.stats.outputTokens": "Jetons de sortie",
266
+ "context.stats.reasoningTokens": "Jetons de raisonnement",
267
+ "context.stats.cacheTokens": "Jetons de cache (lecture/écriture)",
268
+ "context.stats.userMessages": "Messages utilisateur",
269
+ "context.stats.assistantMessages": "Messages assistant",
270
+ "context.stats.totalCost": "Coût total",
271
+ "context.stats.sessionCreated": "Session créée",
272
+ "context.stats.lastActivity": "Dernière activité",
273
+
274
+ "context.usage.tokens": "Jetons",
275
+ "context.usage.usage": "Utilisation",
276
+ "context.usage.cost": "Coût",
277
+ "context.usage.clickToView": "Cliquez pour voir le contexte",
278
+ "context.usage.view": "Voir l'utilisation du contexte",
279
+
280
+ "language.en": "Anglais",
281
+ "language.zh": "Chinois (simplifié)",
282
+ "language.zht": "Chinois (traditionnel)",
283
+ "language.ko": "Coréen",
284
+ "language.de": "Allemand",
285
+ "language.es": "Espagnol",
286
+ "language.fr": "Français",
287
+ "language.ja": "Japonais",
288
+ "language.da": "Danois",
289
+ "language.ru": "Russe",
290
+ "language.pl": "Polonais",
291
+ "language.ar": "Arabe",
292
+ "language.no": "Norvégien",
293
+ "language.br": "Portugais (Brésil)",
294
+
295
+ "toast.language.title": "Langue",
296
+ "toast.language.description": "Passé à {{language}}",
297
+
298
+ "toast.theme.title": "Thème changé",
299
+ "toast.scheme.title": "Schéma de couleurs",
300
+
301
+ "toast.permissions.autoaccept.on.title": "Acceptation auto des modifications",
302
+ "toast.permissions.autoaccept.on.description":
303
+ "Les permissions de modification et d'écriture seront automatiquement approuvées",
304
+ "toast.permissions.autoaccept.off.title": "Arrêt acceptation auto des modifications",
305
+ "toast.permissions.autoaccept.off.description":
306
+ "Les permissions de modification et d'écriture nécessiteront une approbation",
307
+
308
+ "toast.model.none.title": "Aucun modèle sélectionné",
309
+ "toast.model.none.description": "Connectez un fournisseur pour résumer cette session",
310
+
311
+ "toast.file.loadFailed.title": "Échec du chargement du fichier",
312
+
313
+ "toast.session.share.copyFailed.title": "Échec de la copie de l'URL dans le presse-papiers",
314
+ "toast.session.share.success.title": "Session partagée",
315
+ "toast.session.share.success.description": "URL de partage copiée dans le presse-papiers !",
316
+ "toast.session.share.failed.title": "Échec du partage de la session",
317
+ "toast.session.share.failed.description": "Une erreur s'est produite lors du partage de la session",
318
+
319
+ "toast.session.unshare.success.title": "Session non partagée",
320
+ "toast.session.unshare.success.description": "Session non partagée avec succès !",
321
+ "toast.session.unshare.failed.title": "Échec de l'annulation du partage",
322
+ "toast.session.unshare.failed.description": "Une erreur s'est produite lors de l'annulation du partage de la session",
323
+
324
+ "toast.session.listFailed.title": "Échec du chargement des sessions pour {{project}}",
325
+
326
+ "toast.update.title": "Mise à jour disponible",
327
+ "toast.update.description":
328
+ "Une nouvelle version d'JonsOC ({{version}}) est maintenant disponible pour installation.",
329
+ "toast.update.action.installRestart": "Installer et redémarrer",
330
+ "toast.update.action.notYet": "Pas encore",
331
+
332
+ "error.page.title": "Quelque chose s'est mal passé",
333
+ "error.page.description": "Une erreur s'est produite lors du chargement de l'application.",
334
+ "error.page.details.label": "Détails de l'erreur",
335
+ "error.page.action.restart": "Redémarrer",
336
+ "error.page.action.checking": "Vérification...",
337
+ "error.page.action.checkUpdates": "Vérifier les mises à jour",
338
+ "error.page.action.updateTo": "Mettre à jour vers {{version}}",
339
+ "error.page.report.prefix": "Veuillez signaler cette erreur à l'équipe JonsOC",
340
+ "error.page.report.discord": "sur Discord",
341
+ "error.page.version": "Version : {{version}}",
342
+
343
+ "error.dev.rootNotFound":
344
+ "Élément racine introuvable. Avez-vous oublié de l'ajouter à votre index.html ? Ou peut-être que l'attribut id est mal orthographié ?",
345
+
346
+ "error.globalSync.connectFailed":
347
+ "Impossible de se connecter au serveur. Y a-t-il un serveur en cours d'exécution à `{{url}}` ?",
348
+
349
+ "error.chain.unknown": "Erreur inconnue",
350
+ "error.chain.causedBy": "Causé par :",
351
+ "error.chain.apiError": "Erreur API",
352
+ "error.chain.status": "Statut : {{status}}",
353
+ "error.chain.retryable": "Réessayable : {{retryable}}",
354
+ "error.chain.responseBody": "Corps de la réponse :\n{{body}}",
355
+ "error.chain.didYouMean": "Vouliez-vous dire : {{suggestions}}",
356
+ "error.chain.modelNotFound": "Modèle introuvable : {{provider}}/{{model}}",
357
+ "error.chain.checkConfig": "Vérifiez votre configuration (jonsoc.json) pour les noms de fournisseur/modèle",
358
+ "error.chain.mcpFailed":
359
+ "Le serveur MCP \"{{name}}\" a échoué. Notez qu'JonsOC ne supporte pas encore l'authentification MCP.",
360
+ "error.chain.providerAuthFailed": "Échec de l'authentification du fournisseur ({{provider}}) : {{message}}",
361
+ "error.chain.providerInitFailed":
362
+ 'Échec de l\'initialisation du fournisseur "{{provider}}". Vérifiez les identifiants et la configuration.',
363
+ "error.chain.configJsonInvalid": "Le fichier de configuration à {{path}} n'est pas un JSON(C) valide",
364
+ "error.chain.configJsonInvalidWithMessage":
365
+ "Le fichier de configuration à {{path}} n'est pas un JSON(C) valide : {{message}}",
366
+ "error.chain.configDirectoryTypo":
367
+ 'Le répertoire "{{dir}}" dans {{path}} n\'est pas valide. Renommez le répertoire en "{{suggestion}}" ou supprimez-le. C\'est une faute de frappe courante.',
368
+ "error.chain.configFrontmatterError": "Échec de l'analyse du frontmatter dans {{path}} :\n{{message}}",
369
+ "error.chain.configInvalid": "Le fichier de configuration à {{path}} est invalide",
370
+ "error.chain.configInvalidWithMessage": "Le fichier de configuration à {{path}} est invalide : {{message}}",
371
+
372
+ "notification.permission.title": "Permission requise",
373
+ "notification.permission.description": "{{sessionTitle}} dans {{projectName}} a besoin d'une permission",
374
+ "notification.question.title": "Question",
375
+ "notification.question.description": "{{sessionTitle}} dans {{projectName}} a une question",
376
+ "notification.action.goToSession": "Aller à la session",
377
+
378
+ "notification.session.responseReady.title": "Réponse prête",
379
+ "notification.session.error.title": "Erreur de session",
380
+ "notification.session.error.fallbackDescription": "Une erreur s'est produite",
381
+
382
+ "home.recentProjects": "Projets récents",
383
+ "home.empty.title": "Aucun projet récent",
384
+ "home.empty.description": "Commencez par ouvrir un projet local",
385
+
386
+ "session.tab.session": "Session",
387
+ "session.tab.review": "Revue",
388
+ "session.tab.context": "Contexte",
389
+ "session.panel.reviewAndFiles": "Revue et fichiers",
390
+ "session.review.filesChanged": "{{count}} fichiers modifiés",
391
+ "session.review.loadingChanges": "Chargement des modifications...",
392
+ "session.review.empty": "Aucune modification dans cette session pour l'instant",
393
+ "session.messages.renderEarlier": "Afficher les messages précédents",
394
+ "session.messages.loadingEarlier": "Chargement des messages précédents...",
395
+ "session.messages.loadEarlier": "Charger les messages précédents",
396
+ "session.messages.loading": "Chargement des messages...",
397
+
398
+ "session.context.addToContext": "Ajouter {{selection}} au contexte",
399
+
400
+ "session.new.worktree.main": "Branche principale",
401
+ "session.new.worktree.mainWithBranch": "Branche principale ({{branch}})",
402
+ "session.new.worktree.create": "Créer un nouvel arbre de travail",
403
+ "session.new.lastModified": "Dernière modification",
404
+
405
+ "session.header.search.placeholder": "Rechercher {{project}}",
406
+ "session.header.searchFiles": "Rechercher des fichiers",
407
+
408
+ "session.share.popover.title": "Publier sur le web",
409
+ "session.share.popover.description.shared":
410
+ "Cette session est publique sur le web. Elle est accessible à toute personne disposant du lien.",
411
+ "session.share.popover.description.unshared":
412
+ "Partager la session publiquement sur le web. Elle sera accessible à toute personne disposant du lien.",
413
+ "session.share.action.share": "Partager",
414
+ "session.share.action.publish": "Publier",
415
+ "session.share.action.publishing": "Publication...",
416
+ "session.share.action.unpublish": "Dépublier",
417
+ "session.share.action.unpublishing": "Dépublication...",
418
+ "session.share.action.view": "Voir",
419
+ "session.share.copy.copied": "Copié",
420
+ "session.share.copy.copyLink": "Copier le lien",
421
+
422
+ "lsp.tooltip.none": "Aucun serveur LSP",
423
+ "lsp.label.connected": "{{count}} LSP",
424
+
425
+ "prompt.loading": "Chargement du prompt...",
426
+ "terminal.loading": "Chargement du terminal...",
427
+ "terminal.title": "Terminal",
428
+ "terminal.title.numbered": "Terminal {{number}}",
429
+ "terminal.close": "Fermer le terminal",
430
+
431
+ "common.closeTab": "Fermer l'onglet",
432
+ "common.dismiss": "Ignorer",
433
+ "common.requestFailed": "La demande a échoué",
434
+ "common.moreOptions": "Plus d'options",
435
+ "common.learnMore": "En savoir plus",
436
+ "common.rename": "Renommer",
437
+ "common.reset": "Réinitialiser",
438
+ "common.archive": "Archiver",
439
+ "common.delete": "Supprimer",
440
+ "common.close": "Fermer",
441
+ "common.edit": "Modifier",
442
+ "common.loadMore": "Charger plus",
443
+
444
+ "sidebar.nav.projectsAndSessions": "Projets et sessions",
445
+ "sidebar.settings": "Paramètres",
446
+ "sidebar.help": "Aide",
447
+ "sidebar.workspaces.enable": "Activer les espaces de travail",
448
+ "sidebar.workspaces.disable": "Désactiver les espaces de travail",
449
+ "sidebar.gettingStarted.title": "Commencer",
450
+ "sidebar.gettingStarted.line1":
451
+ "JonsOC inclut des modèles gratuits pour que vous puissiez commencer immédiatement.",
452
+ "sidebar.gettingStarted.line2":
453
+ "Connectez n'importe quel fournisseur pour utiliser des modèles, y compris Claude, GPT, Gemini etc.",
454
+ "sidebar.project.recentSessions": "Sessions récentes",
455
+ "sidebar.project.viewAllSessions": "Voir toutes les sessions",
456
+
457
+ "settings.section.desktop": "Bureau",
458
+ "settings.tab.general": "Général",
459
+ "settings.tab.shortcuts": "Raccourcis",
460
+
461
+ "settings.general.section.appearance": "Apparence",
462
+ "settings.general.section.notifications": "Notifications système",
463
+ "settings.general.section.sounds": "Effets sonores",
464
+
465
+ "settings.general.row.language.title": "Langue",
466
+ "settings.general.row.language.description": "Changer la langue d'affichage pour JonsOC",
467
+ "settings.general.row.appearance.title": "Apparence",
468
+ "settings.general.row.appearance.description": "Personnaliser l'apparence d'JonsOC sur votre appareil",
469
+ "settings.general.row.theme.title": "Thème",
470
+ "settings.general.row.theme.description": "Personnaliser le thème d'JonsOC.",
471
+ "settings.general.row.font.title": "Police",
472
+ "settings.general.row.font.description": "Personnaliser la police mono utilisée dans les blocs de code",
473
+
474
+ "settings.general.notifications.agent.title": "Agent",
475
+ "settings.general.notifications.agent.description":
476
+ "Afficher une notification système lorsque l'agent a terminé ou nécessite une attention",
477
+ "settings.general.notifications.permissions.title": "Permissions",
478
+ "settings.general.notifications.permissions.description":
479
+ "Afficher une notification système lorsqu'une permission est requise",
480
+ "settings.general.notifications.errors.title": "Erreurs",
481
+ "settings.general.notifications.errors.description": "Afficher une notification système lorsqu'une erreur se produit",
482
+
483
+ "settings.general.sounds.agent.title": "Agent",
484
+ "settings.general.sounds.agent.description": "Jouer un son lorsque l'agent a terminé ou nécessite une attention",
485
+ "settings.general.sounds.permissions.title": "Permissions",
486
+ "settings.general.sounds.permissions.description": "Jouer un son lorsqu'une permission est requise",
487
+ "settings.general.sounds.errors.title": "Erreurs",
488
+ "settings.general.sounds.errors.description": "Jouer un son lorsqu'une erreur se produit",
489
+
490
+ "settings.shortcuts.title": "Raccourcis clavier",
491
+ "settings.shortcuts.reset.button": "Rétablir les défauts",
492
+ "settings.shortcuts.reset.toast.title": "Raccourcis réinitialisés",
493
+ "settings.shortcuts.reset.toast.description": "Les raccourcis clavier ont été réinitialisés aux valeurs par défaut.",
494
+ "settings.shortcuts.conflict.title": "Raccourci déjà utilisé",
495
+ "settings.shortcuts.conflict.description": "{{keybind}} est déjà assigné à {{titles}}.",
496
+ "settings.shortcuts.unassigned": "Non assigné",
497
+ "settings.shortcuts.pressKeys": "Appuyez sur les touches",
498
+ "settings.shortcuts.search.placeholder": "Rechercher des raccourcis",
499
+ "settings.shortcuts.search.empty": "Aucun raccourci trouvé",
500
+
501
+ "settings.shortcuts.group.general": "Général",
502
+ "settings.shortcuts.group.session": "Session",
503
+ "settings.shortcuts.group.navigation": "Navigation",
504
+ "settings.shortcuts.group.modelAndAgent": "Modèle et agent",
505
+ "settings.shortcuts.group.terminal": "Terminal",
506
+ "settings.shortcuts.group.prompt": "Prompt",
507
+
508
+ "settings.providers.title": "Fournisseurs",
509
+ "settings.providers.description": "Les paramètres des fournisseurs seront configurables ici.",
510
+ "settings.models.title": "Modèles",
511
+ "settings.models.description": "Les paramètres des modèles seront configurables ici.",
512
+ "settings.agents.title": "Agents",
513
+ "settings.agents.description": "Les paramètres des agents seront configurables ici.",
514
+ "settings.commands.title": "Commandes",
515
+ "settings.commands.description": "Les paramètres des commandes seront configurables ici.",
516
+ "settings.mcp.title": "MCP",
517
+ "settings.mcp.description": "Les paramètres MCP seront configurables ici.",
518
+
519
+ "settings.permissions.title": "Permissions",
520
+ "settings.permissions.description": "Contrôlez les outils que le serveur peut utiliser par défaut.",
521
+ "settings.permissions.section.tools": "Outils",
522
+ "settings.permissions.toast.updateFailed.title": "Échec de la mise à jour des permissions",
523
+
524
+ "settings.permissions.action.allow": "Autoriser",
525
+ "settings.permissions.action.ask": "Demander",
526
+ "settings.permissions.action.deny": "Refuser",
527
+
528
+ "settings.permissions.tool.read.title": "Lire",
529
+ "settings.permissions.tool.read.description": "Lecture d'un fichier (correspond au chemin du fichier)",
530
+ "settings.permissions.tool.edit.title": "Modifier",
531
+ "settings.permissions.tool.edit.description":
532
+ "Modifier des fichiers, y compris les modifications, écritures, patchs et multi-modifications",
533
+ "settings.permissions.tool.glob.title": "Glob",
534
+ "settings.permissions.tool.glob.description": "Correspondre aux fichiers utilisant des modèles glob",
535
+ "settings.permissions.tool.grep.title": "Grep",
536
+ "settings.permissions.tool.grep.description":
537
+ "Rechercher dans le contenu des fichiers à l'aide d'expressions régulières",
538
+ "settings.permissions.tool.list.title": "Lister",
539
+ "settings.permissions.tool.list.description": "Lister les fichiers dans un répertoire",
540
+ "settings.permissions.tool.bash.title": "Bash",
541
+ "settings.permissions.tool.bash.description": "Exécuter des commandes shell",
542
+ "settings.permissions.tool.task.title": "Tâche",
543
+ "settings.permissions.tool.task.description": "Lancer des sous-agents",
544
+ "settings.permissions.tool.skill.title": "Compétence",
545
+ "settings.permissions.tool.skill.description": "Charger une compétence par son nom",
546
+ "settings.permissions.tool.lsp.title": "LSP",
547
+ "settings.permissions.tool.lsp.description": "Exécuter des requêtes de serveur de langage",
548
+ "settings.permissions.tool.todoread.title": "Lire Todo",
549
+ "settings.permissions.tool.todoread.description": "Lire la liste de tâches",
550
+ "settings.permissions.tool.todowrite.title": "Écrire Todo",
551
+ "settings.permissions.tool.todowrite.description": "Mettre à jour la liste de tâches",
552
+ "settings.permissions.tool.webfetch.title": "Récupération Web",
553
+ "settings.permissions.tool.webfetch.description": "Récupérer le contenu d'une URL",
554
+ "settings.permissions.tool.websearch.title": "Recherche Web",
555
+ "settings.permissions.tool.websearch.description": "Rechercher sur le web",
556
+ "settings.permissions.tool.codesearch.title": "Recherche de code",
557
+ "settings.permissions.tool.codesearch.description": "Rechercher du code sur le web",
558
+ "settings.permissions.tool.external_directory.title": "Répertoire externe",
559
+ "settings.permissions.tool.external_directory.description": "Accéder aux fichiers en dehors du répertoire du projet",
560
+ "settings.permissions.tool.doom_loop.title": "Boucle infernale",
561
+ "settings.permissions.tool.doom_loop.description": "Détecter les appels d'outils répétés avec une entrée identique",
562
+
563
+ "session.delete.failed.title": "Échec de la suppression de la session",
564
+ "session.delete.title": "Supprimer la session",
565
+ "session.delete.confirm": 'Supprimer la session "{{name}}" ?',
566
+ "session.delete.button": "Supprimer la session",
567
+
568
+ "workspace.new": "Nouvel espace de travail",
569
+ "workspace.type.local": "local",
570
+ "workspace.type.sandbox": "bac à sable",
571
+ "workspace.create.failed.title": "Échec de la création de l'espace de travail",
572
+ "workspace.delete.failed.title": "Échec de la suppression de l'espace de travail",
573
+ "workspace.resetting.title": "Réinitialisation de l'espace de travail",
574
+ "workspace.resetting.description": "Cela peut prendre une minute.",
575
+ "workspace.reset.failed.title": "Échec de la réinitialisation de l'espace de travail",
576
+ "workspace.reset.success.title": "Espace de travail réinitialisé",
577
+ "workspace.reset.success.description": "L'espace de travail correspond maintenant à la branche par défaut.",
578
+ "workspace.status.checking": "Vérification des modifications non fusionnées...",
579
+ "workspace.status.error": "Impossible de vérifier le statut git.",
580
+ "workspace.status.clean": "Aucune modification non fusionnée détectée.",
581
+ "workspace.status.dirty": "Modifications non fusionnées détectées dans cet espace de travail.",
582
+ "workspace.delete.title": "Supprimer l'espace de travail",
583
+ "workspace.delete.confirm": 'Supprimer l\'espace de travail "{{name}}" ?',
584
+ "workspace.delete.button": "Supprimer l'espace de travail",
585
+ "workspace.reset.title": "Réinitialiser l'espace de travail",
586
+ "workspace.reset.confirm": 'Réinitialiser l\'espace de travail "{{name}}" ?',
587
+ "workspace.reset.button": "Réinitialiser l'espace de travail",
588
+ "workspace.reset.archived.none": "Aucune session active ne sera archivée.",
589
+ "workspace.reset.archived.one": "1 session sera archivée.",
590
+ "workspace.reset.archived.many": "{{count}} sessions seront archivées.",
591
+ "workspace.reset.note": "Cela réinitialisera l'espace de travail pour correspondre à la branche par défaut.",
592
+ }