Android, как изменить язык приложения во время выполнения

Я хочу, чтобы пользователь менял язык моего приложения, используя spinner (или любым способом). Я пробовал много способов, но они меняют язык этого действия не на все действия, и я хочу его сохранить, поэтому, когда пользователь перезагрузит приложение, он найдет последний выбранный язык.

Вы можете использовать этот код в 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() в onCreate() для загрузки languageToLoad из SharedPreferences

Используйте SharedPreferences, чтобы отслеживать язык, который выбрал пользователь, а затем задайте действия для использования этого языка в методе onCreate () и, возможно, onResume (). Таким образом, он будет сохраняться через перезагрузки приложений и т. Д.

Это старый вопрос, но я все равно отвечу 🙂 Вы можете расширить класс 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(); 
 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.