По умолчанию язык приложения будет возвращаться к локали устройства, поэтому при каждом перезапуске приложения язык будет меняться.
Чтобы язык вашего приложения соответствовал выбранному пользователем предпочтению, вам нужно сохранить язык, выбранный пользователем. Одним из способов является сохранение языковых настроек в SharedPreference. Когда приложение запущено, проверьте значение в настройках, чтобы решить, какой язык следует использовать, а затем соответствующим образом скорректируйте вид.
Вы можете сделать это следующим образом
Сохранить значение следующим образом при смене языка:
SharedPreferences.Editor editor = getSharedPreferences ("MyPref",
MODE_PRIVATE) .edit (); editor.putString ("language", "en");
editor.commit ();
Получить значение следующим образом в onCreate()
:
SharedPreferences prefs = getSharedPreferences("MyPref", MODE_PRIVATE);
String selectedLanguage = prefs.getString("language", "<enter default locale of app>");
setLocale(selectedLanguage);
В конечном итоге установить язык следующим образом:
Без перезапуска активности:
Установите android:configChanges="locale"
в вашем манифесте
Измените setLocale следующим образом:
private void setLocale(String lang) {
Locale myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
getBaseContext().getResources().updateConfiguration(conf, getBaseContext().getResources().getDisplayMetrics());
invalidateOptionsMenu();
onConfigurationChanged(conf);//Add this line
}
Переопределить onConfigurationChanged ():
@Override
public void onConfigurationChanged(final Configuration newConfig) {
super.onConfigurationChanged(newConfig);
textView.setText(<your-text>);
//Any other UI text to change
}
В качестве альтернативы вы можете позвонить recreate();
после изменения локали.
Это обеспечит правильное изменение вашей локали.