@nac3/forge-cli 1.0.55 → 1.0.56

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.
@@ -230,5 +230,296 @@
230
230
  "panel.files.empty": "(sin archivos)",
231
231
  "panel.files.truncated": "(lista truncada)",
232
232
  "panel.files.opened": "Abierto",
233
- "panel.files.openFailed": "No se pudo abrir el archivo."
233
+ "panel.files.openFailed": "No se pudo abrir el archivo.",
234
+ "startup.tab.tasks": "Tareas",
235
+ "settings.bridge.title": "Coordinacion entre instancias",
236
+ "settings.bridge.accept": "Aceptar mensajes dirigidos de otras instancias (los inyecta como chat)",
237
+ "settings.bridge.composePlaceholder": "Mensaje a las otras instancias...",
238
+ "settings.voice.title": "Voz",
239
+ "settings.voice.mode": "Modo",
240
+ "settings.voice.modeMic": "modo mic",
241
+ "settings.voice.stt": "STT",
242
+ "settings.voice.sttBrowser": "STT navegador",
243
+ "settings.voice.ttsEngine": "TTS engine",
244
+ "settings.voice.ttsBrowser": "TTS navegador",
245
+ "settings.voice.ttsVoice": "Voz TTS (solo Google)",
246
+ "settings.vad.title": "VAD (deteccion de silencio)",
247
+ "settings.vad.resetDefaults": "Reset defaults",
248
+ "settings.vad.engine": "Motor",
249
+ "settings.vad.engineAmplitude": "Amplitud (RMS)",
250
+ "settings.vad.engineBand": "Banda 80-400Hz",
251
+ "settings.vad.baselineWindow": "Baseline window",
252
+ "settings.vad.thresholdMult": "Threshold mult (baseline x N)",
253
+ "settings.vad.thresholdMin": "Threshold minimo",
254
+ "settings.vad.thresholdMax": "Threshold maximo",
255
+ "settings.vad.silence": "Silencio para cerrar",
256
+ "settings.vad.minVoiced": "Voz minima (anti-blip)",
257
+ "settings.vad.tick": "Tick del VAD",
258
+ "settings.vad.bandLow": "Banda voz: low (Hz)",
259
+ "settings.vad.bandHigh": "Banda voz: high (Hz)",
260
+ "settings.vad.showOverlay": "Mostrar overlay live",
261
+ "settings.vad.logStats": "Loggear stats por sesion",
262
+ "settings.brain.anthropicMode": "Anthropic: modalidad",
263
+ "settings.brain.modePlan": "Plan (suscripcion Claude)",
264
+ "settings.brain.modeConsole": "Console (API key)",
265
+ "settings.brain.modeNote": "Se aplica al reabrir el panel.",
266
+ "settings.brain.ecoEnabled": "Modo eco habilitado",
267
+ "settings.brain.ecoHint": "apagado = frontier siempre",
268
+ "settings.brain.modelEco": "Modelo eco",
269
+ "settings.brain.modelFrontier": "Modelo frontier",
270
+ "settings.brain.modelMultimodal": "Modelo multimodal",
271
+ "settings.brain.multimodalClearTitle": "Quitar el brain multimodal dedicado (vuelve al ruteo de vision automatico)",
272
+ "settings.brain.auto": "Auto",
273
+ "settings.brain.multimodalHint": "Brain dedicado para turnos con imagen. Auto = ruteo de vision automatico (el frontier si ve, o aviso si no).",
274
+ "settings.brain.geminiCache": "Cache explicito de Gemini (CachedContent)",
275
+ "settings.brain.geminiCacheHint": "Opt-in. Conviene en sesiones largas con Gemini Pro; en sesiones cortas el cache implicito gratis de 2.5 ya alcanza.",
276
+ "settings.federation.title": "Federacion de brain",
277
+ "settings.federation.intro": "Usa el brain de otro Forge (su key nunca sale de su maquina) o presta el tuyo. Tu codigo se ejecuta local; solo la inferencia viaja.",
278
+ "settings.federation.connectedTo": "Conectado a",
279
+ "settings.federation.disconnect": "Desconectar",
280
+ "settings.federation.connectMe": "Conectarme",
281
+ "settings.federation.tokenPlaceholder": "Pega el codigo de federacion",
282
+ "settings.federation.connect": "Conectar",
283
+ "settings.federation.lendBrain": "Prestar mi brain",
284
+ "settings.federation.generateCode": "Generar codigo",
285
+ "settings.federation.host": "Hospedar (responder a los hijos)",
286
+ "settings.federation.fedBrain": "Brain de federacion",
287
+ "settings.federation.fedBrainNote": "El que responde a los hijos. API directa (DeepSeek por defecto). Claude Plan no sirve para hospedar; necesita una key con saldo.",
288
+ "settings.federation.codeOnce": "Codigo (1 solo uso)",
289
+ "settings.federation.copy": "Copiar",
290
+ "settings.keys.title": "API keys (BYOK)",
291
+ "settings.keys.configure": "Configurar",
292
+ "settings.keys.remove": "Quitar",
293
+ "settings.keys.brainAnthropic": "Brain (Anthropic)",
294
+ "settings.keys.brainOpenai": "Brain (OpenAI)",
295
+ "settings.keys.brainGoogle": "Brain (Google IA)",
296
+ "settings.keys.brainDeepseek": "Brain (DeepSeek)",
297
+ "settings.keys.brainXai": "Brain (xAI / Grok)",
298
+ "settings.keys.brainMistral": "Brain (Mistral)",
299
+ "settings.keys.brainCohere": "Brain (Cohere)",
300
+ "settings.keys.sttGoogle": "STT Google",
301
+ "settings.keys.ttsGoogle": "TTS Google",
302
+ "settings.keys.ttsElevenlabs": "TTS ElevenLabs",
303
+ "settings.keys.sttWhisper": "STT Whisper",
304
+ "settings.lang.title": "Idioma",
305
+ "settings.lang.panelVoice": "Panel + voz",
306
+ "settings.lang.changeButton": "Cambiar idioma",
307
+ "settings.vault.title": "Vault (encriptado)",
308
+ "settings.vault.slots": "Slots",
309
+ "settings.vault.open": "Abrir vault",
310
+ "settings.license.email": "Email",
311
+ "settings.license.validated": "Validado",
312
+ "settings.license.connectHint": "Conecta tu cuenta de Polar. Pone el email con el que pagaste y sincronizamos tu plan automaticamente.",
313
+ "settings.license.emailPlaceholder": "email@ejemplo.com",
314
+ "settings.license.connect": "Conectar",
315
+ "settings.license.sync": "Sincronizar con Polar",
316
+ "settings.license.buy": "Comprar / activar plan",
317
+ "settings.budget.title": "Presupuesto este mes",
318
+ "settings.budget.renews": "Renueva",
319
+ "settings.budget.tokensEco": "Tokens eco",
320
+ "settings.budget.tokensFrontier": "Tokens frontier",
321
+ "settings.budget.buyExtension": "Comprar extension de tokens",
322
+ "settings.limits.title": "Limites (avanzado)",
323
+ "settings.limits.editHint": "Editar cualquier valor + tab/blur guarda.",
324
+ "settings.limits.reset": "Reset a defaults",
325
+ "settings.bookmarks.title": "Reader bookmarks",
326
+ "settings.graph.title": "Project knowledge graph",
327
+ "settings.pair.title": "Vincular telefono",
328
+ "settings.pair.hint": "Abri Forge Mobile, toca \"Vincular\" y escanea este QR. Listo.",
329
+ "settings.pair.generateQr": "Generar QR",
330
+ "settings.pair.cantRead": "La camara no lee el QR? Copia este codigo y pegalo en Forge Mobile:",
331
+ "settings.audit.viewFull": "Ver completo",
332
+ "settings.audit.close": "Cerrar",
333
+ "settings.audit.allKinds": "Todos los kinds",
334
+ "settings.audit.allModes": "Todos los modes",
335
+ "settings.audit.copyJson": "Copiar JSON",
336
+ "settings.audit.closeDetail": "Cerrar detalle",
337
+ "settings.about.title": "Acerca de",
338
+ "settings.danger.title": "Zona de peligro",
339
+ "settings.danger.warning": "Cuando esta ON, Yujin ejecuta TODA accion sin pedir confirmacion (incluye shell.exec, rm, git push --force, etc). Velocidad sobre seguridad. Todo queda registrado en audit log.",
340
+ "settings.keyEditor.placeholder": "Pega aqui tu API key",
341
+ "settings.license.title": "Licencia",
342
+ "settings.plan": "Plan",
343
+ "settings.audit.title": "Registro de auditoría",
344
+ "settings.legal.title": "Legal",
345
+ "panel.status.projectSwitchFail": "No se pudo cambiar de proyecto.",
346
+ "panel.status.projectRemoveFail": "No se pudo quitar el proyecto.",
347
+ "panel.status.projectAddFail": "No se pudo anadir el proyecto.",
348
+ "panel.status.cancelFail": "No se pudo cancelar: {reason}",
349
+ "panel.status.cancelNetError": "Error de red al cancelar shell.",
350
+ "panel.status.notEditable": "Este tipo de contenido no es editable.",
351
+ "panel.status.savedAsPicker": "Guardado como: {name} (en la ruta que elegiste en el dialog).",
352
+ "panel.status.saveAsFail": "Error en Guardar como: {error} -- usando fallback.",
353
+ "panel.status.saveFail": "Error al guardar: {error}",
354
+ "panel.status.savedAs": "Guardado como: {path} ({bytes} bytes)",
355
+ "panel.status.netError": "Error de red: {error}",
356
+ "panel.status.savedTabOnly": "Cambios guardados en la pestana (no en disco -- sin file_path).",
357
+ "panel.status.saved": "Guardado: {path} ({bytes} bytes)",
358
+ "panel.status.copied": "Copiado al portapapeles.",
359
+ "panel.status.copyFail": "No se pudo copiar.",
360
+ "panel.status.modeAvailable": "Modos disponibles: didactico, tecnico. Uso: /modo tecnico",
361
+ "panel.status.modeChangeFail": "No pude cambiar el modo: {error}",
362
+ "panel.status.modeChanged": "Modo cambiado a {target}. El proximo turno ya usa este modo.",
363
+ "panel.status.genericError": "Error: {error}",
364
+ "panel.status.brainTierAuto": "Brain tier vuelve a auto (router decide segun verbo / phase).",
365
+ "panel.status.brainTierForced": "Brain tier forzado a \"{target}\" para esta sesion. /auto vuelve al router.",
366
+ "panel.confirm.tabUnsaved": "La pestana \"{title}\" tiene cambios sin guardar. ¿Cerrar igual?",
367
+ "panel.confirm.tabsUnsaved": "Hay pestanas con cambios sin guardar. ¿Cerrar todo igual?",
368
+ "panel.confirm.discardChanges": "Descartar los cambios sin guardar?",
369
+ "panel.confirm.removeSlot": "Quitar el slot \"{slot}\"? Esto no se puede deshacer.",
370
+ "panel.confirm.removeKey": "Quitar la key de {slot}?",
371
+ "panel.prompt.saveAs": "Guardar como (path relativo al proyecto):",
372
+ "panel.voice.sttFallback": "STT del navegador no disponible; usando fallback del servidor.",
373
+ "panel.voice.noMicSupport": "Tu navegador no soporta el acceso al microfono.",
374
+ "panel.voice.recordingCountdown": "Grabando... auto-stop en {n}s",
375
+ "panel.voice.autoStopped": "Grabacion detenida automaticamente a los 55s (limite de 1 min de Google STT). Proba con algo mas corto.",
376
+ "panel.voice.noAudio": "No se capturo audio. Proba de nuevo.",
377
+ "panel.voice.audioTooLong": "Audio demasiado largo (>1 min). Limite sincronico de Google STT. Proba con algo mas corto.",
378
+ "panel.voice.ttsUnavailable": "TTS del navegador no disponible; volve a Google en la configuracion.",
379
+ "panel.voice.micClosedHalfDuplex": "Mic cerrado mientras Yujin habla (half-duplex).",
380
+ "panel.voice.micBlocked": "Microfono bloqueado. Permiti el microfono para esta app en los ajustes del navegador y volve a intentar.",
381
+ "panel.voice.noMicDevice": "No detecto microfono en este dispositivo.",
382
+ "panel.voice.micOpenFail": "No pude abrir el microfono: {error}",
383
+ "panel.voice.micOpenListening": "Mic abierto, escuchando...",
384
+ "panel.voice.listening": "Te escucho...",
385
+ "panel.voice.listeningInterim": "Te escucho... {text}",
386
+ "panel.voice.micBlockedBrowser": "Microfono bloqueado por el navegador. Hace click en el icono del candado en la barra de URL y permiti microfono, despues recarga la pagina. O cambia STT a \"google\" / \"whisper\" en la configuracion si tenes la API key.",
387
+ "panel.voice.noMicPhysical": "No detecto microfono fisico. Conecta uno o cambia STT a \"google\" / \"whisper\" en la configuracion.",
388
+ "panel.voice.networkRequired": "Web Speech requiere conexion a internet (Chrome usa Google detras). Probate sin conexion intermitente o cambia STT a \"whisper\" si tenes API key.",
389
+ "panel.voice.langNotSupported": "Tu navegador no soporta este idioma para STT. Cambia el idioma del panel a uno soportado (en, es, pt) o cambia STT a \"google\" / \"whisper\".",
390
+ "panel.voice.micError": "Error de mic: {error}",
391
+ "panel.voice.noAudioToRecognizer": "No llego audio al reconocedor: el dictado del navegador no esta capturando en esta app.",
392
+ "panel.voice.micOpenNoVoice": "Mic abierto pero no detecte voz. Acerca el microfono y habla mas fuerte; si sigue, el dictado gratis no funciona en esta PWA.",
393
+ "panel.voice.voiceNoText": "Detecte voz pero el navegador no devolvio texto (STT gratis no disponible en esta PWA).",
394
+ "panel.voice.startingDictation": "Iniciando dictado...",
395
+ "panel.voice.couldNotStartMic": "No pude iniciar el mic: {error}",
396
+ "panel.status.imageTooLarge": "Imagen muy grande (>6MB): {name}",
397
+ "panel.status.imageReady": "Imagen lista para enviar: {name}",
398
+ "panel.status.imageReadFail": "No pude leer la imagen: {error}",
399
+ "panel.tip.attachFile": "Adjuntar archivo",
400
+ "panel.tip.refreshDiscovery": "Refrescar discovery",
401
+ "panel.tip.refreshNow": "Refrescar ahora",
402
+ "panel.tip.filterByProject": "Filtrar por proyecto",
403
+ "panel.tip.concurrentRuns": "Ejecuciones concurrentes: limites global / por proyecto",
404
+ "panel.tip.mcpBridges": "MCP Bridges (F101)",
405
+ "panel.tip.activity": "Actividad de agentes + inspector de bridge + chat por agente",
406
+ "panel.tip.settings": "Ajustes (modo voz, STT, TTS, claves, idioma)",
407
+ "panel.tip.zoomOut": "Reducir zoom (Ctrl -)",
408
+ "panel.tip.zoomReset": "Restablecer zoom (Ctrl 0)",
409
+ "panel.tip.zoomIn": "Aumentar zoom (Ctrl +)",
410
+ "panel.tip.maximize": "Maximizar / restaurar (pantalla completa)",
411
+ "panel.tip.closeBoard": "Cerrar todo el pizarron",
412
+ "panel.tip.openInEditor": "Abrir en mi editor",
413
+ "panel.tip.open": "Abrir",
414
+ "panel.tip.saveAs": "Guardar como -- elegi nuevo path (relativo al proyecto)",
415
+ "panel.tip.codeModeDetail": "Detallado: archivos, diffs y comandos en vivo",
416
+ "panel.tip.codeModeZen": "Sumi-e: arte con texto ocasional",
417
+ "panel.tip.cancelShell": "Cancelar comando shell",
418
+ "panel.tip.closeTab": "Cerrar pestana",
419
+ "panel.tip.reopenNativeTabs": "Reabrir pestanas nativas cerradas",
420
+ "panel.tip.notTestedYet": "todavia no probado",
421
+ "panel.aria.activity": "Actividad",
422
+ "panel.aria.settings": "Ajustes",
423
+ "panel.aria.zoomOut": "Reducir zoom",
424
+ "panel.aria.zoomIn": "Aumentar zoom",
425
+ "panel.aria.maximize": "Maximizar",
426
+ "panel.aria.closeBoard": "cerrar todo",
427
+ "panel.aria.thinking": "pensando",
428
+ "panel.hint.boardEmpty": "Aqui se muestra contenido estructurado: codigo, tablas, documentos. Pedile a Yujin que escriba o edite algo.",
429
+ "panel.hint.planMode": "Estas en modo Plan (suscripcion). El pizarron se dibuja cuando el brain corre en modo API: cambialo en <strong>Ajustes &gt; Brain &gt; Anthropic: modalidad &gt; Console</strong> y reabri el panel.",
430
+ "panel.hint.bookmarksEmpty": "Sin bookmarks. Pedile a Yujin \"marca este punto como ...\" al leer un doc.",
431
+ "panel.voice.replyFailed": "Fallo la respuesta de voz: {err}",
432
+ "panel.voice.replyError": "Error en la respuesta de voz: {err}",
433
+ "panel.status.languageSwitchFailed": "Fallo el cambio de idioma: {err}",
434
+ "panel.status.languageListFailed": "No se pudo cargar la lista de idiomas",
435
+ "panel.legal.loading": "Cargando...",
436
+ "panel.legal.loadError": "Error {status} cargando el documento.",
437
+ "panel.legal.networkError": "Error de red: {err}",
438
+ "panel.legal.defaultTitle": "Legal",
439
+ "panel.feedback.copied": "Copiado",
440
+ "panel.feedback.copyFailed": "Fallo el copiado",
441
+ "panel.feedback.clipboardUnavailable": "Clipboard no disponible",
442
+ "panel.feedback.saving": "Guardando...",
443
+ "panel.feedback.saved": "Guardado.",
444
+ "panel.feedback.saveError": "error guardando",
445
+ "panel.feedback.netError": "error de red",
446
+ "panel.feedback.netErrorSaving": "error de red guardando",
447
+ "panel.feedback.errorPrefix": "Error: {detail}",
448
+ "panel.pair.generating": "Generando...",
449
+ "panel.pair.generateQr": "Generar QR",
450
+ "panel.pair.copy": "Copiar",
451
+ "panel.pair.expiry": "Expira en ~{mins} min. Generalo de nuevo si caduca.",
452
+ "panel.pair.qrNetError": "Error de red al generar el QR.",
453
+ "panel.audit.copyJson": "Copiar JSON",
454
+ "panel.limits.resetApplied": "Reset a defaults aplicado",
455
+ "panel.nac3.effects": "Efectos: {list}",
456
+ "panel.nac3.effectsUnknown": "desconocidos",
457
+ "panel.nac3.cancel": "Cancelar",
458
+ "panel.nac3.reject": "Rechazar",
459
+ "panel.nac3.approve": "Aprobar",
460
+ "panel.nac3.approveDestructive": "Aprobar (destructivo)",
461
+ "panel.nac3.executing": "Ejecutando...",
462
+ "panel.tts.providerBrowser": "TTS navegador",
463
+ "panel.tts.providerGoogle": "TTS Google",
464
+ "panel.tts.providerTitle": "Tocar para alternar entre navegador (SpeechSynthesis nativo, voces del SO) y Google Cloud TTS (server-side).",
465
+ "panel.stt.providerBrowser": "STT navegador",
466
+ "panel.stt.providerGoogle": "STT Google",
467
+ "panel.stt.providerWhisper": "STT Whisper",
468
+ "panel.stt.providerTitle": "Tocar para alternar entre navegador (rapido + es-AR nativo + gratis), Google Cloud STT (server-side, BYOK) o Whisper (server-side, BYOK).",
469
+ "panel.tts.voiceTitle": "Voz actual: {id} / {persona} ({gender}) -- {style}. Tocar para ciclar. Studio = articula s claro; Neural2 = natural espanol (aspira s finales).",
470
+ "panel.license.lendNeedsLicense": "activa tu licencia para prestar tu brain",
471
+ "panel.license.emailInvalid": "Pone un email valido (con @).",
472
+ "panel.license.connecting": "Conectando...",
473
+ "panel.license.savingEmail": "Guardando email + sincronizando con Polar...",
474
+ "panel.license.syncFailedRetry": "Email guardado, pero sync fallo: {err}{http}. Si recien pagaste, espera 1-2 min y dale a \"Sincronizar con Polar\".",
475
+ "panel.license.planOk": "OK -- plan: {plan}.",
476
+ "panel.license.netError": "Error de red: {err}",
477
+ "panel.license.syncing": "Sincronizando...",
478
+ "panel.license.querying": "Consultando servidor...",
479
+ "panel.license.syncError": "Error de sync: {err}{http}",
480
+ "panel.license.planUnchanged": "Plan sin cambios: {plan}",
481
+ "panel.license.planUpdated": "Plan actualizado: {before} -> {after}",
482
+ "panel.license.syncWithPolar": "Sincronizar con Polar",
483
+ "panel.license.errorWithCode": "error: {code}",
484
+ "panel.keyEditor.keyTooShort": "Key demasiado corta (min 8 chars).",
485
+ "panel.bridge.coordUnavailable": "Coordinacion no disponible.",
486
+ "panel.bridge.statusUnavailable": "no disponible",
487
+ "panel.mcp.loadingBridges": "Cargando bridges...",
488
+ "panel.tools.loading": "Cargando tools...",
489
+ "panel.agentsChat.backPairs": "< Pares",
490
+ "panel.agentsChat.noMessages": "Sin mensajes en este par.",
491
+ "panel.agentsChat.noAgents": "sin agentes",
492
+ "panel.agentsChat.pickAgent": "Elegi un agente + escribe texto antes de enviar.",
493
+ "panel.agentsChat.sending": "Enviando...",
494
+ "panel.agentsChat.errorGeneric": "Error: {err}",
495
+ "panel.whatsNew.dismiss": "Cerrar",
496
+ "panel.alert.noEditor": "No hay editor en el PATH. Copie el path: {path}",
497
+ "panel.alert.pathRelative": "El path debe ser relativo al proyecto (sin \"/\" inicial ni \"..\").",
498
+ "panel.tip.saveTo": "Guardar en {path}",
499
+ "panel.tip.saveToMemory": "(memoria)",
500
+ "panel.button.saveAs": "Guardar como...",
501
+ "panel.aria.concurrentRuns": "Ejecuciones concurrentes",
502
+ "panel.activity.allProjects": "Todos los proyectos",
503
+ "panel.activity.loadingFeed": "Cargando feed...",
504
+ "panel.feedback.savedShort": "guardado",
505
+ "panel.pair.qrFailed": "No pude generar el QR.",
506
+ "panel.brain.modePlan": "Plan (suscripcion)",
507
+ "panel.brain.modeConsole": "Console (API key)",
508
+ "panel.brain.applying": "aplicando {mode}...",
509
+ "panel.brain.applied": "{mode} aplicado. El proximo turno ya usa este modo.",
510
+ "panel.brain.reopenHint": "Se aplica al reabrir el panel.",
511
+ "panel.brain.active": "{mode} activo",
512
+ "panel.bridge.roleHost": "host",
513
+ "panel.bridge.roleClient": "cliente",
514
+ "panel.bridge.instanceOne": "instancia",
515
+ "panel.bridge.instanceMany": "instancias",
516
+ "panel.bridge.you": "vos",
517
+ "panel.tip.deleteTask": "Eliminar tarea",
518
+ "panel.tasks.cmdPlaceholder": "comando (ej: pnpm install)...",
519
+ "panel.readAloud.code": "Codigo",
520
+ "panel.readAloud.codeLang": "Codigo en {lang}",
521
+ "panel.readAloud.file": "Archivo {file}",
522
+ "panel.readAloud.content": "Contenido: {content}",
523
+ "panel.pizarron.tabOne": "pestana",
524
+ "panel.pizarron.tabMany": "pestanas"
234
525
  }
