Jak uzyskać wybrany język na urządzeniu z Androidem?
android
localization
Pinki
źródło
źródło
Odpowiedzi:
Jeśli chcesz uzyskać wybrany język urządzenia, może to pomóc:
źródło
Locale.getDefault().getLanguage();
aby uzyskać zwykły kod języka (np. „De”, „en”).Locale.setDefault("ru")
, a język w ustawieniach systemu zostanie ustawiony na angielski, wówczas metodaLocale.getDefault().getLanguage()
zwróci „ru” , ale nie „en” . Czy istnieje inna metoda uzyskania prawdziwych ustawień regionalnych / języka SYSTEMU? Nie znalazłem tutaj udokumentowanego rozwiązania , ale czy istnieje bardziej eleganckie rozwiązanie?Locale.getDefault().toString()
która daje ciąg, który w pełni identyfikuje ustawienia regionalne, np. „En_US”.Sprawdziłem metody ustawień regionalnych na moim urządzeniu z Androidem 4.1.2 i wyniki:
źródło
Locale.getDefault().getDisplayLanguage()
co powraca"English"
Dla mnie zadziałało:
Resources.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 itp.).Ponieważ
getConfiguration.locale
został już wycofany, preferowanym sposobem uzyskania podstawowych ustawień narodowych w Android Nougat jest:Aby zagwarantować kompatybilność z poprzednimi wersjami Androida, możliwym rozwiązaniem byłoby proste sprawdzenie:
Aktualizacja
Począwszy od biblioteki wsparcia
26.1.0
, nie musisz sprawdzać wersji Androida, ponieważ oferuje ona wygodną metodę kompatybilności wstecznejgetLocales()
.Po prostu zadzwoń:
źródło
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration())
getLocales
. Zaktualizowałem swoją odpowiedź.Możesz „wyodrębnić” język z bieżących ustawień regionalnych. Możesz wyodrębnić ustawienia narodowe za pomocą standardowego interfejsu API języka Java lub za pomocą kontekstu systemu Android. Na przykład dwie poniższe linie są równoważne:
źródło
Locale.setDefault()
wcześniej w innym miejscu, a uzyskasz inne wyniki.Aby zaoszczędzić innym czas i / lub zamieszanie, chciałem się podzielić, że wypróbowałem dwie alternatywy zaproponowane przez Johana Pelgrima powyżej i na moim urządzeniu są one równoważne - niezależnie od tego, czy domyślna lokalizacja jest zmieniona.
Tak więc domyślnym ustawieniem mojego urządzenia jest angielski (United Kindom) iw tym stanie, zgodnie z oczekiwaniami, oba ciągi w odpowiedzi Johana dają ten sam wynik. Jeśli następnie zmienię ustawienia regionalne w ustawieniach telefonu (powiedz italiano (Italia)) i uruchomię ponownie, wówczas oba ciągi w odpowiedzi Johana podadzą ustawienia regionalne jako italiano (Italia).
Dlatego uważam, że oryginalny post Johana jest poprawny, a komentarz gregma jest niepoprawny.
źródło
Zgodnie z opisem w dokumentacji ustawień regionalnych najlepszym sposobem na uzyskanie języka jest:
ta metoda zwraca ciąg znaków o identyfikatorze języka zgodnie ze standardem ISO 639-1
źródło
Możesz tego użyć
gdy „xx” to dowolny kod języka, taki jak „en”, „fr”, „sp”, „ar” .... i tak dalej
źródło
jeśli poziom API wynosi 24 lub więcej, użyj
LocaleList.getDefault().get(0).getLanguage()
innego użyjLocale.getDefault.getLanguage()
odniesienie: https://developer.android.com/guide/topics/resources/multilingual-support
źródło
Aby dodać do odpowiedzi Johna Pelgrima
są równoważne, ponieważ
android.text.format.DateFormat
klasa używa obu zamiennie, npi
źródło
Możesz spróbować uzyskać ustawienia regionalne z zasobów systemowych:
źródło
W powyższych odpowiedziach nie rozróżnia się prostego chińskiego od tradycyjnego chińskiego.
Locale.getDefault().toString()
działa, które zwraca „zh_CN”, „zh_TW”, „en_US” itp.Odniesienia do: https://developer.android.com/reference/java/util/Locale.html , ISO 639-1 jest STARY.
źródło
To rozwiązanie działało dla mnie. Spowoduje to zwrócenie języka urządzenia z Androidem (nie lokalnego języka aplikacji)
Zwróci to „en”, „de” lub „fr” lub cokolwiek innego, na jaki ustawiony jest język urządzenia.
źródło
Możesz użyć tego kodu, aby sprawdzić bieżącą klawiaturę
źródło
Istnieją dwa języki.
Domyślny język systemu operacyjnego:
Aktualny język aplikacji:
źródło
Jeśli wybierzesz język, w którym nie możesz wpisać, grecki może być pomocny.
Teraz spróbuj z greckim
źródło
Jeśli chcesz sprawdzić aktualny język, skorzystaj z odpowiedzi @Sarpe (@Thorbear):
źródło
DateFormat.getDateInstance(DateFormat.LONG, Locale.getDefault()).format(Date())
.źródło
Prawidłowy sposób uzyskania języka urządzenia to:
Mam nadzieję, że to pomoże.
źródło
poda
Written
nazwę języka, na przykładEnglish, Dutch, French
da ci
language code
na przykład:en, nl, fr
Obie metody zwracają ciąg znaków
źródło
źródło
Inni dali dobre odpowiedzi dla języka urządzenia,
jeśli chcesz, aby język aplikacji był najprostszym sposobem, to dodając
app_lang
klucz dostrings.xml
pliku i określ język dla każdego z języków.W ten sposób, jeśli domyślny język aplikacji jest inny niż język urządzenia, możesz wybrać, aby wysłać go jako parametr dla swoich usług.
źródło
źródło
Moje rozwiązanie jest takie
i wtedy
pokazano ---> en
źródło
oto kod, aby uzyskać kraj urządzenia. Kompatybilny ze wszystkimi wersjami Androida nawet oreo.
Rozwiązanie: jeśli użytkownik nie ma karty SIM poza krajem, jest używany podczas konfiguracji telefonu lub wyboru bieżącego języka.
źródło
Jeśli chcesz wykonać określone zadanie dla użytkowników mieszkających w Indiach, którzy mówią po hindi, użyj poniższej opcji, jeśli warunek
źródło