programing

Android 기본값이 아닌 현재 로케일 가져오기

goodsources 2023. 8. 9. 20:41
반응형

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

반응형