Android, Unicode ve diğer uluslararasılaştırma desteğini sağlamak için ICU kitaplığından ve CLDR projesinden yararlanır. Bu sayfada Unicode ve uluslararasılaştırma desteğiyle ilgili tartışma 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) sürümüne kadar Unicode ve uluslararasılaştırma desteği
Android platformu, hem Latin hem de Latin olmayan yazım sistemlerini işlemek için çeşitli sınıfları uygulamak üzere ICU ve CLDR'yi kullanır. Bu sınıflar arasında Locale
, Character
ve java.text
'nin birçok alt sınıfı bulunur. Açığa çıkarılan sınıfların ötesinde uluslararasılaştırma işlevleri gerektiren ve platformun Android 6.0 (API düzeyi 23) ile uyumlu sürümlerini hedefleyen uygulamalar ICU kitaplığını içermelidir.
Sürüm oluşturma
Android platformunun sonraki 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) sürümüne kadar gösterilmektedir.
Tablo 1. Android 6.0 (API düzeyi 23) sürümünde kullanılan ICU ve CLDR sürümleri.
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 konusunda daha kapsamlı destek sunar. Bu sayfanın sonraki bölümünde bu destekle ilgili ayrıntılar verilmektedir.
Android 7.0 (API düzeyi 24) ve sonraki sürümlerde Unicode ve uluslararasılaştırma desteği
Android 7.0 (API düzeyi 24) ve sonraki sürümlerde Android platformu, uygulama geliştiricilerin android.icu
paketi altında kullanması için ICU4J API'lerinin bir alt kümesini kullanıma sunar.
ICU4J, yazılım uygulamaları için Unicode ve uluslararasılaştırma desteği sağlayan, yaygın olarak kullanılan bir Java kitaplıkları kümesidir.
ICU4J API'leri, cihazda bulunan yerelleştirme verilerini kullanır. Sonuç olarak, ICU4J kitaplıklarını uygulamanıza derlemeyerek uygulamanızın kapladığı alanı azaltabilirsiniz. Bunun yerine, çerçevede bu kitaplıkları çağırabilirsiniz. Bunu yaparsanız Android 7.0'dan (API düzeyi 24) önceki Android sürümlerini çalıştıran kullanıcıların ICU4J kitaplıklarını içeren bir uygulama sürümünü indirebilmesi için APK'nızın birden fazla sürümünü sağlamanız gerekebilir.
Bu bölümde, söz konusu kitaplıkları desteklemek için gereken minimum Android API düzeyleri hakkında bazı temel bilgiler verilerek başlanır. Ardından, ICU4J'nin Android'e özgü uygulaması hakkında bilmeniz gerekenler açıklanır. Son olarak, Android çerçevesinde ICU4J API'lerini nasıl kullanacağınız açıklanır.
Android'de ICU4J
Android, ICU4J API'lerinin bir alt kümesini com.ibm.icu
yerine android.icu
paketi üzerinden kullanıma sunar. Bazı ICU4J API'leri, kullanımdan kaldırılmaları veya kararlı olarak bildirilmemeleri gibi nedenlerle Android çerçevesi tarafından kullanıma sunulmaz. ICU ekibi gelecekte API'lerin desteğini sonlandırdıkça Android de bu API'leri desteği sonlandırılmış olarak işaretler ancak bunları dahil etmeye devam eder.
Hatırlatmak istediğimiz bazı konular:
- 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ından daha fazla karakteri destekler. Örneğin,
android.text
sınıfının emoji desteği bu durum için geçerlidir.
com.ibm.icu'dan android.icu paketine taşıma
Uygulamanızda zaten ICU4J API'lerini kullanıyorsanız ve android.icu
API'leri gereksinimlerinizi karşılıyorsa çerçeve API'lerine geçmek için Java içe aktarma işlemlerinizi com.ibm.icu
yerine android.icu
olarak değiştirmeniz gerekir. Ardından, ICU4J dosyalarının kendi kopyanızı uygulamadan kaldırabilirsiniz.
Not: ICU4J çerçevesi API'leri com.ibm.icu
yerine android.icu
ad alanını kullanır. Bu, kendi com.ibm.icu
kitaplıklarını içeren uygulamalarda ad alanı çakışmalarını önlemek için yapılır.
Diğer Android SDK API'lerinden android.icu API'lerine geçiş yapma
java
ve android
paketlerindeki bazı sınıflar, ICU4J'deki sınıflarla eşdeğerdir. Ancak ICU4J genellikle standartlar ve diller için daha geniş destek sunar.
Tablo 2'de, başlamanıza yardımcı olacak bu eşdeğerliklere ilişkin bazı örnekler gösterilmektedir:
Tablo 2. Android ve Java ICU4J sınıfları
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 kullanıma sunar. API'ler Android 12 (API düzeyi 31) ve sonraki sürümlerde kullanılabilir. NDK üstbilgileri, NDK sürümü r22b'den itibaren kullanılabilir.
Android NDK aracılığıyla C++ API'si kullanıma sunulmaz. Bazı C API'leri kullanılamaz.
Sürüm oluşturma
Android platformunun sonraki 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 (API düzeyi 24) sürümünden itibaren gösterilmektedir. Çalışma zamanında ICU sürüm bilgilerini almak için
VersionInfo.ICU_VERSION
API'yi (Android 7.0'dan beri kullanılabilir) kullanın.
Tablo 3. Android 7.0 (API düzeyi 24) ile Android 15 (API düzeyi 35) arasındaki Android sürümlerinde kullanılan ICU ve CLDR sürümleri.
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 saat/12 saat biçimi ayarı
Android'deki ICU,DateFormat.is24HourFormat()
kaynağından alınan kullanıcının 24 saatlik/12 saatlik zaman biçimi ayarını dikkate almıyor.
Bu ayarı gözlemlemek için DateFormat
veya DateUtils
zaman biçimlendirme yöntemlerini kullanın 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") ICU zaman biçimlendirme kalıplarını kullanın.
Örneğin, bu kod, kullanıcının 12 saatlik/24 saatlik ayarını dikkate alan ve 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());
Çeviri Aracı'nın Kararlılığı
Android 10'dan (API düzeyi 29) itibaren,Transliterator
metni bir biçimden diğerine çevirmek için sağlanır. Kullanılabilir transliterasyon kimlikleri, Android sürümleri ve cihazlar arasında tutarsızlık gösterir. Cihaz üreticileri ek çeviri yazısı kimlikleri ekleyebilir. Geliştiriciler, metni çevirmeden önce
Transliterator.getAvailableIDs()
kaynağından alınan mevcut kimlikleri kontrol etmelidir.
Lisanslama
ICU4J, ICU lisansı kapsamında yayınlanır. Ayrıntılı bilgi için ICU kullanıcı rehberine bakın.