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

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

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

4b9b3361

Ответ 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.

Ответ 6

Представленное решение работает хорошо, но если вы планируете поддерживать дневную/ночную смену тем во время выполнения, вам также необходимо выполнить этот обходной путь.