Android sfrutta la libreria ICU e il progetto CLDR per fornire il supporto di Unicode e di altre funzionalità di internazionalizzazione. La discussione su Unicode e sul supporto dell'internazionalizzazione in questa pagina è divisa in due sezioni: Android 6.0 (livello API 23) e versioni precedenti e Android 7.0 (livello API 24) e versioni successive.
Supporto di Unicode e internazionalizzazione fino ad Android 6.0 (livello API 23)
La piattaforma Android utilizza ICU e CLDR per implementare varie
classi per la gestione di ortografie sia latine che non latine, esponendo classi
come Locale
, Character
e molte sottoclassi di
java.text
. Un'app che richiede funzionalità di internazionalizzazione oltre alle classi esposte e ha come target le versioni della piattaforma fino ad Android 6.0 (livello API 23) deve includere la libreria ICU.
Controllo delle versioni
Le release successive della piattaforma Android corrispondono alle versioni più recenti di ICU e alle versioni CLDR e Unicode corrispondenti. La tabella 1 mostra questa corrispondenza fino ad Android 6.0 (livello API 23).
Piattaforma (livello API) | T.I. | CLDR | Unicode |
---|---|---|---|
Android 1.5-2.0 (livelli API 3-7) | 3,8 | 1.5 | 5,0 |
Android 2.2 (livello API 8) | 4.2 | 1,7 | 5.1 |
Android 2.3-3.0 (livelli API 9-13) | 4,4 | 1,8 | 5.2 |
Android 4.0 (livelli API 14-15) | 4,6 | 1,9 | 6.0 |
Android 4.1 (livelli API 16-17) | 4,8 | 2,0 | 6.0 |
Android 4.3 (livello API 18) | 50 | 22,1 | 6.2 |
Android 4.4 (livelli API 19-20) | 51 | 23 | 6.2 |
Android 5.0 (livelli API 21-22) | 53 | 25 | 6.3 |
Android 6.0 (livello API 23) | 55,1 | 27.0.1 | 7,0 |
Il framework Android offre un supporto più completo per Unicode e internazionalizzazione per le app che hanno come target Android 7.0 (livello API 24) e versioni successive. La sezione successiva di questa pagina fornisce dettagli su questo supporto.
Supporto di Unicode e internazionalizzazione in Android 7.0 (livello API 24) e versioni successive
Per Android 7.0 (livello API 24) e versioni successive, la piattaforma Android
espone un sottoinsieme delle API ICU4J per gli sviluppatori di app
da utilizzare nel pacchetto android.icu
.
ICU4J è un set di librerie Java open source e ampiamente utilizzato che fornisce supporto per Unicode e internazionalizzazione per le applicazioni software.
Le API ICU4J utilizzano i dati di localizzazione presenti sul dispositivo. Di conseguenza, puoi ridurre l'impronta della tua app non compilando le librerie ICU4J al suo interno. Puoi invece richiamarle nel framework. In questo caso, potresti fornire più versioni dell'APK, in modo che gli utenti con versioni di Android precedenti ad Android 7.0 (livello API 24) possano scaricare una versione dell'app contenente le librerie ICU4J.
Questa sezione inizia fornendo alcune informazioni di base sui livelli minimi dell'API Android richiesti per supportare queste librerie. Viene quindi spiegato cosa devi sapere sull'implementazione di ICU4J specifica per Android. Infine, spiega come utilizzare le API ICU4J nel framework Android.
ICU4J su Android
Android espone un sottoinsieme delle API ICU4J tramite il
pacchetto android.icu
, anziché com.ibm.icu
. Alcune API ICU4J non sono esposte dal framework Android, ad esempio perché sono state ritirate o non sono state dichiarate stabili. Quando il team ICU ritira le API in futuro,
Android le contrassegna come ritirate, ma continua a includerle.
Ecco alcuni promemoria:
- Le API del framework Android ICU4J non includono tutte le API di ICU4J.
- Le API nel framework Android non sostituiscono il supporto di Android per la localizzazione con le risorse.
- In alcuni casi, il framework Android supporta più caratteri
rispetto alle librerie di terapia intensiva. Questo è vero, ad esempio, per il supporto delle emoji da parte della classe
android.text
.
Esegui la migrazione al pacchetto android.icu da com.ibm.icu
Se utilizzi già le API ICU4J nella tua app e le
API android.icu
soddisfano i tuoi requisiti, la migrazione alle
API del framework richiede la modifica delle importazioni Java
da com.ibm.icu
a android.icu
. Puoi quindi rimuovere la tua copia dei file ICU4J dall'app.
Nota: le API del framework ICU4J utilizzano lo spazio dei nomi android.icu
anziché com.ibm.icu
. Questo consente di evitare conflitti dello spazio dei nomi nelle app che contengono le proprie librerie com.ibm.icu
.
Eseguire la migrazione alle API android.icu da altre API dell'SDK Android
Alcune classi nei pacchetti java
e android
hanno
equivalenti a quelle presenti in ICU4J. Tuttavia, ICU4J spesso offre un supporto più ampio per standard e lingue.
La tabella 2 mostra alcuni esempi di queste equivalenze per iniziare:
Classe | Alternative |
---|---|
java.lang.Character |
android.icu.lang.UCharacter |
java.text.BreakIterator |
android.icu.text.BreakIterator |
java.text.DecimalFormat |
android.icu.text.DecimalFormat |
java.util.Calendar |
android.icu.util.Calendar |
android.text.BidiFormatter
|
android.icu.text.Bidi
|
android.text.format.DateFormat
|
android.icu.text.DateFormat
|
android.text.format.DateUtils |
android.icu.text.DateFormat
android.icu.text.RelativeDateTimeFormatter
|
ICU4C su Android
Android espone un sottoinsieme di API ICU4C tramite la libreria libicu.so
,
anziché libicuuc.so
o libicui18n.so
. Le API sono disponibili
a partire da Android 12 (livello API 31). Le intestazioni NDK sono disponibili a partire dalla release NDK r22b.
Nessun'API C++ è esposta tramite Android NDK. Alcune API C non sono disponibili.
Controllo delle versioni
Le release successive della piattaforma Android corrispondono alle versioni più recenti di ICU
e alle versioni CLDR e Unicode corrispondenti. La Tabella 3 mostra questa corrispondenza
a partire da Android 7.0 (livello API 24). Utilizza l'API
VersionInfo.ICU_VERSION
(disponibile a partire da Android 7.0) per ottenere informazioni sulla versione di ICU in fase di runtime.
Piattaforma (livello API) | T.I. | CLDR | Unicode |
---|---|---|---|
Android 7.0-7.1 (livelli API 24-25) | 56 | 28 | 8.0 |
Android 8.0 - 8.1 (livelli API 26 - 27) | 58,2 | 30.0.3 | 9.0 |
Android 9 (livello API 28) | 60,2 | 32.0.1 | 10,0 |
Android 10 (livello API 29) | 63,2 | 34 | 11.0 |
Android 11 (livello API 30) | 66,1 | 36 | 13,0 |
Android 12 (livello API 31-32) | 68,2 | 38,1 | 13,0 |
Android 13 (livello API 33) | 70,1 | 40 | 14,0 |
Android 14 (livello API 34) | 72,1 | 42 | 15,0 |
Android 15 (livello API 35) | 75,1 | 45 | 15.1 |
Impostazione del formato dell'ora 24 ore/12 ore
La terapia intensiva su Android non osserva l'impostazione del formato dell'ora di 24/12 ore dell'utente, ottenuta daDateFormat.is24HourFormat()
.
Per osservare questa impostazione, utilizza i metodi di formattazione dell'ora
DateFormat
o
DateUtils
oppure utilizza i pattern di formattazione dell'ora di T.I. con i simboli dei pattern dell'ora appropriati
("h" per 12 h, "H" per 24 h) per diversi valori restituiti di is24HourFormat()
.
Ad esempio, questo codice genera una stringa con l'ora corrente che rispetta l'impostazione 12 ore/24 ore dell'utente:
Kotlin
val skeleton: String = if (DateFormat.is24HourFormat(context)) "Hm" else "hm" val formattedTime: String = android.icu.text.DateFormat.getInstanceForSkeleton( skeleton, Locale.getDefault()).format(Date() )
Java
String skeleton = DateFormat.is24HourFormat(context) ? "Hm" : "hm"; String formattedTime = android.icu.text.DateFormat.getInstanceForSkeleton(skeleton, Locale.getDefault()).format(new Date());
Stabilità del trasliteratore
A partire da Android 10 (livello API 29), è disponibileTransliterator
per eseguire la traslitterazione del testo da un formato a un altro. L'insieme di ID di traslitterazione disponibili è instabile nelle release e nei dispositivi Android. I produttori di dispositivi potrebbero aggiungere ID di traslitterazione aggiuntivi. Gli sviluppatori devono controllare gli ID disponibili, ottenuti da
Transliterator.getAvailableIDs()
,
prima di traslitterare il testo.
Gestione licenze
ICU4J viene rilasciato con licenza per T.I. Per maggiori dettagli, consulta la guida dell'utente di ICU.