导语:
最近一个项目上有要求完成app国际化,也就是如果系统语言是英文,那么你的app打开时就会自动读取string 中的字符串资源,自动完成匹配,以满足国际化需求,那么我们就按照步骤走,完成我们的app国际化道路。
步骤1:
建立相关资源文件夹:
我们要在value 文件夹下建相关的文件夹盛放app国际化资源,如图片,strings字符串文件,等等,规格是:value-国家简写编号:那么我们大中国的就是value-zh
那么文件结构就是:
好,完成第一步啦。
步骤二:
步骤二呢就是需要我们往不同的国际资源中填充资源,在保证文件名相同的情况下做好适配工作,比如
//我们匹配汉语字符串资源在 value-zh 文件夹中strings文件下
<string name="change_chanese">是否切换成汉语?</string>
//在英语文件夹下我们要如此 value-en 文件夹中strings文件下
<string name="change_chanese">Do you want to switch to Chinese?
</string>
同理我们可以找专业人士来辅助我们的工作,完成国际化翻译。
国际简写编码问题:
下面列举一些常用国家的国际化简写编码:
- 国家/地区 语言代码 国家/地区 语言代码
简体中文(中国) zh-cn 繁体中文(台湾地区) zh-tw
繁体中文(香港) zh-hk 英语(香港) en-hk
英语(美国) en-us 英语(英国) en-gb
英语(全球) en-ww 英语(加拿大) en-ca
英语(澳大利亚) en-au 英语(爱尔兰) en-ie
英语(芬兰) en-fi 芬兰语(芬兰) fi-fi
英语(丹麦) en-dk 丹麦语(丹麦) da-dk
英语(以色列) en-il 希伯来语(以色列) he-il
英语(南非) en-za 英语(印度) en-in
英语(挪威) en-no 英语(新加坡) en-sg
英语(新西兰) en-nz 英语(印度尼西亚) en-id
英语(菲律宾) en-ph 英语(泰国) en-th
英语(马来西亚) en-my 英语(阿拉伯) en-xa
韩文(韩国) ko-kr 日语(日本) ja-jp
荷兰语(荷兰) nl-nl 荷兰语(比利时) nl-be
葡萄牙语(葡萄牙) pt-pt 葡萄牙语(巴西) pt-br
法语(法国) fr-fr 法语(卢森堡) fr-lu
法语(瑞士) fr-ch 法语(比利时) fr-be
法语(加拿大) fr-ca 西班牙语(拉丁美洲) es-la
西班牙语(西班牙) es-es 西班牙语(阿根廷) es-ar
西班牙语(美国) es-us 西班牙语(墨西哥) es-mx
西班牙语(哥伦比亚) es-co 西班牙语(波多黎各) es-pr
德语(德国) de-de 德语(奥地利) de-at
德语(瑞士) de-ch 俄语(俄罗斯) ru-ru
意大利语(意大利) it-it 希腊语(希腊) el-gr
挪威语(挪威) no-no 匈牙利语(匈牙利) hu-hu
土耳其语(土耳其) tr-tr 捷克语(捷克共和国) cs-cz
斯洛文尼亚语 sl-sl 波兰语(波兰) pl-pl
瑞典语(瑞典) sv-se 西班牙语 (智利) es-cl
那么我们应用的时候就是value-zh(中国),value-en(美国)这样如此类推,,,
最后我们要用代码切换:
思路就是:用SharedPreference 保存在本地设置,然后每次开启app时候在application中提前设置:
上代码:
protected void switchLanguage(String language) {//设置应用语言类型Resources resources = getResources();Configuration config = resources.getConfiguration();DisplayMetrics dm = resources.getDisplayMetrics();if (language.equals("en")) {config.locale = Locale.US;} else {config.locale = Locale.SIMPLIFIED_CHINESE;}resources.updateConfiguration(config, dm);//保存设置语言的类型SharedPreferenceUtils.setParam(getApplicationContext(),"language", language);}
如何应用:
1.在application中做好初始化工作:
首先设置一门语言,用于本app,
2.在需要切换时候先要执行切换语言代码,然后清空堆栈内的activity,最后跳转到主页,相当于重启app刷新UI
如何清空堆栈内的activity(跳转时候设置:setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);):
Intent intent = new Intent(A.this,Main.class)
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
//为保险起见,再一次杀掉进程 android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
最后:
大功告成,我们的app国际化工作就分三步走完成啦!