Android应用中是如何获取系统语言的

  

Android应用中是如何获取系统语言的?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

获取系统当前语言是一个比较常用的功能,在Android 7.0系统上旧函数获取到的当前系统语言并不正确,或者说从Android 7.0起,安卓系统语言的规则变了。

//获取区域的方式有二//方式一
  地区区域=getresource () .getConfiguration () .locale;//方式二
  地区区域=Locale.getDefault ();//获取当前系统语言
  locale.getLanguage (); 

由于仅仅根据getLanguage()无法全面的了解当前的系统语言信息,比如简体中文和繁体中文的语言都是,所以还需要getCountry()方法获取地区信息,我们就能得到应用和zh-HK/zh-TW。

//获取区域的方式有二//方式一
  地区区域=getresource () .getConfiguration () .locale;//方式二
  地区区域=Locale.getDefault ();//获取当前系统语言
  字符串lang=locale.getLanguage() +“产生绯闻;+ locale.getCountry (); 

但是,在Android 7.0上:getresource () .getConfiguration ()。地区被标记为弃用了,所以初步适配后是:

//获取地区对象的正确姿势:
  
  本地语言环境;
  如果(Build.VERSION。SDK_INT祝辞=Build.VERSION_CODES.N) {
  .getLocales .getConfiguration地区=getresource () () () . get (0);
  其他}{
  语言环境=getresource () .getConfiguration () .locale;
  }//获取语言的正确姿势:
  
  字符串lang=locale.getLanguage() +“产生绯闻;+ locale.getCountry (); 

从Android 7.0起使用的getresource () .getConfiguration () .getLocales()返回的是一个LocaleList对象,它包含祝辞=1个地区,内容项可由用户增删,顺序可由用户调整。但是,此接口返回的语言顺序和用户定义的顺序不一定一致。

测试核心代码:

地区地区=Locale.getDefault ();
  MLog.e (locale.getLanguage() +“产生绯闻;+ locale.getCountry ());
  
  如果(Build.VERSION。SDK_INT祝辞=Build.VERSION_CODES.N) {
  .getLocales .getConfiguration LocaleList LocaleList=getresource () () ();
  for (int i=0;我& lt;localeList.size ();我+ +){
  MLog。e (i +“;在1比;“;+ localeList.get(我).getLanguage() +“产生绯闻;+ localeList.get(我).getCountry ());
  }
  
  LocaleList localeList2=LocaleList.getAdjustedDefault ();
  for (int i=0;我& lt;localeList2.size ();我+ +){
  MLog。e (i +“;在2比;“;+ localeList2.get(我).getLanguage() +“产生绯闻;+ localeList2.get(我).getCountry ());
  }
  
  LocaleList localeList3=LocaleList.getDefault ();
  for (int i=0;我& lt;localeList3.size ();我+ +){
  MLog。e (i +“;在3比;“;+ localeList3.get(我).getLanguage() +“产生绯闻;+ localeList3.get(我).getCountry ());
  }
  
  LocaleList localeList4=LocaleList.getEmptyLocaleList ();
  for (int i=0;我& lt;localeList4.size ();我+ +){
  MLog。e (i +“;在4比;“;+ localeList4.get(我).getLanguage() +“产生绯闻;+ localeList4.get(我).getCountry ());
  }
  }

手机系统语言顺序:hi-IN,应用,en - us, zh-HK

应用国际化:价值观,values-zh(价值观里的字符串为英文,values-zh里的字符串为中文)

结果是:

应用      0在1比;应用   在1比;hi-IN   2在1比;en - us   3在1比;zh-HK      0在2比;应用   1在2的在hi-IN   2在2比;en - us   3在2比;zh-HK      0在3比;hi-IN   1在3比;应用   2在3比;en - us   3在3比;zh-HK

并且应用当前显示的文字是中文。

手机系统语言顺序:hi-IN, en - us,属性,应用zh-HK

应用国际化:价值观,values-zh

结果是:

en - us      0在1比;en - us   在1比;hi-IN   2在1比;应用   3在1比;zh-HK      0在2比;en - us   1在2的在hi-IN   2在2比;应用   3在2比;zh-HK      0在3比;hi-IN   1在3比;en - us   2在3比;应用   3在3比;zh-HK

并且应用当前显示的文字是英文。

从Android 7.0开始,系统语言支持多个,可手动排序,系统根据应用本身支持的语言和手机出厂设置的语言等因素来调整应用本身的默认语言。

要获取系统为应用调整后的默认语言:

地区地区=Locale.getDefault ();//Locale.getDefault()和LocaleList.getAdjustedDefault () . get(0)同等效果,还不需要考虑版本问题,推荐直接使用
  字符串的语言=locale.getLanguage() +“产生绯闻;+ locale.getCountry (); 

Android应用中是如何获取系统语言的