首先要了解什么是国际化?明知故问?其实就是同一界面加载不通语言的显示,让不同语言的用户使用,要实现这个功能,首先必须创建几套不同的strings文件,
那么有人会问了,究竟怎么创建呢?别急,这就来说……
跟着图一直走……
需要哪一个国家就创建哪一个
这时候你会发现在你的android目录下的strings有刚创建出来的文件,前提已经翻译好copy进去就OK了;
下面是代码系列:
首先在你的BaseActivity 的OnCreate方法里面,这就不需要解释了吧?
//重启之后恢复到之前的语言
selectLanguage(SharedPreferenceUtils.getString(this,"language"));
public void selectLanguage(String language) {
//设置语言类型
Resources resources = getResources();
Configuration configuration = resources.getConfiguration();
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
switch (language) {
case "en":
configuration.locale = Locale.ENGLISH;
break;
case "zh":
configuration.locale = Locale.SIMPLIFIED_CHINESE;
break;
default:
configuration.locale = Locale.getDefault();
break;
}
resources.updateConfiguration(configuration, displayMetrics);
//保存设置语言的类型
SharedPreferenceUtils.putString(this,"language", language);
}
使用sharedpreference是为了切换重新启动的时候,显示上一次切换过的语言,
/**
*
* putString
* @param context
* @param key
* @param value
*/
public static void putString(Context context, String key,String value){
// 得到SharedPreferences
SharedPreferences preferences = context.getSharedPreferences(
"langulage", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(key,value);
editor.commit();
}
/**
* getString
* @param context
* @param key
* @return
*/
public static String getString(Context context, String key) {
SharedPreferences preferences = context.getSharedPreferences(
"langulage", Context.MODE_PRIVATE);
// 返回key值,key值默认值是false
return preferences.getString(key, null);
}
然后在调用切换语言的地方,我这里是使用随机数实现功能,可参考……
BaseActivity activity = (BaseActivity) getCurActivity();
Random rand = new Random();
int i = rand.nextInt(2);
if (i == 0) {
activity.selectLanguage("zh");
} else {
activity.selectLanguage("en");
}
Intent intent = new Intent();
intent.setClass(getContext(), MainActivity.class);
startActivity(intent);
AppManager.getAppManager().finishAllActivity();
切换语言之后需要重新开启首页,
public class AppManager {
private static Stack<Activity> activityStack;
private static AppManager instance;
private AppManager(){}
/**
* 单一实例
*/
public static AppManager getAppManager(){
if(instance==null){
instance=new AppManager();
}
return instance;
}
/**
* 添加Activity到堆栈 */
public void addActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* 获取当前Activity(堆栈中最后一个压入的)
*/
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
/**
* 结束当前Activity(堆栈中最后一个压入的)
*/
public void finishActivity(){
Activity activity=activityStack.lastElement();
finishActivity(activity);
}
/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity){
if(activity!=null){
activityStack.remove(activity);
activity.finish();
activity=null;
}
}
/**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?> cls){
for (Activity activity : activityStack) {
if(activity.getClass().equals(cls) ){
finishActivity(activity);
}
}
}
/**
* 结束所有Activity
*/
public void finishAllActivity(){
for (int i = 0, size = activityStack.size(); i < size; i++){
if (null != activityStack.get(i)){
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 退出应用程序
*/
public void AppExit(Context context) {
try {
finishAllActivity();
ActivityManager activityMgr= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityMgr.restartPackage(context.getPackageName());
System.exit(0);
} catch (Exception e) { }
}
}
到这里就搞定了!
中文(中国):values-zh-rCN
中文(中国台湾):values-zh-rTW
中文(中国香港):values-zh-rHK
英语(美国):values-en-rUS
英语(英国):values-en-rGB
英文(澳大利亚):values-en-rAU
英文(加拿大):values-en-rCA
英文(爱尔兰):values-en-rIE
英文(印度):values-en-rIN
英文(新西兰):values-en-rNZ
英文(新加坡):values-en-rSG
英文(南非):values-en-rZA
阿拉伯文(埃及):values-ar-rEG
阿拉伯文(以色列):values-ar-rIL
保加利亚文: values-bg-rBG
加泰罗尼亚文:values-ca-rES
捷克文:values-cs-rCZ
丹麦文:values-da-rDK
德文(奥地利):values-de-rAT
德文(瑞士):values-de-rCH
德文(德国):values-de-rDE
德文(列支敦士登):values-de-rLI
希腊文:values-el-rGR
西班牙文(西班牙):values-es-rES
西班牙文(美国):values-es-rUS
芬兰文(芬兰):values-fi-rFI
法文(比利时):values-fr-rBE
法文(加拿大):values-fr-rCA
法文(瑞士):values-fr-rCH
法文(法国):values-fr-rFR
希伯来文:values-iw-rIL
印地文:values-hi-rIN
克罗里亚文:values-hr-rHR
匈牙利文:values-hu-rHU
印度尼西亚文:values-in-rID
意大利文(瑞士):values-it-rCH
意大利文(意大利):values-it-rIT
日文:values-ja-rJP
韩文:values-ko-rKR
立陶宛文:valueslt-rLT
拉脱维亚文:values-lv-rLV
挪威博克马尔文:values-nb-rNO
荷兰文(比利时):values-nl-BE
荷兰文(荷兰):values-nl-rNL
波兰文:values-pl-rPL
葡萄牙文(巴西):values-pt-rBR
葡萄牙文(葡萄牙):values-pt-rPT
罗马尼亚文:values-ro-rRO
俄文:values-ru-rRU
斯洛伐克文:values-sk-rSK
斯洛文尼亚文:values-sl-rSI
塞尔维亚文:values-sr-rRS
瑞典文:values-sv-rSE
泰文:values-th-rTH
塔加洛语:values-tl-rPH
土耳其文:values--r-rTR
乌克兰文:values-uk-rUA
越南文:values-vi-rVN
缅甸语 : values-my
但是刚开始我碰到的坑很隐蔽,很难发现,
在我的app的build.gradle文件中,defultCofig里面设置了默认中文语言,然后导致切换语言就是不成功,
打印log,发现确实已经切换过来了,但是,在build.gradle文件中有重新设置中文,
这就是为什么无效果的坑,以前没注意,
希望能给你带来帮助!