Android utilizza la libreria ICU e il progetto CLDR per il supporto di Unicode e altre funzionalità di internazionalizzazione. La spiegazione relativa al supporto di Unicode e dell'internazionalizzazione in questa pagina è suddivisa 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 dell'internazionalizzazione tramite Android 6.0 (livello API 23)
La piattaforma Android utilizza ICU e CLDR per implementare varie classi per la gestione dei caratteri latini e non latini, esponendo classi come Locale
, Character
e molte sottoclassi di java.text
. Un'app che richiede funzionalità di internazionalizzazione oltre
alle classi esposte e che ha come target versioni della piattaforma fino ad Android 6.0
(livello API 23) deve includere la libreria ICU.
Versioni
Le versioni successive della piattaforma Android corrispondono a versioni più recenti di ICU e alle versioni CLDR e Unicode corrispondenti. La Tabella 1 riporta la corrispondenza fino ad Android 6.0 (livello API 23).
Tabella 1. Versioni ICU e CLDR utilizzate fino ad Android 6.0 (livello API 23).
Piattaforma (livello API) | ICU | 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 l'internazionalizzazione per le app che hanno come target Android 7.0 (livello API 24) e versioni successive. La sezione seguente di questa pagina fornisce dettagli sul supporto.
Supporto di Unicode e dell'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 che gli sviluppatori di app possono utilizzare
nel pacchetto android.icu
.
ICU4J è un insieme di librerie Java open source ampiamente utilizzate che forniscono supporto di Unicode
e dell'internazionalizzazione per le applicazioni software.
Le API ICU4J utilizzano i dati di localizzazione presenti sul dispositivo. Di conseguenza, puoi ridurre le risorse occupate dalla tua app non compilando le librerie ICU4J. In alternativa, puoi richiamarle nel framework. Se lo fai, ti consigliamo di fornire più versioni del tuo APK, in modo che gli utenti che utilizzano versioni di Android precedenti ad Android 7.0 (livello API 24) possano scaricare una versione dell'app che contiene le librerie ICU4J.
Questa sezione fornisce alcune informazioni di base sui livelli API Android minimi richiesti per supportare queste librerie. Quindi spiega cosa devi sapere sull'implementazione specifica per Android di ICU4J. 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,
per motivi quali l'obsolescenza delle API
o la mancata dichiarazione di stabilità. Man mano che il team ICU ritirerà le API,
Android le contrassegnerà come ritirate, ma continuerà a includerle.
Ecco alcuni aspetti da tenere a mente:
- Le API del framework Android ICU4J non includono tutte le API 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 ICU. Questo vale, ad esempio, per il supporto delle emoji 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
. A questo punto, puoi
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
. per evitare conflitti di spazio dei nomi
nelle app che contengono librerie com.ibm.icu
proprie.
Esegui la migrazione alle API android.icu da altre API SDK Android
Alcune classi nei pacchetti java
e android
hanno
classi alternative a quelle in ICU4J. Tuttavia, ICU4J spesso offre un supporto maggiore per standard e lingue.
La tabella 2 mostra alcuni esempi di queste equivalenze per iniziare:
Tabella 2.Classi Android e Java ICU4J
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 delle 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 r22b dell'NDK.
Nessuna API C++ è esposta tramite l'NDK Android. Alcune API C non sono disponibili.
Versioni
Le versioni successive della piattaforma Android corrispondono a versioni più recenti di ICU
e alle versioni CLDR e Unicode corrispondenti. La Tabella 3 mostra la 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 le informazioni sulla versione di ICU
in fase di runtime.
Tabella 3. Versioni di ICU e CLDR utilizzate nelle versioni di Android da Android 7.0 (livello API 24) ad Android 15 (livello API 35).
Piattaforma (livello API) | ICU | CLDR | Unicode |
---|---|---|---|
Android 7.0-7.1 (API levels 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 (API level 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 a 24 ore/12 ore
ICU su Android non rispetta l'impostazione del formato dell'ora a 24 ore/12 ore dell'utente, ottenuta daDateFormat.is24HourFormat()
.
Per rispettare questa impostazione, utilizza i metodi di formattazione dell'ora
DateFormat
o
DateUtils
o pattern di formattazione dell'ora ICU con i simboli di pattern dell'ora appropriati ("h" per 12 ore, "H" per 24 ore) per i 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 traslitteratore
A partire da Android 10 (livello API 29),Transliterator
viene fornito per traslitterare il testo da un formato a un altro. L'insieme di ID traslitterazione
disponibili è instabile nelle versioni e nei dispositivi Android. I produttori di dispositivi potrebbero aggiungere ulteriori ID traslitterazione. Gli sviluppatori devono controllare gli ID disponibili, ottenuti da
Transliterator.getAvailableIDs()
,
prima di traslitterare il testo.
Licenze
ICU4J viene rilasciato con licenza ICU. Per maggiori dettagli, consulta la guida dell'utente di ICU.