更改应用程序语言
我用这种方法改变了我的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();
}
和语言正确地改变了,但是当我关闭该应用程序并打开它再次之前的语言依然存在。
如何避免这种情况?
试试这个。
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, "");
}
}
我想设置语言波斯语(波斯语)和Android没有像波尔语Locale.CHINESE的东西。我能做什么? –
我使用新的本地(“fa”),它的工作原理。谢谢 :) –
你必须以某种方式保存语言状态。例如,在SharedPreference
中,所以您可以在应用程序启动时将其读出。其实你只是在唠唠叨叨,但是没有保存状态。
如果我每次打开应用程序时都在sharedPreference中保存语言,我应该调用setLocal(),但是直到进入其他活动并返回它时,主活动语言才会更改。 –
你尝试调用'SETLOCAL()'在你的应用程序'的onCreate()'方法? –