Obsługa kodowania Unicode i internacjonalizacji

Android korzysta z biblioteki ICC i projektu CLDR do obsługi kodowania Unicode oraz innych internacjonalizacji. Opis obsługi standardu Unicode i internacjonalizacji jest podzielony na 2 sekcje: Android 6.0 (poziom interfejsu API 23) i starszy oraz Android 7.0 (poziom interfejsu API 24) i nowsze.

Obsługa standardu Unicode i internacjonalizacji do Androida 6.0 (poziom API 23)

Platforma Androida korzysta z ICU i CLDR do wdrożenia różnych klas do obsługi ortografii łacińskich i innych niż łacińskie oraz ujawniania klas takich jak Locale, Character i wielu podklas klasy java.text. Aplikacja, która wymaga funkcji internacjonalizacji wykraczających poza klasy ujawnione i jest kierowana na wersje platformy do Androida 6.0 (poziom interfejsu API 23), musi zawierać bibliotekę ICU.

Obsługa wersji

Kolejne wersje platformy Android odpowiadają nowszych wersjach ICU oraz odpowiadających im wersji CLDR i Unicode. Tabela 1 pokazuje tę korespondencję w Androidzie 6.0 (poziom API 23).

Tabela 1. Wersje ICU i CLDR używane do Androida 6.0 (poziom interfejsu API 23).

Platforma (poziom interfejsu API) OIOM dyrektywa CLDR Unicode
Android 1.5–2.0 (poziomy API 3–7) 3,8 1,5 5,0
Android 2.2 (poziom API 8) 4,2 1,7 5.1
Android 2.3–3.0 (poziomy interfejsu API 9–13) 4.4 1,8 5.2
Android 4.0 (poziomy API od 14 do 15) 4.6 1,9 6.0
Android 4.1 (poziomy API od 16 do 17) 4.8 2,0 6.0
Android 4.3 (poziom API 18) 50 22,1 6.2
Android 4.4 (poziomy API: 19–20) 51 23 6.2
Android 5.0 (poziomy API od 21 do 22) 53 25 6.3
Android 6.0 (poziom API 23) 55,1 27.0.1 7,0

Platforma Androida zapewnia bardziej kompleksową obsługę Unicode i internacjonalizacji w aplikacjach kierowanych na Androida 7.0 (poziom interfejsu API 24) i nowszego. W następnej sekcji znajdziesz szczegółowe informacje na temat tej pomocy.

Obsługa standardu Unicode i internacjonalizacji w Androidzie 7.0 (poziom API 24) i nowszych

W przypadku Androida 7.0 (poziom interfejsu API 24) i nowszych platforma Androida udostępnia podzbiór interfejsów API ICU4J deweloperom aplikacji w pakiecie android.icu. ICU4J to powszechnie stosowany zestaw bibliotek Java typu open source, który zapewnia obsługę kodowania Unicode i internacjonalizacji aplikacji.

Interfejsy API ICU4J wykorzystują dane lokalizacji znajdujące się na urządzeniu. W związku z tym możesz zmniejszyć rozmiar aplikacji, nie kompilując bibliotek ICU4J w aplikacji. Zamiast tego możesz je wywoływać w platformie. W takim przypadku warto udostępnić wiele wersji pliku APK, aby użytkownicy korzystający z Androida w wersji starszej niż 7.0 (poziom interfejsu API 24) mogli pobrać wersję aplikacji zawierającą biblioteki ICU4J.

W tej sekcji znajdziesz podstawowe informacje o minimalnych poziomach interfejsu Android API wymaganych do obsługi tych bibliotek. Następnie wyjaśnia, co musisz wiedzieć o implementacji ICU4J w Androidzie. Dowiesz się też, jak korzystać z interfejsów API ICU4J w platformie Androida.

ICU4J na Androidzie

Android udostępnia podzbiór interfejsów API ICU4J za pomocą pakietu android.icu, a nie com.ibm.icu. Niektóre interfejsy API ICU4J nie są udostępniane przez platformę Androida z powodów takich jak wycofanie interfejsów API lub niezadeklarowanie ich stabilności. W miarę jak zespół OIOM-ów będzie w przyszłości wycofywać interfejsy API, Android również oznaczy je jako wycofane, ale nadal będzie je uwzględniać.

Oto kilka przypomnień:

  • Interfejsy API platformy ICU4J Androida nie obejmują wszystkich interfejsów ICU4J API.
  • Interfejsy API na platformie Androida nie zastępują obsługi lokalizacji za pomocą zasobów w Androidzie.
  • W niektórych przypadkach platforma Androida obsługuje więcej znaków niż biblioteki ICU. Dotyczy to na przykład obsługi emotikonów w klasie android.text.

