Настройка языка приложения из общих настроек
Я только что закончил свое первое приложение для Android, но у меня все еще есть небольшая проблема, которую нужно исправить: я сделал свое приложение на двух языках; если мой телефон настроен для работы на французском языке, приложение отображается на французском языке, а если телефон настроен на английский язык, он работает на английском языке. Проблема заключается в том, что я сделал значение общего предпочтения, чтобы пользователь приложения, выбрав его предпочитаемый язык вручную, к сожалению, это не работает.
это мое общее предпочтение:
<ListPreference
android:defaultValue="English"
android:entries="@array/Languages"
android:entryValues="@array/LanguagesValues"
android:key="language"
android:summary="@string/Define_the_default_language"
android:title="@string/Language" />
и вот как я пытался это реализовать:
SharedPreferences pref = PreferenceManager
.getDefaultSharedPreferences(this);
lan = pref.getString("language", null);
Log.e("langues", lan);
SharedPreferences prefs = this.getSharedPreferences("language", 0);
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs,
String key) {
prefs.registerOnSharedPreferenceChangeListener(listener);
if (lan.equals("FRENSH")) {
setLocale("FRENSH");
System.out.println("frensh");
SetLocal активность:
public void setLocale(String lang) {
myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
Log.e("", "" + myLocale);
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, Setting.class);
startActivity(refresh);
}
Как я могу это исправить?
1 ответ
Я думаю, что ваш setLocale
никогда не вызывается, поэтому попробуйте установить слушателя на ваш конкретный языковой стандарт:
final ListPreference localeListPreference = (ListPreference) findPreference("language");
localeListPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue.toString().equals("FRENSH")) {
setLocale("FRENSH");
}
return true; // if you do not return true, the change would not persist
});
Код выше должен быть в коде позади вашего preference.xml
,