添加多语言资源文件
第一步:
第二步:
第三步:
第四步:
第五步:
以上步骤仅仅是添加values-zh-rCN文件夹,并没有strings.xml文件,将系统默认的strings.xml文件复制进去再修改里面的内容为对应语言的文字内容即可!
多国语言的value文件夹命名方式
区域 | 文件名 |
---|---|
中文(中國)(简体) | 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 |
要使用多语言,首先肯定要有为不同语言准备的资源。
只需要按照Android提供的规范,对不同语言下的资源文件夹进行对应的命名即可。
比如我们知道/valus是Android的默认简单资源(字符串、数值、颜色等)的文件夹,那么对不同语言下提供的values文件夹命名方式就形如:
- /values-zh
- /values-zh-rCN
- /values-zh-rTW
其中values保持不变;
后缀的zh表示语言;
后缀的rCN、rTW其中‘r’是一个标记,表示后面跟着的CN、TW是国家或地区标志。
所以以上三个资源文件夹表示所对应的语言环境分别为:
中文
中文-中国 (即中文简体)
中文-台湾 (即中文繁体)
默认情况下,Android会根据系统的语言地区设置,自动选择对应的资源。
会首先尝试语言地区全匹配,如果没有权匹配的资源包,则会尝试匹配语言,最后则会取默认的。
比如如果Android系统的语言地区是中文简体,则首先会尝试从/values-zh-rCN中获取资源,如果没有此文件夹或者文件夹中没有响应的资源,则会尝试/values-zh,都获取不到的情况下即从/values中获取。
(/values是必须存在的,否则不能通过编译)
当然,也可以在代码中手动进行控制,指定所选择的语言:
Configuration config = getResources().getConfiguration();//获取系统的配置
config.locale = Locale.TRADITIONAL_CHINESE;//将语言更改为繁体中文
getResources().updateConfiguration(config, getResources().getDisplayMetrics());//更新配置
切换语言
切换语言后需重启当前activity,给用户的感知不好,我实现的逻辑都是记录用户想要切换的语言,然后提示用户重启APP生效,再在启动的第一个activity进行语言切换功能实现:
//详细代码:
public class StartActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Object o = SerializeUtils.readServiceListFromFile(Constants.APP_INFO);
if (o!=null){
AppInfoBean appInfo= (AppInfoBean) o;
int app_language = appInfo.getAPP_Language();
MyApplication.getInstance().appLanguage=app_language;
if (app_language==0){//简体中文
setLanguage(Locale.SIMPLIFIED_CHINESE);
}else if (app_language==1){//繁体中文
setLanguage(Locale.TRADITIONAL_CHINESE);
}else if (app_language==2){//英文
setLanguage(Locale.ENGLISH);
}
}
startActivity(new Intent(this,SplashActivity.class));
finish();
}
private void setLanguage(Locale locale){
// Locale.setDefault(locale);
//设置语言类型
Resources resources = getResources();
Configuration configuration = resources.getConfiguration();
// 应用用户选择语言
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLocale(locale);
}else{
configuration.locale = locale;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
configuration.setLocales(new LocaleList(locale));
createConfigurationContext(configuration);
}else{
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
}
}
}