Wie erhalte ich das aktuelle Gebietsschema des Benutzers in Android?
Ich kann die Standardeinstellung erhalten, aber diese ist möglicherweise nicht die richtige?
Grundsätzlich möchte ich den aus zwei Buchstaben bestehenden Sprachcode aus dem aktuellen Gebietsschema. Nicht die Standardeinstellung. Es gibt keinLocale.current()
default()
ist eine ziemlich sichere Wette, verwenden Sie sie nur nicht für die Verarbeitung (wie in den Dokumenten angegeben).default()
, jedoch nicht für Dinge, die Code beschädigen können.Antworten:
Die Standardeinstellung
Locale
wird zur Laufzeit für Ihren Anwendungsprozess statisch aus den Einstellungen der Systemeigenschaften erstellt, sodass sie dieLocale
auf diesem Gerät beim Starten der Anwendung ausgewählten Werte darstellt . Normalerweise ist dies in Ordnung, aber es bedeutet, dassLocale
der Wert vongetDefaultLocale()
wahrscheinlich nicht sofort aktualisiert wird , wenn der Benutzer seine Einstellungen nach dem Ausführen Ihres Anwendungsprozesses ändert .Wenn Sie Ereignisse wie dieses aus irgendeinem Grund in Ihrer Anwendung abfangen müssen, können Sie stattdessen versuchen, die
Locale
verfügbaren Informationen aus dem RessourcenobjektConfiguration
abzurufen, d. H.Möglicherweise wird dieser Wert nach einer Änderung der Einstellungen schneller aktualisiert, wenn dies für Ihre Anwendung erforderlich ist.
quelle
Log.d("localeChange", "Default locale lang: " + Locale.getDefault().getLanguage()); Log.d("localeChange", "Config locale lang: " + getResources().getConfiguration().locale.getLanguage());
locale This field was deprecated in API level 24. Do not set or read this directly. Use getLocales() and setLocales(LocaleList). If only the primary locale is needed, getLocales().get(0) is now the preferred accessor.
Update für Android N (API Level 24) (keine Warnungen):
quelle
LocaleList.getDefault().get(0);
da dies die nach der bevorzugten Sprache sortierten Gebietsschemas zurückgibt.ConfigurationCompat
, asConfigurationCompat.getLocales(getResources().getConfiguration()).get(0)
Wenn Sie die Android-Supportbibliothek verwenden, können Sie
ConfigurationCompat
anstelle der Methode von @ Makalele Verfallswarnungen entfernen:oder in Kotlin:
quelle
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0);
Aus
getDefault
der Dokumentation:Auch aus den
Locale
Dokumenten:Scheint, als sollten Sie es einfach benutzen.
quelle
Locale.setDefault()
, wird er aufgerufen, wenn ich die Gerätesprache zumindest wieder auf Android 5.0Alle Antworten oben - funktionieren nicht. Also werde ich hier eine Funktion setzen, die auf 4 und 9 Android funktioniert
quelle
LocaleListCompat.getDefault()
wenn Sie AndroidX verwenden.Ich habe das benutzt:
quelle
Gemäß der offiziellen Dokumentation ist ConfigurationCompat in Support-Bibliotheken veraltet
Sie können in Betracht ziehen, zu verwenden
LocaleListCompat.getDefault()[0].toLanguageTag()
Die 0. Position ist das vom Benutzer bevorzugte GebietsschemaDas Standardgebietsschema an der 0. Position zu erhalten, wäre
LocaleListCompat.getAdjustedDefault()
quelle