我的应用程序中有两种语言,英语和荷兰语。在首选项中,您可以更改应用程序重新启动后的语言。但是,当用户第一次打开应用程序时,以下代码中设置的默认语言未被使用(R.xml.user_settings)。它使用设备语言(这是荷兰语是我的情况)。第一次启动时的语言未被设置或使用
<ListPreference
android:defaultValue="@string/pref_languages_default"
android:entries="@array/languages"
android:entryValues="@array/listValues"
android:key="language"
android:title="@string/languages" />
其中 “@字符串/ pref_languages_default”, “@阵列/语言”,并 “@阵列/ listValues” 是:
<string translatable="false" name="pref_languages_default">en</string>
<string-array name="languages">
<item name="nl">Dutch</item>
<item name="en">English</item>
</string-array>
<string-array name="listValues">
<item name="nl">nl</item>
<item name="en">en</item>
</string-array>
在MyApplication.java我有以下代码:
public class MyApplication extends Application {
private Locale locale = null;
@Override
public void onCreate() {
PreferenceManager.setDefaultValues(this, R.xml.user_settings, false);
super.onCreate();
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
Configuration config = getBaseContext().getResources().getConfiguration();
String lang = settings.getString("LANG", "");
if (!"".equals(lang) && !config.locale.getLanguage().equals(lang)) {
locale = new Locale(lang);
Locale.setDefault(locale);
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
}
}
而且在SettingsFragment.java代码(在那里我可以选择语言):
public class SettingsFragment extends PreferenceFragment {
Locale myLocale;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.user_settings);
ListPreference langPref = (ListPreference) findPreference("language");
langPref.setSummary(langPref.getEntry());
langPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
preference.setSummary(o.toString());
return true;
}
});
ListPreference langPreference = (ListPreference) findPreference("language");
langPreference.setOnPreferenceChangeListener(languageChangeListener);
}
Preference.OnPreferenceChangeListener languageChangeListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
switch (newValue.toString()) {
case "nl":
PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).edit().putString("LANG", "nl").commit();
setLocale("nl");
Toast.makeText(getActivity().getBaseContext(), R.string.save_language_changes, Toast.LENGTH_LONG).show();
break;
case "en":
PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).edit().putString("LANG", "en").commit();
setLocale("en");
Toast.makeText(getActivity().getBaseContext(), R.string.save_language_changes, Toast.LENGTH_LONG).show();
break;
/*default:
PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).edit().putString("LANG", "en").commit();
setLocale("en");
Toast.makeText(getActivity().getBaseContext(), R.string.save_language_changes, Toast.LENGTH_LONG).show();
break;*/
}
return true;
}
};
public void setLocale(String lang) {
myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
Locale.setDefault(myLocale);
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
}
}
事情是,ListPreference摘要正确显示默认语言,但是,默认语言尚未设置。我怎样才能让应用程序显示正确的语言?我有一个正确的字符串值和值的nl目录。
感谢您的解决方案! –