美文网首页
Android中多语言实现

Android中多语言实现

作者: 沉默的菋道 | 来源:发表于2018-03-16 15:11 被阅读0次

一、自动切换:

在工程res目录下根据不同语言配置多个values文件,如res/values-zh-rCH或values-zh。应用会跟随系统语言设置自动切换语言。

二、手动切换:

调用代码如下:

1.根据系统当前语言和国家设置应用的语言:

Util.changeLanguage(activity,Util.getLanguage(),Util.getCountry());

使用这种切换方式,需要配置详细的value目录,格式:values-语言-r国家简称,例如:values-en-rUS。
2.根据系统的语言设置应用的语言:

Util.changeLanguage(activity,Util.getLanguage());

使用这种切换方式,需要配置多个values目录,格式:values-语言,例如:values-zh。
工具代码如下:

/**
 * 获取系统当前语言代码
 * @return
 */
 public static String getLanguage(){
    Locale locale = Locale.getDefault();
    return locale.getLanguage();
 }

/**
 * 获取系统国家代码
 * @return
 */
public static String getCountry(){
    Locale locale = Locale.getDefault();
    return locale.getCountry();
}

/**
 * 本地语言设置
 * @param context
 * @param lang
 */
public static void changeLanguage(Context context, String lang) {
    Locale locale = new Locale(lang);
    Resources res = context.getResources();
    DisplayMetrics metrics = res.getDisplayMetrics();
    Configuration configuration = res.getConfiguration();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        configuration.setLocale(locale);
    } else {
        configuration.locale = locale;
    }
    res.updateConfiguration(configuration, metrics);
}

/**
 * 本地语言设置
 * @param context
 * @param language 语言
 * @param country 国家简称
 */
public static void changeLanguage(Context context,String language, String country){
    //Util.changeLanguage(activity,Util.getLanguage(),Util.getCountry());
    Locale locale = new Locale(language,country);
    Resources res = context.getResources();
    DisplayMetrics metrics = res.getDisplayMetrics();
    Configuration configuration = res.getConfiguration();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        configuration.setLocale(locale);
    } else {
        configuration.locale = locale;
    }
    res.updateConfiguration(configuration, metrics);
}

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-iw-rIL
克罗里亚文: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-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
法文(比利时):values-fr-rBE
法文(加拿大):values-fr-rCA
法文(瑞士):values-fr-rCH
法文(法国):values-fr-rFR
斯瓦西里:values-sw
阿拉伯语:values-ar
波斯语:values-fa
提格雷(埃塞俄比亚):values-ti-rET
阿姆哈拉(埃塞俄比亚):values-am-rET
奥罗莫语(埃塞俄比亚):values-om-rET
乌尔都语(巴基斯坦):values-ur-rPK
葡萄牙语(葡萄牙):values-pt-rPT
印地文(印度):values-hi-rIN
孟加拉语(印度):values-bn-rIN
拉美西语(美国):values-es-rUS
尼泊尔语(尼泊尔): values-ne-rNP
缅甸语: values-my-rMM
俄语:values-ru
越南语(越南):values-vi-rVN
葡萄牙文(巴西):values-pt-rBR

三、接口国际化

我们使用的是IETF语言标签,获取当前语言:

public static String getLanguage(){
   Locale locale = Locale.getDefault();
   return locale.toLanguageTag();
}

根据系统语言返回形如en-US, zh-Hans-CN,zh-Hant-TW等,服务器根据此类型多多语言适配。

相关文章

网友评论

      本文标题:Android中多语言实现

      本文链接:https://www.haomeiwen.com/subject/xunlqftx.html