Panoramica della risoluzione delle lingue e delle impostazioni internazionali

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 in es_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:

Tabella 1. Risoluzione della risorsa senza una corrispondenza esatta delle impostazioni internazionali.

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:

Tabella 2. Una strategia di risoluzione migliorata per quando non c'è la corrispondenza esatta delle impostazioni internazionali.

Impostazioni utente Risorse app Risoluzione delle risorse
  1. fr_CH
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.

Tabella 3. Risoluzione delle risorse quando l'app corrisponde solo alla la seconda impostazione locale preferita dell'utente.

Impostazioni utente Risorse app Risoluzione delle risorse
  1. fr_CH
  2. it_CH
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")
    }
}
Dato il modo in cui il sistema di compilazione unisce le risorse della tua app e delle sue dipendenze, devi specificare le lingue supportate in questo modo per garantire che le impostazioni della lingua dell'utente vengano ricevute correttamente.

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)