更改应用程序语言

问题描述:

我用这种方法改变了我的Android应用程序语言:更改应用程序语言

private void setLocal(String language) { 

    Locale myLocale = new Locale(language); 
    Resources res = getActivity().getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    HeaderSettingFragment frag = new HeaderSettingFragment(); 
    getFragmentManager().beginTransaction() 
      .replace(R.id.setting_container, frag).addToBackStack(null).commit(); 
} 

和语言正确地改变了,但是当我关闭该应用程序并打开它再次之前的语言依然存在。

如何避免这种情况?

+0

你尝试调用'SETLOCAL()'在你的应用程序'的onCreate()'方法? –

试试这个。

LanguageUtils

public class LanguageUtils { 

/** 
* change language 
* 
* @param context 
* @param language 
*/ 
public static void shiftLanguage(Activity context, String language) { 
    if (language.equals("en")) { 
     Locale.setDefault(Locale.ENGLISH); 
     Configuration config = context.getResources().getConfiguration(); 
     config.locale = Locale.ENGLISH; 
     context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); 
     SharedPreferenceUtils.createSP(context, "en"); 
    } else { 
     Locale.setDefault(Locale.CHINESE); 
     Configuration config = context.getResources().getConfiguration(); 
     config.locale = Locale.CHINESE; 
     context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); 
     SharedPreferenceUtils.createSP(context, "zh"); 
    } 
    context.recreate(); 
} 

/** 
* app start setting language 
* 
* @param context 
* @param language 
*/ 
public static void startLanguage(Context context, String language) { 
    if (language.equals("zh")) { 
     Locale.setDefault(Locale.CHINESE); 
     Configuration config = context.getResources().getConfiguration(); 
     config.locale = Locale.CHINESE; 
     context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); 
    } else { 
     Locale.setDefault(Locale.ENGLISH); 
     Configuration config = context.getResources().getConfiguration(); 
     config.locale = Locale.ENGLISH; 
     context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); 
    } 
} 
} 

使用它

switch (item.getItemId()) { 
     case R.id.hn: 
      String languageToLoad = "hi"; 
      LanguageUtils.shiftLanguage(this, languageToLoad); 
      break; 
     case R.id.eng: 
      languageToLoad = "en"; // your language 
      LanguageUtils.shiftLanguage(this, languageToLoad); 
      break; 

     default: 
} 

而在应用

当您重新启动应用程序,它将设置语言使用它。

public class MyApplication extends Application { 

@Override 
public void onCreate() { 
    super.onCreate(); 
    if (TextUtils.equals(SharedPreferenceUtils.getLanguage(this), "en")) { 
     LanguageUtils.startLanguage(getApplicationContext(), "en"); 
    } else { 
     LanguageUtils.startLanguage(getApplicationContext(), "zh"); 
    } 
} 

} 

SharedPreferenceUtils

public class SharedPreferenceUtils { 

private static final String SP_NAME = "sp"; 
public static final String LANGUAGE = "language"; 


// create 
public static boolean createSP(Context context, String language) { 
    SharedPreferences.Editor editor = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE).edit(); 
    editor.putString(LANGUAGE, language); 
    return editor.commit(); 
} 


// get language 
public static String getLanguage(Context context) { 
    SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE); 
    return sp.getString(LANGUAGE, ""); 
} 

} 
+0

我想设置语言波斯语(波斯语)和Android没有像波尔语Locale.CHINESE的东西。我能做什么? –

+0

我使用新的本地(“fa”),它的工作原理。谢谢 :) –

你必须以某种方式保存语言状态。例如,在SharedPreference中,所以您可以在应用程序启动时将其读出。其实你只是在唠唠叨叨,但是没有保存状态。

+0

如果我每次打开应用程序时都在sharedPreference中保存语言,我应该调用setLocal(),但是直到进入其他活动并返回它时,主活动语言才会更改。 –