mulmoclaude 0.3.0 → 0.4.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/bin/mulmoclaude.js +7 -24
- package/client/assets/html2canvas-Cx501zZr-Cv5snK9D.js +5 -0
- package/client/assets/index-CubzmCVK.css +2 -0
- package/client/assets/{index-eHWB79u5.js → index-DtcyExH9.js} +80 -61
- package/client/assets/{index.es-D4YyL_Dg-BfRHLTZV.js → index.es-D4YyL_Dg-DnizuhIY.js} +5 -5
- package/client/index.html +2 -4
- package/package.json +13 -13
- package/server/agent/attachmentConverter.ts +2 -2
- package/server/agent/index.ts +9 -3
- package/server/agent/mcp-tools/index.ts +6 -6
- package/server/agent/mcp-tools/x.ts +2 -1
- package/server/agent/prompt.ts +187 -26
- package/server/agent/resumeFailover.ts +5 -5
- package/server/agent/sandboxMounts.ts +3 -3
- package/server/api/auth/bearerAuth.ts +3 -3
- package/server/api/auth/token.ts +2 -2
- package/server/api/routes/agent.ts +21 -3
- package/server/api/routes/config.ts +1 -1
- package/server/api/routes/files.ts +13 -12
- package/server/api/routes/html.ts +2 -2
- package/server/api/routes/image.ts +7 -7
- package/server/api/routes/mulmo-script.ts +33 -31
- package/server/api/routes/pdf.ts +2 -2
- package/server/api/routes/plugins.ts +16 -6
- package/server/api/routes/roles.ts +2 -2
- package/server/api/routes/scheduler.ts +8 -6
- package/server/api/routes/schedulerTasks.ts +5 -3
- package/server/api/routes/sessions.ts +2 -2
- package/server/api/routes/sessionsCursor.ts +4 -4
- package/server/api/routes/skills.ts +5 -5
- package/server/api/routes/sources.ts +3 -3
- package/server/api/routes/todosHandlers.ts +1 -1
- package/server/api/routes/todosItemsHandlers.ts +14 -14
- package/server/api/routes/wiki.ts +22 -8
- package/server/api/sandboxStatus.ts +1 -1
- package/server/events/notifications.ts +6 -6
- package/server/events/pub-sub/index.ts +3 -3
- package/server/events/relay-client.ts +17 -16
- package/server/index.ts +40 -46
- package/server/system/config.ts +5 -5
- package/server/system/credentials.ts +7 -5
- package/server/system/env.ts +5 -5
- package/server/utils/files/atomic.ts +11 -11
- package/server/utils/files/image-store.ts +17 -6
- package/server/utils/files/journal-io.ts +2 -2
- package/server/utils/files/json.ts +5 -5
- package/server/utils/files/markdown-store.ts +4 -4
- package/server/utils/files/reference-dirs-io.ts +3 -3
- package/server/utils/files/roles-io.ts +4 -4
- package/server/utils/files/safe.ts +14 -14
- package/server/utils/files/scheduler-overrides-io.ts +2 -2
- package/server/utils/files/spreadsheet-store.ts +5 -5
- package/server/utils/files/workspace-io.ts +12 -12
- package/server/utils/gemini.ts +2 -2
- package/server/utils/gitignore.ts +9 -9
- package/server/utils/json.ts +5 -5
- package/server/utils/logBackgroundError.ts +12 -3
- package/server/utils/markdown.ts +5 -5
- package/server/utils/port.d.mts +6 -0
- package/server/utils/port.mjs +48 -0
- package/server/utils/request.ts +12 -6
- package/server/utils/spawn.ts +1 -1
- package/server/utils/types.ts +2 -2
- package/server/workspace/chat-index/summarizer.ts +4 -4
- package/server/workspace/custom-dirs.ts +5 -5
- package/server/workspace/journal/diff.ts +2 -2
- package/server/workspace/journal/index.ts +4 -4
- package/server/workspace/journal/optimizationPass.ts +2 -2
- package/server/workspace/journal/state.ts +6 -6
- package/server/workspace/paths.ts +3 -3
- package/server/workspace/reference-dirs.ts +3 -3
- package/server/workspace/skills/parser.ts +6 -6
- package/server/workspace/skills/scheduler.ts +3 -3
- package/server/workspace/skills/writer.ts +3 -3
- package/server/workspace/sources/arxivDiscovery.ts +2 -2
- package/server/workspace/sources/fetchers/rss.ts +5 -5
- package/server/workspace/sources/fetchers/rssParser.ts +4 -4
- package/server/workspace/sources/interests.ts +3 -3
- package/server/workspace/sources/paths.ts +6 -6
- package/server/workspace/sources/pipeline/fetch.ts +36 -13
- package/server/workspace/sources/pipeline/index.ts +2 -7
- package/server/workspace/sources/pipeline/notify.ts +3 -3
- package/server/workspace/sources/pipeline/plan.ts +11 -9
- package/server/workspace/sources/pipeline/write.ts +5 -5
- package/server/workspace/sources/rateLimiter.ts +1 -1
- package/server/workspace/sources/sourceState.ts +9 -4
- package/server/workspace/sources/types.ts +9 -0
- package/server/workspace/sources/urls.ts +1 -1
- package/server/workspace/tool-trace/classify.ts +4 -4
- package/server/workspace/workspace.ts +7 -7
- package/src/App.vue +286 -112
- package/src/components/CanvasViewToggle.vue +10 -7
- package/src/components/ChatInput.vue +60 -26
- package/src/components/FileContentHeader.vue +7 -4
- package/src/components/FileContentRenderer.vue +20 -6
- package/src/components/FileTree.vue +6 -3
- package/src/components/FileTreePane.vue +11 -8
- package/src/components/FilesView.vue +5 -3
- package/src/components/LockStatusPopup.vue +15 -12
- package/src/components/NotificationBell.vue +14 -5
- package/src/components/NotificationToast.vue +4 -1
- package/src/components/PluginLauncher.vue +19 -56
- package/src/components/RightSidebar.vue +13 -10
- package/src/components/SessionHistoryPanel.vue +33 -29
- package/src/components/SessionTabBar.vue +8 -10
- package/src/components/SettingsMcpTab.vue +43 -30
- package/src/components/SettingsModal.vue +21 -19
- package/src/components/SettingsReferenceDirsTab.vue +29 -24
- package/src/components/SettingsWorkspaceDirsTab.vue +32 -22
- package/src/components/SidebarHeader.vue +25 -4
- package/src/components/StackView.vue +4 -1
- package/src/components/SuggestionsPanel.vue +5 -2
- package/src/components/TodoExplorer.vue +26 -15
- package/src/components/ToolResultsPanel.vue +27 -13
- package/src/components/todo/TodoAddDialog.vue +17 -12
- package/src/components/todo/TodoEditDialog.vue +7 -2
- package/src/components/todo/TodoEditPanel.vue +15 -10
- package/src/components/todo/TodoKanbanView.vue +10 -5
- package/src/components/todo/TodoListView.vue +5 -2
- package/src/components/todo/TodoTableView.vue +5 -2
- package/src/composables/useAppApi.ts +9 -0
- package/src/composables/useDynamicFavicon.ts +172 -37
- package/src/composables/useEventListeners.ts +7 -8
- package/src/composables/useFaviconState.ts +13 -2
- package/src/composables/useFileSelection.ts +24 -6
- package/src/composables/useLayoutMode.ts +32 -0
- package/src/composables/useSessionHistory.ts +7 -17
- package/src/composables/useViewLayout.ts +20 -34
- package/src/lang/de.ts +536 -0
- package/src/lang/en.ts +558 -0
- package/src/lang/es.ts +543 -0
- package/src/lang/fr.ts +536 -0
- package/src/lang/ja.ts +536 -0
- package/src/lang/ko.ts +540 -0
- package/src/lang/pt-BR.ts +534 -0
- package/src/lang/zh.ts +537 -0
- package/src/lib/vue-i18n.ts +97 -0
- package/src/main.ts +2 -0
- package/src/plugins/canvas/View.vue +102 -186
- package/src/plugins/canvas/definition.ts +0 -8
- package/src/plugins/chart/Preview.vue +1 -1
- package/src/plugins/chart/View.vue +9 -4
- package/src/plugins/manageRoles/Preview.vue +4 -1
- package/src/plugins/manageRoles/View.vue +59 -43
- package/src/plugins/manageSkills/Preview.vue +8 -3
- package/src/plugins/manageSkills/View.vue +26 -22
- package/src/plugins/manageSource/Preview.vue +1 -1
- package/src/plugins/manageSource/View.vue +73 -52
- package/src/plugins/markdown/Preview.vue +1 -1
- package/src/plugins/markdown/View.vue +24 -34
- package/src/plugins/presentHtml/Preview.vue +1 -1
- package/src/plugins/presentHtml/View.vue +7 -4
- package/src/plugins/presentMulmoScript/Preview.vue +1 -1
- package/src/plugins/presentMulmoScript/View.vue +36 -26
- package/src/plugins/scheduler/Preview.vue +7 -4
- package/src/plugins/scheduler/TasksTab.vue +53 -24
- package/src/plugins/scheduler/View.vue +28 -19
- package/src/plugins/scheduler/formatSchedule.ts +93 -0
- package/src/plugins/spreadsheet/Preview.vue +8 -3
- package/src/plugins/spreadsheet/View.vue +21 -12
- package/src/plugins/textResponse/Preview.vue +15 -58
- package/src/plugins/textResponse/View.vue +27 -7
- package/src/plugins/todo/Preview.vue +11 -6
- package/src/plugins/todo/View.vue +27 -13
- package/src/plugins/ui-image/ImagePreview.vue +6 -3
- package/src/plugins/ui-image/ImageView.vue +7 -4
- package/src/plugins/wiki/Preview.vue +5 -2
- package/src/plugins/wiki/View.vue +202 -81
- package/src/plugins/wiki/route.ts +112 -0
- package/src/router/guards.ts +42 -24
- package/src/router/index.ts +41 -26
- package/src/types/vue-i18n.d.ts +20 -0
- package/src/utils/agent/request.ts +19 -0
- package/src/utils/canvas/layoutMode.ts +26 -0
- package/src/utils/image/cacheBust.ts +16 -0
- package/src/utils/image/resolve.ts +16 -0
- package/src/utils/path/workspaceLinkRouter.ts +81 -0
- package/src/vite-env.d.ts +9 -0
- package/client/assets/chunk-vKJrgz-R-C_I3GbVV.js +0 -1
- package/client/assets/html2canvas-Cx501zZr-BF5dYYkY.js +0 -5
- package/client/assets/index-Bm70FDU2.css +0 -1
- package/client/assets/typeof-DBp4T-Ny-BC0P-2DM.js +0 -1
- package/src/composables/useCanvasViewMode.ts +0 -121
- package/src/utils/canvas/viewMode.ts +0 -46
- /package/client/assets/{purify.es-Fx1Nqyry-PeS5RUhs.js → purify.es-Fx1Nqyry-BwJECkqS.js} +0 -0
package/src/lang/fr.ts
ADDED
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
// French dictionary. Mirror the shape of src/lang/en.ts —
|
|
2
|
+
// missing keys fall back to English per createI18n's fallbackLocale.
|
|
3
|
+
|
|
4
|
+
const frMessages = {
|
|
5
|
+
common: {
|
|
6
|
+
save: "Enregistrer",
|
|
7
|
+
cancel: "Annuler",
|
|
8
|
+
loading: "Chargement...",
|
|
9
|
+
close: "Fermer",
|
|
10
|
+
dismiss: "Ignorer",
|
|
11
|
+
add: "Ajouter",
|
|
12
|
+
remove: "Supprimer",
|
|
13
|
+
saving: "Enregistrement...",
|
|
14
|
+
saved: "Enregistré",
|
|
15
|
+
noResultsYet: "Aucun résultat pour le moment",
|
|
16
|
+
noImageYet: "Aucune image pour le moment",
|
|
17
|
+
},
|
|
18
|
+
sessionTabBar: {
|
|
19
|
+
newSession: "Nouvelle session",
|
|
20
|
+
sessionHistory: "Historique des sessions",
|
|
21
|
+
activeSessions: "{count} session active (agent en cours d'exécution) | {count} sessions actives (agent en cours d'exécution)",
|
|
22
|
+
unreadReplies: "{count} réponse non lue | {count} réponses non lues",
|
|
23
|
+
},
|
|
24
|
+
chatInput: {
|
|
25
|
+
placeholder: "Saisissez une tâche, ou glissez / collez / joignez un fichier…",
|
|
26
|
+
expandEditor: "Agrandir l'éditeur",
|
|
27
|
+
composeMessage: "Rédiger un message",
|
|
28
|
+
sendHint: "Cmd+Entrée pour envoyer",
|
|
29
|
+
send: "Envoyer",
|
|
30
|
+
attachFile: "Joindre un fichier",
|
|
31
|
+
fileTooLarge: "Fichier trop volumineux ({sizeMB} Mo). La limite est de 30 Mo.",
|
|
32
|
+
unsupportedFileType: "Type de fichier non pris en charge. Acceptés : images, PDF, DOCX, XLSX, PPTX, fichiers texte.",
|
|
33
|
+
},
|
|
34
|
+
sessionHistoryPanel: {
|
|
35
|
+
filters: {
|
|
36
|
+
all: "Toutes",
|
|
37
|
+
unread: "Non lues",
|
|
38
|
+
human: "Humain",
|
|
39
|
+
scheduler: "Planificateur",
|
|
40
|
+
skill: "Skill",
|
|
41
|
+
bridge: "Bridge",
|
|
42
|
+
},
|
|
43
|
+
failedToRefresh: "⚠ Échec de l'actualisation : {error}",
|
|
44
|
+
showingLastKnown: " — affichage de la dernière liste connue.",
|
|
45
|
+
noSessions: "Aucune session pour le moment.",
|
|
46
|
+
noMatching: "Aucune session correspondante.",
|
|
47
|
+
running: "En cours",
|
|
48
|
+
unread: "Non lu",
|
|
49
|
+
noMessages: "(aucun message)",
|
|
50
|
+
},
|
|
51
|
+
notificationBell: {
|
|
52
|
+
notifications: "Notifications",
|
|
53
|
+
markAllRead: "Tout marquer comme lu",
|
|
54
|
+
noNotifications: "Aucune notification",
|
|
55
|
+
dismiss: "Ignorer",
|
|
56
|
+
},
|
|
57
|
+
sidebarHeader: {
|
|
58
|
+
home: "Aller à la dernière conversation",
|
|
59
|
+
toolCallHistory: "Historique des appels d'outils",
|
|
60
|
+
settings: "Paramètres",
|
|
61
|
+
},
|
|
62
|
+
rightSidebar: {
|
|
63
|
+
toggleSystemPrompt: "Basculer le system prompt",
|
|
64
|
+
systemPrompt: "System Prompt",
|
|
65
|
+
availableTools: "Outils disponibles",
|
|
66
|
+
toggleToolDescription: "Basculer la description de l'outil",
|
|
67
|
+
toolCallHistory: "Historique des appels d'outils",
|
|
68
|
+
noToolCalls: "Aucun appel d'outil pour le moment",
|
|
69
|
+
arguments: "Arguments",
|
|
70
|
+
error: "Erreur",
|
|
71
|
+
result: "Résultat",
|
|
72
|
+
running: "En cours...",
|
|
73
|
+
},
|
|
74
|
+
fileTreePane: {
|
|
75
|
+
sort: "Tri :",
|
|
76
|
+
sortByName: "Trier par nom",
|
|
77
|
+
name: "Nom",
|
|
78
|
+
sortByRecent: "Trier par date de modification (plus récent en premier)",
|
|
79
|
+
recent: "Récent",
|
|
80
|
+
reference: "Référence",
|
|
81
|
+
// "RO" = Read-Only. Abréviation anglaise conservée volontairement
|
|
82
|
+
// pour tenir dans un badge compact à côté du libellé Référence.
|
|
83
|
+
readOnlyBadge: "RO",
|
|
84
|
+
},
|
|
85
|
+
fileTree: {
|
|
86
|
+
workspace: "(espace de travail)",
|
|
87
|
+
recentlyChanged: "Modifiés récemment",
|
|
88
|
+
},
|
|
89
|
+
lockStatusPopup: {
|
|
90
|
+
sandboxEnabledTooltip: "Sandbox activé (Docker)",
|
|
91
|
+
noSandboxTooltip: "Pas de sandbox (Docker introuvable)",
|
|
92
|
+
sandboxEnabledLabel: "Sandbox activé :",
|
|
93
|
+
sandboxEnabledBody: "Docker est en cours d'exécution. L'accès au système de fichiers est isolé.",
|
|
94
|
+
noSandboxLabel: "Pas de sandbox :",
|
|
95
|
+
noSandboxBodyPrefix: "Claude peut accéder à tous les fichiers de votre machine. Installez",
|
|
96
|
+
noSandboxBodySuffix: "pour activer l'isolation du système de fichiers.",
|
|
97
|
+
dockerDesktop: "Docker Desktop",
|
|
98
|
+
hostCredentials: "Identifiants de l'hôte attachés :",
|
|
99
|
+
credsLoading: "chargement…",
|
|
100
|
+
sshAgent: "Agent SSH :",
|
|
101
|
+
forwarded: "transféré",
|
|
102
|
+
notForwarded: "non transféré",
|
|
103
|
+
mountedConfigs: "Configurations montées :",
|
|
104
|
+
none: "aucune",
|
|
105
|
+
testIsolation: "Tester l'isolation du sandbox :",
|
|
106
|
+
},
|
|
107
|
+
settingsModal: {
|
|
108
|
+
title: "Paramètres",
|
|
109
|
+
tabs: {
|
|
110
|
+
tools: "Outils autorisés",
|
|
111
|
+
mcp: "Serveurs MCP",
|
|
112
|
+
dirs: "Répertoires",
|
|
113
|
+
refs: "Répertoires de référence",
|
|
114
|
+
},
|
|
115
|
+
toolNamesLabel: "Noms d'outils",
|
|
116
|
+
invalidToolNamesPrefix: "Ceux-ci semblent non standards (préfixe attendu",
|
|
117
|
+
invalidToolNamesSuffix: ") :",
|
|
118
|
+
mcpToolsError: "⚠ Impossible de récupérer l'état des outils MCP : {error}. Tous les outils sont affichés quel que soit leur état d'activation.",
|
|
119
|
+
changesHint: "Les modifications s'appliquent au prochain message. Pas besoin de redémarrer.",
|
|
120
|
+
cannotSaveTooltip: "Impossible d'enregistrer tant que les paramètres ne sont pas chargés",
|
|
121
|
+
saving: "Enregistrement…",
|
|
122
|
+
loadingLabel: "Chargement…",
|
|
123
|
+
},
|
|
124
|
+
canvasViewToggle: {
|
|
125
|
+
stackViewTooltip: "Vue empilée · cliquez pour passer à la vue simple (⌘1)",
|
|
126
|
+
singleViewTooltip: "Vue simple · cliquez pour passer à la vue empilée (⌘2)",
|
|
127
|
+
switchToSingle: "Passer à la vue simple",
|
|
128
|
+
switchToStack: "Passer à la vue empilée",
|
|
129
|
+
},
|
|
130
|
+
settingsWorkspaceDirs: {
|
|
131
|
+
explanation:
|
|
132
|
+
"Répertoires personnalisés pour organiser les fichiers sous {dataDir} et {artifactsDir}. Claude s'en sert pour router l'enregistrement des fichiers.",
|
|
133
|
+
noEntries: "Aucun répertoire personnalisé configuré.",
|
|
134
|
+
addDirTitle: "Ajouter un répertoire",
|
|
135
|
+
pathPlaceholder: "data/clients ou artifacts/rapports",
|
|
136
|
+
descPlaceholder: "Description (ce qui va dans ce dossier)",
|
|
137
|
+
errPathRequired: "Le chemin est obligatoire",
|
|
138
|
+
errMustStartWith: "Doit commencer par data/ ou artifacts/",
|
|
139
|
+
errAlreadyExists: "Existe déjà",
|
|
140
|
+
},
|
|
141
|
+
settingsReferenceDirs: {
|
|
142
|
+
explanation:
|
|
143
|
+
"Répertoires externes que Claude peut lire mais pas modifier. En mode Docker, ils sont montés en lecture seule. Utile pour référencer des coffres Obsidian, du code de projet ou des dossiers de documents.",
|
|
144
|
+
noEntries: "Aucun répertoire de référence configuré.",
|
|
145
|
+
addDirTitle: "Ajouter un répertoire de référence",
|
|
146
|
+
pathPlaceholder: "/Users/moi/ObsidianVault ou ~/Documents/notes",
|
|
147
|
+
labelPlaceholder: "Étiquette (facultatif — par défaut le nom du dossier)",
|
|
148
|
+
readOnlyBadge: "lecture seule",
|
|
149
|
+
errPathRequired: "Le chemin est obligatoire",
|
|
150
|
+
errMustBeAbsolute: "Doit être un chemin absolu ou commencer par ~/",
|
|
151
|
+
errAlreadyExists: "Existe déjà",
|
|
152
|
+
errLabelConflict: 'L\'étiquette "{label}" existe déjà',
|
|
153
|
+
},
|
|
154
|
+
pluginLauncher: {
|
|
155
|
+
todos: { label: "Tâches", title: "Ouvrir les tâches (⌘4)" },
|
|
156
|
+
scheduler: { label: "Planning", title: "Ouvrir le planning (⌘5)" },
|
|
157
|
+
wiki: { label: "Wiki", title: "Ouvrir le wiki (⌘6)" },
|
|
158
|
+
skills: { label: "Skills", title: "Ouvrir les skills (⌘7)" },
|
|
159
|
+
roles: { label: "Rôles", title: "Ouvrir les rôles (⌘8)" },
|
|
160
|
+
files: { label: "Fichiers", title: "Ouvrir les fichiers du workspace (⌘3)" },
|
|
161
|
+
},
|
|
162
|
+
fileContentHeader: {
|
|
163
|
+
showRendered: "Afficher le Markdown rendu",
|
|
164
|
+
showRaw: "Afficher la source brute",
|
|
165
|
+
rendered: "Rendu",
|
|
166
|
+
raw: "Source",
|
|
167
|
+
closeFile: "Fermer le fichier",
|
|
168
|
+
},
|
|
169
|
+
fileContentRenderer: {
|
|
170
|
+
selectFile: "Sélectionnez un fichier",
|
|
171
|
+
htmlPreview: "Aperçu HTML",
|
|
172
|
+
pdfPreview: "Aperçu PDF",
|
|
173
|
+
parseError: "erreur d'analyse",
|
|
174
|
+
},
|
|
175
|
+
settingsMcpTab: {
|
|
176
|
+
explanation:
|
|
177
|
+
"Ajoutez des serveurs MCP externes. Les serveurs HTTP fonctionnent dans tous les modes. Les serveurs Stdio utilisent le {npx} / {node} / {tsx} de l'image du sandbox ; lorsque Docker est activé, les chemins doivent se trouver dans l'espace de travail.",
|
|
178
|
+
localhostRewrite: "En mode Docker, {localhost} est réécrit en {hostDockerInternal}.",
|
|
179
|
+
noServers: "Aucun serveur MCP configuré pour le moment.",
|
|
180
|
+
enabled: "activé",
|
|
181
|
+
urlLabel: "URL :",
|
|
182
|
+
commandLabel: "Commande :",
|
|
183
|
+
dockerNonWorkspaceWarning: "⚠ Contient des chemins hors de l'espace de travail — ils ne seront pas résolus dans Docker.",
|
|
184
|
+
addServerButton: "+ Ajouter un serveur MCP",
|
|
185
|
+
nameLabel: "Nom",
|
|
186
|
+
namePlaceholder: "mon-serveur",
|
|
187
|
+
typeHttp: "HTTP",
|
|
188
|
+
typeStdio: "Stdio (commande)",
|
|
189
|
+
urlFieldLabel: "URL",
|
|
190
|
+
urlPlaceholder: "https://example.com/mcp",
|
|
191
|
+
commandFieldLabel: "Commande",
|
|
192
|
+
argsLabel: "Arguments (un par ligne)",
|
|
193
|
+
// Forme de fonction de message — contourne le compilateur de
|
|
194
|
+
// messages de vue-i18n pour que le `@` littéral ne soit pas
|
|
195
|
+
// interprété comme une référence à un message lié.
|
|
196
|
+
argsPlaceholder: () => "-y\n@modelcontextprotocol/server-filesystem\n/workspace/path",
|
|
197
|
+
errNoName: "Indiquez un Nom, ou saisissez une URL / des arguments dont nous pouvons le déduire.",
|
|
198
|
+
errBadName: "Le nom doit commencer par une lettre minuscule et contenir uniquement [a-z0-9_-].",
|
|
199
|
+
errIdExists: 'L\'identifiant de serveur "{id}" existe déjà.',
|
|
200
|
+
errBadHttpUrl: "L'URL HTTP doit commencer par http:// ou https://",
|
|
201
|
+
},
|
|
202
|
+
pluginScheduler: {
|
|
203
|
+
prev: "Précédent",
|
|
204
|
+
today: "Aujourd'hui",
|
|
205
|
+
goToday: "Aller à aujourd'hui",
|
|
206
|
+
next: "Suivant",
|
|
207
|
+
deleteItem: "Supprimer l'élément",
|
|
208
|
+
closeEditor: "Fermer l'éditeur",
|
|
209
|
+
apiError: "⚠ Échec de la mise à jour du planificateur : {error}",
|
|
210
|
+
tabCalendar: "Calendrier",
|
|
211
|
+
tabTasks: "Tâches",
|
|
212
|
+
heading: "Planificateur",
|
|
213
|
+
itemCount: "{count} élément | {count} éléments",
|
|
214
|
+
noScheduled: "Aucun élément planifié",
|
|
215
|
+
unscheduled: "Non planifié",
|
|
216
|
+
editItem: "Modifier l'élément",
|
|
217
|
+
update: "Mettre à jour",
|
|
218
|
+
editSource: "Modifier la source",
|
|
219
|
+
applyChanges: "Appliquer les modifications",
|
|
220
|
+
propLabel: "{key} :",
|
|
221
|
+
moreCount: "+{count} de plus",
|
|
222
|
+
previewIcon: "📅",
|
|
223
|
+
previewUpcoming: "{count} à venir",
|
|
224
|
+
previewMore: "+ {count} de plus…",
|
|
225
|
+
},
|
|
226
|
+
pluginSchedulerTasks: {
|
|
227
|
+
recommendedFrequencies: "Fréquences recommandées",
|
|
228
|
+
tableTaskType: "Type de tâche",
|
|
229
|
+
tableSuggestedSchedule: "Planification suggérée",
|
|
230
|
+
noTasks: "Aucune tâche planifiée",
|
|
231
|
+
runNow: "Exécuter maintenant",
|
|
232
|
+
enable: "Activer",
|
|
233
|
+
disable: "Désactiver",
|
|
234
|
+
delete: "Supprimer",
|
|
235
|
+
nextRun: "Prochaine : {time}",
|
|
236
|
+
originSystem: "Système",
|
|
237
|
+
originUser: "Utilisateur",
|
|
238
|
+
originSkill: "Skill",
|
|
239
|
+
runFailed: "Échec de l'exécution : {error}",
|
|
240
|
+
toggleFailed: "Échec du basculement : {error}",
|
|
241
|
+
deleteFailed: "Échec de la suppression : {error}",
|
|
242
|
+
},
|
|
243
|
+
pluginCanvas: {
|
|
244
|
+
undo: "Annuler",
|
|
245
|
+
redo: "Rétablir",
|
|
246
|
+
clear: "Effacer",
|
|
247
|
+
styleLabel: "Style :",
|
|
248
|
+
},
|
|
249
|
+
pluginChart: {
|
|
250
|
+
untitled: "Graphique",
|
|
251
|
+
chartCount: "{count} graphique | {count} graphiques",
|
|
252
|
+
chartTitle: "Graphique {num}",
|
|
253
|
+
png: "PNG",
|
|
254
|
+
},
|
|
255
|
+
pluginTodo: {
|
|
256
|
+
clearFilters: "Effacer tous les filtres",
|
|
257
|
+
deleteItem: "Supprimer l'élément",
|
|
258
|
+
apiError: "⚠ Échec de la mise à jour des tâches : {error}",
|
|
259
|
+
heading: "Liste de tâches",
|
|
260
|
+
completedRatio: "{done}/{total} terminées",
|
|
261
|
+
filter: "Filtre :",
|
|
262
|
+
noItems: "Aucune tâche pour le moment",
|
|
263
|
+
noMatchingFilter: "Aucun élément ne correspond au filtre actif",
|
|
264
|
+
update: "Mettre à jour",
|
|
265
|
+
clearCompleted: "Effacer les terminées",
|
|
266
|
+
clearButton: "Effacer ✕",
|
|
267
|
+
deleteSymbol: "✕",
|
|
268
|
+
},
|
|
269
|
+
todoExplorer: {
|
|
270
|
+
heading: "Tâches",
|
|
271
|
+
doneRatio: "{done}/{total} faites",
|
|
272
|
+
addButton: "+ Ajouter",
|
|
273
|
+
addColumnButton: "+ Colonne",
|
|
274
|
+
labels: "Étiquettes :",
|
|
275
|
+
searchPlaceholder: "Rechercher...",
|
|
276
|
+
clearButton: "Effacer ✕",
|
|
277
|
+
clearFiltersTitle: "Effacer les filtres d'étiquette",
|
|
278
|
+
emptyHint: 'Aucune tâche pour le moment. Cliquez sur "+ Ajouter" pour en créer une.',
|
|
279
|
+
addColumn: "Ajouter une colonne",
|
|
280
|
+
newColumnLabelField: "Étiquette",
|
|
281
|
+
newColumnPlaceholder: "Revue",
|
|
282
|
+
noMatchingFilter: "Aucun élément ne correspond au filtre actuel",
|
|
283
|
+
},
|
|
284
|
+
todoPreview: {
|
|
285
|
+
completedRatio: "{done}/{total} terminées",
|
|
286
|
+
moreItems: "+ {count} de plus…",
|
|
287
|
+
headerIcon: "☑",
|
|
288
|
+
doneIcon: "✓",
|
|
289
|
+
pendingIcon: "○",
|
|
290
|
+
moreLabels: "+{count}",
|
|
291
|
+
},
|
|
292
|
+
todoDialogs: {
|
|
293
|
+
addTitle: "Ajouter une tâche",
|
|
294
|
+
editTitle: "Modifier la tâche",
|
|
295
|
+
deleteButton: "Supprimer",
|
|
296
|
+
deleteTitle: "Supprimer cet élément",
|
|
297
|
+
noneOption: "— Aucun —",
|
|
298
|
+
fieldText: "Texte",
|
|
299
|
+
fieldNote: "Note",
|
|
300
|
+
fieldStatus: "Statut",
|
|
301
|
+
fieldPriority: "Priorité",
|
|
302
|
+
fieldDueDate: "Date d'échéance",
|
|
303
|
+
fieldLabels: "Étiquettes",
|
|
304
|
+
fieldLabelsCommaSeparated: "Étiquettes (séparées par des virgules)",
|
|
305
|
+
textPlaceholder: "Que faut-il faire ?",
|
|
306
|
+
labelsPlaceholder: "travail, urgent",
|
|
307
|
+
},
|
|
308
|
+
todoKanban: {
|
|
309
|
+
rename: "Renommer",
|
|
310
|
+
alreadyDoneColumn: "Déjà la colonne des terminées",
|
|
311
|
+
markAsDoneColumn: "Définir comme colonne des terminées",
|
|
312
|
+
deleteColumn: "Supprimer la colonne",
|
|
313
|
+
columnActions: "Actions de colonne",
|
|
314
|
+
addCard: "+ Ajouter une carte",
|
|
315
|
+
},
|
|
316
|
+
todoTableList: {
|
|
317
|
+
noMatchingFilter: "Aucun élément ne correspond au filtre actuel",
|
|
318
|
+
},
|
|
319
|
+
pluginWiki: {
|
|
320
|
+
backToIndex: "Retour à l'index",
|
|
321
|
+
pdf: "PDF",
|
|
322
|
+
pdfFailed: "⚠ Échec du PDF",
|
|
323
|
+
tabIndex: "Index",
|
|
324
|
+
tabLog: "Journal",
|
|
325
|
+
tabLint: "Lint",
|
|
326
|
+
empty: "Le wiki est vide. Demandez au Wiki Manager d'ingérer une source.",
|
|
327
|
+
previewMore: "+ {count} de plus…",
|
|
328
|
+
chatPlaceholder: "Posez une question sur cette page…",
|
|
329
|
+
chatSend: "Démarrer une nouvelle conversation sur cette page",
|
|
330
|
+
},
|
|
331
|
+
pluginPresentHtml: {
|
|
332
|
+
saveAsPdf: "Enregistrer en PDF (ouvre la boîte de dialogue d'impression)",
|
|
333
|
+
pdf: "PDF",
|
|
334
|
+
untitled: "Page HTML",
|
|
335
|
+
hideSource: "Masquer la source <>",
|
|
336
|
+
showSource: "Afficher la source <>",
|
|
337
|
+
},
|
|
338
|
+
pluginManageSource: {
|
|
339
|
+
titlePlaceholder: "Titre (facultatif)",
|
|
340
|
+
heading: "Sources d'information",
|
|
341
|
+
sourceCount: "{count} source | {count} sources",
|
|
342
|
+
addButton: "Ajouter",
|
|
343
|
+
rebuildNow: "Reconstruire maintenant",
|
|
344
|
+
rebuilding: "Reconstruction…",
|
|
345
|
+
typeField: "Type",
|
|
346
|
+
addingLabel: "Ajout…",
|
|
347
|
+
addAndRebuild: "Ajouter + Reconstruire",
|
|
348
|
+
emptyPickPack:
|
|
349
|
+
"Aucune source enregistrée pour l'instant. Choisissez un pack de démarrage ci-dessous, cliquez sur {addBold} en haut, ou demandez à Claude d'en enregistrer une.",
|
|
350
|
+
emptyAddStrong: "+ Ajouter",
|
|
351
|
+
registering: "Enregistrement + récupération…",
|
|
352
|
+
removeLabel: "Retirer",
|
|
353
|
+
removingLabel: "Retrait…",
|
|
354
|
+
todaysBrief: "Briefing du jour",
|
|
355
|
+
todaysBriefLoading: "Chargement du briefing du jour…",
|
|
356
|
+
briefNone: "Aucun briefing rédigé pour cette date. Cliquez sur Reconstruire maintenant.",
|
|
357
|
+
briefEmpty: "Le briefing du jour est vide.",
|
|
358
|
+
briefLoadFailed: "Échec du chargement du briefing",
|
|
359
|
+
lastRebuildSummary: "Dernière reconstruction ({date}) : {itemCount} éléments issus de {planned} sources, {duplicates} doublons supprimés.",
|
|
360
|
+
archiveErrorsSuffix: "({count} erreurs d'archivage)",
|
|
361
|
+
kindRss: "RSS",
|
|
362
|
+
kindGithubRel: "Releases GitHub",
|
|
363
|
+
kindGithubIss: "Issues GitHub",
|
|
364
|
+
kindArxiv: "arXiv",
|
|
365
|
+
kindGithubReleases: "Releases GitHub",
|
|
366
|
+
kindGithubIssues: "Issues GitHub",
|
|
367
|
+
briefDateLabel: "({date})",
|
|
368
|
+
primaryRssPlaceholder: "https://news.ycombinator.com/rss",
|
|
369
|
+
primaryGithubPlaceholder: "https://github.com/owner/repo (ou owner/repo)",
|
|
370
|
+
primaryArxivPlaceholder: "cat:cs.CL",
|
|
371
|
+
primaryRssHint: "URL du flux (RSS 2.0 / Atom / RDF)",
|
|
372
|
+
primaryGithubRelHint: "URL du dépôt GitHub ou owner/repo — récupère les releases",
|
|
373
|
+
primaryGithubIssHint: "URL du dépôt GitHub ou owner/repo — récupère les issues",
|
|
374
|
+
primaryArxivHint: "Requête de recherche arXiv (ex. cat:cs.CL ou au:hinton)",
|
|
375
|
+
confirmRemove: 'Retirer la source "{slug}" ?',
|
|
376
|
+
flashRegistered: "Enregistrée. Récupération des nouveaux éléments…",
|
|
377
|
+
flashRebuildReady: "Prêt : {itemCount} éléments issus de {planned} source.|Prêt : {itemCount} éléments issus de {planned} sources.",
|
|
378
|
+
flashRebuildComplete: "Reconstruction terminée : {itemCount} éléments issus de {planned} sources.",
|
|
379
|
+
flashRebuildFailed: "Échec de la reconstruction : {error}",
|
|
380
|
+
flashRegisterFailed: "Échec de l'enregistrement de la source",
|
|
381
|
+
flashRegisterSucceededRebuildFailed: "Enregistrement réussi mais reconstruction échouée : {error}",
|
|
382
|
+
flashRemoved: '"{slug}" retirée.',
|
|
383
|
+
flashRemoveFailed: "Échec du retrait : {error}",
|
|
384
|
+
flashRefreshListFailed: "Échec de l'actualisation des sources : {error}",
|
|
385
|
+
flashPresetAlreadyRegistered: 'Toutes les sources de "{label}" sont déjà enregistrées.',
|
|
386
|
+
flashPresetRegistered: '{count} source enregistrée depuis "{label}". Récupération…|{count} sources enregistrées depuis "{label}". Récupération…',
|
|
387
|
+
flashPresetPartial: "Enregistrées {ok}/{total}. Erreurs : {errors}",
|
|
388
|
+
},
|
|
389
|
+
pluginManageSkills: {
|
|
390
|
+
deleteProjectSkill: "Supprimer cette skill de projet",
|
|
391
|
+
heading: "Skills",
|
|
392
|
+
previewCount: "{count} skill | {count} skills",
|
|
393
|
+
previewMore: "+{count} de plus",
|
|
394
|
+
subheading: ({ named }: { named: (key: string) => unknown }) => `${named("count")} disponibles · cliquez pour afficher · "Run" l'invoque comme /<name>`,
|
|
395
|
+
emptyWithPath: "Aucune skill trouvée. Ajoutez des dossiers de skills sous {path}.",
|
|
396
|
+
emptySkillPath: "~/.claude/skills/",
|
|
397
|
+
selectHint: "Sélectionnez une skill à gauche pour afficher son SKILL.md.",
|
|
398
|
+
loading: "Chargement…",
|
|
399
|
+
fieldDescription: "Description",
|
|
400
|
+
fieldBody: "Corps (Markdown)",
|
|
401
|
+
emptyBody: "(corps vide)",
|
|
402
|
+
btnEdit: "Modifier",
|
|
403
|
+
btnDelete: "Supprimer",
|
|
404
|
+
btnRun: "Exécuter",
|
|
405
|
+
errListFailed: "Échec du chargement des skills : {error}",
|
|
406
|
+
errDetailFailed: "Échec du chargement de la skill : {error}",
|
|
407
|
+
errSaveFailed: "Échec de l'enregistrement : {error}",
|
|
408
|
+
errDeleteFailed: "Échec de la suppression",
|
|
409
|
+
confirmDelete: 'Supprimer la skill "{name}" ? Cela retire ~/mulmoclaude/.claude/skills/{name}/SKILL.md.',
|
|
410
|
+
},
|
|
411
|
+
pluginManageRoles: {
|
|
412
|
+
heading: "Rôles personnalisés",
|
|
413
|
+
roleCount: "{count} rôle | {count} rôles",
|
|
414
|
+
previewCount: "{count} rôle personnalisé | {count} rôles personnalisés",
|
|
415
|
+
addButton: "+ Ajouter",
|
|
416
|
+
createPanel: "Créer un nouveau rôle",
|
|
417
|
+
fieldId: "ID",
|
|
418
|
+
fieldName: "Nom",
|
|
419
|
+
fieldIcon: "Icône",
|
|
420
|
+
fieldPrompt: "Prompt",
|
|
421
|
+
fieldPlugins: "Plugins",
|
|
422
|
+
fieldStarterQueries: "Questions de démarrage",
|
|
423
|
+
onePerLine: "(une par ligne)",
|
|
424
|
+
helpLink: "?",
|
|
425
|
+
idFormatted: "({id})",
|
|
426
|
+
missingEnv: "({env} manquant)",
|
|
427
|
+
requiresEnv: "Nécessite {env} dans .env",
|
|
428
|
+
collapse: "Réduire",
|
|
429
|
+
expand: "Développer",
|
|
430
|
+
idPlaceholder: "id-unique",
|
|
431
|
+
creating: "Création…",
|
|
432
|
+
create: "Créer",
|
|
433
|
+
updating: "Mise à jour…",
|
|
434
|
+
update: "Mettre à jour",
|
|
435
|
+
cancel: "Annuler",
|
|
436
|
+
delete: "Supprimer",
|
|
437
|
+
emptyHint: 'Aucun rôle personnalisé pour le moment. Cliquez sur "+ Ajouter" ou demandez à Claude d\'en créer un.',
|
|
438
|
+
errIdRequired: "L'ID est obligatoire.",
|
|
439
|
+
errIdInvalid: "L'ID ne peut contenir que des lettres, des chiffres, '-' et '_'.",
|
|
440
|
+
errNameRequired: "Le nom est obligatoire.",
|
|
441
|
+
errIdDuplicate: "Un rôle avec l'ID '{id}' existe déjà.",
|
|
442
|
+
errCreateFailed: "Échec de la création",
|
|
443
|
+
errSaveFailed: "Échec de l'enregistrement",
|
|
444
|
+
errDeleteFailed: "Échec de la suppression",
|
|
445
|
+
errNetworkError: "Erreur réseau",
|
|
446
|
+
errServerError: "Erreur du serveur : {status}",
|
|
447
|
+
},
|
|
448
|
+
pluginUiImage: {
|
|
449
|
+
promptLabel: "{label} :",
|
|
450
|
+
},
|
|
451
|
+
pluginMulmoScript: {
|
|
452
|
+
beatCount: "{count} beat | {count} beats",
|
|
453
|
+
movie: "Film",
|
|
454
|
+
generating: "Génération…",
|
|
455
|
+
rendering: "Rendu…",
|
|
456
|
+
saving: "Enregistrement…",
|
|
457
|
+
update: "Mettre à jour",
|
|
458
|
+
characters: "Personnages",
|
|
459
|
+
drop: "Déposer",
|
|
460
|
+
gen: "Générer",
|
|
461
|
+
play: "▶ Lire",
|
|
462
|
+
stop: "■ Arrêter",
|
|
463
|
+
errPrefix: "⚠ Erreur",
|
|
464
|
+
noBeats: "Aucun beat trouvé dans le script",
|
|
465
|
+
editSource: "Modifier la source du script",
|
|
466
|
+
applyChanges: "Appliquer les modifications",
|
|
467
|
+
generateAll: "Tout générer",
|
|
468
|
+
orDropImage: "ou déposez une image",
|
|
469
|
+
generate: "Générer",
|
|
470
|
+
generateAudio: "♪ Générer",
|
|
471
|
+
saveErrorInvalidJson: "⚠ JSON invalide : {error}",
|
|
472
|
+
saveErrorSaveFailed: "⚠ Échec de la sauvegarde : {error}",
|
|
473
|
+
},
|
|
474
|
+
pluginMarkdown: {
|
|
475
|
+
loading: "Chargement du document...",
|
|
476
|
+
loadFailed: "⚠ Échec du chargement du document : {error}",
|
|
477
|
+
refreshFailed: "⚠ Échec de l'actualisation du document : {error} — affichage du dernier contenu chargé avec succès.",
|
|
478
|
+
noContent: "Aucun contenu Markdown disponible",
|
|
479
|
+
pdf: "PDF",
|
|
480
|
+
pdfFailedShort: "⚠ Échec PDF",
|
|
481
|
+
editSource: "Modifier la source Markdown",
|
|
482
|
+
saving: "Enregistrement...",
|
|
483
|
+
applyChanges: "Appliquer les modifications",
|
|
484
|
+
cancel: "Annuler",
|
|
485
|
+
saveFailed: "Échec de l'enregistrement : {error}",
|
|
486
|
+
saveError: "⚠ {error}",
|
|
487
|
+
copyLabel: "Copier",
|
|
488
|
+
copiedLabel: "Copié !",
|
|
489
|
+
},
|
|
490
|
+
pluginTextResponse: {
|
|
491
|
+
pdf: "PDF",
|
|
492
|
+
pdfFailed: "⚠ Échec PDF",
|
|
493
|
+
editContent: "Modifier le contenu texte",
|
|
494
|
+
applyChanges: "Appliquer les modifications",
|
|
495
|
+
copyLabel: "Copier",
|
|
496
|
+
copiedLabel: "Copié !",
|
|
497
|
+
cancel: "Annuler",
|
|
498
|
+
},
|
|
499
|
+
pluginSpreadsheet: {
|
|
500
|
+
previewLabel: "📊 Tableur",
|
|
501
|
+
previewUntitled: "Tableur",
|
|
502
|
+
previewSheets: "{count} feuille | {count} feuilles",
|
|
503
|
+
untitled: "Tableur",
|
|
504
|
+
excel: "Excel",
|
|
505
|
+
valuePlaceholder: "Valeur",
|
|
506
|
+
valueOrFormulaPlaceholder: "Valeur ou formule (ex. 100 ou SUM(B2:B11))",
|
|
507
|
+
formatPlaceholder: "Format (ex. $#,##0.00)",
|
|
508
|
+
loading: "Chargement du tableur...",
|
|
509
|
+
noData: "Aucune donnée de tableur disponible",
|
|
510
|
+
editData: "Modifier les données du tableur",
|
|
511
|
+
applyChanges: "Appliquer les modifications",
|
|
512
|
+
update: "Mettre à jour",
|
|
513
|
+
stringType: "Texte",
|
|
514
|
+
formulaType: "Formule",
|
|
515
|
+
},
|
|
516
|
+
app: {
|
|
517
|
+
// Slots `<i18n-t>` — les noms `envKey` / `envFile` sont rendus sous
|
|
518
|
+
// forme de `<code>` inline dans App.vue ; les littéraux (nom de
|
|
519
|
+
// variable et nom de fichier) restent donc non traduits.
|
|
520
|
+
geminiRequired: "La génération d'images nécessite {envKey}. Ajoutez-le à {envFile} et redémarrez l'application.",
|
|
521
|
+
startConversation: "Démarrer une conversation",
|
|
522
|
+
},
|
|
523
|
+
suggestionsPanel: {
|
|
524
|
+
suggestions: "Suggestions",
|
|
525
|
+
sendEditHint: "cliquez pour envoyer · shift+clic pour modifier",
|
|
526
|
+
},
|
|
527
|
+
settingsToolsTab: {
|
|
528
|
+
// Rendu via <i18n-t> avec les slots nommés `allowedTools` et
|
|
529
|
+
// `claudeMcp` afin que les balises `<code>` inline conservent leur
|
|
530
|
+
// style tandis que le texte reste traduisible.
|
|
531
|
+
explanation:
|
|
532
|
+
"Noms d'outils supplémentaires à transmettre à Claude via {allowedTools}. Un par ligne. Utile pour les serveurs MCP intégrés à Claude Code comme Gmail / Google Agenda après authentification via {claudeMcp}.",
|
|
533
|
+
},
|
|
534
|
+
};
|
|
535
|
+
|
|
536
|
+
export default frMessages;
|