Make sure locale display names are capitalized

This commit is contained in:
Daniel Martí 2015-10-06 09:53:02 +02:00
parent c4699df82a
commit 77306e85e7

View File

@ -272,14 +272,27 @@ public class PreferencesFragment extends PreferenceFragment
}); });
} }
private String localeDisplayName(Locale locale, String defName) {
if (locale == null) {
return defName;
}
String name = locale.getDisplayName(locale);
if (name.length() < 2) {
return name;
}
// In some cases (e.g. "català" or "français") the display name isn't
// capitalized, so make sure it is.
return Character.toUpperCase(name.charAt(0)) + name.substring(1);
}
private void langSpinner(String key) { private void langSpinner(String key) {
final ListPreference pref = (ListPreference)findPreference(key); final ListPreference pref = (ListPreference)findPreference(key);
final String[] langValues = getResources().getStringArray(R.array.languageValues); final String[] langValues = getResources().getStringArray(R.array.languageValues);
String[] langNames = new String[langValues.length]; String[] langNames = new String[langValues.length];
langNames[0] = getString(R.string.pref_language_default); langNames[0] = getString(R.string.pref_language_default);
for (int i = 1; i < langValues.length; i++) { for (int i = 1; i < langValues.length; i++) {
final Locale appLoc = Utils.getLocaleFromAndroidLangTag(langValues[i]); Locale locale = Utils.getLocaleFromAndroidLangTag(langValues[i]);
langNames[i] = appLoc == null ? langValues[i] : appLoc.getDisplayName(appLoc); langNames[i] = localeDisplayName(locale, langValues[i]);
} }
pref.setEntries(langNames); pref.setEntries(langNames);
} }