Android, Unicode ve diğer uluslararasılaştırma desteğini sağlamak için ICU kitaplığını ve CLDR projesinden yararlanır. Bu sayfada Unicode ve uluslararasılaştırma desteği ile ilgili açıklamalar iki bölüme ayrılmıştır: Android 6.0 (API düzeyi 23) ve önceki sürümler ile Android 7.0 (API düzeyi 24) ve sonraki sürümler.
Android 6.0 (API düzeyi 23) ile Unicode ve uluslararasılaştırma desteği
Android platformu, hem Latin hem de Latin olmayan ortografileri işlemek ve Locale
, Character
gibi sınıfları ve java.text
öğesinin birçok alt sınıfını açığa çıkarmak için çeşitli sınıfları uygulamak üzere ICU ve CLDR'yi kullanır. Açığa çıkan sınıfların dışında uluslararası hale getirme işlevleri gerektiren ve Android 6.0 (API düzeyi 23) ile platformun sürümlerini hedefleyen uygulamalarda ICU kitaplığı bulunmalıdır.
Sürüm oluşturma
Android platformunun ardışık sürümleri, ICU'nun daha yeni sürümlerine ve ilgili CLDR ile Unicode sürümlerine karşılık gelir. Tablo 1'de bu yazışma Android 6.0 (API düzeyi 23) üzerinden gösterilmektedir.
Platform (API düzeyi) | yoğun bakım ünitesi | CLDR | Unicode |
---|---|---|---|
Android 1.5–2.0 (API düzeyleri 3-7) | 3,8 | 1,5 | 5,0 |
Android 2.2 (API düzeyi 8) | 4,2 | 1,7 | 5.1 |
Android 2.3–3.0 (API düzeyleri 9-13) | 4.4 | 1,8 | 5.2 |
Android 4.0 (API düzeyleri 14-15) | 4.6 | 1,9 | 6.0 |
Android 4.1 (API düzeyleri 16-17) | 4.8 | 2,0 | 6.0 |
Android 4.3 (API düzeyi 18) | 50 | 22.1. | 6.2 |
Android 4.4 (API düzeyleri 19-20) | 51 | 23 | 6.2 |
Android 5.0 (API düzeyleri 21-22) | 53) | 25 | 6,3 |
Android 6.0 (API düzeyi 23) | 55,1 | 27.0.1 | 7,0 |
Android çerçevesi, Android 7.0 (API düzeyi 24) ve sonraki sürümleri hedefleyen uygulamalar için Unicode ve uluslararasılaştırma için daha kapsamlı destek sağlar. Bu sayfanın bir sonraki bölümünde bu destekle ilgili ayrıntılar verilmiştir.
Android 7.0 (API düzeyi 24) ve sonraki sürümlerde Unicode ve uluslararasılaştırma desteği
Android platformu, Android 7.0 (API düzeyi 24) ve sonraki sürümlerde uygulama geliştiricilerin android.icu
paketi kapsamında kullanması için ICU4J API'lerinin bir alt kümesini sunar.
ICU4J, yazılım uygulamaları için Unicode ve uluslararasılaştırma desteği sağlayan açık kaynaklı ve yaygın bir şekilde kullanılan Java kitaplıkları setidir.
ICU4J API'leri, cihazda bulunan yerelleştirme verilerini kullanır. Sonuç olarak, ICU4J kitaplıklarını uygulamanızda derlemeyerek uygulamanızın ayak izini azaltabilirsiniz. Bunun yerine, bu kitaplıkları çerçeve içinde çağırabilirsiniz. Bunu yaparsanız APK'nızın birden fazla sürümünü sağlamak isteyebilirsiniz. Böylece Android 7.0'dan (API düzeyi 24) daha düşük Android sürümlerini çalıştıran kullanıcılar, uygulamanın ICU4J kitaplıklarını içeren bir sürümünü indirebilir.
Bu bölüm, bu kitaplıkları desteklemek için gereken minimum Android API düzeyleri hakkında bazı temel bilgilerin sağlanmasıyla başlar. Ardından, ICU4J'nin Android'e özgü uygulaması hakkında bilmeniz gerekenler açıklanır. Son olarak da ICU4J API'lerinin Android çerçevesinde nasıl kullanılacağını anlatır.
Android'de ICU4J
Android, com.ibm.icu
yerine android.icu
paketi aracılığıyla ICU4J API'lerinin bir alt kümesini gösterir. Bazı ICU4J API'leri, API'lerin kullanımdan kaldırılması veya kararlı olarak bildirilmemesi gibi nedenlerle Android çerçevesi tarafından kullanıma sunulmaz. ICU ekibi API'leri gelecekte kullanımdan kaldırdığında Android de bu API'leri desteği sonlandırıldı olarak işaretlese de eklemeye devam ediyor.
Aşağıda birkaç hatırlatma bulabilirsiniz:
- ICU4J Android çerçevesi API'leri tüm ICU4J API'lerini içermez.
- Android çerçevesindeki API'ler, Android'in kaynaklarla yerelleştirme desteğinin yerini almaz.
- Bazı durumlarda Android çerçevesi, ICU kitaplıklarının desteklediğinden daha fazla karakteri destekler. Bu durum, örneğin
android.text
sınıfının emoji desteği için de geçerlidir.
com.ibm.icu'dan android.icu paketine taşıyın
Uygulamanızda zaten ICU4J API'leri kullanıyorsanız ve android.icu
API'leri gereksinimlerinizi karşılıyorsa çerçeve API'lerine geçiş yapmak için Java içe aktarmalarınızı com.ibm.icu
yerine android.icu
olarak değiştirmeniz gerekir. Ardından, size ait ICU4J dosyası kopyasını uygulamadan kaldırabilirsiniz.
Not: ICU4J çerçeve API'leri, com.ibm.icu
yerine android.icu
ad alanını kullanır. Bunun nedeni, kendi com.ibm.icu
kitaplıklarını içeren uygulamalarda ad alanı çakışmalarını önlemektir.
Diğer Android SDK API'lerinden android.icu API'lerine geçiş yapın
java
ve android
paketlerindeki bazı sınıflar, ICU4J'de bulunan sınıflara eşdeğerdir. Ancak ICU4J genellikle standartlar ve diller için daha kapsamlı destek sağlar.
Tablo 2'de, başlangıç aşamasında bu eş değer değerlere ilişkin bazı örnekler verilmiştir:
Sınıf | Alternatifler |
---|---|
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
|
Android'de ICU4C
Android, ICU4C API'lerinin bir alt kümesini libicuuc.so
veya libicui18n.so
yerine libicu.so
kitaplığı aracılığıyla gösterir. API'ler, Android 12 (API düzeyi 31) sürümünden itibaren kullanılabilir. NDK başlıkları, NDK r22b sürümünden itibaren kullanılabilir.
Android NDK üzerinden hiçbir C++ API'si açığa çıkarılmaz. Bazı C API'leri kullanılamıyor.
Sürüm oluşturma
Android platformunun ardışık sürümleri, ICU'nun daha yeni sürümlerine ve ilgili CLDR ile Unicode sürümlerine karşılık gelir. Tablo 3'te bu yazışma Android 7.0'dan (API düzeyi 24) itibaren gösterilmektedir. Çalışma zamanında ICU sürüm bilgilerini almak için
VersionInfo.ICU_VERSION
API'yi (Android 7.0'dan itibaren kullanılabilmektedir) kullanın.
Platform (API düzeyi) | yoğun bakım ünitesi | CLDR | Unicode |
---|---|---|---|
Android 7.0 - 7.1 (API düzeyleri 24 - 25) | 56 | 28 | 8.0 |
Android 8.0 - 8.1 (API düzeyleri 26 - 27) | 58,2 | 30.0.3 | 9.0 |
Android 9 (API düzeyi 28) | 60,2 | 32.0.1 | 10.0 |
Android 10 (API düzeyi 29) | 63,2 | 34 | 11.0 |
Android 11 (API düzeyi 30) | 66,1 | 36 | 13,0 |
Android 12 (API düzeyi 31-32) | 68,2 | 38,1 | 13,0 |
Android 13 (API düzeyi 33) | 70,1 | 40 | 14,0 |
Android 14 (API düzeyi 34) | 72,1 | 42 | 15,0 |
Android 15 (API düzeyi 35) | 75,1 | 45 | 15.1 |
24 sa./12 sa. saat biçimi ayarı
Android'deki ICU'da, kullanıcınınDateFormat.is24HourFormat()
adresinden alınan 24 saat/12 saat saat biçimi ayarı bulunmaz.
Bu ayarı gözetmek amacıyla DateFormat
veya DateUtils
zaman biçimlendirme yöntemlerini ya da farklı is24HourFormat()
dönüş değerleri için uygun saat kalıbı sembolleriyle (12 saat için "h", 24 saat için "H") yoğun bakım zaman biçimlendirme yöntemlerini kullanın.
Örneğin, bu kod kullanıcının 12 saat/24 saat ayarını gözlemleyen geçerli saati içeren bir dize oluşturur:
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());
Transliteratörün Kararlılığı
Android 10 (API düzeyi 29) sürümünden itibaren,Transliterator
metinlerin bir biçimden diğerine harf çevirisini yapmak için sağlanır. Kullanılabilir harf çevirisi kimlikleri grubu, Android sürümleri ve cihazlar arasında kararsızdır. Cihaz üreticileri fazladan harf çevirisi kimlikleri
ekleyebilir. Geliştiricilerin, metnin harf çevirisini yapmadan önce,
Transliterator.getAvailableIDs()
kaynağından edinilen mevcut kimlikleri kontrol etmesi gerekir.
Lisanslama
ICU4J, ICU lisansı kapsamında yayınlanır. Ayrıntılar için ICU kullanıcı rehberini inceleyin.