添加多語(yǔ)言資源文件
第一步:
第二步:
第三步:
第四步:
第五步:
以上步驟僅僅是添加values-zh-rCN文件夾奋姿,并沒(méi)有strings.xml文件锄开,將系統(tǒng)默認(rèn)的strings.xml文件復(fù)制進(jìn)去再修改里面的內(nèi)容為對(duì)應(yīng)語(yǔ)言的文字內(nèi)容即可!
多國(guó)語(yǔ)言的value文件夾命名方式
區(qū)域 | 文件名 |
---|---|
中文(中國(guó))(簡(jiǎn)體) | values-zh-rCN |
中文(臺(tái)灣)(繁體) | values-zh-rTW |
中文(香港) | values-zh-rHK |
英語(yǔ)(美國(guó)) | values-en-rUS |
英語(yǔ)(英國(guó)) | values-en-rGB |
英文(澳大利亞) | values-en-rAU |
英文(加拿大) | values-en-rCA |
英文(愛(ài)爾蘭) | 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 |
德文(德國(guó)) | values-de-rDE |
德文(列支敦士登) | values-de-rLI |
希臘文 | values-el-rGR |
西班牙文(西班牙) | values-es-rES |
西班牙文(美國(guó)) | values-es-rUS |
芬蘭文(芬蘭) | values-fi-rFI |
法文(比利時(shí)) | values-fr-rBE |
法文(加拿大) | values-fr-rCA |
法文(瑞士) | values-fr-rCH |
法文(法國(guó)) | values-fr-rFR |
希伯來(lái)文 | 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 |
荷蘭文(比利時(shí)) | 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 |
塔加洛語(yǔ) | values-tl-rPH |
土耳其文 | values–r-rTR |
烏克蘭文 | values-uk-rUA |
越南文 | values-vi-rVN |
要使用多語(yǔ)言称诗,首先肯定要有為不同語(yǔ)言準(zhǔn)備的資源萍悴。
只需要按照Android提供的規(guī)范,對(duì)不同語(yǔ)言下的資源文件夾進(jìn)行對(duì)應(yīng)的命名即可寓免。
比如我們知道/valus是Android的默認(rèn)簡(jiǎn)單資源(字符串癣诱、數(shù)值、顏色等)的文件夾袜香,那么對(duì)不同語(yǔ)言下提供的values文件夾命名方式就形如:
- /values-zh
- /values-zh-rCN
- /values-zh-rTW
其中values保持不變撕予;
后綴的zh表示語(yǔ)言;
后綴的rCN蜈首、rTW其中‘r’是一個(gè)標(biāo)記实抡,表示后面跟著的CN、TW是國(guó)家或地區(qū)標(biāo)志欢策。
所以以上三個(gè)資源文件夾表示所對(duì)應(yīng)的語(yǔ)言環(huán)境分別為:
中文
中文-中國(guó) (即中文簡(jiǎn)體)
中文-臺(tái)灣 (即中文繁體)
默認(rèn)情況下吆寨,Android會(huì)根據(jù)系統(tǒng)的語(yǔ)言地區(qū)設(shè)置,自動(dòng)選擇對(duì)應(yīng)的資源踩寇。
會(huì)首先嘗試語(yǔ)言地區(qū)全匹配啄清,如果沒(méi)有權(quán)匹配的資源包,則會(huì)嘗試匹配語(yǔ)言俺孙,最后則會(huì)取默認(rèn)的辣卒。
比如如果Android系統(tǒng)的語(yǔ)言地區(qū)是中文簡(jiǎn)體,則首先會(huì)嘗試從/values-zh-rCN中獲取資源睛榄,如果沒(méi)有此文件夾或者文件夾中沒(méi)有響應(yīng)的資源添寺,則會(huì)嘗試/values-zh,都獲取不到的情況下即從/values中獲取懈费。
(/values是必須存在的计露,否則不能通過(guò)編譯)
當(dāng)然,也可以在代碼中手動(dòng)進(jìn)行控制,指定所選擇的語(yǔ)言:
Configuration config = getResources().getConfiguration();//獲取系統(tǒng)的配置
config.locale = Locale.TRADITIONAL_CHINESE;//將語(yǔ)言更改為繁體中文
getResources().updateConfiguration(config, getResources().getDisplayMetrics());//更新配置
切換語(yǔ)言
切換語(yǔ)言后需重啟當(dāng)前activity票罐,給用戶(hù)的感知不好叉趣,我實(shí)現(xiàn)的邏輯都是記錄用戶(hù)想要切換的語(yǔ)言,然后提示用戶(hù)重啟APP生效该押,再在啟動(dòng)的第一個(gè)activity進(jìn)行語(yǔ)言切換功能實(shí)現(xiàn):
//詳細(xì)代碼:
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){//簡(jiǎn)體中文
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);
//設(shè)置語(yǔ)言類(lèi)型
Resources resources = getResources();
Configuration configuration = resources.getConfiguration();
// 應(yīng)用用戶(hù)選擇語(yǔ)言
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());
}
}
}