@@ -230,5 +230,296 @@
230
230
  "panel.files.empty": "(aucun fichier)",
231
231
  "panel.files.truncated": "(liste tronquée)",
232
232
  "panel.files.opened": "Ouvert",
233
- "panel.files.openFailed": "Impossible d'ouvrir le fichier."
233
+ "panel.files.openFailed": "Impossible d'ouvrir le fichier.",
234
+ "startup.tab.tasks": "Taches",
235
+ "settings.bridge.title": "Coordination entre instances",
236
+ "settings.bridge.accept": "Accepter les messages diriges d'autres instances (injectes comme chat)",
237
+ "settings.bridge.composePlaceholder": "Message aux autres instances...",
238
+ "settings.voice.title": "Voix",
239
+ "settings.voice.mode": "Mode",
240
+ "settings.voice.modeMic": "mode micro",
241
+ "settings.voice.stt": "STT",
242
+ "settings.voice.sttBrowser": "STT navigateur",
243
+ "settings.voice.ttsEngine": "Moteur TTS",
244
+ "settings.voice.ttsBrowser": "TTS navigateur",
245
+ "settings.voice.ttsVoice": "Voix TTS (Google uniquement)",
246
+ "settings.vad.title": "VAD (detection de silence)",
247
+ "settings.vad.resetDefaults": "Reinitialiser",
248
+ "settings.vad.engine": "Moteur",
249
+ "settings.vad.engineAmplitude": "Amplitude (RMS)",
250
+ "settings.vad.engineBand": "Bande 80-400Hz",
251
+ "settings.vad.baselineWindow": "Fenetre de reference",
252
+ "settings.vad.thresholdMult": "Mult. de seuil (baseline x N)",
253
+ "settings.vad.thresholdMin": "Seuil minimum",
254
+ "settings.vad.thresholdMax": "Seuil maximum",
255
+ "settings.vad.silence": "Silence pour fermer",
256
+ "settings.vad.minVoiced": "Voix minimale (anti-blip)",
257
+ "settings.vad.tick": "Tick du VAD",
258
+ "settings.vad.bandLow": "Bande voix : low (Hz)",
259
+ "settings.vad.bandHigh": "Bande voix : high (Hz)",
260
+ "settings.vad.showOverlay": "Afficher l'overlay live",
261
+ "settings.vad.logStats": "Journaliser les stats par session",
262
+ "settings.brain.anthropicMode": "Anthropic : mode",
263
+ "settings.brain.modePlan": "Plan (abonnement Claude)",
264
+ "settings.brain.modeConsole": "Console (API key)",
265
+ "settings.brain.modeNote": "S'applique a la reouverture du panneau.",
266
+ "settings.brain.ecoEnabled": "Mode eco active",
267
+ "settings.brain.ecoHint": "desactive = frontier toujours",
268
+ "settings.brain.modelEco": "Modele eco",
269
+ "settings.brain.modelFrontier": "Modele frontier",
270
+ "settings.brain.modelMultimodal": "Modele multimodal",
271
+ "settings.brain.multimodalClearTitle": "Retirer le brain multimodal dedie (retour au routage de vision automatique)",
272
+ "settings.brain.auto": "Auto",
273
+ "settings.brain.multimodalHint": "Brain dedie pour les tours avec image. Auto = routage de vision automatique (le frontier s'il voit, sinon un avis).",
274
+ "settings.brain.geminiCache": "Cache explicite de Gemini (CachedContent)",
275
+ "settings.brain.geminiCacheHint": "Opt-in. Utile pour les longues sessions avec Gemini Pro ; pour les sessions courtes, le cache implicite gratuit de 2.5 suffit.",
276
+ "settings.federation.title": "Federation de brain",
277
+ "settings.federation.intro": "Utilisez le brain d'un autre Forge (sa key ne quitte jamais sa machine) ou pretez le votre. Votre code s'execute en local ; seule l'inference voyage.",
278
+ "settings.federation.connectedTo": "Connecte a",
279
+ "settings.federation.disconnect": "Deconnecter",
280
+ "settings.federation.connectMe": "Me connecter",
281
+ "settings.federation.tokenPlaceholder": "Collez le code de federation",
282
+ "settings.federation.connect": "Connecter",
283
+ "settings.federation.lendBrain": "Preter mon brain",
284
+ "settings.federation.generateCode": "Generer un code",
285
+ "settings.federation.host": "Heberger (repondre aux enfants)",
286
+ "settings.federation.fedBrain": "Brain de federation",
287
+ "settings.federation.fedBrainNote": "Celui qui repond aux enfants. API directe (DeepSeek par defaut). Claude Plan ne peut pas heberger ; il faut une key avec credit.",
288
+ "settings.federation.codeOnce": "Code (usage unique)",
289
+ "settings.federation.copy": "Copier",
290
+ "settings.keys.title": "API keys (BYOK)",
291
+ "settings.keys.configure": "Configurer",
292
+ "settings.keys.remove": "Retirer",
293
+ "settings.keys.brainAnthropic": "Brain (Anthropic)",
294
+ "settings.keys.brainOpenai": "Brain (OpenAI)",
295
+ "settings.keys.brainGoogle": "Brain (Google IA)",
296
+ "settings.keys.brainDeepseek": "Brain (DeepSeek)",
297
+ "settings.keys.brainXai": "Brain (xAI / Grok)",
298
+ "settings.keys.brainMistral": "Brain (Mistral)",
299
+ "settings.keys.brainCohere": "Brain (Cohere)",
300
+ "settings.keys.sttGoogle": "STT Google",
301
+ "settings.keys.ttsGoogle": "TTS Google",
302
+ "settings.keys.ttsElevenlabs": "TTS ElevenLabs",
303
+ "settings.keys.sttWhisper": "STT Whisper",
304
+ "settings.lang.title": "Langue",
305
+ "settings.lang.panelVoice": "Panneau + voix",
306
+ "settings.lang.changeButton": "Changer de langue",
307
+ "settings.vault.title": "Vault (chiffre)",
308
+ "settings.vault.slots": "Slots",
309
+ "settings.vault.open": "Ouvrir le vault",
310
+ "settings.license.email": "Email",
311
+ "settings.license.validated": "Valide",
312
+ "settings.license.connectHint": "Connectez votre compte Polar. Saisissez l'email avec lequel vous avez paye et nous synchronisons votre plan automatiquement.",
313
+ "settings.license.emailPlaceholder": "email@exemple.com",
314
+ "settings.license.connect": "Connecter",
315
+ "settings.license.sync": "Synchroniser avec Polar",
316
+ "settings.license.buy": "Acheter / activer le plan",
317
+ "settings.budget.title": "Budget ce mois-ci",
318
+ "settings.budget.renews": "Renouvellement",
319
+ "settings.budget.tokensEco": "Tokens eco",
320
+ "settings.budget.tokensFrontier": "Tokens frontier",
321
+ "settings.budget.buyExtension": "Acheter une extension de tokens",
322
+ "settings.limits.title": "Limites (avance)",
323
+ "settings.limits.editHint": "Modifiez n'importe quelle valeur + tab/blur enregistre.",
324
+ "settings.limits.reset": "Reinitialiser aux valeurs par defaut",
325
+ "settings.bookmarks.title": "Signets du Reader",
326
+ "settings.graph.title": "Graphe de connaissances du projet",
327
+ "settings.pair.title": "Lier le telephone",
328
+ "settings.pair.hint": "Ouvrez Forge Mobile, touchez \"Lier\" et scannez ce QR. C'est fait.",
329
+ "settings.pair.generateQr": "Generer le QR",
330
+ "settings.pair.cantRead": "La camera ne lit pas le QR ? Copiez ce code et collez-le dans Forge Mobile :",
331
+ "settings.audit.viewFull": "Voir tout",
332
+ "settings.audit.close": "Fermer",
333
+ "settings.audit.allKinds": "Tous les kinds",
334
+ "settings.audit.allModes": "Tous les modes",
335
+ "settings.audit.copyJson": "Copier le JSON",
336
+ "settings.audit.closeDetail": "Fermer le detail",
337
+ "settings.about.title": "A propos",
338
+ "settings.danger.title": "Zone de danger",
339
+ "settings.danger.warning": "Quand active, Yujin execute TOUTE action sans demander de confirmation (y compris shell.exec, rm, git push --force, etc). La vitesse avant la securite. Tout est enregistre dans l'audit log.",
340
+ "settings.keyEditor.placeholder": "Collez votre API key ici",
341
+ "settings.license.title": "Licence",
342
+ "settings.plan": "Forfait",
343
+ "settings.audit.title": "Journal d'audit",
344
+ "settings.legal.title": "Mentions légales",
345
+ "panel.status.projectSwitchFail": "Impossible de changer de projet.",
346
+ "panel.status.projectRemoveFail": "Impossible de retirer le projet.",
347
+ "panel.status.projectAddFail": "Impossible d'ajouter le projet.",
348
+ "panel.status.cancelFail": "Annulation impossible : {reason}",
349
+ "panel.status.cancelNetError": "Erreur reseau lors de l'annulation du shell.",
350
+ "panel.status.notEditable": "Ce type de contenu n'est pas modifiable.",
351
+ "panel.status.savedAsPicker": "Enregistre sous : {name} (a l'emplacement choisi dans la boite de dialogue).",
352
+ "panel.status.saveAsFail": "Erreur d'Enregistrer sous : {error} -- utilisation du fallback.",
353
+ "panel.status.saveFail": "Erreur lors de l'enregistrement : {error}",
354
+ "panel.status.savedAs": "Enregistre sous : {path} ({bytes} octets)",
355
+ "panel.status.netError": "Erreur reseau : {error}",
356
+ "panel.status.savedTabOnly": "Modifications enregistrees dans l'onglet (pas sur le disque -- sans file_path).",
357
+ "panel.status.saved": "Enregistre : {path} ({bytes} octets)",
358
+ "panel.status.copied": "Copie dans le presse-papiers.",
359
+ "panel.status.copyFail": "Copie impossible.",
360
+ "panel.status.modeAvailable": "Modes disponibles : didactico, tecnico. Usage : /modo tecnico",
361
+ "panel.status.modeChangeFail": "Impossible de changer le mode : {error}",
362
+ "panel.status.modeChanged": "Mode change en {target}. Le prochain tour utilise deja ce mode.",
363
+ "panel.status.genericError": "Erreur : {error}",
364
+ "panel.status.brainTierAuto": "Brain tier de retour a auto (le router decide selon le verbe / la phase).",
365
+ "panel.status.brainTierForced": "Brain tier force a \"{target}\" pour cette session. /auto revient au router.",
366
+ "panel.confirm.tabUnsaved": "L'onglet \"{title}\" a des modifications non enregistrees. Fermer quand meme ?",
367
+ "panel.confirm.tabsUnsaved": "Des onglets ont des modifications non enregistrees. Tout fermer quand meme ?",
368
+ "panel.confirm.discardChanges": "Abandonner les modifications non enregistrees ?",
369
+ "panel.confirm.removeSlot": "Retirer le slot \"{slot}\" ? Cette action est irreversible.",
370
+ "panel.confirm.removeKey": "Retirer la key de {slot} ?",
371
+ "panel.prompt.saveAs": "Enregistrer sous (chemin relatif au projet) :",
372
+ "panel.voice.sttFallback": "STT du navigateur indisponible ; utilisation du fallback serveur.",
373
+ "panel.voice.noMicSupport": "Votre navigateur ne prend pas en charge l'acces au microphone.",
374
+ "panel.voice.recordingCountdown": "Enregistrement... arret auto dans {n}s",
375
+ "panel.voice.autoStopped": "Enregistrement arrete automatiquement a 55s (limite de 1 min de Google STT). Essayez plus court.",
376
+ "panel.voice.noAudio": "Aucun audio capture. Reessayez.",
377
+ "panel.voice.audioTooLong": "Audio trop long (>1 min). Limite synchrone de Google STT. Essayez plus court.",
378
+ "panel.voice.ttsUnavailable": "TTS du navigateur indisponible ; revenez a Google dans les parametres.",
379
+ "panel.voice.micClosedHalfDuplex": "Micro ferme pendant que Yujin parle (half-duplex).",
380
+ "panel.voice.micBlocked": "Microphone bloque. Autorisez le microphone pour cette app dans les parametres du navigateur et reessayez.",
381
+ "panel.voice.noMicDevice": "Aucun microphone detecte sur cet appareil.",
382
+ "panel.voice.micOpenFail": "Impossible d'ouvrir le microphone : {error}",
383
+ "panel.voice.micOpenListening": "Micro ouvert, ecoute...",
384
+ "panel.voice.listening": "Je vous ecoute...",
385
+ "panel.voice.listeningInterim": "Je vous ecoute... {text}",
386
+ "panel.voice.micBlockedBrowser": "Microphone bloque par le navigateur. Cliquez sur l'icone de cadenas dans la barre d'URL et autorisez le microphone, puis rechargez la page. Ou passez le STT a \"google\" / \"whisper\" dans les parametres si vous avez la API key.",
387
+ "panel.voice.noMicPhysical": "Aucun microphone physique detecte. Branchez-en un ou passez le STT a \"google\" / \"whisper\" dans les parametres.",
388
+ "panel.voice.networkRequired": "Web Speech necessite une connexion internet (Chrome utilise Google en coulisses). Essayez sans connexion intermittente ou passez le STT a \"whisper\" si vous avez la API key.",
389
+ "panel.voice.langNotSupported": "Votre navigateur ne prend pas en charge cette langue pour le STT. Changez la langue du panneau pour une langue prise en charge (en, es, pt) ou passez le STT a \"google\" / \"whisper\".",
390
+ "panel.voice.micError": "Erreur de micro : {error}",
391
+ "panel.voice.noAudioToRecognizer": "Aucun audio n'a atteint le moteur de reconnaissance : la dictee du navigateur ne capture pas dans cette app.",
392
+ "panel.voice.micOpenNoVoice": "Micro ouvert mais aucune voix detectee. Rapprochez-vous du microphone et parlez plus fort ; si cela persiste, la dictee gratuite ne fonctionne pas dans cette PWA.",
393
+ "panel.voice.voiceNoText": "Voix detectee mais le navigateur n'a renvoye aucun texte (STT gratuit indisponible dans cette PWA).",
394
+ "panel.voice.startingDictation": "Demarrage de la dictee...",
395
+ "panel.voice.couldNotStartMic": "Impossible de demarrer le micro : {error}",
396
+ "panel.status.imageTooLarge": "Image trop grande (>6 Mo) : {name}",
397
+ "panel.status.imageReady": "Image prete a envoyer : {name}",
398
+ "panel.status.imageReadFail": "Impossible de lire l'image : {error}",
399
+ "panel.tip.attachFile": "Joindre un fichier",
400
+ "panel.tip.refreshDiscovery": "Actualiser la decouverte",
401
+ "panel.tip.refreshNow": "Actualiser maintenant",
402
+ "panel.tip.filterByProject": "Filtrer par projet",
403
+ "panel.tip.concurrentRuns": "Executions simultanees : limites globales / par projet",
404
+ "panel.tip.mcpBridges": "MCP Bridges (F101)",
405
+ "panel.tip.activity": "Activite des agents + inspecteur de bridge + chat par agent",
406
+ "panel.tip.settings": "Parametres (mode vocal, STT, TTS, cles, langue)",
407
+ "panel.tip.zoomOut": "Zoom arriere (Ctrl -)",
408
+ "panel.tip.zoomReset": "Reinitialiser le zoom (Ctrl 0)",
409
+ "panel.tip.zoomIn": "Zoom avant (Ctrl +)",
410
+ "panel.tip.maximize": "Agrandir / restaurer (plein ecran)",
411
+ "panel.tip.closeBoard": "Fermer tout le tableau",
412
+ "panel.tip.openInEditor": "Ouvrir dans mon editeur",
413
+ "panel.tip.open": "Ouvrir",
414
+ "panel.tip.saveAs": "Enregistrer sous -- choisissez un nouveau chemin (relatif au projet)",
415
+ "panel.tip.codeModeDetail": "Detaille : fichiers, diffs et commandes en direct",
416
+ "panel.tip.codeModeZen": "Sumi-e : art avec texte occasionnel",
417
+ "panel.tip.cancelShell": "Annuler la commande shell",
418
+ "panel.tip.closeTab": "Fermer l'onglet",
419
+ "panel.tip.reopenNativeTabs": "Rouvrir les onglets natifs fermes",
420
+ "panel.tip.notTestedYet": "pas encore teste",
421
+ "panel.aria.activity": "Activite",
422
+ "panel.aria.settings": "Parametres",
423
+ "panel.aria.zoomOut": "Zoom arriere",
424
+ "panel.aria.zoomIn": "Zoom avant",
425
+ "panel.aria.maximize": "Agrandir",
426
+ "panel.aria.closeBoard": "tout fermer",
427
+ "panel.aria.thinking": "reflexion",
428
+ "panel.hint.boardEmpty": "Le contenu structure apparait ici : code, tableaux, documents. Demandez a Yujin d’ecrire ou de modifier quelque chose.",
429
+ "panel.hint.planMode": "Vous etes en mode Plan (abonnement). Le tableau s’affiche lorsque le brain fonctionne en mode API : changez-le dans <strong>Parametres &gt; Brain &gt; Anthropic : mode &gt; Console</strong> et rouvrez le panneau.",
430
+ "panel.hint.bookmarksEmpty": "Aucun bookmark. Demandez a Yujin \"marque ce point comme ...\" en lisant un doc.",
431
+ "panel.voice.replyFailed": "Echec de la reponse vocale : {err}",
432
+ "panel.voice.replyError": "Erreur de reponse vocale : {err}",
433
+ "panel.status.languageSwitchFailed": "Echec du changement de langue : {err}",
434
+ "panel.status.languageListFailed": "Impossible de charger la liste des langues",
435
+ "panel.legal.loading": "Chargement...",
436
+ "panel.legal.loadError": "Erreur {status} lors du chargement du document.",
437
+ "panel.legal.networkError": "Erreur reseau : {err}",
438
+ "panel.legal.defaultTitle": "Mentions legales",
439
+ "panel.feedback.copied": "Copie",
440
+ "panel.feedback.copyFailed": "Echec de la copie",
441
+ "panel.feedback.clipboardUnavailable": "Presse-papiers indisponible",
442
+ "panel.feedback.saving": "Enregistrement...",
443
+ "panel.feedback.saved": "Enregistre.",
444
+ "panel.feedback.saveError": "erreur d’enregistrement",
445
+ "panel.feedback.netError": "erreur reseau",
446
+ "panel.feedback.netErrorSaving": "erreur reseau lors de l’enregistrement",
447
+ "panel.feedback.errorPrefix": "Erreur : {detail}",
448
+ "panel.pair.generating": "Generation...",
449
+ "panel.pair.generateQr": "Generer le QR",
450
+ "panel.pair.copy": "Copier",
451
+ "panel.pair.expiry": "Expire dans ~{mins} min. Regenerez-le s’il expire.",
452
+ "panel.pair.qrNetError": "Erreur reseau lors de la generation du QR.",
453
+ "panel.audit.copyJson": "Copier le JSON",
454
+ "panel.limits.resetApplied": "Reinitialisation aux valeurs par defaut appliquee",
455
+ "panel.nac3.effects": "Effets : {list}",
456
+ "panel.nac3.effectsUnknown": "inconnus",
457
+ "panel.nac3.cancel": "Annuler",
458
+ "panel.nac3.reject": "Rejeter",
459
+ "panel.nac3.approve": "Approuver",
460
+ "panel.nac3.approveDestructive": "Approuver (destructif)",
461
+ "panel.nac3.executing": "Execution...",
462
+ "panel.tts.providerBrowser": "TTS navigateur",
463
+ "panel.tts.providerGoogle": "TTS Google",
464
+ "panel.tts.providerTitle": "Cliquez pour basculer entre le navigateur (SpeechSynthesis natif, voix du SE) et Google Cloud TTS (cote serveur).",
465
+ "panel.stt.providerBrowser": "STT navigateur",
466
+ "panel.stt.providerGoogle": "STT Google",
467
+ "panel.stt.providerWhisper": "STT Whisper",
468
+ "panel.stt.providerTitle": "Cliquez pour basculer entre le navigateur (rapide + es-AR natif + gratuit), Google Cloud STT (cote serveur, BYOK) ou Whisper (cote serveur, BYOK).",
469
+ "panel.tts.voiceTitle": "Voix actuelle : {id} / {persona} ({gender}) -- {style}. Cliquez pour faire defiler. Studio = articule s clairement ; Neural2 = espagnol naturel (aspire les s finaux).",
470
+ "panel.license.lendNeedsLicense": "activez votre licence pour preter votre brain",
471
+ "panel.license.emailInvalid": "Saisissez un email valide (avec @).",
472
+ "panel.license.connecting": "Connexion...",
473
+ "panel.license.savingEmail": "Enregistrement de l’email + synchronisation avec Polar...",
474
+ "panel.license.syncFailedRetry": "Email enregistre, mais la synchro a echoue : {err}{http}. Si vous venez de payer, attendez 1-2 min puis cliquez sur \"Synchroniser avec Polar\".",
475
+ "panel.license.planOk": "OK -- offre : {plan}.",
476
+ "panel.license.netError": "Erreur reseau : {err}",
477
+ "panel.license.syncing": "Synchronisation...",
478
+ "panel.license.querying": "Interrogation du serveur...",
479
+ "panel.license.syncError": "Erreur de synchro : {err}{http}",
480
+ "panel.license.planUnchanged": "Offre inchangee : {plan}",
481
+ "panel.license.planUpdated": "Offre mise a jour : {before} -> {after}",
482
+ "panel.license.syncWithPolar": "Synchroniser avec Polar",
483
+ "panel.license.errorWithCode": "erreur : {code}",
484
+ "panel.keyEditor.keyTooShort": "Cle trop courte (min 8 caracteres).",
485
+ "panel.bridge.coordUnavailable": "Coordination indisponible.",
486
+ "panel.bridge.statusUnavailable": "indisponible",
487
+ "panel.mcp.loadingBridges": "Chargement des bridges...",
488
+ "panel.tools.loading": "Chargement des outils...",
489
+ "panel.agentsChat.backPairs": "< Paires",
490
+ "panel.agentsChat.noMessages": "Aucun message dans cette paire.",
491
+ "panel.agentsChat.noAgents": "aucun agent",
492
+ "panel.agentsChat.pickAgent": "Choisissez un agent + tapez du texte avant d’envoyer.",
493
+ "panel.agentsChat.sending": "Envoi...",
494
+ "panel.agentsChat.errorGeneric": "Erreur : {err}",
495
+ "panel.whatsNew.dismiss": "Fermer",
496
+ "panel.alert.noEditor": "Aucun editeur dans le PATH. Copiez le chemin : {path}",
497
+ "panel.alert.pathRelative": "Le chemin doit etre relatif au projet (sans \"/\" initial ni \"..\").",
498
+ "panel.tip.saveTo": "Enregistrer dans {path}",
499
+ "panel.tip.saveToMemory": "(memoire)",
500
+ "panel.button.saveAs": "Enregistrer sous...",
501
+ "panel.aria.concurrentRuns": "Executions simultanees",
502
+ "panel.activity.allProjects": "Tous les projets",
503
+ "panel.activity.loadingFeed": "Chargement du flux...",
504
+ "panel.feedback.savedShort": "enregistre",
505
+ "panel.pair.qrFailed": "Impossible de generer le QR.",
506
+ "panel.brain.modePlan": "Plan (abonnement)",
507
+ "panel.brain.modeConsole": "Console (cle API)",
508
+ "panel.brain.applying": "application de {mode}...",
509
+ "panel.brain.applied": "{mode} applique. Le prochain tour utilise deja ce mode.",
510
+ "panel.brain.reopenHint": "S’applique a la reouverture du panneau.",
511
+ "panel.brain.active": "{mode} actif",
512
+ "panel.bridge.roleHost": "hote",
513
+ "panel.bridge.roleClient": "client",
514
+ "panel.bridge.instanceOne": "instance",
515
+ "panel.bridge.instanceMany": "instances",
516
+ "panel.bridge.you": "vous",
517
+ "panel.tip.deleteTask": "Supprimer la tache",
518
+ "panel.tasks.cmdPlaceholder": "commande (ex : pnpm install)...",
519
+ "panel.readAloud.code": "Code",
520
+ "panel.readAloud.codeLang": "Code en {lang}",
521
+ "panel.readAloud.file": "Fichier {file}",
522
+ "panel.readAloud.content": "Contenu : {content}",
523
+ "panel.pizarron.tabOne": "onglet",
524
+ "panel.pizarron.tabMany": "onglets"
234
525
  }