我使用此函数以编程方式将语言从英语更改为阿拉伯语:
private void setLocale(String lang) {
Locale myLocale = new Locale(lang);
Resources res = getContext().getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
conf.setLocale(new Locale(lang));
Locale.setDefault(myLocale);
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(getContext(), MainActivity.class);
getActivity().finish();
startActivity(refresh);
}
语言正在发生变化,但是在使用时 Locale.getDefault().getLanguage();
或 Resources.getSystem().getConfiguration().locale.getLanguage();
尽管显示的语言是阿拉伯语,但我仍然得到英语 ( en ( 而不是预期值 ar。知道为什么它仍然返回 en?
每当您通过 onCreate(( 和系统的其他一些调用时,配置都会被覆盖。因此,您需要将语言环境保存在 SharedPreferences 中,并在每个活动的每个 onCreate(( 方法中设置它。
有关可能的方法,请参阅此处:在安卓中以编程方式更改应用语言