У меня выпадающий список, пользователь может выбрать язык English
или Spanish
.
Проблема в том, что при изменении языка он преобразует дату, время, текст диалога прогресса в испанский или английский, но определенные мной строки не преобразуются в указанный язык.
Хотя они конвертируются после 1 или 2 кликов, поэтому, когда я нажимаю ES
, он не изменит строки на ES
, но затем я нажму EN
, он будет работать и преобразует всю строку в ES
, что не является желаемым результатом.
Когда пользователь нажимает на любой язык, я выполняю следующий код.
languageSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
selectedLanguage= getResources().getStringArray(R.array.language_array)[i];
loadLanguage(selectedLanguage.toLowerCase());
}
Метод load language
выполняет эти операции.
public void loadLanguage(String language){
String languageToLoad = language;
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.setLocale(locale);
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
recreate();
}
На каждом мероприятии я добавляю следующий код.
@Override
protected void attachBaseContext(Context newBase) {
Locale locale = new Locale(LanguagePreference.getInstance().getUserLanguage(newBase));
Context context = ContextWrapper.wrap(newBase, locale);
super.attachBaseContext(context);
}
Ниже приведен мой класс Context Wrapper.
public static ContextWrapper wrap(Context context, Locale newLocale) {
Resources res = context.getResources();
Configuration configuration = res.getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
configuration.setLocale(newLocale);
LocaleList localeList = new LocaleList(newLocale);
LocaleList.setDefault(localeList);
configuration.setLocales(localeList);
context = context.createConfigurationContext(configuration);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLocale(newLocale);
context = context.createConfigurationContext(configuration);
} else {
configuration.locale = newLocale;
res.updateConfiguration(configuration, res.getDisplayMetrics());
}
return new ContextWrapper(context);
}}