У меня есть одно действие и в onCreate я загружаю язык из настроек и устанавливаю локаль следующим образом:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String lang = PreferenceManager.getDefaultSharedPreferences(this).getString("locale", "en");
Locale newLocale = new Locale(lang);
Locale.setDefault(newLocale);
Configuration config = new Configuration();
config.locale = newLocale;
final Resources res = getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
}
я также переопределяю onConfigurationChanged
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
String lang = PreferenceManager.getDefaultSharedPreferences(this).getString("locale", "en");
Locale newLocale = new Locale(lang);
Locale.setDefault(newLocale);
Configuration config = new Configuration();
config.locale = newLocale;
final Resources res = getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
}
У меня есть ViewPager с FragmentPagerAdapter и три вкладки на Android 2.3.7. проблема в том, что иногда при переключении вкладок локаль приложения возвращается на английский, так что теперь пользовательский интерфейс имеет смешанные языки. Я всегда создаю новые фрагменты для вкладок в методе getItem() адаптера. если я поворачиваю устройство, язык снова будет правильным.
Я также попытался поставить android: configChanges = "locale" в манифесте, а не переопределять onConfigurationChanged(), но результат тот же.
Хуже всего то, что он не воспроизводится на 100%, это происходит только несколько раз, и у меня также есть отчеты от пользователей об этом. как только приложение запустится, и оно не изменит языковой стандарт после переключения нескольких вкладок, то он будет правильно до выхода.