Android memanfaatkan library ICU dan project CLDR untuk menyediakan dukungan Unicode dan internasionalisasi lainnya. Pembahasan halaman ini mengenai dukungan Unicode dan internasionalisasi dibagi menjadi dua: Android 6.0 (API level 23) ke bawah, dan Android 7.0 (API level 24) ke atas.
Dukungan Unicode dan internasionalisasi hingga Android 6.0 (API level 23)
Platform Android menggunakan ICU dan CLDR untuk menerapkan berbagai class guna menangani ortografi Latin dan non-Latin, mengekspos class seperti Locale
, Character
, dan berbagai subclass java.text
. Aplikasi yang memerlukan fungsi internasionalisasi di luar
class yang diekspos, dan menargetkan versi platform hingga Android 6.0
(API level 23), harus menyertakan library ICU.
Pembuatan versi
Setiap rilis platform Android baru disertai dengan versi ICU yang lebih baru serta versi CLDR dan Unicode yang terkait. Tabel 1 menunjukkan keterkaitan ini hingga Android 6.0 (API level 23).
Platform (level API) | ICU | CLDR | Unicode |
---|---|---|---|
Android 1.5–2.0 (API level 3–7) | 3.8 | 1.5 | 5.0 |
Android 2.2 (API level 8) | 4.2 | 1.7 | 5.1 |
Android 2.3–3.0 (API level 9–13) | 4.4 | 1.8 | 5.2 |
Android 4.0 (API level 14–15) | 4.6 | 1.9 | 6.0 |
Android 4.1 (API level 16–17) | 4.8 | 2.0 | 6.0 |
Android 4.3 (API level 18) | 50 | 22.1 | 6.2 |
Android 4.4 (API level 19–20) | 51 | 23 | 6.2 |
Android 5.0 (API level 21–22) | 53 | 25 | 6.3 |
Android 6.0 (API level 23) | 55.1 | 27.0.1 | 7.0 |
Framework Android memberikan dukungan yang lebih komprehensif untuk Unicode dan internasionalisasi aplikasi yang menargetkan Android 7.0 (API level 24) dan versi lebih tinggi. Bagian dokumen berikutnya menguraikan detail tentang dukungan tersebut.
Dukungan Unicode dan internasionalisasi di Android 7.0 (API level 24) dan versi lebih tinggi
Untuk Android 7.0 (API level 24) dan versi lebih tinggi, platform Android
menampilkan subset ICU4J API yang dapat digunakan oleh developer aplikasi
dalam paket android.icu
.
ICU4J adalah set library Java open source yang banyak digunakan, serta menyediakan dukungan Unicode
dan internasionalisasi untuk aplikasi perangkat lunak.
ICU4J API menggunakan data pelokalan yang ada di perangkat. Hasilnya, Anda dapat mengurangi jejak aplikasi Anda dengan tidak mengompilasi library ICU4J ke aplikasi Anda. Sebaliknya, Anda malah dapat memanggilnya dalam framework. Jika melakukannya, Anda mungkin menyediakan beberapa versi APK agar pengguna yang menjalankan versi Android lebih rendah dari Android 7.0 (API level 24) dapat mendownload versi aplikasi yang berisi library ICU4J.
Bagian ini dimulai dengan beberapa informasi dasar tentang level minimum Android API yang diperlukan untuk mendukung library ini. Dokumen ini kemudian menjelaskan semua yang perlu Anda ketahui tentang penerapan ICU4J spesifik Android. Terakhir, dokumen ini memberi tahu Anda cara menggunakan ICU4J API dalam framework Android.
ICU4J di Android
Android mengekspos subset ICU4J API melalui
paket android.icu
, bukan com.ibm.icu
. Beberapa
ICU4J API tidak diekspos oleh framework Android
karena beberapa alasan seperti API tidak digunakan lagi
atau tidak dideklarasikan sebagai stabil. Apabila tim ICU menghentikan API di masa mendatang,
Android juga akan menandainya sebagai tidak digunakan lagi, tetapi akan terus menyertakannya.
Berikut beberapa pengingat:
- API framework Android ICU4J tidak menyertakan semua ICU4J API.
- API dalam framework Android tidak menggantikan dukungan Android untuk melakukan pelokalan dengan resource.
- Dalam beberapa kasus, framework Android mendukung lebih banyak karakter daripada
library ICU. Hal ini berlaku, misalnya, dukungan
class
android.text
untuk emoji.
Melakukan migrasi ke paket android.icu dari com.ibm.icu
Jika sudah menggunakan ICU4J API dalam aplikasi, dan
android.icu
API dapat memenuhi persyaratan Anda, melakukan migrasi ke
API framework tersebut akan mengharuskan Anda mengubah impor Java
dari com.ibm.icu
ke android.icu
. Anda kemudian dapat
menghapus salinan file ICU4J milik sendiri dari APK.
Catatan: ICU4J framework API menggunakan namespace
android.icu
, bukan com.ibm.icu
. Hal ini dilakukan untuk menghindari konflik
ruang nama dalam APK yang memuat library com.ibm.icu
miliknya sendiri.
Melakukan migrasi ke android.icu API dari Android SDK API lain
Beberapa class dalam paket java
dan android
memiliki
padanan dengan yang ada dalam ICU4J. Namun, ICU4J biasanya memberikan dukungan
yang lebih luas untuk standar dan bahasa.
Tabel 2 menunjukkan beberapa contoh padanan ini untuk membantu Anda memulai:
Class | Alternatif |
---|---|
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 di Android
Android mengekspos subset ICU4C API melalui library libicu.so
,
bukan libicuuc.so
atau libicui18n.so
. API ini tersedia
mulai dari Android 12 (API level 31). Header NDK tersedia mulai dari
rilis NDK r22b.
Tidak ada API C++ yang terekspos melalui Android NDK. Beberapa API C tidak tersedia.
Pembuatan versi
Setiap rilis platform Android baru disertai dengan versi ICU
yang lebih baru serta versi CLDR dan Unicode yang terkait. Tabel 3 menunjukkan keterkaitan ini dimulai dari Android 7.0 (API level 24). Gunakan
VersionInfo.ICU_VERSION
API (tersedia sejak Android 7.0) untuk mendapatkan informasi
versi ICU saat runtime.
Platform (level API) | ICU | CLDR | Unicode |
---|---|---|---|
Android 7.0 - 7.1 (API level 24 - 25) | 56 | 28 | 8.0 |
Android 8.0 - 8.1 (API level 26 - 27) | 58.2 | 30.0.3 | 9.0 |
Android 9 (API level 28) | 60.2 | 32.0.1 | 10.0 |
Android 10 (API level 29) | 63.2 | 34 | 11.0 |
Android 11 (API level 30) | 66.1 | 36 | 13.0 |
Android 12 (API level 31 - 32) | 68.2 | 38.1 | 13.0 |
Android 13 (API level 33) | 70,1 | 40 | 14,0 |
Android 14 (level API 34) | 72,1 | 42 | 15,0 |
Android 15 (API level 35) | 75,1 | 45 | 15.1 |
Setelan format waktu 24 jam/12 jam
ICU di Android tidak mengamati setelan format waktu 24 jam/12 jam pengguna yang diperoleh dariDateFormat.is24HourFormat()
.
Untuk mengamati setelan ini, gunakan metode pemformatan waktu
DateFormat
atau
DateUtils
atau gunakan pola pemformatan waktu ICU dengan simbol
pola jam ('h' selama 12 jam, 'H' selama 24 jam) untuk nilai is24HourFormat()
yang berbeda.
Misalnya, kode berikut menghasilkan string dengan waktu saat ini yang mengikuti setelan 12 jam/24 jam pengguna:
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());
Stabilitas Transliterator
Dimulai dari Android 10 (API level 29),Transliterator
disediakan untuk mentransliterasi teks dari satu format ke format lainnya. Set ID transliterasi yang tersedia
tidak cukup stabil di seluruh rilis dan perangkat Android. Produsen perangkat dapat menambahkan
ID transliterasi tambahan. Developer harus memeriksa ID yang tersedia, yang diperoleh dari
Transliterator.getAvailableIDs()
,
sebelum mentransliterasi teks.
Pemberian (hak) lisensi
ICU4J dirilis dengan lisensi ICU. Untuk mengetahui detailnya, lihat Panduan pengguna ICU.