У меня есть ViewPager с FragmentPagerAdapter и пять вкладок, которые вызывается из моей MainActivity. Я хочу динамически изменять язык моего приложения. Чтобы сделать это, я сохранил свой язык предпочтения в моем onSavedInstanceState
так:Android - поддержка многоязычного приложения в ViewPager
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String predefined_lang = prefs.getString(LANGUAGES, "error");
String sub_lan = predefined_lang.substring(0,2).toLowerCase();
outState.putString(LANG, sub_lan);
System.out.println(">>saveinstance"+predefined_lang);
}
и чем я извлечь язык из onRestoreInstanceState
:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Configuration configuration = getResources().getConfiguration();
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
//System.out.println(savedInstanceState.getString(LANG));
//configuration.locale = new Locale(savedInstanceState.getString(LANG));
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String predefined_lang = prefs.getString(LANGUAGES, "error");
String sub_lan = predefined_lang.substring(0,2).toLowerCase();
configuration.locale = new Locale(savedInstanceState.getString(LANG));
getResources().updateConfiguration(configuration, displayMetrics);
System.out.println(">>onrestore"+savedInstanceState.getString(LANG));
}
Так я стараюсь избегать, что выбранный язык не изменяется снова на языке по умолчанию устройства. На самом деле все строковые ресурсы отображаются на правильном языке, за исключением имен вкладки viewPager. Например:
я эти пять вкладок:
| tab1 - | - tab2 - | - tab3 - | - tab4 - | - tab5 |
Если телефон по умолчанию установлен в Italian
, но я решил отобразить приложение в English
, все написано на английском языке, даже название вкладок. Но когда я поворачиваю экран, все остается написанным на английском языке, кроме названий вкладки, которые вместо этого находятся на итальянском языке. Решения?
является проблемой em только при повороте телефона? –
Да, только когда экран повернут ... –