Unicode ve uluslararasılaştırma desteği

Android, Yoğun bakım ünitesi kitaplığı ve Unicode ve diğer uluslararasılaştırma özelliklerini sağlamak için CLDR projesi destek. 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, çeşitli uygulamalar için ICU ve CLDR'yi kullanır. Latin ve Latin olmayan ortografileri ele alma dersleri Locale, Character ve birçok alt sınıfı java.text. Şundan daha fazla uluslararasılaştırma işlevleri gerektiren bir uygulama: ve Android 6.0 aracılığıyla platformun sürümlerini hedefler (API düzeyi 23) ICU kitaplığını içermelidir.

Sürüm oluşturma

Android platformunun sonraki sürümleri, ICU'nun yeni sürümlerine karşılık gelir ve ilgili CLDR ve Unicode sürümlerini kapsar. Tablo 1'de bu yazışmalar gösterilmektedir .

Tablo 1. 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 sağlar. Bu sayfanın sonraki bölümü bu destekle ilgili ayrıntıları sağlar.

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 uygulama sürümünü indirmesi için APK'nızın birden fazla sürümünü sunabilirsiniz.

Bu bölüm, başlangıçla ilgili olarak minimum düzeyde bazı temel bilgiler sağlayarak Bu kitaplıkları desteklemek için gereken Android API düzeyleri. Ardından, kullanıcılar hakkında bilmeniz gereken her şeyi öğreneceğiz. En son, , Android çerçevesinde ICU4J API'lerinin nasıl kullanılacağını anlatı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ığında Android ayrıca bunları "desteği sonlandırıldı" olarak işaretler ancak eklemeye 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 şununla yerelleştirme: kaynaklar bölümüne göz atın.
  • Bazı durumlarda Android yapısı çok işe yarıyor. Bu, örneğin android.text sınıfı için geçerlidir. emoji desteği.

com.ibm.icu'dan android.icu paketine taşıyın

Uygulamanızda zaten ICU4J API'lerini kullanıyorsanız ve android.icu API ihtiyaçlarınızı karşıladıktan sonra çerçeve API'leri, Java içe aktarma işlemlerinizi değiştirmenizi gerektirir com.ibm.icu-android.icu. Ardından, ICU4J dosyalarınızın kendi kopyasını uygulamadan kaldırabilirsiniz.

Not: ICU4J çerçeve API'leri, android.icu ad alanı yerine com.ibm.icu kullanın. 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ıflarda ICU4J'de bulunanlara eşdeğerdir. Ancak ICU4J genelde daha geniş standartlar ve diller için destek sağlar.

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ığı üzerinden gösterir. API'ler Android 12 (API düzeyi 31) ve sonraki sürümlerde kullanılabilir. NDK başlıkları NDK sürümü r22b. 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. Şunu kullanın: Yoğun bakım ünitesini edinmek için VersionInfo.ICU_VERSION API (Android 7.0'dan itibaren kullanılabilir) sürüm bilgilerini de yükleyebilirsiniz.

Tablo 3. 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 saat biçimi ayarı

Android'deki ICU, kullanıcının DateFormat.is24HourFormat() kaynağından alınan 24 saat/12 saatlik saat biçimi ayarını dikkate almaz. Bu ayarı gözlemlemek için DateFormat veya DateUtils saat biçimlendirme yöntemlerini kullanın ya da farklı is24HourFormat() döndürme değerleri için 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 Transliterator bir biçimden diğerine metne dönüştürmek için sağlanır. Kullanılabilir harf çevirisi grubu Kimlikler, Android sürümleri ve cihazlar arasında kararsızdır. Cihaz üreticileri ekstra harf çevirisi kimliğidir. 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ılı bilgi için ICU'ya bakın. kullanıcı rehberini inceleyin.