382 Stimmen

Android erhält aktuelles Gebietsschema, nicht Standard

Wie erhalte ich das aktuelle Gebietsschema des Benutzers in Android?

Ich kann die Standardversion bekommen, aber das ist vielleicht nicht die aktuelle Version?

Im Grunde möchte ich den zweistelligen Sprachcode des aktuellen Gebietsschemas. Nicht den Standardcode. Es gibt keine Locale.current()

584voto

devunwired Punkte 61902

Der Standard Locale wird statisch zur Laufzeit für Ihren Anwendungsprozess aus den Einstellungen der Systemeigenschaften konstruiert, so dass es die Locale auf diesem Gerät ausgewählt wann die Anwendung gestartet wurde . Normalerweise ist dies in Ordnung, aber es bedeutet, dass der Benutzer seine Locale in den Einstellungen, nachdem Ihr Anwendungsprozess ausgeführt wurde, wird der Wert von getDefaultLocale() wird wahrscheinlich nicht sofort aktualisiert werden.

Wenn Sie aus irgendeinem Grund in Ihrer Anwendung solche Ereignisse abfangen müssen, können Sie stattdessen versuchen, die Locale verfügbar über die Ressource Configuration Objekt, d.h.

Locale current = getResources().getConfiguration().locale;

Sie können feststellen, dass dieser Wert nach einer Einstellungsänderung schneller aktualisiert wird, wenn dies für Ihre Anwendung erforderlich ist.

Update für > API 24 aus den Kommentaren

Locale current = getResources().getConfiguration().getLocales().get(0) // is now the preferred accessor.

226voto

Makalele Punkte 7169

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

96voto

ElegyD Punkte 3923

Wenn Sie die Android Support Library verwenden, können Sie ConfigurationCompat anstelle von @Makalele's Methode, um die Verwerfungswarnungen loszuwerden:

Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);

oder in Kotlin:

val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]

15voto

kabuko Punkte 35597

En getDefault Dokumentation:

Gibt das bevorzugte Gebietsschema des Benutzers zurück. Dies kann für diesen Prozess mit setDefault(Locale) außer Kraft gesetzt worden sein.

Auch aus dem Locale docs:

Das Standardgebietsschema ist für Aufgaben geeignet, bei denen es um die Darstellung von Daten für den Benutzer geht.

Es scheint, als sollten Sie es einfach benutzen.

11voto

Alle oben genannten Antworten funktionieren nicht. So werde ich hier eine Funktion, die auf 4 und 9 Android funktioniert setzen

private String getCurrentLanguage(){
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
      return LocaleList.getDefault().get(0).getLanguage();
   } else{
      return Locale.getDefault().getLanguage();
   }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X