2016-07-08 11 views

Antwort

33

Überprüfen Sie, welche Version Sie laufen auf und Rückfall auf die veraltete Lösung:

Locale locale; 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
    locale = context.getResources().getConfiguration().getLocales().get(0); 
} else { 
    locale = context.getResources().getConfiguration().locale; 
} 
5

Sie Locale.getDefault() verwenden könnte, die die Java-Standardmethode ist die aktuelle Locale zu bekommen.

+1

Dies wird nur das Gebietsschema zurückkehren in den Systemeinstellungen festgelegt. Viele Apps verfügen über eine eigene Sprachauswahlfunktionalität. Wenn dies der Fall ist, wird die Antwort von @Egor bevorzugt. –

+1

Wenn Sie das Gebietsschema manuell auswählen, sollten Sie Locale.setDefault() aufrufen –

+1

Dies ist sehr wichtig, weil sonst Java-Bibliotheken das korrekte Gebietsschema nicht korrekt übernehmen. –

0

In Configuration.java gibt es:

/** 
* ... 
* @deprecated Do not set or read this directly. Use {@link #getLocales()} and 
* {@link #setLocales(LocaleList)}. If only the primary locale is needed, 
* <code>getLocales().get(0)</code> is now the preferred accessor. 
*/ 
@Deprecated public Locale locale; 
... 
configOut.mLocaleList = LocaleList.forLanguageTags(localesStr); 
configOut.locale = configOut.mLocaleList.get(0); 

Also im Grunde mit locale im Grunde liefert die primären locale die Benutzersätze. Die Antwortantwort funktioniert genauso wie das direkte Lesen von locale.

Dieses Gebietsschema ist jedoch nicht unbedingt das, das beim Abrufen von Ressourcen verwendet wird. Es kann das sekundäre Gebietsschema des Benutzers sein, wenn das primäre Gebietsschema nicht verfügbar ist.

Hier ist eine korrektere Version:

Resources resources = context.getResources(); 
Locale locale = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N 
     ? resources.getConfiguration().getLocales() 
      .getFirstMatch(resources.getAssets().getLocales()) 
     : resources.getConfiguration().locale;