diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java index 7d03b61bdc..40343dbd03 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java @@ -76,6 +76,7 @@ import io.requery.android.database.sqlite.SQLiteDatabase; public class FragmentOptionsMisc extends FragmentBase implements SharedPreferences.OnSharedPreferenceChangeListener { private boolean resumed = false; + private List languages; private SwitchCompat swExternalSearch; private SwitchCompat swShortcuts; @@ -131,6 +132,21 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc "setup_reminder", "setup_advanced" }; + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + languages = new ArrayList<>(Arrays.asList(getResources().getAssets().getLocales())); + Collections.sort(languages, new Comparator() { + @Override + public int compare(String lang1, String lang2) { + String display1 = Locale.forLanguageTag(lang1).getDisplayLanguage(); + String display2 = Locale.forLanguageTag(lang2).getDisplayLanguage(); + return display1.compareTo(display2); + } + }); + } + @Override @Nullable public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @@ -242,7 +258,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc if (position == 0) onNothingSelected(adapterView); else { - String tag = getResources().getAssets().getLocales()[position - 1]; + String tag = languages.get(position - 1); prefs.edit().putString("language", tag).commit(); // apply won't work here } } @@ -700,16 +716,14 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc swShortcuts.setChecked(prefs.getBoolean("shortcuts", true)); swFts.setChecked(prefs.getBoolean("fts", false)); - String language = prefs.getString("language", null); - String[] languages = getResources().getAssets().getLocales(); - int selected = -1; + String language = prefs.getString("language", null); List display = new ArrayList<>(); display.add(getString(R.string.title_advanced_language_system)); - for (int pos = 0; pos < languages.length; pos++) { - String lang = languages[pos]; + for (int pos = 0; pos < languages.size(); pos++) { + String lang = languages.get(pos); Locale loc = Locale.forLanguageTag(lang); - display.add(loc.getDisplayName() + " [" + lang + "]"); + display.add(loc.getDisplayName()); if (lang.equals(language)) selected = pos + 1; }