Android 기본값이 아닌 현재 로케일 가져오기
안드로이드에서 사용자의 현재 로케일을 가져오려면 어떻게 해야 합니까?
기본적인 것은 받을 수 있지만, 이것은 현재의 것이 아닐 수도 있습니다.
기본적으로 저는 현재 로케일에서 두 개의 문자 언어 코드를 원합니다.기본적인 것이 아닙니다.거기에는 없다Locale.current()
기본값Locale
시스템 속성 설정에서 응용 프로그램 프로세스에 대해 런타임에 정적으로 생성되므로Locale
응용 프로그램을 시작할 때 해당 장치에서 선택했습니다.일반적으로 이것은 괜찮지만 사용자가 변경할 경우Locale
응용 프로그램 프로세스가 실행된 후 설정에서 값getDefaultLocale()
아마도 즉시 업데이트되지 않을 것입니다.
응용 프로그램에서 이러한 이벤트를 어떤 이유로 트랩해야 하는 경우 대신 다음을 얻을 수 있습니다.Locale
리소스에서 사용할 수 있는Configuration
목적어, 즉.
Locale current = getResources().getConfiguration().locale;
응용 프로그램에 필요한 경우 설정을 변경한 후 이 값이 더 빨리 업데이트될 수 있습니다.
> API 24에 대한 댓글 업데이트
Locale current = getResources().getConfiguration().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;
}
}
Android 지원 라이브러리를 사용하는 경우ConfigurationCompat
@Makalele의 권장하지 않는 경고를 제거하는 방법 대신:
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
또는 코틀린어로:
val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]
의 설명서에서:
사용자의 기본 로케일을 반환합니다.이 프로세스에서 setDefault(Locale)로 재정의되었을 수 있습니다.
또한 의Locale
문서:
기본 로케일은 사용자에게 데이터를 표시하는 작업에 적합합니다.
그냥 사용하시는 게 좋을 것 같네요.
위의 모든 답변이 작동하지 않습니다.그래서 저는 여기에 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();
}
}
공식 문서에 따르면 ConfigurationCompat는 지원 라이브러리에서 더 이상 사용되지 않습니다.
사용을 고려할 수 있습니다.
LocaleListCompat.getDefault()[0].toLanguageTag()
0번째 위치는 사용자가 선호하는 로케일입니다.
0번째 위치에서 기본 로케일을 가져오는 방법은 다음과 같습니다.LocaleListCompat.getAdjustedDefault()
지금으로서는, 우리는 사용할 수 있습니다.ConfigurationCompat
경고 및 불필요한 보일러 플레이트를 피하기 위한 클래스.
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
사용한 적이 있습니다.
String currentLanguage = Locale.getDefault().getDisplayLanguage();
if (currentLanguage.toLowerCase().contains("en")) {
//do something
}
나는 다음과 같은 간단한 코드를 사용했습니다.
if(getResources().getConfiguration().locale.getLanguage().equalsIgnoreCase("en"))
{
//do something
}
언급URL : https://stackoverflow.com/questions/14389349/android-get-current-locale-not-default
'programing' 카테고리의 다른 글
자바스크립트로 로컬 디스크 파일을 여는 방법은? (0) | 2023.08.09 |
---|---|
부호 없는 문자*의 길이는 어떻게 결정합니까? (0) | 2023.08.09 |
리눅스에서 ptrace는 어떻게 작동합니까? (0) | 2023.08.09 |
div 높이를 배경 크기로 자동 조정하려면 어떻게 해야 합니까? (0) | 2023.08.09 |
도커 - 컨테이너에서 자동 검색을 비활성화하려면 어떻게 해야 합니까? (0) | 2023.08.04 |