Wie erhalte ich das aktuelle Gebietsschema des Benutzers in Android?
Ich kann die Standardeinstellung erhalten, aber ist die aktuelle möglicherweise nicht korrekt?
Grundsätzlich möchte ich den Zwei-Buchstaben-Sprachcode aus dem aktuellen Gebietsschema. Nicht die Standardeinstellung. Es gibt keine Locale.current()
Die Standardvariable Locale
wird zur Laufzeit statisch für Ihren Anwendungsprozess aus den Systemeinstellungen der Eigenschaften erstellt. Sie stellt daher die auf diesem Gerät ausgewählte Locale
dar beim Start der Anwendung . Normalerweise ist dies in Ordnung, bedeutet jedoch, dass der Wert von getDefaultLocale()
wahrscheinlich nicht sofort aktualisiert wird, wenn der Benutzer seine Locale
in den Einstellungen ändert, nachdem der Anwendungsprozess ausgeführt wird.
Wenn Sie Ereignisse aus einem bestimmten Grund in Ihrer Anwendung abfangen müssen, versuchen Sie stattdessen, das Locale
-Objekt vom Ressourcenobjekt Configuration
abzurufen, d. H.
Locale current = getResources().getConfiguration().locale;
Möglicherweise stellen Sie fest, dass dieser Wert nach einer Änderung der Einstellungen schneller aktualisiert wird, wenn dies für Ihre Anwendung erforderlich ist.
Android N (API Level 24) Update (keine Warnungen):
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;
}
}
Wenn Sie die Android Support Library verwenden, können Sie ConfigurationCompat
anstelle der Methode von @ Makalele verwenden, um die Ablehnungswarnungen zu entfernen:
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
oder in Kotlin:
val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]
Aus der Dokumentation von getDefault
:
Gibt das bevorzugte Gebietsschema des Benutzers zurück. Dies wurde möglicherweise mit setDefault (Locale) für diesen Prozess überschrieben.
Auch aus den Locale
-Dokumenten:
Das Standardgebietsschema eignet sich für Aufgaben, bei denen dem Benutzer Daten angezeigt werden.
Anscheinend sollten Sie es einfach verwenden.
private Locale getLocale(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;
}
}