Localize TTS

pull/183/head
M66B 5 years ago
parent 0030dce5cc
commit 2c93688d2e

@ -22,6 +22,8 @@ package eu.faircode.email;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.net.Uri; import android.net.Uri;
import android.text.TextUtils; import android.text.TextUtils;
@ -43,6 +45,7 @@ import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import javax.mail.Address; import javax.mail.Address;
@ -484,19 +487,24 @@ public class EntityRule {
} }
private boolean onActionTts(Context context, EntityMessage message, JSONObject jargs) { private boolean onActionTts(Context context, EntityMessage message, JSONObject jargs) {
Locale locale = (message.language == null ? Locale.getDefault() : new Locale(message.language));
Configuration configuration = new Configuration(context.getResources().getConfiguration());
configuration.setLocale(locale);
Resources res = context.createConfigurationContext(configuration).getResources();
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(context.getString(R.string.title_rule_tts_prefix)); sb.append(context.getString(R.string.title_rule_tts_prefix)).append(". ");
if (message.from != null && message.from.length > 0) if (message.from != null && message.from.length > 0)
sb.append(' ').append(context.getString(R.string.title_from)) sb.append(res.getString(R.string.title_rule_tts_from))
.append(' ').append(MessageHelper.formatAddressesShort(message.from)); .append(' ').append(MessageHelper.formatAddressesShort(message.from)).append(". ");
if (!TextUtils.isEmpty(message.subject)) if (!TextUtils.isEmpty(message.subject))
sb.append(' ').append(context.getString(R.string.title_subject)) sb.append(res.getString(R.string.title_rule_tts_subject))
.append(' ').append(message.subject); .append(' ').append(message.subject).append(". ");
EntityLog.log(context, "TTS queued language=" + message.language + " text=" + sb.toString()); TTSHelper.speak(context, "rule:" + message.id, sb.toString(), locale);
TTSHelper.speak(context, "rule:" + message.id, sb.toString(), message.language);
return true; return true;
} }

@ -3,25 +3,27 @@ package eu.faircode.email;
import android.content.Context; import android.content.Context;
import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech;
import androidx.annotation.NonNull;
import java.util.Locale; import java.util.Locale;
public class TTSHelper { public class TTSHelper {
private static boolean initialized; private static boolean initialized;
private static TextToSpeech instance; private static TextToSpeech instance;
static void speak(Context context, final String utteranceId, final String text, final String language) { static void speak(
@NonNull final Context context,
@NonNull final String utteranceId,
@NonNull final String text,
@NonNull final Locale locale) {
// https://developer.android.com/reference/android/speech/tts/TextToSpeech // https://developer.android.com/reference/android/speech/tts/TextToSpeech
// https://android-developers.googleblog.com/2009/09/introduction-to-text-to-speech-in.html // https://android-developers.googleblog.com/2009/09/introduction-to-text-to-speech-in.html
final Runnable speak = new Runnable() { final Runnable speak = new Runnable() {
@Override @Override
public void run() { public void run() {
if (language != null) { boolean available = (instance.setLanguage(locale) >= 0);
Locale loc = new Locale(language); EntityLog.log(context, "TTS queued language=" + locale + " available=" + available + " text=" + text);
if (instance.setLanguage(loc) < 0)
EntityLog.log(context, "TTS unavailable language=" + loc);
}
instance.speak(text, TextToSpeech.QUEUE_ADD, null, utteranceId); instance.speak(text, TextToSpeech.QUEUE_ADD, null, utteranceId);
} }
}; };

@ -930,6 +930,7 @@
<string name="title_rule_move">Verplaatsen</string> <string name="title_rule_move">Verplaatsen</string>
<string name="title_rule_copy">Kopiëren (label)</string> <string name="title_rule_copy">Kopiëren (label)</string>
<string name="title_rule_answer">Beantwoorden</string> <string name="title_rule_answer">Beantwoorden</string>
<string name="title_rule_tts">Tekst-naar-spraak</string>
<string name="title_rule_automation">Automatisering</string> <string name="title_rule_automation">Automatisering</string>
<string name="title_rule_caption">Bewerk regel</string> <string name="title_rule_caption">Bewerk regel</string>
<string name="title_rule_title">Regel is van toepassing op</string> <string name="title_rule_title">Regel is van toepassing op</string>
@ -965,6 +966,10 @@
<string name="title_rule_no_headers">Header condities kunnen niet worden gecontroleerd</string> <string name="title_rule_no_headers">Header condities kunnen niet worden gecontroleerd</string>
<string name="title_rule_matched">Overeenkomende berichten</string> <string name="title_rule_matched">Overeenkomende berichten</string>
<string name="title_rule_no_matches">Geen overeenkomende berichten</string> <string name="title_rule_no_matches">Geen overeenkomende berichten</string>
<string name="title_rule_tts_setup">Instellingen controleren</string>
<string name="title_rule_tts_prefix">Nieuw bericht</string>
<string name="title_rule_tts_from">Van</string>
<string name="title_rule_tts_subject">Onderwerp</string>
<string name="title_legend_section_synchronize">Synchroniseren</string> <string name="title_legend_section_synchronize">Synchroniseren</string>
<string name="title_legend_section_folders">Mappen</string> <string name="title_legend_section_folders">Mappen</string>
<string name="title_legend_section_messages">Berichten</string> <string name="title_legend_section_messages">Berichten</string>

@ -1098,6 +1098,8 @@
<string name="title_rule_tts_setup">Check setup</string> <string name="title_rule_tts_setup">Check setup</string>
<string name="title_rule_tts_prefix">New message</string> <string name="title_rule_tts_prefix">New message</string>
<string name="title_rule_tts_from">From</string>
<string name="title_rule_tts_subject">Subject</string>
<string name="title_legend_section_synchronize">Synchronize</string> <string name="title_legend_section_synchronize">Synchronize</string>
<string name="title_legend_section_folders">Folders</string> <string name="title_legend_section_folders">Folders</string>

Loading…
Cancel
Save