Android, Unicode ve diğer uluslararasılaştırma desteği 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) ile 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 amacıyla 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çık sınıfların ötesinde uluslararasılaştırma işlevleri gerektiren ve platformun Android 6.0 (API düzeyi 23) ile sonraki sürümlerini hedefleyen uygulamalar ICU kitaplığını içermelidir.
Sürüm oluşturma
Android platformunun art arda yayınlanan sürümleri, ICU'nun ve ilgili CLDR ile Unicode sürümlerinin daha yeni sürümlerine karşılık gelir. Tablo 1'de, Android 6.0 (API düzeyi 23) ile bu eşleşme 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 konusunda daha kapsamlı destek sağlar. Bu sayfanın sonraki bölümünde bu destek hakkında ayrıntılı bilgi 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 kullanabileceği ICU4J API'lerinin bir alt kümesini gösterir.
ICU4J, yazılım uygulamaları için Unicode ve uluslararasılaştırma desteği sağlayan açık kaynaklı, yaygın olarak kullanılan bir Java kitaplığı grubudur.
ICU4J API'leri, cihazdaki yerelleştirme verilerini kullanır. Sonuç olarak, ICU4J kitaplıklarını uygulamanıza derlemeyerek uygulamanızın boyutunu azaltabilirsiniz. Bunun yerine, bunları çerçevede çağırabilirsiniz. Bunu yaparsanız Android 7.0 (API düzeyi 24) ve önceki sürümleri çalıştıran kullanıcıların ICU4J kitaplıklarını içeren bir uygulama sürümü indirebilmesi için APK'nızın birden fazla sürümünü sağlamanız önerilir.
Bu bölüm, bu kitaplıkların desteklenmesi için gereken minimum Android API düzeyleri hakkında bazı temel bilgiler vererek başlar. Ardından, ICU4J'nin Android'e özel uygulaması hakkında bilmeniz gerekenler açıklanır. Son olarak, ICU4J API'lerinin Android çerçevesinde nasıl kullanılacağı 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, API'lerin desteğinin sonlandırılması veya kararlı olarak tanımlanmaması gibi nedenlerle Android çerçevesi tarafından kullanıma sunulmaz. ICU ekibi gelecekte API'leri kullanımdan kaldırdıkça Android de bu API'leri kullanımdan kaldırıldı olarak işaretler ancak dahil etmeye devam eder.
Aşağıda hatırlatmak istediğimiz birkaç nokta verilmiştir:
- ICU4J Android çerçeve 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 duruma örnek gösterilebilir.
com.ibm.icu paketinden 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 aktarmalarınızı com.ibm.icu
yerine android.icu
olarak değiştirmeniz gerekir. Ardından, ICU4J dosyalarınızın kendi kopyasını uygulamadan kaldırabilirsiniz.
Not: ICU4J çerçeve 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çindir.
Diğer Android SDK API'lerinden android.icu API'lerine geçiş
java
ve android
paketlerindeki bazı sınıflar, ICU4J'deki sınıflara 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:
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ığı üzerinden gösterir. API'ler Android 12 (API düzeyi 31) ve sonraki sürümlerde kullanılabilir. NDK üst bilgileri, NDK r22b sürümünden itibaren kullanılabilir.
Android NDK üzerinden C++ API'si gösterilmez. C API'lerinin bazıları kullanılamaz.
Sürüm oluşturma
Android platformunun art arda yayınlanan sürümleri, ICU'nun ve ilgili CLDR ile Unicode sürümlerinin daha yeni sürümlerine karşılık gelir. Tablo 3'te, Android 7.0 (API düzeyi 24) ve sonraki sürümlerde bu eşleşme 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.
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 saat biçimi ayarı
Android'deki ICU, kullanıcınınDateFormat.is24HourFormat()
kaynağından alınan 24 saat/12 saatlik saat biçimi ayarını dikkate almaz.
Bu ayarı gözlemlemek için farklı is24HourFormat()
döndürme değerleri için DateFormat
veya DateUtils
saat biçimlendirme yöntemlerini ya da uygun saat kalıbı simgeleriyle (12 saat için "h", 24 saat için "H") ICU saat biçimlendirme kalıplarını kullanın.
Örneğin, bu kod, kullanıcının 12 saat/24 saat ayarını dikkate alarak 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());
Harf çeviricinin kararlılığı
Android 10'dan (API düzeyi 29) itibaren, metni bir biçimden diğerine dönüştürmek içinTransliterator
kullanılabilmektedir. Kullanılabilir transliteasyon kimlikleri, Android sürümleri ve cihazlar arasında kararlı değildir. Cihaz üreticileri ek transliterasyon kimlikleri ekleyebilir. Geliştiriciler, metni translitere etmeden önce
Transliterator.getAvailableIDs()
adresinden elde edilen mevcut kimlikleri kontrol etmelidir.
Lisanslama
ICU4J, ICU lisansı kapsamında yayınlanır. Ayrıntılar için ICU kullanıcı kılavuzuna bakın.