diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java
index 990452a3a8..d0e5353169 100644
--- a/app/src/main/java/eu/faircode/email/EntityRule.java
+++ b/app/src/main/java/eu/faircode/email/EntityRule.java
@@ -22,6 +22,8 @@ package eu.faircode.email;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.res.Configuration;
+import android.content.res.Resources;
import android.net.Uri;
import android.text.TextUtils;
@@ -43,6 +45,7 @@ import java.util.Calendar;
import java.util.Date;
import java.util.Enumeration;
import java.util.List;
+import java.util.Locale;
import java.util.regex.Pattern;
import javax.mail.Address;
@@ -484,19 +487,24 @@ public class EntityRule {
}
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();
- 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)
- sb.append(' ').append(context.getString(R.string.title_from))
- .append(' ').append(MessageHelper.formatAddressesShort(message.from));
+ sb.append(res.getString(R.string.title_rule_tts_from))
+ .append(' ').append(MessageHelper.formatAddressesShort(message.from)).append(". ");
if (!TextUtils.isEmpty(message.subject))
- sb.append(' ').append(context.getString(R.string.title_subject))
- .append(' ').append(message.subject);
+ sb.append(res.getString(R.string.title_rule_tts_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(), message.language);
+ TTSHelper.speak(context, "rule:" + message.id, sb.toString(), locale);
return true;
}
diff --git a/app/src/main/java/eu/faircode/email/TTSHelper.java b/app/src/main/java/eu/faircode/email/TTSHelper.java
index 5ebf1e05a6..dbbc7258fe 100644
--- a/app/src/main/java/eu/faircode/email/TTSHelper.java
+++ b/app/src/main/java/eu/faircode/email/TTSHelper.java
@@ -3,25 +3,27 @@ package eu.faircode.email;
import android.content.Context;
import android.speech.tts.TextToSpeech;
+import androidx.annotation.NonNull;
+
import java.util.Locale;
public class TTSHelper {
private static boolean initialized;
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://android-developers.googleblog.com/2009/09/introduction-to-text-to-speech-in.html
final Runnable speak = new Runnable() {
@Override
public void run() {
- if (language != null) {
- Locale loc = new Locale(language);
- if (instance.setLanguage(loc) < 0)
- EntityLog.log(context, "TTS unavailable language=" + loc);
- }
-
+ boolean available = (instance.setLanguage(locale) >= 0);
+ EntityLog.log(context, "TTS queued language=" + locale + " available=" + available + " text=" + text);
instance.speak(text, TextToSpeech.QUEUE_ADD, null, utteranceId);
}
};
diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml
index 06b81f31e6..7259fe774e 100644
--- a/app/src/main/res/values-nl-rNL/strings.xml
+++ b/app/src/main/res/values-nl-rNL/strings.xml
@@ -930,6 +930,7 @@
Verplaatsen
Kopiƫren (label)
Beantwoorden
+ Tekst-naar-spraak
Automatisering
Bewerk regel
Regel is van toepassing op
@@ -965,6 +966,10 @@
Header condities kunnen niet worden gecontroleerd
Overeenkomende berichten
Geen overeenkomende berichten
+ Instellingen controleren
+ Nieuw bericht
+ Van
+ Onderwerp
Synchroniseren
Mappen
Berichten
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 906300a51c..1b28bf192f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1098,6 +1098,8 @@
Check setup
New message
+ From
+ Subject
Synchronize
Folders