Pobierz bieżący język w urządzeniu

Jak możemy wybrać bieżący język w urządzeniu z Androidem?

Author: Idolon, 2010-11-18

20 answers

Jeśli chcesz uzyskać wybrany język urządzenia, może Ci to pomóc:

Locale.getDefault().getDisplayLanguage();
 743
Author: DeRagan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-23 17:14:59

Sprawdziłem metody Locale na moim urządzeniu z Androidem 4.1.2 i wyniki:

Locale.getDefault().getLanguage()       ---> en      
Locale.getDefault().getISO3Language()   ---> eng 
Locale.getDefault().getCountry()        ---> US 
Locale.getDefault().getISO3Country()    ---> USA 
Locale.getDefault().getDisplayCountry() ---> United States 
Locale.getDefault().getDisplayName()    ---> English (United States) 
Locale.getDefault().toString()          ---> en_US
Locale.getDefault().getDisplayLanguage()---> English
 644
Author: trante,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-30 09:38:38

To, co dla mnie zadziałało, to:

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

Zasób.getSystem () zwraca globalny obiekt współdzielonych zasobów, który zapewnia dostęp tylko do zasobów systemowych (bez zasobów aplikacji) i nie jest skonfigurowany dla bieżącego ekranu (nie może używać jednostek wymiarów, nie zmienia się w zależności od orientacji, itd.).

Ponieważ getConfiguration.locale została już przestarzała, preferowanym sposobem uzyskania podstawowych ustawień regionalnych w Androidzie Nougat jest:

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

Aby zagwarantować kompatybilność z poprzednimi wersjami Androida możliwe rozwiązanie byłoby proste sprawdzenie:

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;
}

Update

Począwszy od biblioteki wsparcia 26.1.0 nie musisz sprawdzać wersji Androida, ponieważ oferuje wygodną metodę zgodną wstecz getLocales().

Po Prostu zadzwoń:

ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration());
 67
Author: Sarpe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-12 17:35:39

Możesz' wyodrębnić ' język z bieżących ustawień regionalnych. Ustawienia regionalne można wyodrębnić za pomocą standardowego interfejsu API Java lub za pomocą kontekstu systemu Android. Na przykład dwie poniższe linie są równoważne:

String locale = context.getResources().getConfiguration().locale.getDisplayName();
String locale = java.util.Locale.getDefault().getDisplayName();
 43
Author: Johan Pelgrim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-18 07:51:32

Aby zaoszczędzić innym czas i / lub zamieszanie chciałem podzielić się, że wypróbowałem dwie alternatywy zaproponowane przez Johana Pelgrima powyżej i na moim urządzeniu są równoważne - niezależnie od tego, czy domyślna lokalizacja zostanie zmieniona.

Więc domyślnym ustawieniem mojego urządzenia jest angielski (United Kindom) i w tym stanie zgodnie z oczekiwaniami oba ciągi w odpowiedzi Johana dają ten sam wynik. Jeśli zmienię ustawienia regionalne w ustawieniach telefonu (powiedzmy italiano (Italia)) i ponownie uruchomię wtedy oba ciągi w odpowiedzi podaj lokalizację jako italiano (Italia).

Dlatego uważam oryginalny post Johana za poprawny, a komentarz gregma za niepoprawny.

 34
Author: airewyre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-20 06:36:54

Jak opisano w locale reference najlepszym sposobem na uzyskanie języka jest:

Locale.getDefault().getLanguage()

Ta metoda zwraca ciąg znaków z identyfikatorem języka zgodnie z ISO 639-1 standart

 16
Author: Opsenas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-12 07:41:22

Możesz użyć tego

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

Gdy " xx "jest dowolnym kodem języka, takim jak "en", "fr", "sp", "ar".... i tak dalej

 13
Author: Simon K. Gerges,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-15 16:24:33

Aby dodać do odpowiedź Johana Pelgrima

context.getResources().getConfiguration().locale
Locale.getDefault()

Są równoważne, ponieważ android.text.format.DateFormat Klasa używa obu zamiennie, np.

