Я меняю настройки Locale внутри своего приложения с помощью этого метода:
public void setLanguageSettings(String localeLang){
Locale locale = new Locale(localeLang);
saveString("lang", localeLang);
Locale.setDefault(locale);
Configuration configSlo = new Configuration();
configSlo.locale = locale;
getBaseContext().getResources().updateConfiguration(configSlo, getBaseContext().getResources().getDisplayMetrics());
}
Как видите, переменная localeLang String затем сохраняется в SharedPreferences. Эта переменная в моем случае либо "sl"
, либо "en"
(по умолчанию "en"
).
Затем я вызываю этот (тот же) метод каждый раз при запуске приложения (каждый раз при открытии MainActivity):
String language = getString("lang");
setLanguageSettings(language);
Locale успешно изменен (я проверил по журналу), но проблема в том, что изменение не видно в MainActivity. Если я открою любое другое действие, язык будет правильным, но MainActivity останется "en"
, даже если он должен быть "sl"
. Мне пришлось бы перезапустить MainActivity, чтобы он стал "sl"
.