feat(tts): add auto mode for text-to-speech engine selection

This commit is contained in:
cogwheel0
2025-11-02 21:31:13 +05:30
parent da249eaa31
commit cfadeffd24
19 changed files with 579 additions and 154 deletions

View File

@@ -314,10 +314,16 @@
"sttEngineServer": "Server",
"sttEngineAutoDescription": "Verwendet die Erkennung auf dem Gerät, wenn verfügbar, und greift sonst auf deinen Server zurück.",
"sttEngineDeviceDescription": "Behält Audio auf diesem Gerät. Spracheingabe funktioniert nicht, wenn das Gerät keine Spracherkennung unterstützt.",
"sttEngineServerDescription": "Sendet Aufnahmen immer an deinen Conduit-Server zur Transkription.",
"sttEngineServerDescription": "Sendet Aufnahmen immer an deinen OpenWebUI-Server zur Transkription.",
"sttDeviceUnavailableWarning": "Auf diesem Gerät steht keine Spracherkennung zur Verfügung.",
"sttServerUnavailableWarning": "Verbinde dich mit einem Server mit aktivierter Transkription, um diese Option zu nutzen.",
"ttsSettings": "Text zu Sprache",
"ttsEngineAuto": "Automatisch",
"ttsEngineAutoDescription": "Verwendet die Sprachausgabe auf dem Gerät, wenn verfügbar, und greift sonst auf deinen Server zurück.",
"ttsEngineDeviceDescription": "Behält die Ausgabe auf diesem Gerät. Sprachausgabe funktioniert nicht, wenn das Gerät keine TTS-Unterstützung bietet.",
"ttsEngineServerDescription": "Sendet die Ausgabe immer an deinen OpenWebUI-Server.",
"ttsDeviceUnavailableWarning": "Sprachausgabe auf dem Gerät steht auf diesem Gerät nicht zur Verfügung.",
"ttsServerUnavailableWarning": "Verbinde dich mit einem Server mit aktivierter Sprachausgabe, um diese Option zu nutzen.",
"ttsVoice": "Stimme",
"ttsSpeechRate": "Sprechgeschwindigkeit",
"ttsPitch": "Tonhöhe",

View File

