A partire da Android 7.0 (livello API 24), Android offre un supporto avanzato per gli utenti multilingue, consentendo di selezionare più impostazioni internazionali nelle impostazioni. Android offre questa funzionalità, ampliando notevolmente il numero di impostazioni internazionali supportate e la modifica del modo in cui il sistema risolve le risorse.
Questo documento inizia spiegando la strategia di risoluzione delle risorse versioni di Android precedenti alla 7.0 (livello API 24). Quindi descrive la strategia di risoluzione delle risorse migliorata in Android 7.0. Infine, spiega come sfruttare il numero ampliato di lingue per supportare un numero maggiore di utenti multilingue.
Sfide nella risoluzione delle risorse linguistiche
Prima di Android 7.0, Android non poteva essere sempre che corrispondano alle impostazioni internazionali dell'app e del sistema.
Ad esempio, supponiamo che tu abbia la seguente situazione:
- La lingua predefinita della tua app è
en_US
(inglese americano) e ha anche Stringhe in spagnolo localizzate ines_ES
di risorse. - Un dispositivo è impostato su
es_MX
Quando il codice Java si riferisce alle stringhe, il sistema carica
stringhe dal file di risorse predefinito (en_US
), anche se l'app ha
Risorse in spagnolo localizzate in es_ES
. Questo perché quando il sistema
non riesce a trovare una corrispondenza esatta, continua a cercare risorse eliminando
codice paese non selezionato per le impostazioni internazionali. Infine, se non trova corrispondenze, il sistema
il valore predefinito, en_US
.
Il sistema imposterebbe automaticamente anche en_US
se l'utente scegliesse una lingua che
non supportava affatto l'app, ad esempio il francese. Ad esempio:
Impostazioni utente | Risorse app | Risoluzione delle risorse |
---|---|---|
fr_CH |
predefinita (it) de_DE es_ES fr_FR it_IT |
Prova fr_CH => Non superato Prova fr => Non superato Usa predefinita (en) |
In questo esempio, il sistema visualizza le stringhe in inglese senza sapendo se l'utente capisce l'inglese. Questo comportamento è piuttosto comune oggi stesso.
Miglioramenti alla strategia per la risoluzione delle risorse
Android 7.0 (livello API 24) offre una risoluzione delle risorse più solida.
automaticamente i fallback migliori.
Tuttavia, per velocizzare la risoluzione e migliorare
manutenibilità, dovresti archiviare le risorse nel dialetto padre più comune.
Ad esempio, se archivi risorse in spagnolo
nella directory values-es-rUS
prima di spostarli nella directory values-b+es+419
,
che contiene lo spagnolo latinoamericano.
Analogamente, se disponi di stringhe di risorse in
directory denominata values-en-rGB
, rinomina
la directory in values-b+en+001
(internazionale
inglese), perché la più comune
l'elemento padre per en-GB
stringhe è en-001
.
I seguenti esempi spiegano perché queste pratiche migliorano le prestazioni e
l'affidabilità della risoluzione delle risorse.
Esempi di risoluzione delle risorse
Con versioni di Android successive alla 7.0, la custodia descritta in La tabella 1 viene risolta in modo diverso:
Impostazioni utente | Risorse app | Risoluzione delle risorse |
---|---|---|
|
predefinita (it) de_DE es_ES fr_FR it_IT |
Prova fr_CH => Non superato Prova fr => Non superato Prova i figli di fr => fr_FR Utilizza fr_FR |
Ora l'utente può accedere a risorse in francese anziché in inglese. Questo esempio mostra anche
perché dovresti archiviare stringhe francesi in fr
anziché in fr_FR
per Android 7.0 o versioni successive. Il piano d'azione è
in modo che corrispondano al dialetto padre più vicino,
rendendo la risoluzione più rapida e prevedibile.
Oltre a questa migliore logica di risoluzione, Android ora offre lingue degli utenti tra cui scegliere. Riproviamo con l'esempio precedente specificata come lingua dell'utente aggiuntiva, ma senza il supporto dell'app per il francese.
Impostazioni utente | Risorse app | Risoluzione delle risorse |
---|---|---|
|
predefinita (it) de_DE es_ES it_IT |
Prova fr_CH => Non superato Prova fr => Non superato Prova i figli di fr => Non superato Provalo_CH => Non superato Prova => Non superato Prova i figli => it_IT Usala_IT |
L'utente scopre comunque un linguaggio che lo capisce, anche se l'app non il francese.
Progettare l'app per supportare altre lingue
Android offre strumenti che semplificano la localizzazione dei contenuti dell'app e il coinvolgimento degli utenti lingue preferite. Ti consigliamo di utilizzare le seguenti tecniche per configurare la tua app in modo che possa si adattano a lingue e convenzioni di formattazione diverse, in modo scalabile.
Specifica le lingue supportate dalla tua app
Per assicurarti che le lingue vengano risolte correttamente, specifica le lingue supportate dalla tua app utilizzando la
resConfigs
nel file build.gradle
a livello di modulo.
Il seguente esempio di codice mostra come utilizzare resConfigs
per indicare i linguaggi supportati.
In questo esempio, l'app supporta sia l'inglese sia lo spagnolo.
Alla moda
android { defaultConfig { ... resConfigs "en", "es" } }
Kotlin
android { defaultConfig { ... resConfigs("en", "es") } }
API LocaleList
A partire da Android 7.0 (livello API 24), Android espone
API LocaleList.getDefault()
che consente alle app di eseguire query direttamente sull'elenco di lingue specificate dall'utente. Questa API
consente di creare modelli
comportamento dell'app e una visualizzazione dei contenuti più ottimizzata. Ad esempio, Ricerca
può mostrare i risultati in più lingue in base alle impostazioni dell'utente. App browser
evitare di proporsi di tradurre le pagine in una lingua che l'utente già conosce,
e le app per tastiera possono attivare automaticamente tutti i layout appropriati.
Formattatori
Fino ad Android 6.0 (livello API 23), Android supportava solo uno o due impostazioni internazionali per molte lingue comuni (en, es, ar, fr, ru). Poiché c'erano solo poche varianti di ogni lingua, le app potrebbero riuscire a memorizzare alcuni numeri e date come stringhe hardcoded nei file di risorse. Tuttavia, con l'ampia gamma di tecnologie di Android diverse impostazioni internazionali, differenze significative nei formati per date, orari, valute e simili anche all'interno di una singola lingua. Con l'hardcoded dei formati puoi produrre un'esperienza poco chiara per gli utenti finali. Pertanto, per lo sviluppo di Android 7.0 o versioni successive, assicurati di usare formattatori al posto di numeri hardcoded e stringhe di date.
Ad esempio, Android 7.0 e versioni successive include il supporto per 27 lingue arabe. Queste impostazioni internazionali possono condividere la maggior parte delle risorse, ma alcuni preferiscono le cifre ASCII, mentre altri preferiscono le cifre native. Ad esempio: quando vuoi creare una frase con una variabile numerica, come "Scegli un PIN di 4 cifre", utilizza i formati come mostrato di seguito:
format(locale, "Choose a %d-digit PIN", 4)