Don't fetch language names from the system

The system's are sometimes wrong, e.g. unexpected names. This also helps
our support across different Android versions without having to worry as
much about the system's language support.

Fixes #503.
This commit is contained in:
Daniel Martí 2015-12-16 12:03:32 +01:00
parent 985424ac62
commit 00e832fbe3
3 changed files with 48 additions and 29 deletions

View File

@ -71,4 +71,51 @@
<item>zh-rHK</item>
</string-array>
<string-array name="languageNames">
<item>@string/pref_language_default</item>
<item>English</item>
<item>ﺎﻠﻋﺮﺒﻳﺓ</item>
<item>Asturian</item>
<item>Български</item>
<item>Català</item>
<item>Čeština</item>
<item>Dansk</item>
<item>Deutsch</item>
<item>Ελληνικά</item>
<item>Esperanto</item>
<item>Español</item>
<item>Euskara</item>
<item>ﻑﺍﺮﺳی</item>
<item>Suomi</item>
<item>Français</item>
<item>Galego</item>
<item>עברית</item>
<item>Magyar</item>
<item>Bahasa Indonesia</item>
<item>Italiano</item>
<item>日本語</item>
<item>한국어</item>
<item>Lietuvių</item>
<item>Latviešu</item>
<item>Norsk bokmål</item>
<item>Nederlands</item>
<item>Polski</item>
<item>Português (Brasil)</item>
<item>Português (Portugal)</item>
<item>Română</item>
<item>Русский</item>
<item>Sardinian</item>
<item>Slovenčina</item>
<item>Slovenščina</item>
<item>Shqip</item>
<item>Српски</item>
<item>Svenska</item>
<item>Türkçe</item>
<item>ﺉۇﻲﻏۇﺭچە</item>
<item>Українська</item>
<item>Tiếng Việt</item>
<item>中文 (中国)</item>
<item>中文 (香港)</item>
</string-array>
</resources>

View File

@ -23,6 +23,7 @@
<ListPreference android:title="@string/pref_language"
android:key="language"
android:defaultValue=""
android:entries="@array/languageNames"
android:entryValues="@array/languageValues" />
<ListPreference android:title="@string/theme"
android:key="theme"

View File

@ -19,11 +19,8 @@ import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.Preferences;
import org.fdroid.fdroid.PreferencesActivity;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.Utils;
import org.fdroid.fdroid.installer.PrivilegedInstaller;
import java.util.Locale;
public class PreferencesFragment extends PreferenceFragment
implements SharedPreferences.OnSharedPreferenceChangeListener {
@ -127,7 +124,6 @@ public class PreferencesFragment extends PreferenceFragment
break;
case Preferences.PREF_LANGUAGE:
langSpinner(key);
entrySummary(key);
if (changing) {
result |= PreferencesActivity.RESULT_RESTART;
@ -269,31 +265,6 @@ 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) {
final ListPreference pref = (ListPreference) findPreference(key);
final String[] langValues = getResources().getStringArray(R.array.languageValues);
String[] langNames = new String[langValues.length];
langNames[0] = getString(R.string.pref_language_default);
for (int i = 1; i < langValues.length; i++) {
Locale locale = Utils.getLocaleFromAndroidLangTag(langValues[i]);
langNames[i] = localeDisplayName(locale, langValues[i]);
}
pref.setEntries(langNames);
}
@Override
public void onResume() {
super.onResume();