feat: Add Text-to-Speech settings and customization options
- Introduced new preference keys for TTS settings: voice, speech rate, pitch, and volume. - Updated SettingsService to handle TTS settings and persist them. - Enhanced AppSettings to include TTS-related properties. - Implemented TTS settings UI in AppCustomizationPage, allowing users to select voice and adjust speech parameters. - Added localization support for TTS settings in multiple languages.
This commit is contained in:
@@ -316,6 +316,19 @@
|
||||
"chatSettings": "Chat",
|
||||
"sendOnEnter": "Mit Enter senden",
|
||||
"sendOnEnterDescription": "Enter sendet (Soft-Tastatur). Cmd/Ctrl+Enter ebenfalls verfügbar",
|
||||
"ttsSettings": "Text zu Sprache",
|
||||
"ttsVoice": "Stimme",
|
||||
"ttsSpeechRate": "Sprechgeschwindigkeit",
|
||||
"ttsPitch": "Tonhöhe",
|
||||
"ttsVolume": "Lautstärke",
|
||||
"ttsPreview": "Stimme vorschau",
|
||||
"ttsSystemDefault": "Systemstandard",
|
||||
"ttsSelectVoice": "Stimme auswählen",
|
||||
"ttsPreviewText": "Dies ist eine Vorschau der ausgewählten Stimme.",
|
||||
"ttsNoVoicesAvailable": "Keine Stimmen verfügbar",
|
||||
"ttsVoicesForLanguage": "{language}-Stimmen",
|
||||
"ttsOtherVoices": "Andere Sprachen",
|
||||
"error": "Fehler",
|
||||
"display": "Anzeige",
|
||||
"realtime": "Echtzeit",
|
||||
"transportMode": "Transportmodus",
|
||||
|
||||
@@ -650,6 +650,40 @@
|
||||
"@sendOnEnterDescription": {
|
||||
"description": "Explanation of how the Send on Enter toggle behaves."
|
||||
},
|
||||
"ttsSettings": "Text to Speech",
|
||||
"@ttsSettings": {"description": "Section header for TTS-related customization options."},
|
||||
"ttsVoice": "Voice",
|
||||
"@ttsVoice": {"description": "Title for voice selection tile."},
|
||||
"ttsSpeechRate": "Speech Rate",
|
||||
"@ttsSpeechRate": {"description": "Title for speech rate slider."},
|
||||
"ttsPitch": "Pitch",
|
||||
"@ttsPitch": {"description": "Title for pitch slider."},
|
||||
"ttsVolume": "Volume",
|
||||
"@ttsVolume": {"description": "Title for volume slider."},
|
||||
"ttsPreview": "Preview Voice",
|
||||
"@ttsPreview": {"description": "Title for preview button."},
|
||||
"ttsSystemDefault": "System Default",
|
||||
"@ttsSystemDefault": {"description": "Label for system default voice option."},
|
||||
"ttsSelectVoice": "Select Voice",
|
||||
"@ttsSelectVoice": {"description": "Title for voice picker bottom sheet."},
|
||||
"ttsPreviewText": "This is a preview of the selected voice.",
|
||||
"@ttsPreviewText": {"description": "Sample text spoken during voice preview."},
|
||||
"ttsNoVoicesAvailable": "No voices available",
|
||||
"@ttsNoVoicesAvailable": {"description": "Error message when no TTS voices can be found."},
|
||||
"ttsVoicesForLanguage": "{language} Voices",
|
||||
"@ttsVoicesForLanguage": {
|
||||
"description": "Section header for voices matching the app language",
|
||||
"placeholders": {
|
||||
"language": {
|
||||
"type": "String",
|
||||
"example": "EN"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ttsOtherVoices": "Other Languages",
|
||||
"@ttsOtherVoices": {"description": "Section header for voices in other languages."},
|
||||
"error": "Error",
|
||||
"@error": {"description": "Generic error label."},
|
||||
"display": "Display",
|
||||
"@display": {"description": "Section header for visual and layout related settings."},
|
||||
"realtime": "Realtime",
|
||||
|
||||
@@ -309,6 +309,19 @@
|
||||
"chatSettings": "Conversación",
|
||||
"sendOnEnter": "Enviar con Enter",
|
||||
"sendOnEnterDescription": "Enter envía (teclado virtual). Cmd/Ctrl+Enter también disponible",
|
||||
"ttsSettings": "Texto a voz",
|
||||
"ttsVoice": "Voz",
|
||||
"ttsSpeechRate": "Velocidad de voz",
|
||||
"ttsPitch": "Tono",
|
||||
"ttsVolume": "Volumen",
|
||||
"ttsPreview": "Vista previa de voz",
|
||||
"ttsSystemDefault": "Predeterminado del sistema",
|
||||
"ttsSelectVoice": "Seleccionar voz",
|
||||
"ttsPreviewText": "Esta es una vista previa de la voz seleccionada.",
|
||||
"ttsNoVoicesAvailable": "No hay voces disponibles",
|
||||
"ttsVoicesForLanguage": "Voces de {language}",
|
||||
"ttsOtherVoices": "Otros idiomas",
|
||||
"error": "Error",
|
||||
"display": "Visualización",
|
||||
"realtime": "Tiempo real",
|
||||
"transportMode": "Modo de transporte",
|
||||
|
||||
@@ -316,6 +316,19 @@
|
||||
"chatSettings": "Discussion",
|
||||
"sendOnEnter": "Envoyer avec Entrée",
|
||||
"sendOnEnterDescription": "Entrée envoie (clavier logiciel). Cmd/Ctrl+Entrée aussi disponible",
|
||||
"ttsSettings": "Synthèse vocale",
|
||||
"ttsVoice": "Voix",
|
||||
"ttsSpeechRate": "Vitesse de parole",
|
||||
"ttsPitch": "Hauteur",
|
||||
"ttsVolume": "Volume",
|
||||
"ttsPreview": "Aperçu de la voix",
|
||||
"ttsSystemDefault": "Système par défaut",
|
||||
"ttsSelectVoice": "Sélectionner la voix",
|
||||
"ttsPreviewText": "Ceci est un aperçu de la voix sélectionnée.",
|
||||
"ttsNoVoicesAvailable": "Aucune voix disponible",
|
||||
"ttsVoicesForLanguage": "Voix {language}",
|
||||
"ttsOtherVoices": "Autres langues",
|
||||
"error": "Erreur",
|
||||
"display": "Affichage",
|
||||
"realtime": "Temps réel",
|
||||
"transportMode": "Mode de transport",
|
||||
|
||||
@@ -316,6 +316,19 @@
|
||||
"chatSettings": "Chat",
|
||||
"sendOnEnter": "Invia con Invio",
|
||||
"sendOnEnterDescription": "Invio invia (tastiera software). Cmd/Ctrl+Invio disponibile",
|
||||
"ttsSettings": "Sintesi vocale",
|
||||
"ttsVoice": "Voce",
|
||||
"ttsSpeechRate": "Velocità di sintesi vocale",
|
||||
"ttsPitch": "Tonalità",
|
||||
"ttsVolume": "Volume",
|
||||
"ttsPreview": "Anteprima voce",
|
||||
"ttsSystemDefault": "Predefinito del sistema",
|
||||
"ttsSelectVoice": "Seleziona voce",
|
||||
"ttsPreviewText": "Questa è un'anteprima della voce selezionata.",
|
||||
"ttsNoVoicesAvailable": "Nessuna voce disponibile",
|
||||
"ttsVoicesForLanguage": "Voci {language}",
|
||||
"ttsOtherVoices": "Altre lingue",
|
||||
"error": "Errore",
|
||||
"display": "Schermo",
|
||||
"realtime": "Tempo reale",
|
||||
"transportMode": "Modalità di trasporto",
|
||||
|
||||
@@ -1718,6 +1718,84 @@ abstract class AppLocalizations {
|
||||
/// **'Enter sends (soft keyboard). Cmd/Ctrl+Enter also available'**
|
||||
String get sendOnEnterDescription;
|
||||
|
||||
/// Section header for TTS-related customization options.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Text to Speech'**
|
||||
String get ttsSettings;
|
||||
|
||||
/// Title for voice selection tile.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Voice'**
|
||||
String get ttsVoice;
|
||||
|
||||
/// Title for speech rate slider.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Speech Rate'**
|
||||
String get ttsSpeechRate;
|
||||
|
||||
/// Title for pitch slider.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Pitch'**
|
||||
String get ttsPitch;
|
||||
|
||||
/// Title for volume slider.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Volume'**
|
||||
String get ttsVolume;
|
||||
|
||||
/// Title for preview button.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Preview Voice'**
|
||||
String get ttsPreview;
|
||||
|
||||
/// Label for system default voice option.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'System Default'**
|
||||
String get ttsSystemDefault;
|
||||
|
||||
/// Title for voice picker bottom sheet.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Select Voice'**
|
||||
String get ttsSelectVoice;
|
||||
|
||||
/// Sample text spoken during voice preview.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'This is a preview of the selected voice.'**
|
||||
String get ttsPreviewText;
|
||||
|
||||
/// Error message when no TTS voices can be found.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'No voices available'**
|
||||
String get ttsNoVoicesAvailable;
|
||||
|
||||
/// Section header for voices matching the app language
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{language} Voices'**
|
||||
String ttsVoicesForLanguage(String language);
|
||||
|
||||
/// Section header for voices in other languages.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Other Languages'**
|
||||
String get ttsOtherVoices;
|
||||
|
||||
/// Generic error label.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Error'**
|
||||
String get error;
|
||||
|
||||
/// Section header for visual and layout related settings.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
||||
@@ -895,6 +895,48 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get sendOnEnterDescription =>
|
||||
'Enter sendet (Soft-Tastatur). Cmd/Ctrl+Enter ebenfalls verfügbar';
|
||||
|
||||
@override
|
||||
String get ttsSettings => 'Text zu Sprache';
|
||||
|
||||
@override
|
||||
String get ttsVoice => 'Stimme';
|
||||
|
||||
@override
|
||||
String get ttsSpeechRate => 'Sprechgeschwindigkeit';
|
||||
|
||||
@override
|
||||
String get ttsPitch => 'Tonhöhe';
|
||||
|
||||
@override
|
||||
String get ttsVolume => 'Lautstärke';
|
||||
|
||||
@override
|
||||
String get ttsPreview => 'Stimme vorschau';
|
||||
|
||||
@override
|
||||
String get ttsSystemDefault => 'Systemstandard';
|
||||
|
||||
@override
|
||||
String get ttsSelectVoice => 'Stimme auswählen';
|
||||
|
||||
@override
|
||||
String get ttsPreviewText =>
|
||||
'Dies ist eine Vorschau der ausgewählten Stimme.';
|
||||
|
||||
@override
|
||||
String get ttsNoVoicesAvailable => 'Keine Stimmen verfügbar';
|
||||
|
||||
@override
|
||||
String ttsVoicesForLanguage(String language) {
|
||||
return '$language-Stimmen';
|
||||
}
|
||||
|
||||
@override
|
||||
String get ttsOtherVoices => 'Andere Sprachen';
|
||||
|
||||
@override
|
||||
String get error => 'Fehler';
|
||||
|
||||
@override
|
||||
String get display => 'Anzeige';
|
||||
|
||||
|
||||
@@ -887,6 +887,47 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get sendOnEnterDescription =>
|
||||
'Enter sends (soft keyboard). Cmd/Ctrl+Enter also available';
|
||||
|
||||
@override
|
||||
String get ttsSettings => 'Text to Speech';
|
||||
|
||||
@override
|
||||
String get ttsVoice => 'Voice';
|
||||
|
||||
@override
|
||||
String get ttsSpeechRate => 'Speech Rate';
|
||||
|
||||
@override
|
||||
String get ttsPitch => 'Pitch';
|
||||
|
||||
@override
|
||||
String get ttsVolume => 'Volume';
|
||||
|
||||
@override
|
||||
String get ttsPreview => 'Preview Voice';
|
||||
|
||||
@override
|
||||
String get ttsSystemDefault => 'System Default';
|
||||
|
||||
@override
|
||||
String get ttsSelectVoice => 'Select Voice';
|
||||
|
||||
@override
|
||||
String get ttsPreviewText => 'This is a preview of the selected voice.';
|
||||
|
||||
@override
|
||||
String get ttsNoVoicesAvailable => 'No voices available';
|
||||
|
||||
@override
|
||||
String ttsVoicesForLanguage(String language) {
|
||||
return '$language Voices';
|
||||
}
|
||||
|
||||
@override
|
||||
String get ttsOtherVoices => 'Other Languages';
|
||||
|
||||
@override
|
||||
String get error => 'Error';
|
||||
|
||||
@override
|
||||
String get display => 'Display';
|
||||
|
||||
|
||||
@@ -903,6 +903,47 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get sendOnEnterDescription =>
|
||||
'Entrée envoie (clavier logiciel). Cmd/Ctrl+Entrée aussi disponible';
|
||||
|
||||
@override
|
||||
String get ttsSettings => 'Synthèse vocale';
|
||||
|
||||
@override
|
||||
String get ttsVoice => 'Voix';
|
||||
|
||||
@override
|
||||
String get ttsSpeechRate => 'Vitesse de parole';
|
||||
|
||||
@override
|
||||
String get ttsPitch => 'Hauteur';
|
||||
|
||||
@override
|
||||
String get ttsVolume => 'Volume';
|
||||
|
||||
@override
|
||||
String get ttsPreview => 'Aperçu de la voix';
|
||||
|
||||
@override
|
||||
String get ttsSystemDefault => 'Système par défaut';
|
||||
|
||||
@override
|
||||
String get ttsSelectVoice => 'Sélectionner la voix';
|
||||
|
||||
@override
|
||||
String get ttsPreviewText => 'Ceci est un aperçu de la voix sélectionnée.';
|
||||
|
||||
@override
|
||||
String get ttsNoVoicesAvailable => 'Aucune voix disponible';
|
||||
|
||||
@override
|
||||
String ttsVoicesForLanguage(String language) {
|
||||
return 'Voix $language';
|
||||
}
|
||||
|
||||
@override
|
||||
String get ttsOtherVoices => 'Autres langues';
|
||||
|
||||
@override
|
||||
String get error => 'Erreur';
|
||||
|
||||
@override
|
||||
String get display => 'Affichage';
|
||||
|
||||
|
||||
@@ -892,6 +892,47 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
String get sendOnEnterDescription =>
|
||||
'Invio invia (tastiera software). Cmd/Ctrl+Invio disponibile';
|
||||
|
||||
@override
|
||||
String get ttsSettings => 'Sintesi vocale';
|
||||
|
||||
@override
|
||||
String get ttsVoice => 'Voce';
|
||||
|
||||
@override
|
||||
String get ttsSpeechRate => 'Velocità di sintesi vocale';
|
||||
|
||||
@override
|
||||
String get ttsPitch => 'Tonalità';
|
||||
|
||||
@override
|
||||
String get ttsVolume => 'Volume';
|
||||
|
||||
@override
|
||||
String get ttsPreview => 'Anteprima voce';
|
||||
|
||||
@override
|
||||
String get ttsSystemDefault => 'Predefinito del sistema';
|
||||
|
||||
@override
|
||||
String get ttsSelectVoice => 'Seleziona voce';
|
||||
|
||||
@override
|
||||
String get ttsPreviewText => 'Questa è un\'anteprima della voce selezionata.';
|
||||
|
||||
@override
|
||||
String get ttsNoVoicesAvailable => 'Nessuna voce disponibile';
|
||||
|
||||
@override
|
||||
String ttsVoicesForLanguage(String language) {
|
||||
return 'Voci $language';
|
||||
}
|
||||
|
||||
@override
|
||||
String get ttsOtherVoices => 'Altre lingue';
|
||||
|
||||
@override
|
||||
String get error => 'Errore';
|
||||
|
||||
@override
|
||||
String get display => 'Schermo';
|
||||
|
||||
|
||||
@@ -309,6 +309,19 @@
|
||||
"chatSettings": "Chat",
|
||||
"sendOnEnter": "Verzenden met Enter",
|
||||
"sendOnEnterDescription": "Enter verzendt (softtoetsenbord). Cmd/Ctrl+Enter ook beschikbaar",
|
||||
"ttsSettings": "Tekst naar spraak",
|
||||
"ttsVoice": "Stem",
|
||||
"ttsSpeechRate": "Spraaksnelheid",
|
||||
"ttsPitch": "Toonhoogte",
|
||||
"ttsVolume": "Volume",
|
||||
"ttsPreview": "Stemvoorbeeld",
|
||||
"ttsSystemDefault": "Systeemstandaard",
|
||||
"ttsSelectVoice": "Selecteer stem",
|
||||
"ttsPreviewText": "Dit is een voorbeeld van de geselecteerde stem.",
|
||||
"ttsNoVoicesAvailable": "Geen stemmen beschikbaar",
|
||||
"ttsVoicesForLanguage": "{language} stemmen",
|
||||
"ttsOtherVoices": "Andere talen",
|
||||
"error": "Fout",
|
||||
"display": "Weergave",
|
||||
"realtime": "Realtime",
|
||||
"transportMode": "Transportmodus",
|
||||
|
||||
@@ -309,6 +309,19 @@
|
||||
"chatSettings": "Чат",
|
||||
"sendOnEnter": "Отправка по Enter",
|
||||
"sendOnEnterDescription": "Enter отправляет (программная клавиатура). Также доступно Cmd/Ctrl+Enter",
|
||||
"ttsSettings": "Преобразование текста в речь",
|
||||
"ttsVoice": "Голос",
|
||||
"ttsSpeechRate": "Скорость речи",
|
||||
"ttsPitch": "Высота тона",
|
||||
"ttsVolume": "Громкость",
|
||||
"ttsPreview": "Предпросмотр голоса",
|
||||
"ttsSystemDefault": "Системное значение по умолчанию",
|
||||
"ttsSelectVoice": "Выбрать голос",
|
||||
"ttsPreviewText": "Это предварительный просмотр выбранного голоса.",
|
||||
"ttsNoVoicesAvailable": "Нет доступных голосов",
|
||||
"ttsVoicesForLanguage": "Голоса {language}",
|
||||
"ttsOtherVoices": "Другие языки",
|
||||
"error": "Ошибка",
|
||||
"display": "Отображение",
|
||||
"realtime": "Реальное время",
|
||||
"transportMode": "Режим транспорта",
|
||||
|
||||
@@ -309,6 +309,19 @@
|
||||
"chatSettings": "对话",
|
||||
"sendOnEnter": "回车发送",
|
||||
"sendOnEnterDescription": "回车发送(软键盘)。Cmd/Ctrl+Enter 也可用",
|
||||
"ttsSettings": "文本转语音",
|
||||
"ttsVoice": "语音",
|
||||
"ttsSpeechRate": "语速",
|
||||
"ttsPitch": "音调",
|
||||
"ttsVolume": "音量",
|
||||
"ttsPreview": "预览语音",
|
||||
"ttsSystemDefault": "系统默认",
|
||||
"ttsSelectVoice": "选择语音",
|
||||
"ttsPreviewText": "这是所选语音的预览。",
|
||||
"ttsNoVoicesAvailable": "没有可用的语音",
|
||||
"ttsVoicesForLanguage": "{language} 语音",
|
||||
"ttsOtherVoices": "其他语言",
|
||||
"error": "错误",
|
||||
"display": "显示",
|
||||
"realtime": "实时",
|
||||
"transportMode": "传输模式",
|
||||
|
||||
Reference in New Issue
Block a user