目錄
一、介紹
二、字符串資源
三、圖片資源
四、日期和時(shí)間格式
五、其他
六、應(yīng)用內(nèi)切換語言
七、資源文件命名規(guī)則
一、介紹
????????Android國際化(多語言)是一種開發(fā)技術(shù),旨在使Android應(yīng)用程序能夠在「不同語言和文化環(huán)境」下運(yùn)行,并為用戶提供本地化的體驗(yàn)。這是為了確保應(yīng)用程序在全球范圍內(nèi)都能夠被理解和使用,而不僅僅局限于特定地區(qū)或語言的用戶。通過遵循一下命名規(guī)則,Android系統(tǒng)能夠在用戶更改語言和地區(qū)設(shè)置時(shí)「自動(dòng)選擇正確的資源文件」,以提供本地化的用戶體驗(yàn)。
二、字符串資源
????????將應(yīng)用中的文本內(nèi)容(如標(biāo)簽、按鈕文本、提示信息等)提取為字符串資源,并將這些字符串放入XML文件中,而不是直接硬編碼到代碼中。這樣,可以為不同的語言和地區(qū)創(chuàng)建不同的字符串資源文件,以便本地化。
三、圖片資源
????????提供不同語言/分辨率設(shè)置圖片資源,以適應(yīng)不同設(shè)備和地區(qū)的要求。例如圖片上包含藝術(shù)字,這樣的話就需要根據(jù)不同地區(qū)和語言來分別加在。
四、日期和時(shí)間格式
????????在應(yīng)用程序中使用本地化的日期和時(shí)間格式,以便根據(jù)用戶的區(qū)域設(shè)置顯示正確的日期和時(shí)間。
????//傳入不同格式,根據(jù)當(dāng)前語言顯示對(duì)應(yīng)格式
????private?static?SimpleDateFormat?getFormat(String?enFormat,String?zhFormat){
????????SimpleDateFormat?dateFormat;
????????if?(LangSPUtils.isEn(MyApplication.getContext()))?{
????????????dateFormat?=?new?SimpleDateFormat(enFormat,?Locale.ENGLISH);
????????}else?{
????????????dateFormat?=?new?SimpleDateFormat(zhFormat,Locale.SIMPLIFIED_CHINESE);
????????}
????????return?dateFormat;
????}
????
????public?static?final?String?EN_YYYY_MMM_DD?=?"yyyy.MMM.dd";
????public?static?final?String?ZH_YYYY_MM_DD?=?"yyyy年MM月dd日";
????
????public?static?String?getNowDateString(Date?date)?{
????????return?getFormat(EN_YYYY_MMM_DD,ZH_YYYY_MM_DD).format(date);
????}
五、其他
如果在細(xì)致一些可以在以下方面著手
-
5.1 「支持多屏幕尺寸和分辨率」:確保應(yīng)用程序的布局和資源適應(yīng)不同的屏幕尺寸和分辨率,以便在各種設(shè)備上正確顯示。
-
5.2 「支持多方向」:為應(yīng)用程序的布局和資源提供橫向和縱向兩種方向的支持,以適應(yīng)設(shè)備的旋轉(zhuǎn)。
-
5.3 「貨幣和數(shù)字格式」:根據(jù)用戶的區(qū)域設(shè)置來顯示貨幣符號(hào)、千位分隔符和小數(shù)點(diǎn)等數(shù)字格式。
-
5.4 「文字順序」:有些地區(qū)文字是從右至左顯示,而非從左往后。
-
5.5 「版本」:res中的資源不只可以根據(jù)方向/語言來設(shè)置,也可以根據(jù)系統(tǒng)版本來進(jìn)行設(shè)置。
六、應(yīng)用內(nèi)切換語言
????????Application中讀取用戶語言設(shè)置,如果沒讀取到用戶設(shè)置語言,則使用系統(tǒng)默認(rèn)語言。
????public?static?void?setLanguage(Context?context,?String?lang)?{
????????Locale?sta?=?context.getResources().getConfiguration().locale;
????????Resources?resources?=?context.getResources();//?獲得res資源對(duì)象
????????Configuration?config?=?resources.getConfiguration();//?獲得設(shè)置對(duì)象
????????DisplayMetrics?dm?=?resources.getDisplayMetrics();//?獲得屏幕參數(shù):主要是分辨率,像素等。
????????//?獲取設(shè)置語言
????????if?(!MStringUtils.isNullOrEmpty(lang))?{
????????????if?(LangSPUtils.zh_CN.equals(lang))?{
????????????????config.locale?=?Locale.SIMPLIFIED_CHINESE;
????????????????LangSPUtils.putString(LangSPUtils.KEY_LANG,?LangSPUtils.zh_CN,?context);
????????????}?else?if?(LangSPUtils.zh_TW.equals(lang))?{
????????????????config.locale?=?Locale.TRADITIONAL_CHINESE;
????????????????LangSPUtils.putString(LangSPUtils.KEY_LANG,?LangSPUtils.zh_TW,?context);
????????????}?else?{
????????????????config.locale?=?Locale.US;?//?英文
????????????????LangSPUtils.putString(LangSPUtils.KEY_LANG,?LangSPUtils.en_US,?context);
????????????}
????????}?else?{
????????????//?第一次語言設(shè)置,取系統(tǒng)語言
????????????String?languages?=?sta.getLanguage();
????????????String?country?=?sta.getCountry();
????????????if?(languages=="zh"){
????????????????if?(country.equals("CN")){
????????????????????config.locale?=?Locale.SIMPLIFIED_CHINESE;
????????????????????LangSPUtils.putString(LangSPUtils.KEY_LANG,?LangSPUtils.zh_CN,?context);
????????????????}else{
????????????????????//再細(xì)致一些可以分香港/澳門/臺(tái)灣繁體
????????????????????config.locale?=?Locale.TRADITIONAL_CHINESE;
????????????????????LangSPUtils.putString(LangSPUtils.KEY_LANG,?LangSPUtils.zh_TW,?context);
????????????????}
????????????}else?{
????????????????config.locale?=?Locale.US;?//?英文
????????????????LangSPUtils.putString(LangSPUtils.KEY_LANG,?LangSPUtils.en_US,?context);
????????????}
????????}
????}
????????Activity.attachBaseContext()中設(shè)置使用的語言資源。
public?class?LaunchActivity?extends?Activity?{
????protected?void?attachBaseContext(Context?newBase)?{
????????String?lang?=?LangSPUtils.getString(LangSPUtils.KEY_LANG,this);
????????if?(!MStringUtils.isNullOrEmpty(lang)){
????????????Configuration?configuration?=?newBase.getResources().getConfiguration();
????????????if?(LangSPUtils.zh_CN.equals(lang))?{
????????????????configuration.setLocale(Locale.SIMPLIFIED_CHINESE);
????????????}?else?if?(LangSPUtils.zh_TW.equals(lang))?{
????????????????configuration.setLocale(Locale.TRADITIONAL_CHINESE);
????????????}?else?{
????????????????configuration.setLocale(Locale.US);
????????????}
// 字體大小不跟隨系統(tǒng)
configuration.fontScale = 1;
Context targetContext = newBase.createConfigurationContext(configuration);
//兼容appcompat 1.2.0后切換語言失效問題
final ContextThemeWrapper wrappedContext = new ContextThemeWrapper(targetContext,R.style.Base_Theme_AppCompat_Empty) {
@Override
public void applyOverrideConfiguration(Configuration overrideConfiguration) {
if (overrideConfiguration != null) {
overrideConfiguration.setTo(configuration);
}
super.applyOverrideConfiguration(overrideConfiguration);
}
};
super.attachBaseContext(wrappedContext);
????????}else?{
????????????super.attachBaseContext(newBase);
????????}
????}
????@Override
????protected?void?onCreate(@Nullable?Bundle?savedInstanceState)?{
????????super.onCreate(savedInstanceState);
????}
}
?注:如果設(shè)置的時(shí)候不重啟Activity是不生效的。 如果設(shè)置完語言不重啟應(yīng)用(進(jìn)程),Application的上下文獲取的語言還是啟動(dòng)時(shí)的語言。
?
七、資源文件命名規(guī)則
-
values目錄中的默認(rèn)資源文件:values/strings.xml。這是應(yīng)用的默認(rèn)資源文件,用于包含默認(rèn)語言的字符串資源。
-
針對(duì)不同語言和地區(qū)的資源文件:「values-<語言代碼>-r<地區(qū)代碼>/strings.xml」,其中 <語言代碼> 是語言的ISO 639-1代碼,而 <地區(qū)代碼> 是地區(qū)的ISO 3166-1 alpha-2代碼。例如,values-es-rES/strings.xml表示西班牙語(Spanish,ISO 639-1代碼為"es")的資源文件,地區(qū)為西班牙(ISO 3166-1 alpha-2代碼為"ES")。
-
針對(duì)不同語言的資源文件:「values-<語言代碼>/strings.xml」。只要是英語,一律使用該資源文件下的資源。
-
中文(中國):values-zh-rCN
-
中文(中國臺(tái)灣):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-ru-rRU
-
日文:values-ja-rJP
-
韓文:values-ko-rKR
-
阿拉伯文(埃及):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
-
法文(比利時(shí)):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
-
立陶宛文: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-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文章來源:http://www.zghlxwxcb.cn/news/detail-758937.html
-
緬甸語 : values-my文章來源地址http://www.zghlxwxcb.cn/news/detail-758937.html
到了這里,關(guān)于Android 實(shí)現(xiàn)資源國際化(多語言)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!