android - 언어 - 자바 locale getdefault




기기에서 현재 언어 가져 오기 (14)

API 레벨이 24 이상인 경우 LocaleList.getDefault().get(0).getLanguage() else Locale.getDefault.getLanguage()

private fun getSystemLocale(): String {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        return LocaleList.getDefault()[0].language
    } else {
        return Locale.getDefault().language
    }
}

reference : https://developer.android.com/guide/topics/resources/multilingual-support

Android 기기에서 현재 선택된 언어를 어떻게 얻을 수 있습니까?


나를 위해 일한 것은 :

Resources.getSystem().getConfiguration().locale;

Resource.getSystem ()은 시스템 자원 (응용 프로그램 자원 없음)에만 액세스 할 수 있고 현재 화면 (차원 단위를 사용할 수 없으며 방향에 따라 변경되지 않음)에 대해 구성되지 않은 전역 공유 자원 객체를 반환합니다.

getConfiguration.locale 은 이제 더 이상 사용되지 않으므로 Android Nougat에서 기본 로케일을 가져 오는 기본 방법은 다음과 같습니다.

Resources.getSystem().getConfiguration().getLocales().get(0);

이전 Android 버전과의 호환성을 보장하려면 간단한 해결책이 필요합니다.

Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    locale = Resources.getSystem().getConfiguration().getLocales().get(0);
} else {
    //noinspection deprecation
    locale = Resources.getSystem().getConfiguration().locale;
}

최신 정보

지원 라이브러리 26.1.0 부터 Android 버전을 확인할 필요가 없습니다. 이는 이전 버전과 호환되는 getLocales() 메소드를 제공하기 때문입니다.

간단히 전화하십시오 :

ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration());

내 솔루션은 다음과 같습니다.

@SuppressWarnings("deprecation")
public String getCurrentLocale2() {
    return Resources.getSystem().getConfiguration().locale.getLanguage();
}

@TargetApi(Build.VERSION_CODES.N)
public Locale getCurrentLocale() {
    getResources();
    return Resources.getSystem().getConfiguration().getLocales().get(0);
}

그리고

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                Log.e("Locale", getCurrentLocale().getLanguage());
            } else {
                Log.e("Locale", getCurrentLocale2().toString());
            }

표시된 ---> en


두 가지 언어가 있습니다.

OS의 기본 언어 :

Locale.getDefault().getDisplayLanguage();

응용 프로그램의 현재 언어 :

getResources().getConfiguration().locale.getDisplayLanguage();//return string

시간과 혼란을 덜어주기 위해 Johan Pelgrim이 제안한 두 가지 대안을 내 장치에서와 동일하게 사용하려고했습니다. 기본 위치가 변경되었는지 여부에 관계없이 동일한 것입니다.

그래서 내 장치의 기본 설정은 영어 (유치원)이며이 상태에서 예상대로 요한의 답변에있는 두 문자열 모두 동일한 결과를 제공합니다. 그런 다음 전화 설정 (italiano (Italia)라고 말함)에서 로케일을 변경하고 Johan의 답변에서 두 문자열 모두 italiano (이탈리아)로 로케일을 지정하면됩니다.

그러므로 Johan의 원래 게시물은 정확하고 gregm의 의견은 잘못되었다고 생각합니다.


시스템 리소스에서 로케일을 가져올 수 있습니다.

PackageManager packageManager = context.getPackageManager();
Resources resources = packageManager.getResourcesForApplication("android");
String language = resources.getConfiguration().locale.getLanguage();

여기에 장치 국가를 가져 오는 코드가 있습니다. 안드로이드의 모든 버전과 호환 oreo.

솔루션 : 사용자가 국가를 얻는 것보다 SIM 카드를 가지고 있지 않으면 그는 전화 설정이나 현재 언어 선택 중에 사용됩니다.

public static String getDeviceCountry(Context context) {
    String deviceCountryCode = null;

    final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

        if(tm != null) {
            deviceCountryCode = tm.getNetworkCountryIso();
        }

    if (deviceCountryCode != null && deviceCountryCode.length() <=3) {
        deviceCountryCode = deviceCountryCode.toUpperCase();
    }
    else {
        deviceCountryCode = ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0).getCountry().toUpperCase();
    }

  //  Log.d("countryCode","  : " + deviceCountryCode );
    return deviceCountryCode;
}


이것을 사용할 수 있습니다.

boolean isLang = Locale.getDefault().getLanguage().equals("xx");

"xx"가 "en", "fr", "sp", "ar"...과 같은 언어 코드 인 경우


장치 언어를 올바르게 가져 오는 방법은 다음과 같습니다.

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

희망이 도움이됩니다.


힌디어를 사용하는 인도에 거주하는 사용자를 위해 특정 작업을 수행하려는 경우 조건에 따라 아래에서 사용하십시오

if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
 //Block executed only for the users resides in India who speaks Hindi 
}

로케일 참조 에서 설명한대로 언어를 얻는 가장 좋은 방법은 다음과 같습니다.

Locale.getDefault().getLanguage()

이 메소드는 ISO 639-1 표준 에 따라 언어 ID가있는 문자열을 반환합니다.


Locale.getDefault().getDisplayLanguage()

English, Dutch, French 와 같이 언어에 대한 Written 이름을 제공합니다.

Locale.getDefault().getLanguage()

예 : en, nl, fr language code 를 제공합니다.

두 메소드 모두 String을 반환합니다.


if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
    // your code here
}




localization