dsh-live-voice 0.2.2 → 0.3.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.
Files changed (138) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/DEVELOPMENT.md +13 -0
  3. package/LICENSE +201 -674
  4. package/PLAN.md +28 -0
  5. package/README.md +65 -110
  6. package/docs/ARCHITECTURE.md +40 -0
  7. package/docs/CHOOSING-AN-ENGINE.md +120 -0
  8. package/docs/CONFIGURATION.md +149 -0
  9. package/docs/REVIEW.md +35 -0
  10. package/docs/VOICE-LIFECYCLE.md +59 -0
  11. package/lib/client.js +3652 -1576
  12. package/lib/server.js +641 -453
  13. package/package.json +17 -6
  14. package/scripts/build.ts +16 -4
  15. package/scripts/preview-ui.ts +1 -1
  16. package/src/{client/index.ts → app/client/apply.tsx} +152 -59
  17. package/src/app/client/i18n/DshLanguageBoundary.tsx +42 -0
  18. package/src/app/client/i18n/catalogs/base.ts +231 -0
  19. package/src/app/client/i18n/catalogs/en.ts +258 -0
  20. package/src/app/client/i18n/catalogs/es.ts +279 -0
  21. package/src/app/client/i18n/catalogs/fr.ts +281 -0
  22. package/src/app/client/i18n/catalogs/hi.ts +263 -0
  23. package/src/app/client/i18n/catalogs/index.ts +18 -0
  24. package/src/app/client/i18n/catalogs/pt-BR.ts +270 -0
  25. package/src/app/client/i18n/catalogs/zh.ts +248 -0
  26. package/src/app/client/i18n/index.ts +4 -0
  27. package/src/app/client/i18n/registerDshLocales.ts +43 -0
  28. package/src/app/client/i18n/runtime.tsx +58 -0
  29. package/src/app/client/index.ts +3 -0
  30. package/src/app/client/registerSlots.tsx +30 -0
  31. package/src/app/client/slotDefinitions.ts +32 -0
  32. package/src/app/server/apply.ts +479 -0
  33. package/src/app/server/index.ts +2 -0
  34. package/src/app/server/registerRoutes.ts +11 -0
  35. package/src/modules/conversation/components/ConversationControls.tsx +40 -0
  36. package/src/modules/conversation/components/ConversationStatusBar.tsx +155 -0
  37. package/src/modules/conversation/components/DeliveryModeButton.tsx +43 -0
  38. package/src/modules/conversation/components/MicrophoneButton.tsx +6 -0
  39. package/src/modules/conversation/components/PlaybackControls.tsx +41 -0
  40. package/src/modules/conversation/components/SpeakButton.tsx +30 -0
  41. package/src/modules/conversation/components/Waveform.tsx +68 -0
  42. package/src/modules/conversation/components/conversationStatus.ts +17 -0
  43. package/src/modules/conversation/components/createConversationComponents.tsx +505 -0
  44. package/src/modules/conversation/components/index.ts +8 -0
  45. package/src/modules/conversation/hooks/index.ts +2 -0
  46. package/src/modules/conversation/hooks/useConversationActions.ts +27 -0
  47. package/src/modules/conversation/hooks/useConversationController.ts +15 -0
  48. package/src/modules/conversation/index.ts +3 -0
  49. package/src/{client → modules/conversation/models}/chat.ts +2 -1
  50. package/src/modules/conversation/models/index.ts +1 -0
  51. package/src/{core → modules/core}/coordinator.ts +133 -7
  52. package/src/modules/core/index.ts +6 -0
  53. package/src/{engines/qwen-http-host.ts → modules/core/qwen/QwenHttpHost.ts} +2 -2
  54. package/src/modules/core/qwen/QwenSettings.tsx +148 -0
  55. package/src/{core → modules/core}/settings.ts +23 -0
  56. package/src/modules/recognition/components/RecognitionCapabilityStatus.tsx +19 -0
  57. package/src/{engines/recognition/qwen-http.ts → modules/recognition/engines/qwen/QwenRecognitionEngine.ts} +1 -1
  58. package/src/{engines/recognition/whisper-http.ts → modules/recognition/engines/whisper/WhisperRecognitionEngine.ts} +1 -1
  59. package/src/modules/recognition/engines/whisper/WhisperSettings.tsx +150 -0
  60. package/src/modules/recognition/index.ts +4 -0
  61. package/src/modules/recognition/qwen/QwenRecognitionSettings.tsx +4 -0
  62. package/src/modules/settings/components/LiveVoiceSettings.tsx +72 -0
  63. package/src/modules/settings/components/SettingsHeader.tsx +49 -0
  64. package/src/modules/settings/components/VersionBadges.tsx +39 -0
  65. package/src/modules/settings/components/createLiveVoiceSettings.tsx +8 -0
  66. package/src/modules/settings/components/index.ts +4 -0
  67. package/src/modules/settings/hooks/index.ts +3 -0
  68. package/src/modules/settings/hooks/useAudioDevices.ts +38 -0
  69. package/src/modules/settings/hooks/useLiveVoiceSettings.ts +4 -0
  70. package/src/modules/settings/hooks/useReleaseStatus.ts +17 -0
  71. package/src/modules/settings/index.ts +4 -0
  72. package/src/modules/settings/models/index.ts +1 -0
  73. package/src/modules/settings/models/settingsStorage.ts +14 -0
  74. package/src/modules/settings/sections/conversation/ConversationDelaySettings.tsx +24 -0
  75. package/src/modules/settings/sections/conversation/ConversationSettingsSection.tsx +23 -0
  76. package/src/modules/settings/sections/conversation/DeliverySettings.tsx +38 -0
  77. package/src/modules/settings/sections/conversation/HoldToTalkSettings.tsx +20 -0
  78. package/src/modules/settings/sections/conversation/VoiceModeSettings.tsx +31 -0
  79. package/src/modules/settings/sections/conversation/index.ts +5 -0
  80. package/src/modules/settings/sections/index.ts +3 -0
  81. package/src/modules/settings/sections/recognition/RecognitionEngineSettings.tsx +109 -0
  82. package/src/modules/settings/sections/recognition/RecognitionFilterSettings.tsx +33 -0
  83. package/src/modules/settings/sections/recognition/RecognitionSettingsSection.tsx +20 -0
  84. package/src/modules/settings/sections/recognition/RecognitionStatus.tsx +19 -0
  85. package/src/modules/settings/sections/recognition/SilenceDetectionSettings.tsx +58 -0
  86. package/src/modules/settings/sections/recognition/VoiceCommandSettings.tsx +41 -0
  87. package/src/modules/settings/sections/recognition/index.ts +5 -0
  88. package/src/modules/settings/sections/speak/OutputFilterSettings.tsx +39 -0
  89. package/src/modules/settings/sections/speak/PlaybackPolicySettings.tsx +26 -0
  90. package/src/modules/settings/sections/speak/SpeakSettingsSection.tsx +16 -0
  91. package/src/modules/settings/sections/speak/SpeechAdvancedSettings.tsx +81 -0
  92. package/src/modules/settings/sections/speak/SpeechEngineSettings.tsx +80 -0
  93. package/src/modules/settings/sections/speak/index.ts +4 -0
  94. package/src/modules/settings/services/releases.ts +117 -0
  95. package/src/modules/speak/engines/audio/HostAudioEngine.ts +167 -0
  96. package/src/modules/speak/engines/audio/M4aAacTranscoder.ts +58 -0
  97. package/src/modules/speak/engines/qwen/QwenSpeakingEngine.ts +14 -0
  98. package/src/{engines/speaking/say.ts → modules/speak/engines/say/SaySpeakingEngine.ts} +26 -4
  99. package/src/modules/speak/index.ts +5 -0
  100. package/src/modules/speak/qwen/QwenSpeakingSettings.tsx +4 -0
  101. package/src/modules/speak/services/speechQueue.ts +2 -0
  102. package/src/server.ts +9 -365
  103. package/src/shared/design-system/buttons/IconButton.tsx +33 -0
  104. package/src/shared/design-system/buttons/PillButton.tsx +11 -0
  105. package/src/shared/design-system/buttons/ToggleButton.tsx +6 -0
  106. package/src/shared/design-system/buttons/index.ts +3 -0
  107. package/src/shared/design-system/feedback/ErrorMessage.tsx +27 -0
  108. package/src/shared/design-system/feedback/StatusBadge.tsx +9 -0
  109. package/src/shared/design-system/feedback/StatusMessage.tsx +4 -0
  110. package/src/shared/design-system/feedback/index.ts +3 -0
  111. package/src/shared/design-system/forms/CheckboxField.tsx +20 -0
  112. package/src/shared/design-system/forms/NumberField.tsx +12 -0
  113. package/src/shared/design-system/forms/SelectField.tsx +20 -0
  114. package/src/shared/design-system/forms/TextAreaField.tsx +12 -0
  115. package/src/shared/design-system/forms/TextField.tsx +12 -0
  116. package/src/shared/design-system/forms/index.ts +5 -0
  117. package/src/shared/design-system/icons/Icon.tsx +20 -0
  118. package/src/shared/design-system/icons/icons.ts +16 -0
  119. package/src/shared/design-system/icons/index.ts +2 -0
  120. package/src/shared/design-system/index.ts +5 -0
  121. package/src/shared/design-system/layout/SettingsCard.tsx +9 -0
  122. package/src/shared/design-system/layout/SettingsSection.tsx +9 -0
  123. package/src/shared/design-system/layout/SettingsSubcard.tsx +14 -0
  124. package/src/shared/design-system/layout/SettingsTabs.tsx +54 -0
  125. package/src/shared/design-system/layout/index.ts +4 -0
  126. package/src/{client/styles.ts → styles/index.ts} +3 -1
  127. package/src/client/components.ts +0 -1080
  128. package/src/client/qwen-settings.ts +0 -144
  129. package/src/client/whisper-settings.ts +0 -147
  130. package/src/engines/speaking/qwen-http.ts +0 -124
  131. /package/src/{core → modules/core}/filters.ts +0 -0
  132. /package/src/{core → modules/core}/microphone.ts +0 -0
  133. /package/src/{core → modules/core}/ownership.ts +0 -0
  134. /package/src/{core → modules/core}/transcript.ts +0 -0
  135. /package/src/{engines/recognition/browser.ts → modules/recognition/engines/browser/BrowserRecognitionEngine.ts} +0 -0
  136. /package/src/{engines/recognition/whisper-http-host.ts → modules/recognition/engines/whisper/whisperRecognitionHost.ts} +0 -0
  137. /package/src/{engines/speaking/browser.ts → modules/speak/engines/browser/BrowserSpeakingEngine.ts} +0 -0
  138. /package/src/{engines/speaking/say-client.ts → modules/speak/engines/say/sayClient.ts} +0 -0
