功能:

app用户根据自己的语言喜好,设置app语言。语言设置只针对本app,并在下次启动应用时保留前一次启动设置。


     1.先去查看下

       各国语言缩写-各国语言简称,世界各国域名缩写       

    2.在工程res文件下添加对应语种的values文件,ar:阿拉伯语, en:英语    zh_rCN: 简体中文

       截图如下:


             

 

       在strings.xml和arrays.xml需要国际化的字符串进行相应得翻译


更新语言:

public void
Resources resources = getResources();// 获得res资源对象
Configuration config = resources.getConfiguration();// 获得设置对象
DisplayMetrics dm = resources.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。
config.locale
resources.updateConfiguration(config, dm);
this.finish();// 重启。
startActivity(new Intent(activity, TranAActivity.class));
}
 
CHINA CHINESE US

像阿拉伯语没有的话就得   new Locale("ar");


可以再Activity的

@Override
protected void
super.onCreate(savedInstanceState);
Resources resources = getResources();//获得res资源对象
Configuration config = resources.getConfiguration();//获得设置对象
DisplayMetrics dm2 = resources.getDisplayMetrics();//获得屏幕参数:主要是分辨率,像素等。
config.locale =new Locale("ar"); 
resources.updateConfiguration(config, dm2);
//在setContentView方法之前设置
setContentView(R.layout.activity_tran_main);
 
 }

sharePreferences存入设置语言:

 

 

SharencessharedPreferences  = getActivity().getSharedPrefeivity().getPackageName(), 0);
sharedPreferences.edit().putString("language", lanAtr).commit();
语言更新后,对于之前出现且目前仍旧存活的activity,语言设置是不生效的。可以通过重启对应的activity,让语言及时生效。
 
private  void restart()  {
Intentit  = new Intent(getActivity(), MainActivity.class); //MainActivity是你想要重启的activity
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
().startActivity(it);
}
NOTE:

•  一般,从用户体验角度讲,语言设置功能入口会放在App的前几层,如果入口太深,导致用户无法快速找到语言设置入口,并且如果要讲应用重启的话,用户行为操作记录会比较麻烦。

•  重启对应Activity有几种方式:

◦                    如果用户进入语言设置需要太多的层级,或者在操作语言设置之前操作的其他行为,APP想保存的,那可以通过广播的方式(sendBroadcast()),语言改变时发送广播,所有activity接受到广播后(BroadcastReceiver),都进行重启操作;

◦                    如果允许用户设置语言后,app回到主目录,这样就简单很多,直接调用上面的restart()方法即可。

重启singleTask activity:

 

如果你的启动activity是singleTask,向上面那样重启,语言还是不生效的。这种情况如何呢?可以通过了解、利用其生命周期来解决,在切回singleTask属性的activity时,activity会调用onNewIntent()方法。重写该方法就可以。以下是一种解决方法,先finish自己,然后重启自己。

@Override
protectedvoid onNewIntent(Intent intent) {
if  (intent.getAction() == null) {
();
Intenti  = new Intent(this, MainActivity.class);
(i);
//overridePendingTransition(0, 0);
}  else {
//其他逻辑
}
}

结束语:

 

APP语言设置不复杂,主要是如何将语言设置及时生效,涉及activity重启,广播等。