Przejdź na pakiet android.icu z com.ibm.icu

Jeśli w swojej aplikacji używasz już interfejsów API ICU4J, a interfejsy API android.icu spełniają Twoje wymagania, migracja do interfejsów API platformy wymaga zmiany importów Javy z com.ibm.icu na android.icu. Następnie możesz usunąć swoją kopię plików ICU4J z aplikacji.

Uwaga: interfejsy API platformy ICU4J używają przestrzeni nazw android.icu zamiast com.ibm.icu. Pozwala to uniknąć konfliktów przestrzeni nazw w aplikacjach zawierających własne biblioteki com.ibm.icu.

Migracja do interfejsów API android.icu z innych interfejsów API pakietu Android SDK

Niektóre klasy w pakietach java i android mają odpowiedniki w ICU4J. ICU4J często zapewnia jednak szerszą obsługę standardów i języków.

Tabela 2 zawiera kilka przykładów tych odpowiedników:

Tabela 2. Klasy ICU4J na Androidzie i Java

Kategoria Alternatywy
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

ICU4C na Androidzie

Android udostępnia podzbiór interfejsów API ICU4C za pomocą biblioteki libicu.so, a nie libicuuc.so lub libicui18n.so. Interfejsy API są dostępne od Androida 12 (poziom API 31). Nagłówki NDK są dostępne od wersji NDK r22b. Żaden interfejs API C++ nie jest udostępniany w pakiecie Android NDK. Niektóre interfejsy API w języku C są niedostępne.

Obsługa wersji

Kolejne wersje platformy Android odpowiadają nowszych wersjach ICU oraz odpowiadających im wersji CLDR i Unicode. Tę korespondencję znajdziesz w tabeli 3, począwszy od Androida od wersji 7.0 (poziom interfejsu API 24). Użyj interfejsu API VersionInfo.ICU_VERSION (dostępnego od Androida 7.0), aby uzyskać informacje o wersji ICU w czasie działania.

Tabela 3. Wersje ICU i CLDR używane na urządzeniach z Androidem od 7.0 (poziom interfejsu API 24) do 15 (poziom interfejsu API 35).

Platforma (poziom interfejsu API) OIOM dyrektywa CLDR Unicode
Android 7.0–7.1 (poziomy API: 24–25) 56 28 z Androidem 8.0
Android 8.0–8.1 (poziomy API: 26–27) 58,2 30.0.3 9.0
Android 9 (poziom 28 interfejsu API) 60,2 32.0.1 10.0
Android 10 (poziom 29 interfejsu API) 63,2 34 11.0
Android 11 (poziom 30 interfejsu API) 66,1 36 13,0
Android 12 (poziom API 31–32) 68,2 38,1 13,0
Android 13 (poziom 33 interfejsu API) 70,1 40 14,0
Android 14 (poziom API 34) 72,1 42 15,0
Android 15 (poziom API 35) 75,1 45 15.1

Ustawienie formatu godziny 24h/12h

Na OIOM-ie na Androidzie nie występuje ustawienie formatu 24 godzin/12 godzin (24 godz./12 godz.) uzyskane ze strony DateFormat.is24HourFormat(). Aby zaobserwować to ustawienie, użyj metod formatowania czasu DateFormat lub DateUtils albo zastosuj wzorce formatowania czasu ICU z odpowiednimi symbolami wzorca godzin (h” oznacza 12 godzin, „H” dla 24 godzin) dla różnych wartości zwracanych is24HourFormat(). Ten kod generuje na przykład ciąg znaków z bieżącą godziną, który uwzględnia ustawienie 12 godzin lub 24 godziny na dobę:

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());

Stabilność transliteratora

Od Androida 10 (poziom interfejsu API 29) usługa Transliterator jest udostępniana do transliteracji tekstu z jednego formatu na drugi. Zestaw dostępnych identyfikatorów transliteracji jest niestabilny w różnych wersjach Androida i na różnych urządzeniach. Producenci urządzeń mogą dodawać dodatkowe identyfikatory transliteracji. Przed transliteracją tekstu deweloperzy muszą sprawdzić dostępne identyfikatory uzyskane z Transliterator.getAvailableIDs().

Licencjonowanie

Urządzenie ICU4J jest wydawane na podstawie licencji OIOM-u. Szczegółowe informacje znajdziesz w przewodniku użytkownika po ICC.