A partire da Android 7.0 (livello API 24), Android fornisce un supporto avanzato per gli utenti multilingue, consentendo loro di selezionare più impostazioni internazionali nelle impostazioni. Android offre questa funzionalità espandendo notevolmente il numero di impostazioni internazionali supportate e cambiando il modo in cui il sistema risolve le risorse.
Questo documento inizia spiegando la strategia di risoluzione delle risorse nelle versioni di Android precedenti alla 7.0 (livello API 24). Successivamente descrive la strategia migliorata di risoluzione delle risorse in Android 7.0. Infine, spiega come sfruttare il numero esteso di impostazioni internazionali per supportare un numero maggiore di utenti multilingue.
Sfide nella risoluzione delle risorse linguistiche
Prima di Android 7.0, Android non poteva sempre trovare corrispondenze con le impostazioni internazionali dell'app e del sistema.
Ad esempio, supponiamo che tu abbia la seguente situazione:
- La lingua predefinita dell'app è
en_US
(inglese americano) e ha anche stringhe spagnole localizzate ines_ES
file di risorse. - Un dispositivo è impostato su
es_MX
Quando il codice Java fa riferimento alle stringhe, il sistema carica le 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 rimuovendo il codice paese dalle impostazioni internazionali. Infine, se non viene trovata alcuna corrispondenza, il sistema torna al valore predefinito, ovvero en_US
.
Il sistema applicava anche la lingua en_US
per impostazione predefinita se l'utente sceglieva una lingua non supportata dall'app, ad esempio il francese. Ecco alcuni esempi:
impostazioni utente | Risorse per le app | Risoluzione delle risorse |
---|---|---|
fr_CH |
predefinito (en) de_DE es_ES fr_FR it_IT |
Prova fr_CH => Fail Prova fr => Fail Usa impostazione predefinita (en) |
In questo esempio, il sistema mostra le stringhe in inglese senza sapere se l'utente capisce l'inglese. Questo comportamento è piuttosto comune oggi.
Miglioramenti alla strategia di risoluzione delle risorse
Android 7.0 (livello API 24) offre una risoluzione delle risorse più solida e trova automaticamente i fallback migliori.
Tuttavia, per velocizzare la risoluzione e migliorare la gestibilità, devi archiviare le risorse nel dialetto padre più comune.
Ad esempio, se in precedenza archiviavi risorse in spagnolo nella directory values-es-rUS
, spostale nella directory values-b+es+419
, che contiene lo spagnolo latinoamericano.
Allo stesso modo, se in una directory denominata values-en-rGB
sono presenti stringhe di risorse, rinomina la directory in values-b+en+001
(inglese internazionale), perché l'elemento padre più comune per le stringhe en-GB
è 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, il caso descritto nella Tabella 1 viene risolto in modo diverso:
impostazioni utente | Risorse per le app | Risoluzione delle risorse |
---|---|---|
|
predefinito (en) de_DE es_ES fr_FR it_IT |
Prova fr_CH => Fail Prova fr => Fail Prova i figli di fr => fr_FR Usa fr_FR |
Ora l'utente riceve risorse in francese anziché in inglese. Questo esempio mostra anche
perché dovresti memorizzare le stringhe in francese in fr
anziché in fr_FR
per Android 7.0 o versioni successive. In questo caso, la soluzione è quella di utilizzare il dialetto padre più simile, rendendo la risoluzione più rapida e prevedibile.
Oltre a questa migliore logica di risoluzione, Android ora offre agli utenti più lingue tra cui scegliere. Proviamo di nuovo a utilizzare l'esempio precedente, specificando l'italiano come lingua utente aggiuntiva, ma senza il supporto dell'app per il francese.
impostazioni utente | Risorse per le app | Risoluzione delle risorse |
---|---|---|
|
predefinito (it) de_DE es_ES it_IT |
Prova fr_CH => Fail Prova fr => Fail Prova figli di fr => Fail Prova it_CH => Fail Prova => Fail Prova dai figli => it_IT Usalo_IT |
L'utente riceve comunque una lingua che comprende, anche se l'app non supporta il francese.
Progettazione dell'app per supportare ulteriori impostazioni internazionali
Android offre strumenti che semplificano la localizzazione dei contenuti delle app e il coinvolgimento degli utenti nelle lingue che preferiscono. Ti consigliamo di utilizzare le seguenti tecniche per configurare la tua app in modo che possa supportare lingue e convenzioni di formattazione diverse in modo scalabile.
Specificare le lingue supportate dalla tua app
Per assicurarti che le lingue siano risolte correttamente, specifica le lingue supportate dalla tua app utilizzando la proprietà resConfigs
nel file build.gradle
a livello di modulo.
Il seguente esempio di codice mostra come utilizzare resConfigs
per indicare le lingue supportate.
In questo esempio, l'app supporta sia l'inglese sia lo spagnolo.
Trendy
android { defaultConfig { ... resConfigs "en", "es" } }
Kotlin
android { defaultConfig { ... resConfigs("en", "es") } }
API LocaleList
A partire da Android 7.0 (livello API 24), Android espone l'API LocaleList.getDefault()
, che consente alle app di eseguire query direttamente sull'elenco delle lingue specificate da un utente. Questa API ti consente di creare un comportamento delle app più sofisticato e una visualizzazione migliore dei contenuti. Ad esempio, la Ricerca può mostrare risultati in più lingue a seconda delle impostazioni dell'utente. Le app browser possono evitare di proporre la traduzione di 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 una o due impostazioni internazionali per molte lingue comuni (en, es, ar, fr, ru). Poiché esistevano solo poche varianti di ogni lingua, le app potevano evitare l'archiviazione di alcuni numeri e date come stringhe hardcoded nei file di risorse. Tuttavia, con l'ampio insieme di impostazioni internazionali supportate da Android, possono esserci differenze significative nei formati di date, orari, valute e informazioni simili anche all'interno di un'unica impostazione internazionale. L'hardcoded dei formati può creare un'esperienza confusa per gli utenti finali. Pertanto, quando sviluppi per Android 7.0 o versioni successive, assicurati di utilizzare formattatori anziché 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 alcune preferiscono le cifre ASCII, mentre altre preferiscono le cifre native. Ad esempio, se vuoi creare una frase con una variabile di cifre, come "Scegli un PIN di 4 cifre", utilizza i formattatitori come mostrato di seguito:
format(locale, "Choose a %d-digit PIN", 4)