最近接触到了语言适配的需求,所以分享个简单的demo介绍一下流程
demo示意:
流程:
1.新建不同的values文件夹,不同的语言使用不同values中的strings.xml
具体语言分类文末会附带
2.新建BaseActivity,所有涉及语言适配的Activity继承此基类(其他类型界面同理)
public class BaseActivity extends AppCompatActivity
{
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public void changeAppLanguage(String tag){
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
switch (tag) {
case "简体中文":
conf.setLocale(Locale.CHINA);
break;
//开启日本的语音
case "日本语":
conf.setLocale(Locale.JAPAN);
break;
case "English":
conf.setLocale(Locale.US);
break;
case "繁體中文":
conf.setLocale(Locale.TAIWAN);
break;
}
res.updateConfiguration(conf, dm);
}
MainActivity中:
点击切换语言按钮,显示选择语言弹框:
/**
* 切换语言
*/
public void languageDialog()
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.title).setItems(this.getResources().getStringArray(R.array.language), new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
String name = MainActivity.this.getResources().getStringArray(R.array.language)[which];
MainActivity.super.changeAppLanguage(name);
recreate();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
alertDialog.getWindow().setGravity(Gravity.CENTER);
}
可以看到,选择某种语言后,调用BaseActivity的changeAppLanguage()方法,改变系统语言,
然后调用recreate()方法重建MainActivity,达到了切换语言的效果
附:一些国家的Values文件名
中文(中国):values-zh-rCN中文(香港):values-zh-rHK
中文(台湾):values-zh-rTW
英语(美国):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