Android 시스템 언어의 인 스 턴 스 가 져 오기(호 환 7.0)

머리말
시스템 의 현재 언어 를 가 져 오 는 것 은 비교적 자주 사용 되 는 기능 입 니 다.안 드 로 이 드 7.0 시스템 에서 구 함수 가 가 져 온 현재 시스템 언어 가 정확 하지 않 거나 안 드 로 이 드 7.0 부터 안 드 로 이 드 시스템 언어의 규칙 이 바 뀌 었 습 니 다.
다음은 Android 7.0 에 적합 하지 않 은 코드 입 니 다.

//   Locale      

//   
Locale locale = getResources().getConfiguration().locale;

//   
Locale locale = Locale.getDefault();

//        
locale.getLanguage();
getLanguage()만 으로 는 현재 의 시스템 언어 정 보 를 전면적으로 이해 할 수 없습니다.예 를 들 어 간 체 중국어 와 번 체 중국어 의 Language 는 모두 zh 이기 때문에 getCountry()방법 으로 지역 정 보 를 얻 으 면 zh-CN 과 zh-HK/zh-TW 를 얻 을 수 있 습 니 다.
요약 하면:

//   Locale      

//   
Locale locale = getResources().getConfiguration().locale;

//   
Locale locale = Locale.getDefault();

//         
String lang = locale.getLanguage() + "-" + locale.getCountry();
단,Android 7.0 에 서 는 getResources().getConfiguration().locale 이 deprecated 로 표시 되 어 있 기 때문에 초기 적 으로 어 울 리 는 것 은:

//   Locale        :

Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  locale = getResources().getConfiguration().getLocales().get(0);
} else {
  locale = getResources().getConfiguration().locale;
}

//         :

String lang = locale.getLanguage() + "-" + locale.getCountry();
Android 7.0 부터 사용 하 는 getResources().getConfiguration().getLocales()는 LocaleList 대상 을 되 돌려 줍 니 다.>=1 개의 Locale 을 포함 하고 내용 항목 은 사용자 가 추가 로 삭제 할 수 있 으 며 순 서 는 사용자 가 조정 할 수 있 습 니 다.그러나 이 인터페이스 가 되 돌아 오 는 언어 순서 와 사용자 가 정의 하 는 순서 가 일치 하지 않 습 니 다!
테스트 언어 순서
테스트 핵심 코드:

Locale locale = Locale.getDefault();
MLog.e(locale.getLanguage() + "-" + locale.getCountry());

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  LocaleList localeList = getResources().getConfiguration().getLocales();
  for (int i = 0; i < localeList.size(); i++) {
    MLog.e(i + " >1> " + localeList.get(i).getLanguage() + "-" + localeList.get(i).getCountry());
  }

  LocaleList localeList2 = LocaleList.getAdjustedDefault();
  for (int i = 0; i < localeList2.size(); i++) {
    MLog.e(i + " >2> " + localeList2.get(i).getLanguage() + "-" + localeList2.get(i).getCountry());
  }

  LocaleList localeList3 = LocaleList.getDefault();
  for (int i = 0; i < localeList3.size(); i++) {
    MLog.e(i + " >3> " + localeList3.get(i).getLanguage() + "-" + localeList3.get(i).getCountry());
  }

  LocaleList localeList4 = LocaleList.getEmptyLocaleList();
  for (int i = 0; i < localeList4.size(); i++) {
    MLog.e(i + " >4> " + localeList4.get(i).getLanguage() + "-" + localeList4.get(i).getCountry());
  }
}
첫 번 째 테스트
테스트 폰:Nubia Z9 mini,Android 7.1,Mokee Rom
휴대폰 시스템 언어 순서: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
또한 앱 에 현재 표 시 된 문 자 는 중국어 입 니 다.
이차 테스트
테스트 폰:Nubia Z9 mini,Android 7.1,Mokee Rom
휴대폰 시스템 언어 순서:hi-In,en-US,zh-CN,zh-HK
앱 국제 화:가치,가치-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
또한 앱 에 현재 표 시 된 문 자 는 영어 입 니 다.
결론.
안 드 로 이 드 7.0 부터 시스템 언어 는 여러 개 를 지원 하고 수 동 으로 정렬 할 수 있 으 며,시스템 은 앱 자체 가 지원 하 는 언어 와 모 바 일 출하 설정 언어 등 요소 에 따라 앱 자체 의 기본 언어 를 조정 한다.
시스템 이 App 으로 조 정 된 기본 언어 를 가 져 오 려 면:

Locale locale = Locale.getDefault();
//Locale.getDefault()   LocaleList.getAdjustedDefault().get(0)     ,          ,      
String language = locale.getLanguage() + "-" + locale.getCountry();
시스템 의 실제 언어 를 가 져 오 려 면:

Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  locale = LocaleList.getDefault().get(0);
} else {
  locale = Locale.getDefault();
}
String language = locale.getLanguage() + "-" + locale.getCountry();
이상 의 안 드 로 이 드 가 시스템 언어 를 가 져 온 인 스 턴 스(호 환 7.0)는 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기