@@ -1247,7 +1247,7 @@
"@sttEngineDeviceDescription": {
"description": "Description shown when on-device speech-to-text preference is active."
},
"sttEngineServerDescription": "Always send recordings to your Conduit server for transcription.",
"sttEngineServerDescription": "Always send recordings to your OpenWebUI server for transcription.",
"@sttEngineServerDescription": {
"description": "Description shown when server speech-to-text preference is active."
},
@@ -1263,6 +1263,10 @@
"@ttsEngineLabel": {
"description": "Label for selecting the text-to-speech engine."
},
"ttsEngineAuto": "Auto",
"@ttsEngineAuto": {
"description": "Chip label for automatically selecting the text-to-speech engine."
},
"ttsEngineDevice": "On device",
"@ttsEngineDevice": {
"description": "Chip label for using on-device text-to-speech."
@@ -1271,6 +1275,26 @@
"@ttsEngineServer": {
"description": "Chip label for using server-side text-to-speech."
},
"ttsEngineAutoDescription": "Use on-device speech when available and fall back to your server.",
"@ttsEngineAutoDescription": {
"description": "Description shown when automatic text-to-speech preference is active."
},
"ttsEngineDeviceDescription": "Keep synthesis on this device. Voice playback stops working if on-device TTS isnt supported.",
"@ttsEngineDeviceDescription": {
"description": "Description shown when on-device text-to-speech preference is active."
},
"ttsEngineServerDescription": "Always request audio from your OpenWebUI server.",
"@ttsEngineServerDescription": {
"description": "Description shown when server text-to-speech preference is active."
},
"ttsDeviceUnavailableWarning": "On-device text-to-speech isnt available on this device.",
"@ttsDeviceUnavailableWarning": {
"description": "Warning shown when on-device text-to-speech is unavailable."
},
"ttsServerUnavailableWarning": "Connect to a server with text-to-speech enabled to use this option.",
"@ttsServerUnavailableWarning": {
"description": "Warning shown when server text-to-speech is unavailable."
},
"ttsSettings": "Text to Speech",
"@ttsSettings": {
"description": "Section header for TTS-related customization options."

View File

@@ -314,10 +314,16 @@
"sttEngineServer": "Servidor",
"sttEngineAutoDescription": "Usa el reconocimiento en el dispositivo cuando esté disponible y, si no, recurre a tu servidor.",
"sttEngineDeviceDescription": "Mantiene el audio en este dispositivo. La entrada de voz no funciona si el dispositivo no admite reconocimiento de voz.",
"sttEngineServerDescription": "Envía siempre las grabaciones a tu servidor Conduit para la transcripción.",
"sttEngineServerDescription": "Envía siempre las grabaciones a tu servidor OpenWebUI para la transcripción.",
"sttDeviceUnavailableWarning": "El reconocimiento de voz en el dispositivo no está disponible en este dispositivo.",
"sttServerUnavailableWarning": "Conéctate a un servidor con transcripción habilitada para usar esta opción.",
"ttsSettings": "Texto a voz",
"ttsEngineAuto": "Automático",
"ttsEngineAutoDescription": "Usa la síntesis en el dispositivo cuando esté disponible y, si no, recurre a tu servidor.",
"ttsEngineDeviceDescription": "Mantiene la síntesis en este dispositivo. La reproducción de voz no funciona si el dispositivo no admite TTS.",
"ttsEngineServerDescription": "Solicita siempre el audio a tu servidor OpenWebUI.",
"ttsDeviceUnavailableWarning": "La síntesis de voz en el dispositivo no está disponible en este dispositivo.",
"ttsServerUnavailableWarning": "Conéctate a un servidor con texto a voz habilitado para usar esta opción.",
"ttsVoice": "Voz",
"ttsSpeechRate": "Velocidad de voz",
"ttsPitch": "Tono",

View File

@@ -314,10 +314,16 @@
"sttEngineServer": "Serveur",
"sttEngineAutoDescription": "Utilise la reconnaissance sur lappareil quand cest possible, sinon bascule vers votre serveur.",
"sttEngineDeviceDescription": "Conserve laudio sur cet appareil. Lentrée vocale cesse de fonctionner si la reconnaissance vocale nest pas prise en charge.",
"sttEngineServerDescription": "Envoie toujours les enregistrements à votre serveur Conduit pour transcription.",
"sttEngineServerDescription": "Envoie toujours les enregistrements à votre serveur OpenWebUI pour transcription.",
"sttDeviceUnavailableWarning": "La reconnaissance vocale sur lappareil nest pas disponible sur cet appareil.",
"sttServerUnavailableWarning": "Connectez-vous à un serveur avec la transcription activée pour utiliser cette option.",
"ttsSettings": "Synthèse vocale",
"ttsSettings": "Synthèse vocale",
"ttsEngineAuto": "Auto",
"ttsEngineAutoDescription": "Utilise la synthèse locale quand cest possible, sinon bascule vers votre serveur.",
"ttsEngineDeviceDescription": "Garde la synthèse sur cet appareil. La lecture vocale ne fonctionne plus si lappareil noffre pas la synthèse vocale.",
"ttsEngineServerDescription": "Demande toujours l'audio à votre serveur OpenWebUI.",
"ttsDeviceUnavailableWarning": "La synthèse vocale sur lappareil nest pas disponible sur cet appareil.",
"ttsServerUnavailableWarning": "Connectez-vous à un serveur avec la synthèse vocale activée pour utiliser cette option.",
"ttsVoice": "Voix",
"ttsSpeechRate": "Vitesse de parole",
"ttsPitch": "Hauteur",

View File

@@ -314,10 +314,16 @@
"sttEngineServer": "Server",
"sttEngineAutoDescription": "Usa il riconoscimento sul dispositivo quando disponibile e altrimenti passa al tuo server.",
"sttEngineDeviceDescription": "Mantiene laudio su questo dispositivo. Linput vocale non funziona se il dispositivo non supporta il riconoscimento vocale.",
"sttEngineServerDescription": "Invia sempre le registrazioni al tuo server Conduit per la trascrizione.",
"sttEngineServerDescription": "Invia sempre le registrazioni al tuo server OpenWebUI per la trascrizione.",
"sttDeviceUnavailableWarning": "Il riconoscimento vocale sul dispositivo non è disponibile su questo dispositivo.",
"sttServerUnavailableWarning": "Collegati a un server con la trascrizione abilitata per usare questa opzione.",
"ttsSettings": "Sintesi vocale",
"ttsSettings": "Sintesi vocale",
"ttsEngineAuto": "Automatico",
"ttsEngineAutoDescription": "Usa la sintesi sul dispositivo quando disponibile e altrimenti passa al tuo server.",
"ttsEngineDeviceDescription": "Mantiene la sintesi su questo dispositivo. La riproduzione vocale non funziona se il dispositivo non supporta il TTS.",
"ttsEngineServerDescription": "Richiede sempre l'audio dal tuo server OpenWebUI.",
"ttsDeviceUnavailableWarning": "La sintesi vocale sul dispositivo non è disponibile su questo dispositivo.",
"ttsServerUnavailableWarning": "Collegati a un server con la sintesi vocale abilitata per usare questa opzione.",
"ttsVoice": "Voce",
"ttsSpeechRate": "Velocità di sintesi vocale",
"ttsPitch": "Tonalità",

View File

@@ -1829,7 +1829,7 @@ abstract class AppLocalizations {
/// Description shown when server speech-to-text preference is active.
///
/// In en, this message translates to:
/// **'Always send recordings to your Conduit server for transcription.'**
/// **'Always send recordings to your OpenWebUI server for transcription.'**
String get sttEngineServerDescription;
/// Warning shown when the user selects on-device speech recognition but it is unavailable.
@@ -1850,6 +1850,12 @@ abstract class AppLocalizations {
/// **'Engine'**
String get ttsEngineLabel;
/// Chip label for automatically selecting the text-to-speech engine.
///
/// In en, this message translates to:
/// **'Auto'**
String get ttsEngineAuto;
/// Chip label for using on-device text-to-speech.
///
/// In en, this message translates to:
@@ -1862,6 +1868,36 @@ abstract class AppLocalizations {
/// **'Server'**
String get ttsEngineServer;
/// Description shown when automatic text-to-speech preference is active.
///
/// In en, this message translates to:
/// **'Use on-device speech when available and fall back to your server.'**
String get ttsEngineAutoDescription;
/// Description shown when on-device text-to-speech preference is active.
///
/// In en, this message translates to:
/// **'Keep synthesis on this device. Voice playback stops working if on-device TTS isnt supported.'**
String get ttsEngineDeviceDescription;
/// Description shown when server text-to-speech preference is active.
///
/// In en, this message translates to:
/// **'Always request audio from your OpenWebUI server.'**
String get ttsEngineServerDescription;
/// Warning shown when on-device text-to-speech is unavailable.
///
/// In en, this message translates to:
/// **'On-device text-to-speech isnt available on this device.'**
String get ttsDeviceUnavailableWarning;
/// Warning shown when server text-to-speech is unavailable.
///
/// In en, this message translates to:
/// **'Connect to a server with text-to-speech enabled to use this option.'**
String get ttsServerUnavailableWarning;
/// Section header for TTS-related customization options.
///
/// In en, this message translates to:

View File

@@ -956,7 +956,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get sttEngineServerDescription =>
'Sendet Aufnahmen immer an deinen Conduit-Server zur Transkription.';
'Sendet Aufnahmen immer an deinen OpenWebUI-Server zur Transkription.';
@override
String get sttDeviceUnavailableWarning =>
@@ -969,12 +969,35 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get ttsEngineLabel => 'Engine';
@override
String get ttsEngineAuto => 'Automatisch';
@override
String get ttsEngineDevice => 'Auf dem Gerät';
@override
String get ttsEngineServer => 'Server';
@override
String get ttsEngineAutoDescription =>
'Verwendet die Sprachausgabe auf dem Gerät, wenn verfügbar, und greift sonst auf deinen Server zurück.';
@override
String get ttsEngineDeviceDescription =>
'Behält die Ausgabe auf diesem Gerät. Sprachausgabe funktioniert nicht, wenn das Gerät keine TTS-Unterstützung bietet.';
@override
String get ttsEngineServerDescription =>
'Sendet die Ausgabe immer an deinen OpenWebUI-Server.';
@override
String get ttsDeviceUnavailableWarning =>
'Sprachausgabe auf dem Gerät steht auf diesem Gerät nicht zur Verfügung.';
@override
String get ttsServerUnavailableWarning =>
'Verbinde dich mit einem Server mit aktivierter Sprachausgabe, um diese Option zu nutzen.';
@override
String get ttsSettings => 'Text zu Sprache';

View File

@@ -950,7 +950,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get sttEngineServerDescription =>
'Always send recordings to your Conduit server for transcription.';
'Always send recordings to your OpenWebUI server for transcription.';
@override
String get sttDeviceUnavailableWarning =>
@@ -963,12 +963,35 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get ttsEngineLabel => 'Engine';
@override
String get ttsEngineAuto => 'Auto';
@override
String get ttsEngineDevice => 'On device';
@override
String get ttsEngineServer => 'Server';
@override
String get ttsEngineAutoDescription =>
'Use on-device speech when available and fall back to your server.';
@override
String get ttsEngineDeviceDescription =>
'Keep synthesis on this device. Voice playback stops working if on-device TTS isnt supported.';
@override
String get ttsEngineServerDescription =>
'Always request audio from your OpenWebUI server.';
@override
String get ttsDeviceUnavailableWarning =>
'On-device text-to-speech isnt available on this device.';
@override
String get ttsServerUnavailableWarning =>
'Connect to a server with text-to-speech enabled to use this option.';
@override
String get ttsSettings => 'Text to Speech';

View File

@@ -965,7 +965,7 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get sttEngineServerDescription =>
'Envoie toujours les enregistrements à votre serveur Conduit pour transcription.';
'Envoie toujours les enregistrements à votre serveur OpenWebUI pour transcription.';
@override
String get sttDeviceUnavailableWarning =>
@@ -978,12 +978,35 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get ttsEngineLabel => 'Moteur';
@override
String get ttsEngineAuto => 'Auto';
@override
String get ttsEngineDevice => 'Sur l\'appareil';
@override
String get ttsEngineServer => 'Serveur';
@override
String get ttsEngineAutoDescription =>
'Utilise la synthèse locale quand cest possible, sinon bascule vers votre serveur.';
@override
String get ttsEngineDeviceDescription =>
'Garde la synthèse sur cet appareil. La lecture vocale ne fonctionne plus si lappareil noffre pas la synthèse vocale.';
@override
String get ttsEngineServerDescription =>
'Demande toujours l\'audio à votre serveur OpenWebUI.';
@override
String get ttsDeviceUnavailableWarning =>
'La synthèse vocale sur lappareil nest pas disponible sur cet appareil.';
@override
String get ttsServerUnavailableWarning =>
'Connectez-vous à un serveur avec la synthèse vocale activée pour utiliser cette option.';
@override
String get ttsSettings => 'Synthèse vocale';

View File

@@ -954,7 +954,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get sttEngineServerDescription =>
'Invia sempre le registrazioni al tuo server Conduit per la trascrizione.';
'Invia sempre le registrazioni al tuo server OpenWebUI per la trascrizione.';
@override
String get sttDeviceUnavailableWarning =>
@@ -967,12 +967,35 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get ttsEngineLabel => 'Motore';
@override
String get ttsEngineAuto => 'Automatico';
@override
String get ttsEngineDevice => 'Sul dispositivo';
@override
String get ttsEngineServer => 'Server';
@override
String get ttsEngineAutoDescription =>
'Usa la sintesi sul dispositivo quando disponibile e altrimenti passa al tuo server.';
@override
String get ttsEngineDeviceDescription =>
'Mantiene la sintesi su questo dispositivo. La riproduzione vocale non funziona se il dispositivo non supporta il TTS.';
@override
String get ttsEngineServerDescription =>
'Richiede sempre l\'audio dal tuo server OpenWebUI.';
@override
String get ttsDeviceUnavailableWarning =>
'La sintesi vocale sul dispositivo non è disponibile su questo dispositivo.';
@override
String get ttsServerUnavailableWarning =>
'Collegati a un server con la sintesi vocale abilitata per usare questa opzione.';
@override
String get ttsSettings => 'Sintesi vocale';

View File

@@ -314,10 +314,16 @@
"sttEngineServer": "Server",
"sttEngineAutoDescription": "Gebruikt spraakherkenning op het apparaat wanneer beschikbaar en valt anders terug op je server.",
"sttEngineDeviceDescription": "Houdt audio op dit apparaat. Spraakinput werkt niet als het apparaat geen spraakherkenning ondersteunt.",
"sttEngineServerDescription": "Stuurt opnames altijd naar je Conduit-server voor transcriptie.",
"sttEngineServerDescription": "Stuurt opnames altijd naar je OpenWebUI-server voor transcriptie.",
"sttDeviceUnavailableWarning": "Spraakherkenning op het apparaat is niet beschikbaar op dit apparaat.",
"sttServerUnavailableWarning": "Verbind met een server met transcriptie ingeschakeld om deze optie te gebruiken.",
"ttsSettings": "Tekst naar spraak",
"ttsSettings": "Tekst naar spraak",
"ttsEngineAuto": "Automatisch",
"ttsEngineAutoDescription": "Gebruikt spraaksynthese op het apparaat wanneer beschikbaar en valt anders terug op je server.",
"ttsEngineDeviceDescription": "Houdt de synthese op dit apparaat. Spraakweergave werkt niet als het apparaat geen TTS ondersteunt.",
"ttsEngineServerDescription": "Vraagt altijd audio op bij je OpenWebUI-server.",
"ttsDeviceUnavailableWarning": "Spraaksynthese op het apparaat is niet beschikbaar op dit apparaat.",
"ttsServerUnavailableWarning": "Verbind met een server met tekst-naar-spraak ingeschakeld om deze optie te gebruiken.",
"ttsVoice": "Stem",
"ttsSpeechRate": "Spraaksnelheid",
"ttsPitch": "Toonhoogte",

View File

@@ -314,10 +314,16 @@
"sttEngineServer": "Сервер",
"sttEngineAutoDescription": "Использует распознавание на устройстве, когда это возможно, иначе переключается на ваш сервер.",
"sttEngineDeviceDescription": "Оставляет звук на этом устройстве. Голосовой ввод не работает, если устройство не поддерживает распознавание речи.",
"sttEngineServerDescription": "Всегда отправляет записи на сервер Conduit для транскрибации.",
"sttEngineServerDescription": "Всегда отправляет записи на сервер OpenWebUI для транскрибации.",
"sttDeviceUnavailableWarning": "Распознавание речи на устройстве недоступно на этом устройстве.",
"sttServerUnavailableWarning": "Подключитесь к серверу с включённой транскрибацией, чтобы использовать эту опцию.",
"ttsSettings": "Преобразование текста в речь",
"ttsSettings": "Преобразование текста в речь",
"ttsEngineAuto": "Авто",
"ttsEngineAutoDescription": "Использует синтез речи на устройстве, когда это возможно, иначе переключается на ваш сервер.",
"ttsEngineDeviceDescription": "Оставляет синтез на этом устройстве. Воспроизведение голоса не работает, если устройство не поддерживает синтез речи.",
"ttsEngineServerDescription": "Всегда запрашивает аудио у вашего сервера OpenWebUI.",
"ttsDeviceUnavailableWarning": "Синтез речи на устройстве недоступен на этом устройстве.",
"ttsServerUnavailableWarning": "Подключитесь к серверу с включённым синтезом речи, чтобы использовать эту опцию.",
"ttsVoice": "Голос",
"ttsSpeechRate": "Скорость речи",
"ttsPitch": "Высота тона",

View File

@@ -314,10 +314,16 @@
"sttEngineServer": "服务器",
"sttEngineAutoDescription": "在可用时使用本机识别,否则切换到你的服务器。",
"sttEngineDeviceDescription": "音频会保留在此设备上。如果设备不支持语音识别,语音输入将不可用。",
"sttEngineServerDescription": "始终将录音发送到你的 Conduit 服务器进行转写。",
"sttEngineServerDescription": "始终将录音发送到你的 OpenWebUI 服务器进行转写。",
"sttDeviceUnavailableWarning": "此设备不支持本机语音识别。",
"sttServerUnavailableWarning": "连接到启用转写功能的服务器后才能使用此选项。",
"ttsSettings": "文本转语音",
"ttsSettings": "文本转语音",
"ttsEngineAuto": "自动",
"ttsEngineAutoDescription": "在可用时使用本机合成,否则切换到你的服务器。",
"ttsEngineDeviceDescription": "在此设备上完成合成。如果设备不支持文本转语音,语音播放将不可用。",
"ttsEngineServerDescription": "始终向你的 OpenWebUI 服务器请求音频。",
"ttsDeviceUnavailableWarning": "此设备不支持本机文本转语音。",
"ttsServerUnavailableWarning": "连接到启用文本转语音的服务器后才能使用此选项。",
"ttsVoice": "语音",
"ttsSpeechRate": "语速",
"ttsPitch": "音调",