Как изменить язык для всего приложения Android?

Я хочу написать приложение, которое может отображать как английский, так и китайский. Я уже подготовил 2 string.xml, который является значением / strings.xml и значением-zh-rHK / strings.xml. Но я понятия не имею, как изменить язык через ListPreference android.

XML / preferences.xml:

<?xml version="1.0" encoding="utf-8"?> 

 <SwitchPreference android:key="pref_nightmode" android:title="@string/nightmode" android:defaultValue="false"> </SwitchPreference> <ListPreference android:key="pref_lang" android:title="@string/lang" android:dialogTitle="Choose Language" android:entries="@array/lang" android:entryValues="@array/lang_value" android:defaultValue="@string/lang_default"> </ListPreference> режим <SwitchPreference android:key="pref_nightmode" android:title="@string/nightmode" android:defaultValue="false"> </SwitchPreference> <ListPreference android:key="pref_lang" android:title="@string/lang" android:dialogTitle="Choose Language" android:entries="@array/lang" android:entryValues="@array/lang_value" android:defaultValue="@string/lang_default"> </ListPreference> 

И Preferences.java

 public class Preferences extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle(drawer_menu[5]); getFragmentManager().beginTransaction().replace(R.id.content_frame, new MainPreferenceFragment()).commit(); } public static class MainPreferenceFragment extends PreferenceFragment { String locale; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); PreferenceManager pm = getPreferenceManager(); ListPreference lang = (ListPreference) pm.findPreference("pref_lang"); if(lang.getValue().equals("English")) { locale = "en_US"; } else { locale = "zh_HK"; } } } 

Активность расширяет BaseActivity, потому что у меня есть меню ящика.

Вы можете изменить настройки языка только для приложения. Используйте класс Locale и обновите конфигурацию по умолчанию. Изменение языка применяется только при перезагрузке или повторном запуске приложения. Использовать следующий класс локали

 public class LocaleUtils { private static Locale sLocale; public static void setLocale(Locale locale) { sLocale = locale; if(sLocale != null) { Locale.setDefault(sLocale); } } public static void updateConfig(ContextThemeWrapper wrapper) { if(sLocale != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { Configuration configuration = new Configuration(); configuration.setLocale(sLocale); wrapper.applyOverrideConfiguration(configuration); } } public static void updateConfig(Application app, Configuration configuration) { if(sLocale != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { //Wrapping the configuration to avoid Activity endless loop Configuration config = new Configuration(configuration); config.locale = sLocale; Resources res = app.getBaseContext().getResources(); res.updateConfiguration(config, res.getDisplayMetrics()); } } } 

Класс приложения:

 public class App extends Application { public void onCreate(){ super.onCreate(); // get user preferred language set locale accordingly new locale(language,country) LocaleUtils.setLocale(new Locale("iw")); LocaleUtils.updateConfig(this, getBaseContext().getResources().getConfiguration()); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); LocaleUtils.updateConfig(this, newConfig); } } 

BaseActivity:

 public class BaseActivity extends Activity { public BaseActivity() { LocaleUtils.updateConfig(this); } } 

Выше ответ взят из: Изменение локали в самом приложении

Android-документ: http://developer.android.com/reference/java/util/Locale.html