2016-02-23 19 views
7

Esiste un modo per far sì che System appaia localmente dal dispositivo Android. Ho provato con getAvailableLocales() da android Get Available locales, ma non funziona per dispositivi come Asus, Carbon, Lava, Intex.Android Come ottenere le versioni locali installate del sistema

Per esempio, se io chiamo getAvailableLocales() nel dispositivo Nexus io sono in grado di ottenere quei locale che c'è in Settings-> Language&Input -> Language

Ma se faccio lo stesso su qualsiasi dispositivo di carbonio, invece di ottenere lingue da Settings-> Language&Input -> Language, ho un diverso elenco.

Desidero solo l'elenco di lingue installato nel dispositivo, non tutte le lingue supportate dal sistema operativo.

+1

può espandere su cosa si intende per "non funziona" per i dispositivi? Sta semplicemente restituendo un array vuoto, un array con _only_ 'Locale.US', si sta arrestando in modo anomalo, non sta restituendo le localizzazioni che ci si aspetta siano disponibili? –

+0

Ho aggiornato la mia domanda, per favore controlla –

+0

Ok, posso chiedere _perchè_ hai bisogno dei locali? Dovresti mostrare le cose con qualsiasi localizzazione che il tuo utente ha selezionato (cioè le impostazioni locali predefinite) e scrivere in rete o qualsiasi cosa con 'Locale.US', come [documentato nei documenti 'Locale'] (https://developer.android.com/reference/java/util/Locale.html). Ricordo qualcosa di simile a te (locales! = Lingue installate), anche se non sono sicuro di cosa stia succedendo. –

risposta

3

Se vuoi sistema supportato locali, utilizzare

Locale.getAvailableLocales() 

Se vuoi sistema supportato e dispositivo abilitato locali

Resources.getSystem().getAssets().getLocales() 

Utilizzando il primo, non si può essere sicuri di se sono supportate tutte le lingue da quel dispositivo. Perché sono venuti tutti con quella ROM Android.

Ma quest'ultimo è sempre un colpo sicuro. Causa fornisce solo le impostazioni locali (tipi di carattere) per quel particolare dispositivo. Queste impostazioni locali (caratteri) vengono posizionate dal produttore del dispositivo.

ho spiegato più in here

5

Il metodo Locale.getAvailableLocales() è il set di base "locale" generico. Dalla documentazione:

maggior parte delle classi locale-sensibili offrono loro getAvailableLocales metodo, che dovrebbe essere preferito su questo metodo di uso generale.

Enfasi mia.

È possibile ottenere le versioni locali disponibili per un caso d'uso specifico interrogando il metodo getAvailableLocales() sulla classe appropriata. In particolare:

+0

Ho aggiornato la mia domanda, per favore controlla –