Android에서 사용자의 현재 로케일을 얻으려면 어떻게합니까?
나는 기본값을 얻을 수 있지만 이것이 현재의 것이 아닐 수 있습니까?
기본적으로 현재 로캘의 두 문자 언어 코드가 필요합니다. 기본이 아닙니다. 없습니다Locale.current()
Android에서 사용자의 현재 로케일을 얻으려면 어떻게합니까?
나는 기본값을 얻을 수 있지만 이것이 현재의 것이 아닐 수 있습니까?
기본적으로 현재 로캘의 두 문자 언어 코드가 필요합니다. 기본이 아닙니다. 없습니다Locale.current()
답변:
기본값 Locale
은 시스템 속성 설정에서 응용 프로그램 프로세스에 대해 런타임시 정적으로 구성되므로 응용 프로그램이 시작될 때Locale
해당 장치 에서 선택한 것을 나타냅니다 . 일반적으로 이것은 좋지만 응용 프로그램 프로세스가 실행 된 후 사용자가 설정을 변경 하면 값 이 즉시 업데이트되지 않을 것입니다.Locale
getDefaultLocale()
응용 프로그램에서 어떤 이유로 이런 이벤트를 트랩 해야하는 경우 대신 Locale
자원 Configuration
객체 에서 사용 가능한 것을 얻으려고 시도 할 수 있습니다.
Locale current = getResources().getConfiguration().locale;
응용 프로그램에 필요한 경우 설정이 변경된 후이 값이 더 빨리 업데이트 될 수 있습니다.
Log.d("localeChange", "Default locale lang: " + Locale.getDefault().getLanguage()); Log.d("localeChange", "Config locale lang: " + getResources().getConfiguration().locale.getLanguage());
locale This field was deprecated in API level 24. Do not set or read this directly. Use getLocales() and setLocales(LocaleList). If only the primary locale is needed, getLocales().get(0) is now the preferred accessor.
Android N (Api 레벨 24) 업데이트 (경고 없음) :
Locale getCurrentLocale(Context context){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
return context.getResources().getConfiguration().getLocales().get(0);
} else{
//noinspection deprecation
return context.getResources().getConfiguration().locale;
}
}
LocaleList.getDefault().get(0);
선호 언어별로 정렬 된 로케일을 리턴하므로이를 사용해야 합니다.
ConfigurationCompat
과 같이 발견 했다ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0)
Android 지원 라이브러리를 사용하는 경우 ConfigurationCompat
@Makalele의 방법 대신 사용하여 사용 중단 경고를 제거 할 수 있습니다 .
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
또는 코 틀린에서 :
val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0);
에서 getDefault
의 설명서 :
사용자가 선호하는 로캘을 반환합니다. 이 프로세스에 대해서는 setDefault (Locale)로 재정의되었을 수 있습니다.
또한 Locale
문서에서 :
기본 로캘은 사용자에게 데이터를 제공하는 작업에 적합합니다.
그냥 사용해야하는 것 같습니다.
Locale.setDefault()
하면 기기 언어를 최소한 Android 5.0으로 다시 변경하면 호출됩니다 (테스트 한 한)
위의 모든 답변-작동하지 않습니다. 그래서 여기에 4와 9 안드로이드에서 작동하는 함수를 넣을 것입니다
private String getCurrentLanguage(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
return LocaleList.getDefault().get(0).getLanguage();
} else{
return Locale.getDefault().getLanguage();
}
}
LocaleListCompat.getDefault()
AndroidX를 사용 하는 경우 에도 사용할 수 있습니다 .
공식 문서에 따르면 ConfigurationCompat 은 지원 라이브러리에서 더 이상 사용되지 않습니다.
당신은 사용을 고려할 수 있습니다
LocaleListCompat.getDefault()[0].toLanguageTag()
0 위는 사용자 선호 로케일입니다.
0 번째 위치에서 기본 로케일을 얻으려면
LocaleListCompat.getAdjustedDefault()
default()
꽤 안전한 내기입니다 (문서와 같이 처리에 사용하지 마십시오).