private static String zeroPad(int inValue, int inMinDigits) {
    return String.format(Locale.getDefault(), "%0" + inMinDigits + "d", inValue);
}

I

public static boolean is24HourFormat(Context context) {
    String value = Settings.System.getString(context.getContentResolver(),
            Settings.System.TIME_12_24);

    if (value == null) {
        Locale locale = context.getResources().getConfiguration().locale;

    // ... snip the rest ...
}
 6
Author: armandino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:20

Możesz spróbować pobrać ustawienia regionalne z zasobów systemowych:

PackageManager packageManager = context.getPackageManager();
Resources resources = packageManager.getResourcesForApplication("android");
String language = resources.getConfiguration().locale.getLanguage();
 5
Author: stefan.nsk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-20 11:24:45

Istnieją dwa języki.

Domyślny język systemu operacyjnego:

Locale.getDefault().getDisplayLanguage();

Aktualny język zastosowania:

getResources().getConfiguration().locale.getDisplayLanguage();//return string
 4
Author: ayed abboushi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-18 17:15:38

Możesz użyć tego kodu, aby dowiedzieć się, jaki jest prąd klawiatury

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
InputMethodSubtype ims = imm.getCurrentInputMethodSubtype();
String locale = ims.getLocale();
 2
Author: Ramkailash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-11 05:38:35

Odpowiedzi powyżej nie odróżniają prostego chińskiego od tradycyjnego chińskiego. Locale.getDefault().toString() działa, które zwraca "zh_CN", "zh_TW", "en_US" itd.

Odniesienia do: https://developer.android.com/reference/java/util/Locale.html , ISO 639-1 jest stary.

 2
Author: rensq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-06 14:32:17

Jeśli wybierzesz język nie możesz wpisać ten Grecki może być pomocny.

getDisplayLanguage().toString() = English
getLanguage().toString() = en 
getISO3Language().toString() = eng
getDisplayLanguage()) = English
getLanguage() = en
getISO3Language() = eng

Teraz spróbuj z greckim

getDisplayLanguage().toString() = Ελληνικά
getLanguage().toString() = el
getISO3Language().toString() = ell
getDisplayLanguage()) = Ελληνικά
getLanguage() = el
getISO3Language() = ell
 2
Author: user462990,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-06 14:33:34
if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
    // your code here
}
 1
Author: Pratibha Sarode,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-06 14:34:24

Prawidłowy sposób uzyskania języka urządzenia jest następujący:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    return context.getResources().getConfiguration().getLocales().get(0);
} else {
    return context.getResources().getConfiguration().locale;
}
Mam nadzieję, że to pomoże.
 1
Author: andrea.rinaldi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-11 16:09:50

Jeśli poziom API jest 24 lub wyższy, użyj LocaleList.getDefault().get(0).getLanguage() else use 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
    }
}

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

 1
Author: user7471982,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-25 10:48:02

Moje rozwiązanie jest takie

@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);
}

A następnie

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

Pokazane - - - > Pl

 0
Author: biyoalp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-10 05:06:55
Locale.getDefault().getDisplayLanguage()

Da ci Written nazwę dla języka, na przykład English, Dutch, French

Locale.getDefault().getLanguage()

Da ci language code, na przykład: en, nl, fr

Obie metody zwracają łańcuch

 0
Author: Shamsul Arefin Sajib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-10 10:18:13

Oto kod do pobrania kraju urządzenia. Kompatybilny ze wszystkimi wersjami Androida nawet oreo.

Rozwiązanie: jeśli użytkownik nie ma karty SIM niż get country, jest on używany podczas konfiguracji telefonu lub bieżącego wyboru języka.

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;
}
 0
Author: Abhishek Garg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-24 10:45:26

Jeśli chcesz wykonać konkretne zadanie dla użytkowników mieszkających w Indiach, którzy mówią w Hindi, użyj poniższego warunku if

if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
 //Block executed only for the users resides in India who speaks Hindi 
}
 -3
Author: Divyaadz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-29 07:09:24