@@ -0,0 +1,279 @@
1
+ import type { LiveVoiceTranslation } from './base.js';
2
+
3
+ const es: LiveVoiceTranslation = {
4
+ 'dsh-live-voice.commons.connection.contactingHost': 'Conectando con el host de DSH…',
5
+ 'dsh-live-voice.commons.connection.endpoint': 'URL del punto de acceso',
6
+ 'dsh-live-voice.commons.connection.healthEndpoint': 'URL o ruta de comprobación de estado',
7
+ 'dsh-live-voice.commons.connection.reload': 'Volver a cargar la configuración guardada',
8
+ 'dsh-live-voice.commons.connection.test': 'Probar conexión',
9
+ 'dsh-live-voice.commons.connection.timeout': 'Tiempo de espera de las solicitudes (ms)',
10
+ 'dsh-live-voice.commons.connection.title': 'Configuración de conexión',
11
+ 'dsh-live-voice.commons.connection.unsaved': 'Cambios sin guardar',
12
+ 'dsh-live-voice.commons.controls.title': 'Controles de voz',
13
+ 'dsh-live-voice.commons.conversation.end': 'Terminar conversación por voz',
14
+ 'dsh-live-voice.commons.conversation.idle': 'Conversación inactiva',
15
+ 'dsh-live-voice.commons.conversation.start': 'Iniciar conversación por voz',
16
+ 'dsh-live-voice.commons.delivery.queueBadge': 'COLA',
17
+ 'dsh-live-voice.commons.device.numberedLabel': '{device} {number}',
18
+ 'dsh-live-voice.commons.dismiss': 'Descartar',
19
+ 'dsh-live-voice.commons.dismissError': 'Descartar error de voz',
20
+ 'dsh-live-voice.commons.engine.failure': '{engine}: {reason}',
21
+ 'dsh-live-voice.commons.input.ignoring': 'ignorando',
22
+ 'dsh-live-voice.commons.input.ignoringBadge': 'IGNORANDO',
23
+ 'dsh-live-voice.commons.input.listening': 'escuchando',
24
+ 'dsh-live-voice.commons.input.listeningBadge': 'ESCUCHANDO',
25
+ 'dsh-live-voice.commons.manual': 'manual',
26
+ 'dsh-live-voice.commons.off': 'desactivado',
27
+ 'dsh-live-voice.commons.on': 'activado',
28
+ 'dsh-live-voice.commons.pluginName': 'Live Voice',
29
+ 'dsh-live-voice.commons.queue': 'cola',
30
+ 'dsh-live-voice.commons.repository.starLabel': 'Danos una estrella en GitHub',
31
+ 'dsh-live-voice.commons.repository.starLink': 'Dar una estrella a DSH Live Voice en GitHub',
32
+ 'dsh-live-voice.commons.seconds': '{seconds} segundos',
33
+ 'dsh-live-voice.commons.send': 'ENVIAR',
34
+ 'dsh-live-voice.commons.status.ready': 'Funciones de voz listas',
35
+ 'dsh-live-voice.commons.systemDefault': 'Predeterminado del sistema',
36
+ 'dsh-live-voice.commons.toggle.offBadge': 'DESACTIVADO',
37
+ 'dsh-live-voice.commons.unknownLanguage': 'idioma desconocido',
38
+ 'dsh-live-voice.commons.update.label': 'Actualización disponible',
39
+ 'dsh-live-voice.commons.update.link':
40
+ 'Actualización disponible: {version}. Abrir la página de esta versión',
41
+ 'dsh-live-voice.commons.update.version': 'Actualización disponible: {version}',
42
+ 'dsh-live-voice.commons.version.compatibility': 'Compatible con DSH v{version}',
43
+ 'dsh-live-voice.commons.version.compatibilityLink':
44
+ 'Compatible con DSH v{version}. Abrir la página de esta versión',
45
+ 'dsh-live-voice.commons.version.label': 'DSH Live Voice v{version}',
46
+ 'dsh-live-voice.commons.version.link': 'DSH Live Voice v{version}. Abrir la lista de versiones',
47
+ 'dsh-live-voice.commons.version.title': 'Información de versión',
48
+ 'dsh-live-voice.recognition.autoSend.countdownHelp':
49
+ 'La cuenta atrás comienza tras el reconocimiento definitivo de una frase. Hablar de nuevo o editar el texto la cancela.',
50
+ 'dsh-live-voice.recognition.browser.autoInstallPack':
51
+ 'Instalar automáticamente este paquete de idioma del navegador cuando sea necesario',
52
+ 'dsh-live-voice.recognition.browser.help':
53
+ 'Utiliza la API SpeechRecognition del navegador. Esta es la opción predeterminada.',
54
+ 'dsh-live-voice.recognition.browser.label':
55
+ 'SpeechRecognition del navegador — Opción predeterminada',
56
+ 'dsh-live-voice.recognition.browser.localProcessing':
57
+ 'Procesar el reconocimiento localmente en este dispositivo',
58
+ 'dsh-live-voice.recognition.browser.microphoneHelp':
59
+ 'SpeechRecognition puede utilizar el micrófono predeterminado del navegador o del sistema en lugar del seleccionado aquí.',
60
+ 'dsh-live-voice.recognition.browser.remoteServiceWarning':
61
+ 'El reconocimiento mediante el servicio del navegador está activado. El navegador puede enviar el audio del micrófono a su servicio de reconocimiento.',
62
+ 'dsh-live-voice.recognition.commands.clear': 'Vaciar el cuadro de mensaje',
63
+ 'dsh-live-voice.recognition.commands.enabled': 'Activar comandos de voz con coincidencia exacta',
64
+ 'dsh-live-voice.recognition.commands.mute': 'Suspender la entrada de voz en el cuadro de mensaje',
65
+ 'dsh-live-voice.recognition.commands.queue': 'Añadir a la cola',
66
+ 'dsh-live-voice.recognition.commands.resume':
67
+ 'Reanudar la entrada de voz en el cuadro de mensaje',
68
+ 'dsh-live-voice.recognition.commands.send': 'Enviar al agente en ejecución',
69
+ 'dsh-live-voice.recognition.commands.stopSpeech': 'Detener la lectura en voz alta del asistente',
70
+ 'dsh-live-voice.recognition.commands.title': 'Comandos de voz',
71
+ 'dsh-live-voice.recognition.dictation.cancel': 'Cancelar dictado',
72
+ 'dsh-live-voice.recognition.engine.label': 'Motor de reconocimiento',
73
+ 'dsh-live-voice.recognition.headphoneMode.help':
74
+ 'El micrófono abierto sigue escuchando mientras se reproducen las respuestas. Al detectar tu voz, la reproducción se pausa y solo se reanuda cuando tú lo decides.',
75
+ 'dsh-live-voice.recognition.headphoneMode.label': 'Auriculares — micrófono abierto',
76
+ 'dsh-live-voice.recognition.holdToTalk.enabled': 'Mantener Control pulsado para hablar',
77
+ 'dsh-live-voice.recognition.holdToTalk.help':
78
+ 'Con un cuadro de mensaje abierto, mantén Control pulsado en cualquier parte de la página para capturar tu voz. Al soltarlo, se procesa la transcripción pendiente, se espera el retraso de envío configurado, se añade el mensaje a la cola y se cierra la captura de voz. Pulsa Escape mientras mantienes Control para cancelar.',
79
+ 'dsh-live-voice.recognition.language.automatic': 'Automático — detectar idioma',
80
+ 'dsh-live-voice.recognition.language.label': 'Idioma de reconocimiento',
81
+ 'dsh-live-voice.recognition.manualSend.help':
82
+ 'El texto reconocido permanece en el cuadro de mensaje hasta que utilices el botón de envío habitual de DSH.',
83
+ 'dsh-live-voice.recognition.maxUtterance.help':
84
+ 'Si hablas sin hacer pausas, se inicia un nuevo fragmento de transcripción tras este intervalo. Valor predeterminado: 60 segundos.',
85
+ 'dsh-live-voice.recognition.maxUtterance.label': 'Duración máxima del habla continua (segundos)',
86
+ 'dsh-live-voice.recognition.microphone.checking': 'Comprobando la disponibilidad del micrófono',
87
+ 'dsh-live-voice.recognition.microphone.device': 'Dispositivo de entrada',
88
+ 'dsh-live-voice.recognition.microphone.failure': 'Micrófono: {reason}',
89
+ 'dsh-live-voice.recognition.microphone.ignore':
90
+ 'Ignorar la entrada de voz en el cuadro de mensaje',
91
+ 'dsh-live-voice.recognition.microphone.inputStatus': 'Entrada del micrófono: {state}',
92
+ 'dsh-live-voice.recognition.microphone.label': 'Micrófono',
93
+ 'dsh-live-voice.recognition.microphone.permissionHelp':
94
+ 'Solo se solicitará permiso para usar el micrófono cuando inicies un dictado o una conversación por voz.',
95
+ 'dsh-live-voice.recognition.microphone.resume': 'Reanudar escucha',
96
+ 'dsh-live-voice.recognition.microphone.starting': 'Iniciando micrófono…',
97
+ 'dsh-live-voice.recognition.microphone.takeControl': 'Tomar el control del micrófono',
98
+ 'dsh-live-voice.recognition.minimumWords.enabled':
99
+ 'Ignorar los fragmentos definitivos de transcripción demasiado cortos',
100
+ 'dsh-live-voice.recognition.minimumWords.help':
101
+ 'Los fragmentos definitivos con menos palabras se descartan antes de llegar al cuadro de mensaje o al envío automático.',
102
+ 'dsh-live-voice.recognition.minimumWords.label': 'Mínimo de palabras por fragmento definitivo',
103
+ 'dsh-live-voice.recognition.mode.label': 'Modo de escucha',
104
+ 'dsh-live-voice.recognition.planned.parakeet': 'NVIDIA Parakeet — Próximamente',
105
+ 'dsh-live-voice.recognition.planned.sherpa': 'sherpa-onnx en continuo — Próximamente',
106
+ 'dsh-live-voice.recognition.planned.vote':
107
+ 'Próximamente — vota en las incidencias del repositorio',
108
+ 'dsh-live-voice.recognition.planned.voxtral': 'Voxtral Realtime — Próximamente',
109
+ 'dsh-live-voice.recognition.planned.webGpu': 'Inferencia WebGPU en el navegador — Próximamente',
110
+ 'dsh-live-voice.recognition.presets.long.description':
111
+ 'Espera durante pausas de reflexión más largas.',
112
+ 'dsh-live-voice.recognition.presets.long.label': 'Larga',
113
+ 'dsh-live-voice.recognition.presets.natural.description': 'Permite pausas normales entre frases.',
114
+ 'dsh-live-voice.recognition.presets.natural.label': 'Natural',
115
+ 'dsh-live-voice.recognition.presets.short.description':
116
+ 'Envía rápidamente después de una pausa corta.',
117
+ 'dsh-live-voice.recognition.presets.short.label': 'Corta',
118
+ 'dsh-live-voice.recognition.providerSettings.help':
119
+ 'La configuración del proveedor cambia según el motor de reconocimiento seleccionado.',
120
+ 'dsh-live-voice.recognition.qwen.captureHelp':
121
+ 'El audio se divide en enunciados completos en formato WAV y se envía a través de DSH con autenticación al modelo Qwen3 ASR ejecutado localmente en el host.',
122
+ 'dsh-live-voice.recognition.qwen.connectionSuccess':
123
+ 'Conexión correcta. Qwen ASR y TTS están cargados. Los cambios sin guardar no se han aplicado.',
124
+ 'dsh-live-voice.recognition.qwen.endpointHelp':
125
+ 'API HTTP en la URL configurada en el host de DSH (predeterminada: http://127.0.0.1:8080/inference). El audio utiliza la ruta de transcripción autenticada del host de DSH.',
126
+ 'dsh-live-voice.recognition.qwen.hostHelp':
127
+ 'Configuración para todo el host del servidor Qwen3 ASR + TTS. Introduce una URL base HTTP o HTTPS accesible desde el host de DSH. El navegador accede a ella mediante las rutas autenticadas de DSH.',
128
+ 'dsh-live-voice.recognition.qwen.label': 'Qwen3 ASR — API HTTP',
129
+ 'dsh-live-voice.recognition.silenceDetection.duration':
130
+ 'Pausa antes de enviar: {milliseconds} ms',
131
+ 'dsh-live-voice.recognition.silenceDetection.help':
132
+ 'Determina cuánto debe durar una pausa antes de enviar la voz capturada para su reconocimiento.',
133
+ 'dsh-live-voice.recognition.silenceDetection.label': 'Detección de silencio',
134
+ 'dsh-live-voice.recognition.silenceDetection.pauseLabel': 'Pausa antes de enviar',
135
+ 'dsh-live-voice.recognition.silenceDetection.title': 'Configuración de detección de silencio',
136
+ 'dsh-live-voice.recognition.speakerMode.help':
137
+ 'La escucha controlada libera el micrófono mientras se reproducen las respuestas para evitar que se reconozca el audio de los altavoces. Usa «Tomar el control del micrófono» para interrumpir la reproducción.',
138
+ 'dsh-live-voice.recognition.speakerMode.label': 'Altavoces — escucha controlada',
139
+ 'dsh-live-voice.recognition.status.answer': 'Reconociendo respuesta…',
140
+ 'dsh-live-voice.recognition.status.awaitingAnswer': 'Escuchando tu respuesta…',
141
+ 'dsh-live-voice.recognition.status.listening': 'Escuchando — esperando voz',
142
+ 'dsh-live-voice.recognition.status.processing': 'Reconociendo voz…',
143
+ 'dsh-live-voice.recognition.status.unavailable': 'Reconocimiento de voz no disponible',
144
+ 'dsh-live-voice.recognition.voiceCommands.help':
145
+ 'Separa las frases con comas. La comparación ignora mayúsculas, acentos, puntuación y espacios adicionales. Debe coincidir todo el fragmento definitivo.',
146
+ 'dsh-live-voice.recognition.whisper.captureHelp':
147
+ 'El audio se divide en enunciados completos en formato WAV, se envía a través de DSH con autenticación y se procesa mediante el servidor HTTP de whisper.cpp en la interfaz de bucle local.',
148
+ 'dsh-live-voice.recognition.whisper.connectionSuccess':
149
+ 'Conexión correcta. El punto de acceso de comprobación de estado ha respondido; no se ha probado la transcripción. Los cambios sin guardar no se han aplicado.',
150
+ 'dsh-live-voice.recognition.whisper.endpointHelp':
151
+ 'API HTTP en la URL base configurada (predeterminada: http://127.0.0.1:8080/). Compatible con POST /v1/audio/transcriptions.',
152
+ 'dsh-live-voice.recognition.whisper.healthFailed':
153
+ 'Ha fallado la comprobación de estado de Whisper.',
154
+ 'dsh-live-voice.recognition.whisper.label': 'Whisper — API HTTP',
155
+ 'dsh-live-voice.recognition.whisper.requestFailed':
156
+ 'Ha fallado la solicitud de configuración de Whisper.',
157
+ 'dsh-live-voice.recognition.whisper.restartRequired':
158
+ 'Las rutas de configuración de Whisper no están cargadas. Es necesario reiniciar normalmente el servidor DSH para cargar las rutas actualizadas del complemento; no basta con actualizar esta página.',
159
+ 'dsh-live-voice.recognition.whisper.save': 'Guardar la configuración de Whisper',
160
+ 'dsh-live-voice.recognition.whisper.saved':
161
+ 'Guardado en el host de DSH. Se han cancelado las solicitudes de transcripción activas del host.',
162
+ 'dsh-live-voice.recognition.whisper.signInRequired':
163
+ 'Inicia sesión en DSH para gestionar la configuración de Whisper.',
164
+ 'dsh-live-voice.settings.autoSend.cancel': 'Cancelar envío automático',
165
+ 'dsh-live-voice.settings.autoSend.countdown': 'Enviando en {remaining}…',
166
+ 'dsh-live-voice.settings.autoSend.delay': 'Enviar después del silencio',
167
+ 'dsh-live-voice.settings.close': 'Cerrar configuración de voz',
168
+ 'dsh-live-voice.settings.delivery.label': 'Modo de envío',
169
+ 'dsh-live-voice.settings.delivery.manualLabel': 'Desactivado — revisar y enviar manualmente',
170
+ 'dsh-live-voice.settings.delivery.queueLabel': 'Cola — añadir automáticamente tras un silencio',
171
+ 'dsh-live-voice.settings.delivery.status': 'Envío automático: {mode}',
172
+ 'dsh-live-voice.settings.delivery.steerDescription': 'enviar al agente en ejecución',
173
+ 'dsh-live-voice.settings.delivery.steerLabel':
174
+ 'Redirigir — enviar automáticamente al agente en ejecución',
175
+ 'dsh-live-voice.settings.delivery.toggle': 'Modo de envío automático',
176
+ 'dsh-live-voice.settings.engine.refresh': 'Actualizar los motores disponibles',
177
+ 'dsh-live-voice.settings.filters.title': 'Filtrado',
178
+ 'dsh-live-voice.settings.tabs.conversation': 'Conversación',
179
+ 'dsh-live-voice.settings.tabs.recognition': 'Reconocimiento de voz',
180
+ 'dsh-live-voice.settings.tabs.speak': 'Síntesis de voz',
181
+ 'dsh-live-voice.settings.title': 'Configuración de Live Voice',
182
+ 'dsh-live-voice.settings.whisper.hostHelp':
183
+ 'Configuración para todo el host. Solo se permiten URL HTTP sin autenticación en la interfaz de bucle local (localhost, 127.0.0.1, [::1]). El bucle local se refiere al host de DSH, no a este navegador. Todas las comprobaciones de estado y solicitudes de audio pasan por el servidor con autenticación.',
184
+ 'dsh-live-voice.speak.agentContext.enabled': 'Activar el contexto de voz del agente',
185
+ 'dsh-live-voice.speak.agentContext.enabledHelp':
186
+ 'Cuando está activado, el contexto siguiente informa al agente que sus respuestas se leerán en voz alta.',
187
+ 'dsh-live-voice.speak.agentContext.help':
188
+ 'Esta instrucción en inglés se envía al agente solo durante una conversación de voz activa con habla automática del asistente activada.',
189
+ 'dsh-live-voice.speak.agentContext.label': 'Contexto de voz del agente',
190
+ 'dsh-live-voice.speak.agentContext.restore': 'Restaurar predeterminado',
191
+ 'dsh-live-voice.speak.autoPlayback.enabled':
192
+ 'Leer automáticamente los nuevos mensajes del asistente en voz alta',
193
+ 'dsh-live-voice.speak.autoPlayback.help':
194
+ 'Durante una conversación por voz, las frases del asistente se leen automáticamente. La reproducción espera mientras hablas.',
195
+ 'dsh-live-voice.speak.autoPlayback.label': 'Lectura automática del asistente',
196
+ 'dsh-live-voice.speak.autoPlayback.remainingOne':
197
+ 'Lectura automática del asistente: {state} — queda {count} segmento de voz',
198
+ 'dsh-live-voice.speak.autoPlayback.remainingOther':
199
+ 'Lectura automática del asistente: {state} — quedan {count} segmentos de voz',
200
+ 'dsh-live-voice.speak.autoPlayback.status': 'Lectura automática del asistente: {state}',
201
+ 'dsh-live-voice.speak.browser.automaticVoice': 'Voz local automática',
202
+ 'dsh-live-voice.speak.browser.label': 'Síntesis de voz del navegador — audio en este dispositivo',
203
+ 'dsh-live-voice.speak.browser.name': 'Síntesis de voz del navegador',
204
+ 'dsh-live-voice.speak.browser.outputHelp':
205
+ 'La síntesis de voz del navegador puede ignorar el dispositivo de salida seleccionado; esta API del navegador normalmente utiliza el predeterminado del sistema.',
206
+ 'dsh-live-voice.speak.browser.voice': 'Voz local del navegador',
207
+ 'dsh-live-voice.speak.engine.label': 'Motor de síntesis de voz',
208
+ 'dsh-live-voice.speak.engine.playbackHelp':
209
+ 'Qwen y macOS say sintetizan en el host de DSH; el audio AAC/M4A compacto se reproduce en este navegador. La voz del navegador se sintetiza y reproduce en este dispositivo.',
210
+ 'dsh-live-voice.speak.filters.code.enabled':
211
+ 'Filtrar los bloques de código Markdown antes de leer en voz alta',
212
+ 'dsh-live-voice.speak.filters.code.maxLines':
213
+ 'Máximo de líneas de los bloques de código que se leerán',
214
+ 'dsh-live-voice.speak.filters.code.notice': 'Mira el código en nuestra conversación',
215
+ 'dsh-live-voice.speak.filters.code.replacement':
216
+ 'Frase de reemplazo para los bloques de código más largos',
217
+ 'dsh-live-voice.speak.interruption.disabledHelp':
218
+ 'Enviar otro mensaje no detiene el audio del asistente que ya estás escuchando.',
219
+ 'dsh-live-voice.speak.interruption.enabled':
220
+ 'Detener la lectura en voz alta del asistente cuando envíe un mensaje',
221
+ 'dsh-live-voice.speak.interruption.enabledHelp':
222
+ 'Enviar un nuevo mensaje de usuario, incluso al agente en ejecución, detiene la lectura en voz alta del asistente, tanto si está reproduciéndose como si está en pausa.',
223
+ 'dsh-live-voice.speak.macos.label': 'macOS say — audio en el host',
224
+ 'dsh-live-voice.speak.macos.name': 'macOS say',
225
+ 'dsh-live-voice.speak.macos.outputHelp':
226
+ 'macOS say utiliza la salida seleccionada en el host de DSH.',
227
+ 'dsh-live-voice.speak.output.checking': 'Comprobando la salida de voz…',
228
+ 'dsh-live-voice.speak.output.device': 'Dispositivo de salida',
229
+ 'dsh-live-voice.speak.output.fallbackName': 'Salida de audio',
230
+ 'dsh-live-voice.speak.output.stopTest': 'Detener la prueba de voz',
231
+ 'dsh-live-voice.speak.output.test': 'Probar la salida de voz seleccionada',
232
+ 'dsh-live-voice.speak.output.testPhrase':
233
+ 'DSH Live Voice. La salida de voz seleccionada funciona.',
234
+ 'dsh-live-voice.speak.output.testing': 'Probando la voz…',
235
+ 'dsh-live-voice.speak.playback.message': 'Leer el mensaje en voz alta',
236
+ 'dsh-live-voice.speak.playback.next': 'Saltar al siguiente segmento de voz',
237
+ 'dsh-live-voice.speak.playback.pause': 'Pausar la lectura en voz alta',
238
+ 'dsh-live-voice.speak.playback.resume': 'Reanudar la lectura en voz alta',
239
+ 'dsh-live-voice.speak.playback.stop': 'Detener la lectura en voz alta',
240
+ 'dsh-live-voice.speak.playback.stopAll': 'Detener toda la lectura en voz alta',
241
+ 'dsh-live-voice.speak.qwen.connection': 'Conexión al servidor Qwen',
242
+ 'dsh-live-voice.speak.qwen.endpoint': 'URL base de la API de Qwen',
243
+ 'dsh-live-voice.speak.qwen.healthFailed': 'Ha fallado la comprobación de estado de Qwen.',
244
+ 'dsh-live-voice.speak.qwen.label': 'Qwen3 TTS — servidor MLX local',
245
+ 'dsh-live-voice.speak.qwen.name': 'Qwen3 local',
246
+ 'dsh-live-voice.speak.qwen.requestFailed': 'Ha fallado la solicitud de configuración de Qwen.',
247
+ 'dsh-live-voice.speak.qwen.restartRequired':
248
+ 'Las rutas de configuración de Qwen no están cargadas. Es necesario reiniciar normalmente el servidor DSH para cargar las rutas actualizadas del complemento; no basta con actualizar esta página.',
249
+ 'dsh-live-voice.speak.qwen.save': 'Guardar la configuración de Qwen',
250
+ 'dsh-live-voice.speak.qwen.saved':
251
+ 'Guardado en el host de DSH. Se han cancelado las solicitudes activas de Qwen.',
252
+ 'dsh-live-voice.speak.qwen.signInRequired':
253
+ 'Inicia sesión en DSH para gestionar la configuración de Qwen.',
254
+ 'dsh-live-voice.speak.qwen.test': 'Probar el servidor Qwen',
255
+ 'dsh-live-voice.speak.qwen.voice': 'Voz de Qwen',
256
+ 'dsh-live-voice.speak.qwen.voiceHelp':
257
+ 'Aiden se utiliza de forma predeterminada. Estas voces predefinidas no son voces nativas de portugués brasileño.',
258
+ 'dsh-live-voice.speak.qwen.voices.aiden': 'Aiden — masculino, inglés estadounidense',
259
+ 'dsh-live-voice.speak.qwen.voices.dylan': 'Dylan — masculino, chino de Pekín',
260
+ 'dsh-live-voice.speak.qwen.voices.eric': 'Eric — masculino, chino de Sichuan',
261
+ 'dsh-live-voice.speak.qwen.voices.onoAnna': 'Ono Anna — femenino, japonés',
262
+ 'dsh-live-voice.speak.qwen.voices.ryan': 'Ryan — masculino, inglés',
263
+ 'dsh-live-voice.speak.qwen.voices.serena': 'Serena — femenino, chino',
264
+ 'dsh-live-voice.speak.qwen.voices.sohee': 'Sohee — femenino, coreano',
265
+ 'dsh-live-voice.speak.qwen.voices.uncleFu': 'Uncle Fu — masculino, chino',
266
+ 'dsh-live-voice.speak.qwen.voices.vivian': 'Vivian — femenino, chino',
267
+ 'dsh-live-voice.speak.rate.help': 'Velocidad relativa: 1 es la velocidad normal.',
268
+ 'dsh-live-voice.speak.rate.label': 'Velocidad de habla',
269
+ 'dsh-live-voice.speak.responseDelay.help':
270
+ 'Cuando dejas de hablar, la reproducción automática del asistente espera este intervalo de silencio continuo. Si vuelves a hablar, la espera se reinicia.',
271
+ 'dsh-live-voice.speak.responseDelay.label': 'Demora de respuesta del asistente',
272
+ 'dsh-live-voice.speak.segmentGap.help':
273
+ 'Espera esta cantidad de milisegundos entre segmentos hablados consecutivos. El valor predeterminado es 400 ms.',
274
+ 'dsh-live-voice.speak.segmentGap.label': 'Pausa entre segmentos de voz',
275
+ 'dsh-live-voice.speak.status.paused': 'Lectura en pausa',
276
+ 'dsh-live-voice.speak.status.playing': 'Hablando',
277
+ };
278
+
279
+ export default Object.freeze(es);
@@ -0,0 +1,281 @@
1
+ import type { LiveVoiceTranslation } from './base.js';
2
+
3
+ const fr: LiveVoiceTranslation = {
4
+ 'dsh-live-voice.commons.connection.contactingHost': 'Connexion à l’hôte DSH…',
5
+ 'dsh-live-voice.commons.connection.endpoint': 'URL du point d’accès',
6
+ 'dsh-live-voice.commons.connection.healthEndpoint': 'URL ou chemin de vérification de l’état',
7
+ 'dsh-live-voice.commons.connection.reload': 'Recharger les paramètres enregistrés',
8
+ 'dsh-live-voice.commons.connection.test': 'Tester la connexion',
9
+ 'dsh-live-voice.commons.connection.timeout': 'Délai d’expiration des requêtes (ms)',
10
+ 'dsh-live-voice.commons.connection.title': 'Paramètres de connexion',
11
+ 'dsh-live-voice.commons.connection.unsaved': 'Modifications non enregistrées',
12
+ 'dsh-live-voice.commons.controls.title': 'Contrôles vocaux',
13
+ 'dsh-live-voice.commons.conversation.end': 'Terminer la conversation vocale',
14
+ 'dsh-live-voice.commons.conversation.idle': 'Conversation inactive',
15
+ 'dsh-live-voice.commons.conversation.start': 'Démarrer une conversation vocale',
16
+ 'dsh-live-voice.commons.delivery.queueBadge': 'FILE',
17
+ 'dsh-live-voice.commons.device.numberedLabel': '{device} {number}',
18
+ 'dsh-live-voice.commons.dismiss': 'Fermer',
19
+ 'dsh-live-voice.commons.dismissError': 'Masquer l’erreur vocale',
20
+ 'dsh-live-voice.commons.engine.failure': '{engine} : {reason}',
21
+ 'dsh-live-voice.commons.input.ignoring': 'entrée ignorée',
22
+ 'dsh-live-voice.commons.input.ignoringBadge': 'ENTRÉE IGNORÉE',
23
+ 'dsh-live-voice.commons.input.listening': 'à l’écoute',
24
+ 'dsh-live-voice.commons.input.listeningBadge': 'À L’ÉCOUTE',
25
+ 'dsh-live-voice.commons.manual': 'manuel',
26
+ 'dsh-live-voice.commons.off': 'désactivé',
27
+ 'dsh-live-voice.commons.on': 'activé',
28
+ 'dsh-live-voice.commons.pluginName': 'Live Voice',
29
+ 'dsh-live-voice.commons.queue': 'file d’attente',
30
+ 'dsh-live-voice.commons.repository.starLabel': 'Soutenez-nous avec une étoile sur GitHub',
31
+ 'dsh-live-voice.commons.repository.starLink': 'Attribuer une étoile à DSH Live Voice sur GitHub',
32
+ 'dsh-live-voice.commons.seconds': '{seconds} secondes',
33
+ 'dsh-live-voice.commons.send': 'ENVOYER',
34
+ 'dsh-live-voice.commons.status.ready': 'Fonctions vocales prêtes',
35
+ 'dsh-live-voice.commons.systemDefault': 'Valeur par défaut du système',
36
+ 'dsh-live-voice.commons.toggle.offBadge': 'DÉSACTIVÉ',
37
+ 'dsh-live-voice.commons.unknownLanguage': 'langue inconnue',
38
+ 'dsh-live-voice.commons.update.label': 'Mise à jour disponible',
39
+ 'dsh-live-voice.commons.update.link':
40
+ 'Mise à jour disponible : {version}. Ouvrir la page de cette version',
41
+ 'dsh-live-voice.commons.update.version': 'Mise à jour disponible : {version}',
42
+ 'dsh-live-voice.commons.version.compatibility': 'Compatible avec DSH v{version}',
43
+ 'dsh-live-voice.commons.version.compatibilityLink':
44
+ 'Compatible avec DSH v{version}. Ouvrir la page de cette version',
45
+ 'dsh-live-voice.commons.version.label': 'DSH Live Voice v{version}',
46
+ 'dsh-live-voice.commons.version.link': 'DSH Live Voice v{version}. Ouvrir la liste des versions',
47
+ 'dsh-live-voice.commons.version.title': 'Informations de version',
48
+ 'dsh-live-voice.recognition.autoSend.countdownHelp':
49
+ 'Le compte à rebours démarre après la reconnaissance définitive d’une phrase. Toute nouvelle parole ou modification l’annule.',
50
+ 'dsh-live-voice.recognition.browser.autoInstallPack':
51
+ 'Installer automatiquement ce pack linguistique du navigateur si nécessaire',
52
+ 'dsh-live-voice.recognition.browser.help':
53
+ 'Utilise l’API SpeechRecognition du navigateur. Il s’agit de l’option par défaut.',
54
+ 'dsh-live-voice.recognition.browser.label': 'SpeechRecognition du navigateur — Option par défaut',
55
+ 'dsh-live-voice.recognition.browser.localProcessing':
56
+ 'Effectuer la reconnaissance localement sur cet appareil',
57
+ 'dsh-live-voice.recognition.browser.microphoneHelp':
58
+ 'SpeechRecognition peut utiliser le microphone par défaut du navigateur ou du système plutôt que celui sélectionné ici.',
59
+ 'dsh-live-voice.recognition.browser.remoteServiceWarning':
60
+ 'La reconnaissance via le service du navigateur est activée. Le navigateur peut envoyer le son du microphone à son service de reconnaissance.',
61
+ 'dsh-live-voice.recognition.commands.clear': 'Vider la zone de rédaction',
62
+ 'dsh-live-voice.recognition.commands.enabled':
63
+ 'Activer les commandes vocales par correspondance exacte',
64
+ 'dsh-live-voice.recognition.commands.mute':
65
+ 'Suspendre la saisie vocale dans la zone de rédaction',
66
+ 'dsh-live-voice.recognition.commands.queue': 'Mettre en file d’attente',
67
+ 'dsh-live-voice.recognition.commands.resume':
68
+ 'Reprendre la saisie vocale dans la zone de rédaction',
69
+ 'dsh-live-voice.recognition.commands.send': 'Envoyer à l’agent en cours d’exécution',
70
+ 'dsh-live-voice.recognition.commands.stopSpeech': 'Arrêter la lecture vocale de l’assistant',
71
+ 'dsh-live-voice.recognition.commands.title': 'Commandes vocales',
72
+ 'dsh-live-voice.recognition.dictation.cancel': 'Annuler la dictée',
73
+ 'dsh-live-voice.recognition.engine.label': 'Moteur de reconnaissance',
74
+ 'dsh-live-voice.recognition.headphoneMode.help':
75
+ 'Le microphone ouvert continue d’écouter pendant la lecture des réponses. Lorsque votre voix est détectée, la lecture se met en pause et ne reprend que lorsque vous le décidez.',
76
+ 'dsh-live-voice.recognition.headphoneMode.label': 'Casque — microphone ouvert',
77
+ 'dsh-live-voice.recognition.holdToTalk.enabled': 'Maintenir Ctrl pour parler',
78
+ 'dsh-live-voice.recognition.holdToTalk.help':
79
+ 'Lorsqu’une zone de rédaction est ouverte, maintenez Ctrl n’importe où sur la page pour capturer votre voix. Relâchez la touche pour traiter la transcription en attente, attendre le délai d’envoi configuré, mettre le message en file d’attente et arrêter la capture vocale. Appuyez sur Échap tout en maintenant Ctrl pour annuler.',
80
+ 'dsh-live-voice.recognition.language.automatic': 'Automatique — détecter la langue',
81
+ 'dsh-live-voice.recognition.language.label': 'Langue de reconnaissance',
82
+ 'dsh-live-voice.recognition.manualSend.help':
83
+ 'Le texte reconnu reste dans la zone de rédaction jusqu’à ce que vous utilisiez le bouton d’envoi habituel de DSH.',
84
+ 'dsh-live-voice.recognition.maxUtterance.help':
85
+ 'Si vous parlez sans pause, un nouveau segment de transcription commence après cette durée. Valeur par défaut : 60 secondes.',
86
+ 'dsh-live-voice.recognition.maxUtterance.label': 'Durée maximale de parole continue (secondes)',
87
+ 'dsh-live-voice.recognition.microphone.checking':
88
+ 'Vérification de la disponibilité du microphone',
89
+ 'dsh-live-voice.recognition.microphone.device': 'Périphérique d’entrée',
90
+ 'dsh-live-voice.recognition.microphone.failure': 'Microphone : {reason}',
91
+ 'dsh-live-voice.recognition.microphone.ignore':
92
+ 'Ignorer la saisie vocale dans la zone de rédaction',
93
+ 'dsh-live-voice.recognition.microphone.inputStatus': 'Entrée du microphone : {state}',
94
+ 'dsh-live-voice.recognition.microphone.label': 'Microphone',
95
+ 'dsh-live-voice.recognition.microphone.permissionHelp':
96
+ 'L’autorisation d’utiliser le microphone ne sera demandée que lorsque vous démarrerez une dictée ou une conversation vocale.',
97
+ 'dsh-live-voice.recognition.microphone.resume': 'Reprendre l’écoute',
98
+ 'dsh-live-voice.recognition.microphone.starting': 'Démarrage du microphone…',
99
+ 'dsh-live-voice.recognition.microphone.takeControl': 'Prendre le contrôle du microphone',
100
+ 'dsh-live-voice.recognition.minimumWords.enabled':
101
+ 'Ignorer les segments définitifs de transcription trop courts',
102
+ 'dsh-live-voice.recognition.minimumWords.help':
103
+ 'Les segments définitifs contenant moins de mots sont ignorés avant d’atteindre la zone de rédaction ou l’envoi automatique.',
104
+ 'dsh-live-voice.recognition.minimumWords.label': 'Nombre minimal de mots par segment définitif',
105
+ 'dsh-live-voice.recognition.mode.label': 'Mode d’écoute',
106
+ 'dsh-live-voice.recognition.planned.parakeet': 'NVIDIA Parakeet — Bientôt disponible',
107
+ 'dsh-live-voice.recognition.planned.sherpa': 'sherpa-onnx en continu — Bientôt disponible',
108
+ 'dsh-live-voice.recognition.planned.vote': 'Bientôt disponible — votez dans les tickets du dépôt',
109
+ 'dsh-live-voice.recognition.planned.voxtral': 'Voxtral Realtime — Bientôt disponible',
110
+ 'dsh-live-voice.recognition.planned.webGpu':
111
+ 'Inférence WebGPU dans le navigateur — Bientôt disponible',
112
+ 'dsh-live-voice.recognition.presets.long.description':
113
+ 'Attend pendant les pauses de réflexion plus longues.',
114
+ 'dsh-live-voice.recognition.presets.long.label': 'Longue',
115
+ 'dsh-live-voice.recognition.presets.natural.description':
116
+ 'Autorise des pauses normales entre les phrases.',
117
+ 'dsh-live-voice.recognition.presets.natural.label': 'Naturelle',
118
+ 'dsh-live-voice.recognition.presets.short.description':
119
+ 'Envoie rapidement après une courte pause.',
120
+ 'dsh-live-voice.recognition.presets.short.label': 'Courte',
121
+ 'dsh-live-voice.recognition.providerSettings.help':
122
+ 'Les paramètres du fournisseur dépendent du moteur de reconnaissance sélectionné.',
123
+ 'dsh-live-voice.recognition.qwen.captureHelp':
124
+ 'Le son est découpé en énoncés complets au format WAV, puis envoyé via DSH avec authentification au modèle Qwen3 ASR exécuté localement sur l’hôte.',
125
+ 'dsh-live-voice.recognition.qwen.connectionSuccess':
126
+ 'Connexion réussie. Qwen ASR et TTS sont tous deux chargés. Les modifications non enregistrées n’ont pas été appliquées.',
127
+ 'dsh-live-voice.recognition.qwen.endpointHelp':
128
+ 'API HTTP à l’URL configurée sur l’hôte DSH (par défaut : http://127.0.0.1:8080/inference). Le son passe par la route de transcription authentifiée de l’hôte DSH.',
129
+ 'dsh-live-voice.recognition.qwen.hostHelp':
130
+ 'Paramètres communs à tout l’hôte pour le serveur Qwen3 ASR + TTS. Saisissez une URL de base HTTP ou HTTPS accessible depuis l’hôte DSH. Le navigateur y accède via les routes authentifiées de DSH.',
131
+ 'dsh-live-voice.recognition.qwen.label': 'Qwen3 ASR — API HTTP',
132
+ 'dsh-live-voice.recognition.silenceDetection.duration': 'Pause avant l’envoi : {milliseconds} ms',
133
+ 'dsh-live-voice.recognition.silenceDetection.help':
134
+ 'Détermine la durée de pause nécessaire avant que la parole capturée soit envoyée pour reconnaissance.',
135
+ 'dsh-live-voice.recognition.silenceDetection.label': 'Détection du silence',
136
+ 'dsh-live-voice.recognition.silenceDetection.pauseLabel': 'Pause avant l’envoi',
137
+ 'dsh-live-voice.recognition.silenceDetection.title': 'Paramètres de détection du silence',
138
+ 'dsh-live-voice.recognition.speakerMode.help':
139
+ 'L’écoute contrôlée libère le microphone pendant la lecture des réponses pour éviter que le son des haut-parleurs soit reconnu. Utilisez « Prendre le contrôle du microphone » pour interrompre la lecture.',
140
+ 'dsh-live-voice.recognition.speakerMode.label': 'Haut-parleurs — écoute contrôlée',
141
+ 'dsh-live-voice.recognition.status.answer': 'Reconnaissance de la réponse…',
142
+ 'dsh-live-voice.recognition.status.awaitingAnswer': 'Écoute de votre réponse…',
143
+ 'dsh-live-voice.recognition.status.listening': 'Écoute — en attente de parole',
144
+ 'dsh-live-voice.recognition.status.processing': 'Reconnaissance vocale…',
145
+ 'dsh-live-voice.recognition.status.unavailable': 'Reconnaissance vocale indisponible',
146
+ 'dsh-live-voice.recognition.voiceCommands.help':
147
+ 'Séparez les expressions par des virgules. La comparaison ignore la casse, les accents, la ponctuation et les espaces superflus. Le segment définitif entier doit correspondre.',
148
+ 'dsh-live-voice.recognition.whisper.captureHelp':
149
+ 'Le son est découpé en énoncés complets au format WAV, transmis via DSH avec authentification, puis traité par le serveur HTTP whisper.cpp sur l’interface de bouclage.',
150
+ 'dsh-live-voice.recognition.whisper.connectionSuccess':
151
+ 'Connexion réussie. Le point d’accès de vérification de l’état a répondu ; la transcription n’a pas été testée. Les modifications non enregistrées n’ont pas été appliquées.',
152
+ 'dsh-live-voice.recognition.whisper.endpointHelp':
153
+ 'API HTTP à l’URL de base configurée (par défaut : http://127.0.0.1:8080/). Compatible avec POST /v1/audio/transcriptions.',
154
+ 'dsh-live-voice.recognition.whisper.healthFailed':
155
+ 'La vérification de l’état de Whisper a échoué.',
156
+ 'dsh-live-voice.recognition.whisper.label': 'Whisper — API HTTP',
157
+ 'dsh-live-voice.recognition.whisper.requestFailed':
158
+ 'La requête relative aux paramètres de Whisper a échoué.',
159
+ 'dsh-live-voice.recognition.whisper.restartRequired':
160
+ 'Les routes de configuration de Whisper ne sont pas chargées. Un redémarrage normal du serveur DSH est nécessaire pour charger les routes mises à jour du plugin ; actualiser cette page ne suffit pas.',
161
+ 'dsh-live-voice.recognition.whisper.save': 'Enregistrer les paramètres de Whisper',
162
+ 'dsh-live-voice.recognition.whisper.saved':
163
+ 'Enregistré sur l’hôte DSH. Les requêtes de transcription actives sur l’hôte ont été annulées.',
164
+ 'dsh-live-voice.recognition.whisper.signInRequired':
165
+ 'Connectez-vous à DSH pour gérer les paramètres de Whisper.',
166
+ 'dsh-live-voice.settings.autoSend.cancel': 'Annuler l’envoi automatique',
167
+ 'dsh-live-voice.settings.autoSend.countdown': 'Envoi dans {remaining}…',
168
+ 'dsh-live-voice.settings.autoSend.delay': 'Envoyer après le silence',
169
+ 'dsh-live-voice.settings.close': 'Fermer les paramètres vocaux',
170
+ 'dsh-live-voice.settings.delivery.label': 'Mode d’envoi',
171
+ 'dsh-live-voice.settings.delivery.manualLabel': 'Désactivé — vérifier et envoyer manuellement',
172
+ 'dsh-live-voice.settings.delivery.queueLabel':
173
+ 'File d’attente — ajout automatique après un silence',
174
+ 'dsh-live-voice.settings.delivery.status': 'Envoi automatique : {mode}',
175
+ 'dsh-live-voice.settings.delivery.steerDescription': 'envoyer à l’agent en cours d’exécution',
176
+ 'dsh-live-voice.settings.delivery.steerLabel':
177
+ 'Réorienter — envoyer automatiquement à l’agent en cours d’exécution',
178
+ 'dsh-live-voice.settings.delivery.toggle': 'Mode d’envoi automatique',
179
+ 'dsh-live-voice.settings.engine.refresh': 'Actualiser les moteurs disponibles',
180
+ 'dsh-live-voice.settings.filters.title': 'Filtrage',
181
+ 'dsh-live-voice.settings.tabs.conversation': 'Conversation',
182
+ 'dsh-live-voice.settings.tabs.recognition': 'Reconnaissance vocale',
183
+ 'dsh-live-voice.settings.tabs.speak': 'Synthèse vocale',
184
+ 'dsh-live-voice.settings.title': 'Paramètres de Live Voice',
185
+ 'dsh-live-voice.settings.whisper.hostHelp':
186
+ 'Paramètres communs à tout l’hôte. Seules les URL HTTP sans authentification sur l’interface de bouclage (localhost, 127.0.0.1, [::1]) sont autorisées. Le bouclage désigne l’hôte DSH, pas ce navigateur. Toutes les vérifications d’état et requêtes audio passent par le serveur avec authentification.',
187
+ 'dsh-live-voice.speak.agentContext.enabled': 'Activer le contexte vocal de l’agent',
188
+ 'dsh-live-voice.speak.agentContext.enabledHelp':
189
+ 'Lorsqu’il est activé, le contexte ci-dessous indique à l’agent que ses réponses seront lues à voix haute.',
190
+ 'dsh-live-voice.speak.agentContext.help':
191
+ 'Cette instruction en anglais est envoyée à l’agent seulement pendant une conversation vocale active avec la parole automatique de l’assistant activée.',
192
+ 'dsh-live-voice.speak.agentContext.label': 'Contexte vocal de l’agent',
193
+ 'dsh-live-voice.speak.agentContext.restore': 'Restaurer la valeur par défaut',
194
+ 'dsh-live-voice.speak.autoPlayback.enabled':
195
+ 'Lire automatiquement les nouveaux messages de l’assistant',
196
+ 'dsh-live-voice.speak.autoPlayback.help':
197
+ 'Pendant une conversation vocale, les phrases de l’assistant sont lues automatiquement. La lecture attend pendant que vous parlez.',
198
+ 'dsh-live-voice.speak.autoPlayback.label': 'Lecture automatique de l’assistant',
199
+ 'dsh-live-voice.speak.autoPlayback.remainingOne':
200
+ 'Lecture automatique de l’assistant : {state} — {count} segment vocal restant',
201
+ 'dsh-live-voice.speak.autoPlayback.remainingOther':
202
+ 'Lecture automatique de l’assistant : {state} — {count} segments vocaux restants',
203
+ 'dsh-live-voice.speak.autoPlayback.status': 'Lecture automatique de l’assistant : {state}',
204
+ 'dsh-live-voice.speak.browser.automaticVoice': 'Voix locale automatique',
205
+ 'dsh-live-voice.speak.browser.label': 'Synthèse vocale du navigateur — son sur cet appareil',
206
+ 'dsh-live-voice.speak.browser.name': 'Synthèse vocale du navigateur',
207
+ 'dsh-live-voice.speak.browser.outputHelp':
208
+ 'La synthèse vocale du navigateur peut ignorer le périphérique de sortie sélectionné ; cette API du navigateur utilise normalement celui défini par défaut sur le système.',
209
+ 'dsh-live-voice.speak.browser.voice': 'Voix locale du navigateur',
210
+ 'dsh-live-voice.speak.engine.label': 'Moteur de synthèse vocale',
211
+ 'dsh-live-voice.speak.engine.playbackHelp':
212
+ 'Qwen et macOS say synthétisent sur l’hôte DSH ; l’audio AAC/M4A compact est lu dans ce navigateur. La synthèse vocale du navigateur est générée et lue sur cet appareil.',
213
+ 'dsh-live-voice.speak.filters.code.enabled':
214
+ 'Filtrer les blocs de code Markdown avant la lecture vocale',
215
+ 'dsh-live-voice.speak.filters.code.maxLines': 'Nombre maximal de lignes des blocs de code à lire',
216
+ 'dsh-live-voice.speak.filters.code.notice': 'Consultez le code dans notre conversation',
217
+ 'dsh-live-voice.speak.filters.code.replacement':
218
+ 'Phrase de remplacement pour les blocs de code plus longs',
219
+ 'dsh-live-voice.speak.interruption.disabledHelp':
220
+ 'L’envoi d’un autre message n’arrête pas la lecture vocale de l’assistant que vous écoutez déjà.',
221
+ 'dsh-live-voice.speak.interruption.enabled':
222
+ 'Arrêter la lecture vocale de l’assistant lorsque j’envoie un message',
223
+ 'dsh-live-voice.speak.interruption.enabledHelp':
224
+ 'L’envoi d’un nouveau message utilisateur, y compris à l’agent en cours d’exécution, arrête la lecture vocale de l’assistant, qu’elle soit en cours ou en pause.',
225
+ 'dsh-live-voice.speak.macos.label': 'macOS say — son sur l’hôte',
226
+ 'dsh-live-voice.speak.macos.name': 'macOS say',
227
+ 'dsh-live-voice.speak.macos.outputHelp':
228
+ 'macOS say utilise la sortie sélectionnée sur l’hôte DSH.',
229
+ 'dsh-live-voice.speak.output.checking': 'Vérification de la sortie vocale…',
230
+ 'dsh-live-voice.speak.output.device': 'Périphérique de sortie',
231
+ 'dsh-live-voice.speak.output.fallbackName': 'Sortie audio',
232
+ 'dsh-live-voice.speak.output.stopTest': 'Arrêter le test vocal',
233
+ 'dsh-live-voice.speak.output.test': 'Tester la sortie vocale sélectionnée',
234
+ 'dsh-live-voice.speak.output.testPhrase':
235
+ 'DSH Live Voice. La sortie vocale sélectionnée fonctionne.',
236
+ 'dsh-live-voice.speak.output.testing': 'Test vocal en cours…',
237
+ 'dsh-live-voice.speak.playback.message': 'Lire le message à voix haute',
238
+ 'dsh-live-voice.speak.playback.next': 'Passer au segment vocal suivant',
239
+ 'dsh-live-voice.speak.playback.pause': 'Mettre la lecture en pause',
240
+ 'dsh-live-voice.speak.playback.resume': 'Reprendre la lecture',
241
+ 'dsh-live-voice.speak.playback.stop': 'Arrêter la lecture',
242
+ 'dsh-live-voice.speak.playback.stopAll': 'Arrêter toute lecture',
243
+ 'dsh-live-voice.speak.qwen.connection': 'Connexion au serveur Qwen',
244
+ 'dsh-live-voice.speak.qwen.endpoint': 'URL de base de l’API Qwen',
245
+ 'dsh-live-voice.speak.qwen.healthFailed': 'La vérification de l’état de Qwen a échoué.',
246
+ 'dsh-live-voice.speak.qwen.label': 'Qwen3 TTS — serveur MLX local',
247
+ 'dsh-live-voice.speak.qwen.name': 'Qwen3 local',
248
+ 'dsh-live-voice.speak.qwen.requestFailed': 'La requête relative aux paramètres de Qwen a échoué.',
249
+ 'dsh-live-voice.speak.qwen.restartRequired':
250
+ 'Les routes de configuration de Qwen ne sont pas chargées. Un redémarrage normal du serveur DSH est nécessaire pour charger les routes mises à jour du plugin ; actualiser cette page ne suffit pas.',
251
+ 'dsh-live-voice.speak.qwen.save': 'Enregistrer les paramètres de Qwen',
252
+ 'dsh-live-voice.speak.qwen.saved':
253
+ 'Enregistré sur l’hôte DSH. Les requêtes Qwen actives ont été annulées.',
254
+ 'dsh-live-voice.speak.qwen.signInRequired':
255
+ 'Connectez-vous à DSH pour gérer les paramètres de Qwen.',
256
+ 'dsh-live-voice.speak.qwen.test': 'Tester le serveur Qwen',
257
+ 'dsh-live-voice.speak.qwen.voice': 'Voix Qwen',
258
+ 'dsh-live-voice.speak.qwen.voiceHelp':
259
+ 'Aiden est utilisé par défaut. Ces voix prédéfinies ne sont pas des voix natives du portugais brésilien.',
260
+ 'dsh-live-voice.speak.qwen.voices.aiden': 'Aiden — homme, anglais américain',
261
+ 'dsh-live-voice.speak.qwen.voices.dylan': 'Dylan — homme, chinois de Pékin',
262
+ 'dsh-live-voice.speak.qwen.voices.eric': 'Eric — homme, chinois du Sichuan',
263
+ 'dsh-live-voice.speak.qwen.voices.onoAnna': 'Ono Anna — femme, japonais',
264
+ 'dsh-live-voice.speak.qwen.voices.ryan': 'Ryan — homme, anglais',
265
+ 'dsh-live-voice.speak.qwen.voices.serena': 'Serena — femme, chinois',
266
+ 'dsh-live-voice.speak.qwen.voices.sohee': 'Sohee — femme, coréen',
267
+ 'dsh-live-voice.speak.qwen.voices.uncleFu': 'Uncle Fu — homme, chinois',
268
+ 'dsh-live-voice.speak.qwen.voices.vivian': 'Vivian — femme, chinois',
269
+ 'dsh-live-voice.speak.rate.help': 'Vitesse relative : 1 correspond à la vitesse normale.',
270
+ 'dsh-live-voice.speak.rate.label': 'Débit de parole',
271
+ 'dsh-live-voice.speak.responseDelay.help':
272
+ 'Après que vous avez cessé de parler, la lecture automatique de l’assistant attend cette durée de silence continu. Si vous reparlez, l’attente recommence.',
273
+ 'dsh-live-voice.speak.responseDelay.label': 'Délai de réponse de l’assistant',
274
+ 'dsh-live-voice.speak.segmentGap.help':
275
+ 'Attend ce nombre de millisecondes entre des segments vocaux consécutifs. La valeur par défaut est 400 ms.',
276
+ 'dsh-live-voice.speak.segmentGap.label': 'Pause entre les segments vocaux',
277
+ 'dsh-live-voice.speak.status.paused': 'Lecture en pause',
278
+ 'dsh-live-voice.speak.status.playing': 'Lecture en cours',
279
+ };
280
+
281
+ export default Object.freeze(fr);