diff --git a/app/src/main/assets/deepl.json b/app/src/main/assets/deepl.json new file mode 100644 index 0000000000..063e287f64 --- /dev/null +++ b/app/src/main/assets/deepl.json @@ -0,0 +1,132 @@ +[ + { + "language": "BG", + "name": "Bulgarian", + "supports_formality": false + }, + { + "language": "CS", + "name": "Czech", + "supports_formality": false + }, + { + "language": "DA", + "name": "Danish", + "supports_formality": false + }, + { + "language": "DE", + "name": "German", + "supports_formality": true + }, + { + "language": "EL", + "name": "Greek", + "supports_formality": false + }, + { + "language": "EN-GB", + "name": "English (British)", + "supports_formality": false + }, + { + "language": "EN-US", + "name": "English (American)", + "supports_formality": false + }, + { + "language": "ES", + "name": "Spanish", + "supports_formality": true + }, + { + "language": "ET", + "name": "Estonian", + "supports_formality": false + }, + { + "language": "FI", + "name": "Finnish", + "supports_formality": false + }, + { + "language": "FR", + "name": "French", + "supports_formality": true + }, + { + "language": "HU", + "name": "Hungarian", + "supports_formality": false + }, + { + "language": "IT", + "name": "Italian", + "supports_formality": true + }, + { + "language": "JA", + "name": "Japanese", + "supports_formality": false + }, + { + "language": "LT", + "name": "Lithuanian", + "supports_formality": false + }, + { + "language": "LV", + "name": "Latvian", + "supports_formality": false + }, + { + "language": "NL", + "name": "Dutch", + "supports_formality": true + }, + { + "language": "PL", + "name": "Polish", + "supports_formality": true + }, + { + "language": "PT-BR", + "name": "Portuguese (Brazilian)", + "supports_formality": true + }, + { + "language": "PT-PT", + "name": "Portuguese (European)", + "supports_formality": true + }, + { + "language": "RO", + "name": "Romanian", + "supports_formality": false + }, + { + "language": "RU", + "name": "Russian", + "supports_formality": true + }, + { + "language": "SK", + "name": "Slovak", + "supports_formality": false + }, + { + "language": "SL", + "name": "Slovenian", + "supports_formality": false + }, + { + "language": "SV", + "name": "Swedish", + "supports_formality": false + }, + { + "language": "ZH", + "name": "Chinese", + "supports_formality": false + } +] diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index c8246ad035..24211c8b1d 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -1444,6 +1444,20 @@ public class FragmentCompose extends FragmentBase { } }); + try (InputStream is = getContext().getAssets().open("deepl.json")) { + String json = Helper.readStream(is); + JSONArray jarray = new JSONArray(json); + + for (int i = 0; i < jarray.length(); i++) { + JSONObject jlanguage = jarray.getJSONObject(i); + SubMenu smenu = menu.findItem(R.id.menu_translate).getSubMenu(); + smenu.add(R.id.group_translate, i + 1, i + 1, jlanguage.getString("name")) + .setIntent(new Intent().putExtra("target", jlanguage.getString("language"))); + } + } catch (Throwable ex) { + Log.e(ex); + } + super.onCreateOptionsMenu(menu, inflater); } @@ -1497,11 +1511,9 @@ public class FragmentCompose extends FragmentBase { menu.findItem(R.id.menu_image_dialog).setChecked(image_dialog); menu.findItem(R.id.menu_media).setChecked(media); menu.findItem(R.id.menu_compact).setChecked(compact); - menu.findItem(R.id.menu_translate_english).setEnabled(deepl != null); - menu.findItem(R.id.menu_translate_french).setEnabled(deepl != null); - menu.findItem(R.id.menu_translate_german).setEnabled(deepl != null); - menu.findItem(R.id.menu_translate_italian).setEnabled(deepl != null); - menu.findItem(R.id.menu_translate_spanish).setEnabled(deepl != null); + SubMenu smenu = menu.findItem(R.id.menu_translate).getSubMenu(); + for (int i = 1; i < smenu.size(); i++) + smenu.getItem(i).setEnabled(deepl != null); if (EntityMessage.PGP_SIGNONLY.equals(encrypt) || EntityMessage.SMIME_SIGNONLY.equals(encrypt)) @@ -1559,20 +1571,8 @@ public class FragmentCompose extends FragmentBase { } else if (itemId == R.id.menu_translate_key) { onMenuTranslateKey(); return true; - } else if (itemId == R.id.menu_translate_english) { - onMenuTranslate("EN"); - return true; - } else if (itemId == R.id.menu_translate_french) { - onMenuTranslate("FR"); - return true; - } else if (itemId == R.id.menu_translate_german) { - onMenuTranslate("DE"); - return true; - } else if (itemId == R.id.menu_translate_italian) { - onMenuTranslate("IT"); - return true; - } else if (itemId == R.id.menu_translate_spanish) { - onMenuTranslate("ES"); + } else if (item.getGroupId() == R.id.group_translate) { + onMenuTranslate(item.getIntent().getStringExtra("target")); return true; } else if (itemId == R.id.menu_clear) { StyleHelper.apply(R.id.menu_clear, getViewLifecycleOwner(), null, etBody); diff --git a/app/src/main/res/menu/menu_compose.xml b/app/src/main/res/menu/menu_compose.xml index 191877a8e7..b224060f93 100644 --- a/app/src/main/res/menu/menu_compose.xml +++ b/app/src/main/res/menu/menu_compose.xml @@ -72,25 +72,10 @@ android:title="@string/title_translate" app:showAsAction="never"> - + - - - - - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ee67b05558..45733dd64c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1109,11 +1109,6 @@ Create template Translate Enter auth key - English - French - German - Italian - Spanish Edit as plain text Edit as reformatted text Select public key