2016-04-26 5 views
1

Я пытаюсь изменить язык своего приложения.Изменить язык приложения

я реализую этот код:

public static void setLocale(Resources res, String lang) { 
    Configuration conf = new Configuration(res.getConfiguration()); 

    switch (lang) { 
     case "French" : 
      conf.locale = new Locale("fr"); 
      break; 
     case "Dutch" : 
      conf.locale = new Locale("nl"); 
      break; 
     case "English" : 
      conf.locale = new Locale("en"); 
      break; 
    } 
    res.updateConfiguration(conf, res.getDisplayMetrics()); 
} 

И после этого я освежить свою деятельность, используя этот код:

Intent refresh = new Intent(getActivity(), HomeActivity.class); 
getActivity().finish(); 
startActivity(refresh); 

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

Есть ли способ сохранить выбранный язык при повторном открытии моего приложения?

+0

вы можете сохранить значение в 'SharedPreferences', а позже можете его получить и решить, какой h был выбран ранее. –

+0

Почему бы вам не позволить пользователю выбрать язык на основе его языка устройства? –

+0

Потому что я должен реализовать эту функцию –

ответ

2

можно хранить по умолчанию в общей Preference:

PreferenceManager.getDefaultSharedPreferences().edit().putString("Locale", localVal).commit(); 

и чем каждый раз, когда приложение начинает retrive его:

locale = PreferenceManager.getDefaultSharedPreferences().getString("Locale", "defaultValue"); 
+0

Спасибо! Это отлично работает: D –

0

Я использую это в моем приложении, его работает отлично, дайте попробуйте надеяться, что это вам поможет

public static void changeLanguageSettings(Context context,String language){   
    try{ 
     Locale mLocale = new Locale(language); 
     Resources res = context.getResources(); 
     DisplayMetrics dm = res.getDisplayMetrics(); 
     Configuration configuration = res.getConfiguration(); 
     Configuration newConfig = new Configuration(configuration); 
     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){ 
      newConfig.setLocale(mLocale); 
     }else{ 
      newConfig.locale = mLocale; 
     } 
     context.getResources().updateConfiguration(newConfig, dm);   
    }catch(Exception e){ 
     e.printStackTrace();    
    }  
} 
+0

Спасибо за ваш ответ тоже, я не тестировал его, но я помню его :) –