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

Android, Unicode ve diğer uluslararasılaştırma yöntemlerini sağlamak için ICU kitaplığı ve CLDR projesini kullanır. Bu sayfada, Unicode ve uluslararasılaştırma desteği iki bölüme ayrılmıştır: Android 6.0 (API düzeyi 23) ve önceki sürümleri ve Android 7.0 (API düzeyi 24) ve sonraki sürümleri.

Android 6.0 (API düzeyi 23) üzerinden Unicode ve uluslararasılaştırma desteği

Android platformu, ICU ve CLDR'yi kullanarak hem Latin hem de Latin olmayan ortografileri işlemek ve Locale, Character gibi sınıfları ve java.text birçok alt sınıfını ortaya çıkarmak için çeşitli sınıfları uygular. Karşılaşılan sınıfların dışında uluslararasılaştırma işlevleri gerektiren ve platformun Android 6.0 (API düzeyi 23) sürümlerini hedefleyen uygulamalar ICU kitaplığını içermelidir.

Sürüm Oluşturma

Android platformunun ardışık sürümleri, ICU'nun yeni sürümlerine ve bunlara karşılık gelen CLDR ve Unicode sürümlerine karşılık gelir. Tablo 1'de bu yazışma Android 6.0 (API düzeyi 23) üzerinden gösterilmektedir.

Tablo 1. Android 6.0 (API düzeyi 23) ile 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ünde, söz konusu 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 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 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ızda derlemeyerek uygulamanızın ayak izini azaltabilirsiniz. Bunun yerine, çerçeve içinde bunlara çağrı gönderebilirsiniz. Bunu yaparsanız APK'nızın birden çok 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ümde ilk olarak, bu kitaplıkları desteklemek için gereken minimum Android API düzeyleri hakkında bazı temel bilgiler verilmiştir. Ardından, ICU4J'nin Android'e özgü uygulaması hakkında bilmeniz gerekenleri açıklıyor. Son olarak da ICU4J API'lerinin Android çerçevesinde nasıl kullanılacağı anlatılmaktadır.

Android'de ICU4J

Android, ICU4J API'lerinin bir alt kümesini com.ibm.icu yerine android.icu paketi aracılığıyla sunar. Bazı ICU4J API'ler, API'lerin kullanımdan kaldırılması veya kararlı olarak bildirilmemesi gibi nedenlerle Android çerçevesi tarafından kullanıma sunulmaz. ICU ekibi gelecekte API'leri kullanımdan kaldırdıkça Android de API'leri kullanımdan kaldırılmış olarak işaretler ancak bunları eklemeye devam eder.

Hatırlatma:

  • 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 yerine geçmez.
  • Bazı durumlarda Android çerçevesi, ICU kitaplıklarının desteklediğinden daha fazla karakteri destekler. Bu, örneğin android.text sınıfının emoji desteği için geçerlidir.

com.ibm.icu'dan android.icu paketine geçiş

Uygulamanızda zaten ICU4J API'lerini kullanıyorsanız ve android.icu API'ler gereksinimlerinizi karşılıyorsa çerçeve API'lerine geçiş yapmak için com.ibm.icu olan Java içe aktarmalarınızı android.icu olarak değiştirmeniz gerekir. Daha sonra, kendi ICU4J dosyalarının kopyasını uygulamadan kaldırabilirsiniz.

Not: ICU4J çerçeve API'leri com.ibm.icu yerine android.icu ad alanını kullanır. Bunun amacı, kendi com.ibm.icu kitaplıklarını içeren uygulamalardaki 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'dekilerle eşdeğerdir. Bununla birlikte, ICU4J genellikle standartlar ve diller için daha kapsamlı destek sağlar.

Başlamanıza yardımcı olmak için Tablo 2'de bu eşdeğerlerle ilgili 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, libicuuc.so veya libicui18n.so yerine libicu.so kitaplığı aracılığıyla ICU4C API'lerinin bir alt kümesini sunar. Bu API'ler, Android 12'den (API düzeyi 31) itibaren kullanılabilir. NDK üst bilgileri, NDK sürümü r22b'den itibaren kullanılabilir. Android NDK üzerinden kullanıma sunulan C++ API'leri yoktur. Bazı C API'leri kullanılamaz.

Sürüm Oluşturma

Android platformunun ardışık sürümleri, ICU'nun yeni sürümlerine ve bunlara karşılık gelen CLDR ve Unicode sürümlerine karşılık gelir. Bu yazışma, Android 7.0'dan (API düzeyi 24) başlamak üzere Tablo 3'te gösterilmektedir.

Tablo 3. Android 7.0 (API düzeyi 24) ve sonraki sürümlerde 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 %
Android 12 (API düzeyi 31) 68,2 38,1 %

24 sa./12 sa. saat biçimi ayarı

Android'deki ICU, kullanıcının DateFormat.is24HourFormat() kaynağından edinilen 24 saat/12 saat zaman biçimi ayarını dikkate almaz. Bu ayarı gözlemlemek için DateFormat veya DateUtils zaman biçimlendirme yöntemlerini ya da farklı is24HourFormat() döndürme değerleri için uygun saat kalıbı sembolleri içeren ICU zaman biçimlendirme kalıplarını (12 saat için "h", 24 saat için "H") kullanın. Örneğin, bu kod kullanıcının 12h/24h ayarına uyan geçerli zamana sahip 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());

Çeviricinin Kararlılığı

Android 10'dan (API düzeyi 29) itibaren, bir metnin farklı bir biçime çevrilmesi için Transliterator sağlanır. Mevcut harf çevirisi kimlikleri grubu, Android sürümleri ve cihazlar arasında kararsız. Cihaz üreticileri, ekstra harf çevirisi kimlikleri ekleyebilir. Geliştiriciler metnin harf çevirisini yapmadan önce Transliterator.getAvailableIDs() bölümünden edinilen mevcut kimlikleri kontrol etmelidir.

Lisanslama

ICU4J, ICU lisansı kapsamında kullanıma sunulmuştur. Ayrıntılar için ICU kullanıcı rehberine bakın.