Я хочу, чтобы пользователь менял язык моего приложения, используя spinner (или любым способом). Я пробовал много способов, но они меняют язык этого действия не на все действия, и я хочу его сохранить, поэтому, когда пользователь перезагрузит приложение, он найдет последний выбранный язык.
Android, как изменить язык приложения во время выполнения
Ответ 1
вы можете использовать этот код в spinner или любым способом, который вы хотите
String languageToLoad = "en"; // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
тогда вы должны сохранить язык, подобный этому
SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE);
SharedPreferences.Editor editor = languagepref.edit();
editor.putString("languageToLoad",languageToLoad );
editor.commit();
и использовать один и тот же код в каждом действии в onCreate()
для загрузки languageToLoad
из SharedPreferences
Ответ 2
Используйте SharedPreferences, чтобы отслеживать язык, который выбрал пользователь, а затем задайте действия для использования этого языка в методе onCreate() и, возможно, onResume(). Таким образом, он будет сохраняться через перезагрузки приложений и т.д.
Ответ 3
Это старый вопрос, но я все равно отвечу:-) Вы можете расширить класс Application, чтобы применить решение Abol3z для каждой операции. Создать класс:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String lang = preferences.getString("lang", "en");
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}
И установите MyApplication как класс приложения в манифесте:
<application
android:name=".MyApplication"
...
/>
Вы можете установить значение lang (в вашем счетчике):
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
preferences.edit().putString("lang", "en").commit();
Ответ 4
btnChange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
//preferences.edit().putString("lang", "bn").commit();
String lang = preferences.getString("lang", "en");
//Log.e("lang", "lang in Main Activity:"+lang);
if (lang.equalsIgnoreCase("en")){
setLocale("bn");
preferences.edit().putString("lang", "bn").commit();
btnChange.setText("Eng");
}else if(lang.equalsIgnoreCase("bn")){
setLocale("en");
preferences.edit().putString("lang", "en").commit();
btnChange.setText("বাংলা");
}
}
});
public void setLocale(String lang) {
myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, MainActivity.class);
startActivity(refresh);
finish();
}
мы используем два языка для целей тестирования. сохранить все строки в разных папках с именами значений и значений -bn.
Ответ 5
Эта статья потрясающая: https://proandroiddev.com/change-language-programmatics-at-runtime-on-android-5e6bc15c758 это помогает мне
Ответ 6
Представленное решение работает хорошо, но если вы планируете поддерживать дневную/ночную смену тем во время выполнения, вам также необходимо выполнить этот обходной путь.