Android 获取系统语言的实例(兼容7.0)
前言
获取系统当前语言是一个比较常用的功能,在Android7.0系统上旧函数获取到的当前系统语言并不正确,或者说从Android7.0起,Android系统语言的规则变了。
下面是未适配Android7.0的代码:
//获取Locale的方式有二 //方式一 Localelocale=getResources().getConfiguration().locale; //方式二 Localelocale=Locale.getDefault(); //获取当前系统语言 locale.getLanguage();
由于仅仅根据getLanguage()无法全面的了解当前的系统语言信息,比如简体中文和繁体中文的Language都是zh,所以还需要getCountry()方法获取地区信息,我们就能得到zh-CN和zh-HK/zh-TW。
总结一下就是:
//获取Locale的方式有二 //方式一 Localelocale=getResources().getConfiguration().locale; //方式二 Localelocale=Locale.getDefault(); //获取当前系统语言 Stringlang=locale.getLanguage()+"-"+locale.getCountry();
但是,在Android7.0上:getResources().getConfiguration().locale被标记为deprecated了,所以初步适配后是:
//获取Locale对象的正确姿势: Localelocale; if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){ locale=getResources().getConfiguration().getLocales().get(0); }else{ locale=getResources().getConfiguration().locale; } //获取语言的正确姿势: Stringlang=locale.getLanguage()+"-"+locale.getCountry();
从Android7.0起使用的getResources().getConfiguration().getLocales()返回的是一个LocaleList对象,它包含>=1个Locale,内容项可由用户增删,顺序可由用户调整。但是,此接口返回的语言顺序和用户定义的顺序不一定一致!
测试语言顺序
测试核心代码:
Localelocale=Locale.getDefault(); MLog.e(locale.getLanguage()+"-"+locale.getCountry()); if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){ LocaleListlocaleList=getResources().getConfiguration().getLocales(); for(inti=0;i1>"+localeList.get(i).getLanguage()+"-"+localeList.get(i).getCountry()); } LocaleListlocaleList2=LocaleList.getAdjustedDefault(); for(inti=0;i 2>"+localeList2.get(i).getLanguage()+"-"+localeList2.get(i).getCountry()); } LocaleListlocaleList3=LocaleList.getDefault(); for(inti=0;i 3>"+localeList3.get(i).getLanguage()+"-"+localeList3.get(i).getCountry()); } LocaleListlocaleList4=LocaleList.getEmptyLocaleList(); for(inti=0;i 4>"+localeList4.get(i).getLanguage()+"-"+localeList4.get(i).getCountry()); } }
第一次测试
测试手机:NubiaZ9mini,Android7.1,MokeeRom
手机系统语言顺序:hi-IN,zh-CN,en-US,zh-HK
App国际化:values,values-zh(values里的string为英文,values-zh里的string为中文)
结果是:
zh-CN 0>1>zh-CN 1>1>hi-IN 2>1>en-US 3>1>zh-HK 0>2>zh-CN 1>2>hi-IN 2>2>en-US 3>2>zh-HK 0>3>hi-IN 1>3>zh-CN 2>3>en-US 3>3>zh-HK
并且App当前显示的文字是中文。
第二次测试
测试手机:NubiaZ9mini,Android7.1,MokeeRom
手机系统语言顺序:hi-IN,en-US,zh-CN,zh-HK
App国际化:values,values-zh
结果是:
en-US 0>1>en-US 1>1>hi-IN 2>1>zh-CN 3>1>zh-HK 0>2>en-US 1>2>hi-IN 2>2>zh-CN 3>2>zh-HK 0>3>hi-IN 1>3>en-US 2>3>zh-CN 3>3>zh-HK
并且App当前显示的文字是英文。
结论
从Android7.0开始,系统语言支持多个,可手动排序,系统根据App本身支持的语言和手机出厂设置的语言等因素来调整App本身的默认语言。
要获取系统为App调整后的默认语言:
Localelocale=Locale.getDefault(); //Locale.getDefault()和LocaleList.getAdjustedDefault().get(0)同等效果,还不需要考虑版本问题,推荐直接使用 Stringlanguage=locale.getLanguage()+"-"+locale.getCountry();
要获取系统真实首选语言:
Localelocale; if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){ locale=LocaleList.getDefault().get(0); }else{ locale=Locale.getDefault(); } Stringlanguage=locale.getLanguage()+"-"+locale.getCountry();
以上这篇Android获取系统语言的实例(兼容7.0)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。