一、自动切换:
在工程res目录下根据不同语言配置多个values文件,如res/values-zh-rCH或values-zh。应用会跟随系统语言设置自动切换语言。
二、手动切换:
调用代码如下:
1.根据系统当前语言和国家设置应用的语言:
Util.changeLanguage(activity,Util.getLanguage(),Util.getCountry());
使用这种切换方式,需要配置详细的value目录,格式:values-语言-r国家简称,例如:values-en-rUS。
2.根据系统的语言设置应用的语言:
Util.changeLanguage(activity,Util.getLanguage());
使用这种切换方式,需要配置多个values目录,格式:values-语言,例如:values-zh。
工具代码如下:
/**
* 获取系统当前语言代码
* @return
*/
public static String getLanguage(){
Locale locale = Locale.getDefault();
return locale.getLanguage();
}
/**
* 获取系统国家代码
* @return
*/
public static String getCountry(){
Locale locale = Locale.getDefault();
return locale.getCountry();
}
/**
* 本地语言设置
* @param context
* @param lang
*/
public static void changeLanguage(Context context, String lang) {
Locale locale = new Locale(lang);
Resources res = context.getResources();
DisplayMetrics metrics = res.getDisplayMetrics();
Configuration configuration = res.getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLocale(locale);
} else {
configuration.locale = locale;
}
res.updateConfiguration(configuration, metrics);
}
/**
* 本地语言设置
* @param context
* @param language 语言
* @param country 国家简称
*/
public static void changeLanguage(Context context,String language, String country){
//Util.changeLanguage(activity,Util.getLanguage(),Util.getCountry());
Locale locale = new Locale(language,country);
Resources res = context.getResources();
DisplayMetrics metrics = res.getDisplayMetrics();
Configuration configuration = res.getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLocale(locale);
} else {
configuration.locale = locale;
}
res.updateConfiguration(configuration, metrics);
}
Android多国语言文件夹命名汇总:
中文(中国):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-iw-rIL
克罗里亚文: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-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-fr-rBE
法文(加拿大):values-fr-rCA
法文(瑞士):values-fr-rCH
法文(法国):values-fr-rFR
斯瓦西里:values-sw
阿拉伯语:values-ar
波斯语:values-fa
提格雷(埃塞俄比亚):values-ti-rET
阿姆哈拉(埃塞俄比亚):values-am-rET
奥罗莫语(埃塞俄比亚):values-om-rET
乌尔都语(巴基斯坦):values-ur-rPK
葡萄牙语(葡萄牙):values-pt-rPT
印地文(印度):values-hi-rIN
孟加拉语(印度):values-bn-rIN
拉美西语(美国):values-es-rUS
尼泊尔语(尼泊尔): values-ne-rNP
缅甸语: values-my-rMM
俄语:values-ru
越南语(越南):values-vi-rVN
葡萄牙文(巴西):values-pt-rBR
三、接口国际化
我们使用的是IETF语言标签,获取当前语言:
public static String getLanguage(){
Locale locale = Locale.getDefault();
return locale.toLanguageTag();
}
根据系统语言返回形如en-US, zh-Hans-CN,zh-Hant-TW等,服务器根据此类型多多语言适配。