android 多语言切换

添加多语言资源文件
第一步:
android 多语言切换_第1张图片
第一步
第二步:
android 多语言切换_第2张图片
第二步
第三步:
android 多语言切换_第3张图片
第三步
第四步:
android 多语言切换_第4张图片
第四步
第五步:

以上步骤仅仅是添加values-zh-rCN文件夹,并没有strings.xml文件,将系统默认的strings.xml文件复制进去再修改里面的内容为对应语言的文字内容即可!


android 多语言切换_第5张图片
image.png
多国语言的value文件夹命名方式
区域 文件名
中文(中國)(简体) 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

要使用多语言,首先肯定要有为不同语言准备的资源。
只需要按照Android提供的规范,对不同语言下的资源文件夹进行对应的命名即可。
比如我们知道/valus是Android的默认简单资源(字符串、数值、颜色等)的文件夹,那么对不同语言下提供的values文件夹命名方式就形如:

  • /values-zh
  • /values-zh-rCN
  • /values-zh-rTW
    其中values保持不变;
    后缀的zh表示语言;
    后缀的rCN、rTW其中‘r’是一个标记,表示后面跟着的CN、TW是国家或地区标志。
    所以以上三个资源文件夹表示所对应的语言环境分别为:
    中文
    中文-中国 (即中文简体)
    中文-台湾 (即中文繁体)
    默认情况下,Android会根据系统的语言地区设置,自动选择对应的资源。
    会首先尝试语言地区全匹配,如果没有权匹配的资源包,则会尝试匹配语言,最后则会取默认的。
    比如如果Android系统的语言地区是中文简体,则首先会尝试从/values-zh-rCN中获取资源,如果没有此文件夹或者文件夹中没有响应的资源,则会尝试/values-zh,都获取不到的情况下即从/values中获取。
    (/values是必须存在的,否则不能通过编译)
    当然,也可以在代码中手动进行控制,指定所选择的语言:
    Configuration config = getResources().getConfiguration();//获取系统的配置
config.locale = Locale.TRADITIONAL_CHINESE;//将语言更改为繁体中文  
getResources().updateConfiguration(config, getResources().getDisplayMetrics());//更新配置
切换语言

切换语言后需重启当前activity,给用户的感知不好,我实现的逻辑都是记录用户想要切换的语言,然后提示用户重启APP生效,再在启动的第一个activity进行语言切换功能实现:

//详细代码:
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){//简体中文
                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);
        //设置语言类型
        Resources resources = getResources();
        Configuration configuration = resources.getConfiguration();
        // 应用用户选择语言
        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());
        }

    }
}

你可能感兴趣的:(android 多语言切换)