Supporto Unicode e internazionalizzazione

Android sfrutta T.U. libreria e progetto CLDR per fornire Unicode e altre internazionalizzazioni assistenza in tempo reale. La discussione di questa pagina su Unicode e sul supporto dell'internazionalizzazione è divisa in due Android 6.0 (livello API 23) e versioni precedenti, e Android 7.0 (livello API 24) e versioni successive.

Unicode e supporto di internazionalizzazione tramite Android 6.0 (livello API 23)

La piattaforma Android utilizza IA e CLDR per implementare classi per la gestione di ortografia latine e non latine, esponendo classi come Locale, Character e molte sottoclassi java.text. Un'app che richiede funzionalità di internazionalizzazione oltre le classi esposte e sceglie come target le versioni della piattaforma tramite Android 6.0 (livello API 23), deve includere la libreria di ICU.

Controllo delle versioni

Le versioni successive della piattaforma Android corrispondono alle versioni più recenti di ICU e le versioni CLDR e Unicode corrispondenti. La tabella 1 mostra questa corrispondenza fino ad Android 6.0 (livello API 23).

Tabella 1. Versioni di ICU e CLDR utilizzate 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. Nella sezione successiva di questa pagina fornisce i dettagli sull'assistenza.

Unicode e supporto di 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 ampiamente utilizzato che fornisce e il supporto dell'internazionalizzazione delle applicazioni software.

Le API ICU4J utilizzano di localizzazione presenti sul dispositivo. Di conseguenza, puoi ridurre il numero di o non compilare le librerie ICU4J nell'app. Puoi invece richiamarli nel framework. In questo caso, è consigliabile fornire più versioni del tuo APK, in modo che gli utenti che utilizzano versioni di Android precedenti a Android 7.0 (livello API 24) può scaricare una versione dell'app che contiene le librerie ICU4J.

Questa sezione inizia fornendo alcune informazioni di base sul Livelli API Android necessari per supportare queste librerie. Viene poi spiegato cosa che devi conoscere sull'implementazione di ICU4J specifica per Android. Infine, spiega come usare le API ICU4J nel framework Android.

ICU4J su Android

Android espone un sottoinsieme delle API ICU4J tramite Pacchetto android.icu, anziché com.ibm.icu. Alcune Le API ICU4J non sono esposte dal framework Android, per motivi come la deprecazione delle API o non dichiarati stabili. Con il ritiro delle API da parte del team di terapia intensiva, in futuro, Anche Android li contrassegna come deprecati, ma continua a includerli.

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 Google Cloud.
  • In alcuni casi, il framework Android supporta più caratteri di delle librerie di ICU. Questo è vero, ad esempio, per la classe android.text il supporto per le emoji.

Esegui la migrazione al pacchetto android.icu da com.ibm.icu

Se utilizzi già le API ICU4J nella tua app e android.icu API soddisfano i tuoi requisiti, di cui verrà eseguita la migrazione a le API del framework richiedono la modifica delle importazioni Java dalle ore com.ibm.icu alle ore android.icu. Puoi quindi rimuovere la tua copia dei file ICU4J dall'app.

Nota: le API del framework ICU4J utilizzano lo standard android.icu anziché com.ibm.icu. Questo serve a evitare lo spazio dei nomi conflitti nelle app che contengono le proprie librerie com.ibm.icu.

Esegui la migrazione alle API android.icu da altre API SDK per Android

Alcuni corsi dei pacchetti java e android hanno equivalenti a quelli di ICU4J. Tuttavia, ICU4J offre spesso il supporto di standard e linguaggi.

La tabella 2 mostra alcuni esempi di queste equivalenze per iniziare:

Tabella 2.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 da con la release r22b dell'NDK. Nessuna API C++ viene esposta tramite l'NDK di Android. Alcune delle API C non sono disponibili.

Controllo delle versioni

Le versioni successive della piattaforma Android corrispondono alle versioni più recenti di ICU e le versioni CLDR e Unicode corrispondenti. La tabella 3 mostra questa corrispondenza a partire da Android 7.0 (livello API 24). Utilizza la API VersionInfo.ICU_VERSION (disponibile da Android 7.0) per ottenere la terapia intensiva le informazioni sulla versione 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) 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 formato 24h/12h

La terapia intensiva su Android non osserva l'impostazione del formato dell'ora di 24/12 ore dell'utente, ottenuta da DateFormat.is24HourFormat(). Per osservare questa impostazione, usa DateFormat oppure DateUtils metodi di formattazione dell'ora o utilizzare pattern di formattazione dell'ora di ICU con un pattern orario appropriato Simboli ("h" per 12 h, "H" per 24 h) per diversi valori di is24HourFormat() restituiscono valori. Ad esempio, questo codice genera una stringa con l'ora corrente che osserva l'impostazione 12/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), Transliterator per traslitterare il testo da un formato a un altro. L'insieme di traslitterazioni disponibili Gli ID sono instabili tra le release e i dispositivi di Android. I produttori di dispositivi potrebbero aggiungere gli ID di traslitterazione. 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 ICU guida dell'utente.