天天看點

Android 項目國際化 多國語言适配

近期一個項目 ,為了響應一帶一路政策。。。要做國際化 适配三國語言(中文,英語,葡萄牙語)

  emmm....

那就開始搞吧

首先在項目裡面  寫好要适配國家的values-xxx-xx

比如:

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-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

然後 在布局檔案 一些提示等,以前我們會直接寫好,但要适配就得要用@string/xxx,和@id/xxx,@color/xxx  ......

不能在布局裡面寫死的,要動态引用,包括代碼裡面

然後

API 25 (Android 7.1.1) 以下的方案

Resources resources = getContext().getResources();

DisplayMetrics dm = resources.getDisplayMetrics();

Configuration config = resources.getConfiguration();

config.locale = Locale.getDefault() resources.updateConfiguration(config, dm);

API 26 (Android8.0)适配

Android 項目國際化 多國語言适配

configuration.configuration.setLocales(locales);

getLocales().get(0)為首選語言

然後在代碼裡替換語言

如果Local裡面沒有想要的靜态語言 那麼就建立所對應的

// 建立“簡體中文”的Locale

Locale localeCN = Locale.SIMPLIFIED_CHINESE;

// 建立“英文/美國”的Locale

Locale localeUS = 

new

Locale(

"en"

"US"

);

// 擷取“簡體中文”對應的date字元串

String cn = DateFormat.getDateInstance(DateFormat.MEDIUM, localeCN).format(date);

// 擷取“英文/美國”對應的date字元串

String us = DateFormat.getDateInstance(DateFormat.MEDIUM, localeUS).format(date);

// Locale的構造函數

Locale(String language)

Locale(String language, String country)

Locale(String language, String country, String variant)

檢視支援的語言

All Locales: ja_JP, es_PE, en, ja_JP_JP, es_PA, sr_BA, mk, es_GT, ar_AE, no_NO, sq_AL, bg, ar_IQ, ar_YE, hu, pt_PT, el_CY, ar_QA, mk_MK, sv, de_CH, en_US, fi_FI, is, cs, en_MT, sl_SI, sk_SK, it, tr_TR, zh, th, ar_SA, no, en_GB, sr_CS, lt, ro, en_NZ, no_NO_NY, lt_LT, es_NI, nl, ga_IE, fr_BE, es_ES, ar_LB, ko, fr_CA, et_EE, ar_KW, sr_RS, es_US, es_MX, ar_SD, in_ID, ru, lv, es_UY, lv_LV, iw, pt_BR, ar_SY, hr, et, es_DO, fr_CH, hi_IN, es_VE, ar_BH, en_PH, ar_TN, fi, de_AT, es, nl_NL, es_EC, zh_TW, ar_JO, be, is_IS, es_CO, es_CR, es_CL, ar_EG, en_ZA, th_TH, el_GR, it_IT, ca, hu_HU, fr, en_IE, uk_UA, pl_PL, fr_LU, nl_BE, en_IN, ca_ES, ar_MA, es_BO, en_AU, sr, zh_SG, pt, uk, es_SV, ru_RU, ko_KR, vi, ar_DZ, vi_VN, sr_ME, sq, ar_LY, ar, zh_CN, be_BY, zh_HK, ja, iw_IL, bg_BG, in, mt_MT, es_PY, sl, fr_FR, cs_CZ, it_CH, ro_RO, es_PR, en_CA, de_DE, ga, de_LU, de, es_AR, sk, ms_MY, hr_HR, en_SG, da, mt, pl, ar_OM, tr, th_TH_TH, el, ms, sv_SE, da_DK, es_HN

Locale[] ls = Locale.getAvailableLocales();

for

(Locale locale:ls) {

System.out.println(

"locale :"

+locale);

}

最好先判斷下  是否支援 然後替換适配

Android 項目國際化 多國語言适配