关于Android 国际化遇到的一些坑

 在开发过程中,难免会进行语言适配,就是国际化。其实国际化也是蛮简单的,网上都可以很多种适配的方法。大多数:

## 1、在res资源目录下新建values资源文件 ##

比如:values-zh-rTW,values-en-rUS ,下面是各国的命名规范:

    Chinese, PRC (zh_CN)----------------------------------中文简体,中国
    Chinese, Taiwan (zh_TW)-------------------------------中文繁体,台湾
    Chinese, Taiwan (zh_HK)-------------------------------中文繁体,香港
    Arabic, Egypt (ar_EG) --------------------------------阿拉伯语,埃及
    Arabic, Israel (ar_IL) -------------------------------阿拉伯语,以色列
    Bulgarian, Bulgaria (bg_BG) --------------------------保加利亚语,保加利亚
    Catalan, Spain (ca_ES) -------------------------------加泰隆语,西班牙
    Czech, Czech Republic (cs_CZ) ------------------------捷克语,捷克共和国
    Danish, Denmark(da_DK) -------------------------------丹麦语,丹麦
    German, Austria (de_AT) ------------------------------德语,奥地利
    German, Switzerland (de_CH) --------------------------德语,瑞士
    German, Germany (de_DE) ------------------------------德语,德国
    German, Liechtenstein (de_LI) ------------------------德语,列支敦士登的
    Greek, Greece (el_GR) --------------------------------希腊语,希腊
    English, Australia (en_AU) ---------------------------英语,澳大利亚
    English, Canada (en_CA) ------------------------------英语,加拿大
    English, Britain (en_GB) -----------------------------英语,英国
    English, Ireland (en_IE) -----------------------------英语,爱尔兰
    English, India (en_IN) -------------------------------英语,印度
    English, New Zealand (en_NZ) -------------------------英语,新西兰
    English, Singapore(en_SG) ----------------------------英语,新加坡
    English, US (en_US) ----------------------------------英语,美国
    English, Zimbabwe (en_ZA) ----------------------------英语,津巴布韦
    Spanish (es_ES) --------------------------------------西班牙
    Spanish, US (es_US) ----------------------------------西班牙语,美国
    Finnish, Finland (fi_FI) -----------------------------芬兰语,芬兰
    French, Belgium (fr_BE) ------------------------------法语,比利时
    French, Canada (fr_CA) -------------------------------法语,加拿大
    French, Switzerland (fr_CH) --------------------------法语,瑞士
    French, France (fr_FR) -------------------------------法语,法国
    Hebrew, Israel (he_IL) -------------------------------希伯来语,以色列
    Hindi, India (hi_IN) ---------------------------------印地语,印度
    Croatian, Croatia (hr_HR) ----------------------------克罗地亚语,克罗地亚
    Hungarian, Hungary (hu_HU) ---------------------------匈牙利语,匈牙利
    Indonesian, Indonesia (id_ID) ------------------------印尼语,印尼
    Italian, Switzerland (it_CH) -------------------------意大利语,瑞士
    Italian, Italy (it_IT) -------------------------------意大利语,意大利
    Japanese (ja_JP) -------------------------------------日语
    Korean (ko_KR) ---------------------------------------朝鲜语
    Lithuanian, Lithuania (lt_LT) ------------------------立陶宛语,立陶宛
    Latvian, Latvia (lv_LV) ------------------------------拉托维亚语,拉托维亚
    Norwegian-Bokmol, Norway(nb_NO) ----------------------挪威语,挪威
    Dutch, Belgium (nl_BE) -------------------------------荷兰语,比利时
    Dutch, Netherlands (nl_NL) ---------------------------荷兰语,荷兰
    Polish (pl_PL) ---------------------------------------波兰语
    Portuguese, Brazil (pt_BR) ---------------------------葡萄牙语,巴西
    Portuguese, Portugal (pt_PT) -------------------------葡萄牙语,葡萄牙
    Romanian, Romania (ro_RO) ----------------------------罗马尼亚语,罗马尼亚
    Russian (ru_RU) --------------------------------------俄语
    Slovak, Slovakia (sk_SK) -----------------------------斯洛伐克语,斯洛伐克
    Slovenian, Slovenia (sl_SI) --------------------------斯洛文尼亚语,斯洛文尼亚
    Serbian (sr_RS) --------------------------------------塞尔维亚语
    Swedish, Sweden (sv_SE) ------------------------------瑞典语,瑞典
    Thai, Thailand (th_TH) -------------------------------泰语,泰国
    Tagalog, Philippines (tl_PH) -------------------------菲律宾语,菲律宾
    Turkish, Turkey (tr_TR) ------------------------------土耳其语,土耳其
    Ukrainian, Ukraine (uk_UA) ---------------------------联合王国
    Vietnamese, Vietnam (vi_VN) --------------------------越南语,越南



## 2、可以通过设置Locale完成语言环境的切换。kotlin版. ##

        fun changeAppLanguage() {
        var languageConfig = PreferenceUtil.getLanguageConfig()//保存语言设置
        // 本地语言设置
        val myLocale = Locale(languageConfig)
        val res = resources
        val dm = res.displayMetrics
        val conf = res.configuration
        conf.locale = myLocale
        res.updateConfiguration(conf, dm)
    }
    //设置完成,进行页面跳转(这个操作基本上是回退到app的主页面上,然后进行语言的更换)
    var intent = Intent(this, MainActivity::class.java)
    intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    startActivity(intent)


使用SP对语言进行持久化保存。

大致上这样就可以,需要详细的版本可以

参考这个哥们写的: https://blog.csdn.net/cekiasoo/article/details/53012646

关于Android 7.0的一些适配上出现的问题,我们可以参考官方文档:

https://developer.android.com/guide/topics/resources/multilingual-support

    
基本上的都是通过使用config.setLocales(LocaleList localeList) 和 config.getLocales() 来进行设置和获取语言。


但是我在开发过程中遇到了一个坑,小米Android 7.0系统以上使用这个方法是获取不到当前系统语言的(出现顺序错乱)。通过查找资料发现正确获取系统语言的方式 `Resources.getSystem().configuration.locale`,刚好解决了我的问题。

猜你喜欢

转载自blog.csdn.net/jacksinrow/article/details/80667143