国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Android-國際化(多語言)切換詳解及實例

jimhs / 1902人閱讀

摘要:國際化簡稱因為在和之間還有個字符,本地化,簡稱。一鍵國際化如果需要很多語言的時候,手動的切換很麻煩。二國際化實現實例配置資源文件,這個在前面已經講過了。

internationalization(國際化)簡稱 i18n,因為在i和n之間還有18個字符,localization(本地化),簡稱L10n。

一.原理:

Android中實現國際化相對來說還是簡單的,因為Android有很獨特的資源管理方式。代碼可以不和資源發生關系,我們通常通過 R 文件提供的索引來間接的引用某一個資源。

把顯示的字符串都轉換成文件資源,再用代碼代碼提取,也就是把字符串存儲在對應的values目錄下。

二.實現步驟:

國際化切換可以手動國際化,也可以一鍵國際化。

1.手動國際化
為支持多國語言,在res/中創建一個額外的values目錄以連字符和ISO國家代碼結尾命名,比如values-es/是為語言代碼為"es"的區域設置的簡單的資源文件的目錄。Android會在運行時根據設備的區域設置,加載相應的資源。
以中英文切換為例:
如果默認是中文就不用建立相應的values文件了,因為系統找不到對應的資源直接會走默認的。
(1).首先建立一個values資源文件values-en/放進對應的strings.xml。

添加不同區域語言的字符串值到相應的文件就可以了。

(2).UI顯示字符串用代碼提取:
生成對應的string文件不用每個都改,這樣很麻煩,教大家一個簡單方法如下:

這樣直接就生成了string.xml,直接去改相應的字符串就好了。

2.一鍵國際化
如果需要很多語言的時候,手動的切換很麻煩。這時需要用到Android Studio插件:AndroidLocalizationer,它可以實現一鍵國際化。
使用方法:
(1).下載AndroidLocalizationer插件
下載地址:
https://github.com/westlinkin...
(2).集成到Android studio中。

集成成功之后重啟。
(3).使用


根據你的需要來選擇對應的語言
結果如下:

附加:這個插件還是有些不穩定的地方,有的Android Studio版本是不支持此插件的。

二.國際化實現實例


1.配置資源文件,這個在前面已經講過了。
2.封裝一個ContextWrapper類
ContextWrapper構造函數中必須包含一個真正的Context引用,同時ContextWrapper中提供了attachBaseContext()用于給ContextWrapper對象中指定真正的Context對象,調用ContextWrapper的方法都會被轉向其所包含的真正的Context對象。

public class MyContextWrapper extends ContextWrapper {

    public MyContextWrapper(Context base) {
        super(base);
    }

    @SuppressWarnings("deprecation")
    public static ContextWrapper wrap(Context context, String language) {
        Configuration config = context.getResources().getConfiguration();
        Locale sysLocale = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            sysLocale = getSystemLocale(config);
        } else {
            sysLocale = getSystemLocaleLegacy(config);
        }
        if (!language.equals("") && !sysLocale.getLanguage().equals(language)) {
            Locale locale = new Locale(language);
            Locale.setDefault(locale);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                setSystemLocale(config, locale);
            } else {
                setSystemLocaleLegacy(config, locale);
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                context = context.createConfigurationContext(config);
            } else {
                context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
            }
        }
        return new MyContextWrapper(context);
    }

    @SuppressWarnings("deprecation")
    public static Locale getSystemLocaleLegacy(Configuration config){
        return config.locale;
    }

    @TargetApi(Build.VERSION_CODES.N)
    public static Locale getSystemLocale(Configuration config){
        return config.getLocales().get(0);
    }

    @SuppressWarnings("deprecation")
    public static void setSystemLocaleLegacy(Configuration config, Locale locale){
        config.locale = locale;
    }

    @TargetApi(Build.VERSION_CODES.N)
    public static void setSystemLocale(Configuration config, Locale locale){
        config.setLocale(locale);
    }
}

3.attachBaseContext實現

@Override
protected void attachBaseContext(Context newBase) {
    //Public.Language 為 對應的資源格式后綴,比如"zh"      "
    super.attachBaseContext(MyContextWrapper.wrap(newBase, Public.Language));
}

如果想要整個APP都實現國際化,直接把attachBaseContext寫在封裝好的BaseActivity里。
4.調用

//動態改變后綴名,可以存在本地數據中,方法比較多就不細說了。Public.Language="zh";
recreate();

其中recreate();是Android3.0以后引入的。

希望大家支持下我的公眾號:

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67792.html

相關文章

  • React項目際化(antd)多語開發

    摘要:本國際化方案僅針對技術棧,且不會涉及服務端國際化內容。引入多語言環境的數據雖然我只用到了文本翻譯的功能,以為就不需要加載這些數據,但后來發現這是必須的步驟。 前言 最近新接了一個項目,從0開始做,需要做多語言的國際化,今天搞了一下,基本達到了想要的效果, 在這里簡單分享下: showImg(https://segmentfault.com/img/bVbuiJB); 背景國際化方案國際...

    tracymac7 評論0 收藏0
  • React項目際化(antd)多語開發

    摘要:本國際化方案僅針對技術棧,且不會涉及服務端國際化內容。引入多語言環境的數據雖然我只用到了文本翻譯的功能,以為就不需要加載這些數據,但后來發現這是必須的步驟。 前言 最近新接了一個項目,從0開始做,需要做多語言的國際化,今天搞了一下,基本達到了想要的效果, 在這里簡單分享下: showImg(https://segmentfault.com/img/bVbuiJB); 背景國際化方案國際...

    wushuiyong 評論0 收藏0
  • vue 際化i18n 多語切換

    摘要:如果對您有幫助請動動鼠標右下方給我來個贊,您的支持是我最大的動力。安裝 npm install vue-i18n 新建一個文件夾 i18n ,內新建 en.js zh.js index.js 三個文件 準備翻譯信息 en.js export default { home: { helloworld: hello workd ! } }; zh.js export d...

    tuomao 評論0 收藏0

發表評論

0條評論

jimhs

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<