Obsługa kodowania Unicode i internacjonalizacji

Android wykorzystuje OIC biblioteka i projekt CLDR, którego celem jest zapewnienie Unicode i innych internacjonalizacji . Opis obsługi Unicode i internacjonalizacji na tej stronie jest podzielony na dwa i Android 6.0 (poziom interfejsu API 23) i starsze oraz Android 7.0 (poziom interfejsu API 24) i nowsze.

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

Platforma Android wykorzystuje ICU i CLDR do wdrażania różnych klas obsługi ortografii łacińskich i innych niż łacińskie, ujawnianie lekcji. takie jak Locale, Character oraz wiele podklas java.text Aplikacja, która wymaga dodatkowych funkcji internacjonalizacji do klas z grupy eksperymentalnej i docelowych wersji platformy aż do Androida 6.0. (poziom interfejsu API 23), musi zawierać bibliotekę ICU.

Obsługa wersji

Kolejne wersje platformy Android odpowiadają nowszych wersji OIOM-ów oraz odpowiadające im wersje CLDR i Unicode. Tę korespondencję przedstawia tabela 1 aż do Androida w wersji 6.0 (poziom API 23).

Tabela 1. Używane wersje ICU i CLDR aż do Androida w wersji 6.0 (poziom 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ę kodowania Unicode i internacjonalizacji. w przypadku aplikacji kierowanych na Androida 7.0 (poziom interfejsu API 24) i nowsze wersje. Następna sekcja tej strony zawiera szczegółowe informacje o wsparciu.

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

W Androidzie 7.0 (poziom interfejsu API 24) i nowszych udostępnia podzbiór interfejsów API ICU4J deweloperom aplikacji do wykorzystania w ramach pakietu android.icu. ICU4J to powszechnie używany zestaw bibliotek Java typu open source zapewniających kod Unicode i internacjonalizację aplikacji.

Interfejsy API ICU4J używają dane lokalizacyjne dostępne w urządzeniu. W efekcie możesz zmniejszyć nie kompilując bibliotek ICU4J w aplikacji. Zamiast tego możesz: wspomnijmy o nich w ramach prezentacji. W takim przypadku warto podać wiele wersji pakietu APK, więc użytkownicy korzystający z Androida w wersji starszej niż Android 7.0 (poziom API 24) pobierz wersję aplikacji zawierającą biblioteki ICU4J.

W tej sekcji znajdziesz podstawowe informacje na temat Poziomy interfejsu API Androida wymagane do obsługi tych bibliotek. Następnie wyjaśnia, co co trzeba wiedzieć o implementacji ICU4J w Androidzie. I na koniec, i wskazuje, jak korzystać z interfejsów API ICU4J w platformie Androida.

ICU4J na Androidzie

Android udostępnia podzbiór interfejsów API ICU4J za pomocą 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 nie została zadeklarowana jako stabilna. W miarę jak zespół ICU w przyszłości wycofuje interfejsy API, Android również oznacza je jako wycofane, ale nadal je uwzględnia.

Oto kilka przypomnień:

  • Interfejsy API platformy ICU4J Androida nie obejmują wszystkich interfejsów ICU4J API.
  • Interfejsy API dostępne na Androidzie nie zastępują obsługi tych platform: lokalizacja za pomocą .
  • W niektórych przypadkach platforma Androida obsługuje więcej znaków niż niż biblioteki ICU. To dotyczy na przykład klasy android.text z obsługą emotikonów.

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

Jeśli w swojej aplikacji używasz już interfejsów API ICU4J, android.icu interfejsy API spełniają Twoje wymagania, następnie przeprowadzam migrację do interfejsy API platformy wymagają zmiany importów języka Java od com.ibm.icu do android.icu. Następnie możesz: usuń swoją kopię plików ICU4J z aplikacji.

Uwaga: interfejsy API platformy ICU4J używają android.icu przestrzeni nazw zamiast com.ibm.icu. Ma to na celu uniknięcie przestrzeni nazw konflikty w aplikacjach, które zawierają własne biblioteki com.ibm.icu.

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

Niektóre zajęcia w pakietach java i android mają takie same jak te stosowane w danych ICU4J. Jednakże ICU4J często oferuje szerszy zakres zastosowań. i obsługują standardy.

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

Tabela 2. Android klasy ICU4J w Javie

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 interfejsu API 31). Nagłówki NDK są dostępne, zaczynając od w 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 wersji OIOM-ów oraz odpowiadające im wersje CLDR i Unicode. Tę korespondencję przedstawia tabela 3 od Androida 7.0 (poziom API 24). Użyj VersionInfo.ICU_VERSION API (dostępny od Androida 7.0) w celu uzyskania OIOM-ów oraz informacje o wersji w czasie działania.

Tabela 3. Wersje ICU i CLDR używane w wersjach Androida od Androida 7.0 (poziom interfejsu API 24) do Androida 15 (poziom 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 obserwuje się ustawienia formatu 24h/12h. Dane: DateFormat.is24HourFormat() Aby obserwować to ustawienie, użyj DateFormat lub DateUtils metod formatowania czasu lub użycie wzorców formatowania czasu ICU z odpowiednim wzorcem godzinowym „h” dla 12h, „H” dla 24h) 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) Transliterator jest dostępny do transliteracji tekstu z jednego formatu na inny. Zbiór dostępnych transliteracji Identyfikatory są niestabilne w różnych wersjach Androida i na różnych urządzeniach. Producenci urządzeń mogą dodać więcej transliteracji. Deweloperzy muszą sprawdzić dostępne identyfikatory uzyskane z Transliterator.getAvailableIDs(), przed transliteracją.

Licencjonowanie

Urządzenie ICU4J jest wydawane na podstawie licencji OIOM-u. Szczegółowe informacje znajdziesz tutaj: ICU .