Android国際化の多言語切り替え

6144 ワード

前言
Androidの国際化は簡単で、対応する国コードのvaluesフォルダを作成すればよいことはよく知られています.しかし、システム言語の変化に従うのではなく、appの言語を手動で切り替える方法を知らない人が多いので、紹介します.
直接コードを貼りましょう
/**
     *       
     *
     * @param language
     */
    private void setLanguage(String language) {
        //        
        Resources resources = getResources();
        //      
        Configuration configuration = resources.getConfiguration();
        //      
        DisplayMetrics displayMetrics = resources.getDisplayMetrics();
        //      
        switch (language) {
            case "_ZH":
                configuration.locale = Locale.CHINA;
                break;
            case "_EN":
                configuration.locale = Locale.ENGLISH;
                break;
            case "_JA":
                configuration.locale = Locale.JAPAN;
                break;
            case "_FR":
                configuration.locale = Locale.FRANCE;
                break;
            case "_ES":
                configuration.locale = new Locale("ES");
                break;
            case "_KO":
                //  
                configuration.locale = new Locale("KO");
                break;
            case "_IT":
                //   
                configuration.locale = new Locale("IT");
                break;
            case "_PT":
                //   
                configuration.locale = new Locale("PT");
                break;
            case "_DE":
                //  
                configuration.locale = Locale.GERMAN;
                break;
            case "_AR":
                //   
                configuration.locale = new Locale("AR");
                break;
            case "_RU":
                //  
                configuration.locale = new Locale("RU");
                break;
        }
        resources.updateConfiguration(configuration, displayMetrics);
        //      activity   
        Intent intent = new Intent(BaseActivity.ACTION_FINISH_ACTIVITY);
        sendBroadcast(intent);
        startActivity(new Intent(this, MainActivity.class));
    }

Localeにはいくつかの定数があり、いくつかの一般的な国に対応しています.もしあなたが切り替える言語という定数にない場合は、自分でnewするLocaleオブジェクトがあればいいのですが、構造方法には対応する言語のコード文字列が入っていればいいのです(valuesフォルダ-後ろです).この情報を設定したらactivityを終了し、次回に入ってから効果が現れるので、ここでは放送ですべてのactivityを閉じて、MainActivityを再開してホームページに戻ります!あなたがどんな方法を使っても、実現できればいいです.
Localeについては公式ドキュメントをご覧いただけますが、詳細については、リンクを添付します:エリア設定|Android開発者
終わりだ!こんなに簡単です!
また、私は言語選択に関する情報をspに存在させ、Applicationでも同様の操作を行い、言語を切り替えた後、次回はユーザーが自分で選択した言語に入ることを保証しました.
国の言語略語コードを添付します.
中国語(中国):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