In Configuration.java
, c'è:
/**
* ...
* @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);
Quindi, in pratica utilizzando locale
restituisce sostanzialmente l'impostazione internazionale primario l'utente imposta. La risposta di accettazione fa esattamente la stessa cosa che legge direttamente locale
.
Tuttavia, questo locale non è necessariamente quello utilizzato quando si ricevono le risorse. Potrebbe essere la locale secondaria dell'utente se la locale principale non è disponibile.
Ecco una versione più corretta:
Resources resources = context.getResources();
Locale locale = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
? resources.getConfiguration().getLocales()
.getFirstMatch(resources.getAssets().getLocales())
: resources.getConfiguration().locale;
Ciò restituirà solo il locale specificato nelle impostazioni di sistema. Molte app hanno la propria funzionalità di selezione della lingua. Se questo è il caso, allora la risposta di @Egor è preferita. –
Se si seleziona manualmente la locale, è necessario chiamare Locale.setDefault() –
Ciò è molto importante, poiché altrimenti le librerie Java non rilevano correttamente la corretta Locale. –