Задача состоит из следующего: необходимо предоставить возможность изменения языка интерфейса приложения (ru, en, uk, well и по умолчанию будет выбрано en) пользователю. Для реализации этого функционала было выполнено:Локализация приложения вручную
1) были созданы папки ресурсов: значения, значения - uk, values - ru, values - en, где файлы strings.xml с переводом контента.
2) с помощью Spinner выдается и записывается в идентификаторе языка SharedPreferences.
3) В начале применения в OnCreate локализации используется:
SharedPreferences preferences = context.getSharedPreferences(Constants.APP_PREFERENCES, Context.MODE_PRIVATE);
String lang = preferences.getString(Constants.LANGUAGE, "default");
if (lang.equals("default")) {
lang=context.getResources().getConfiguration().locale.getCountry();
}
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
Log.i("Lang change", "Locale=" + locale);
context.getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
Почти все тянет вверх и применяет, но не все. А именно, в некоторых местах (в некоторых диалогах и BaseAdapters, NavigationDrawer) вытаскивает локализацию именно языка системы. Например, на устройстве украинская локализация, по умолчанию - английский, а русский выбран в приложении, то в общей сложности в приложении в выше указанных местах подтягивает украинский контент помимо основного русского.
прорвали обрабатывать в onConfigurationChanged():
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, null);
}
и очищают от каждой активности в manifest.xml андроид: configChanges = "локаль".
Не помогло.
В чем проблема?