Obsługa kodowania Unicode i internacjonalizacji

Android korzysta z biblioteki ICUprojektu CLDR, aby zapewniać obsługę Unicode i innych funkcji związanych z międzynarodowością. 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. Tabela 1 przedstawia tę zgodność do Androida 6.0 (poziom interfejsu 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 CLDR Unicode
Android 1.5–2.0 (poziomy interfejsu API 3–7) 3,8 1,5 5,0
Android 2.2 (poziom 8 interfejsu API) 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 interfejsu API 16–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 23 interfejsu API) 55,1 27.0.1 7,0

Platforma Androida zapewnia bardziej kompleksową obsługę Unicode i międzynarodowościowości w przypadku aplikacji kierowanych na Androida 7.0 (poziom interfejsu API 24) i nowszych. W następnej sekcji tej strony znajdziesz szczegółowe informacje o 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) lub nowszego platforma Androida udostępnia podzbiór interfejsów ICU4J, z których deweloperzy aplikacji mogą korzystać w ramach pakietu android.icu. ICU4J to powszechnie używany zestaw bibliotek Java typu open source zapewniających kod Unicode i internacjonalizację aplikacji.

Interfejsy ICU4J API korzystają z danych lokalizacji obecnych na urządzeniu. Dzięki temu możesz zmniejszyć rozmiar aplikacji, nie kompilując w niej bibliotek ICU4J. Zamiast tego możesz je wywoływać w ramach frameworka. 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 o minimalnych poziomach interfejsu Android API wymaganych do obsługi tych bibliotek. Następnie wyjaśnia, co co trzeba wiedzieć o implementacji ICU4J w Androidzie. W tym artykule znajdziesz też informacje o tym, jak używać interfejsów ICU4J API w ramach Androida.

ICU4J na Androidzie

Android udostępnia podzbiór interfejsów ICU4J za pomocą pakietu android.icu, a nie com.ibm.icu. Niektóre interfejsy ICU4J nie są udostępniane przez platformę Androida, ponieważ są wycofane lub nie są deklarowane jako stabilne. 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 usunąć własną kopię plików ICU4J z aplikacji.

Uwaga: interfejsy API w ramach ICU4J używają przestrzeni nazw android.icu zamiast com.ibm.icu. Ma to na celu uniknięcie konfliktów nazw przestrzeni 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 ICU4J często zapewnia szersze wsparcie dla standardów i języków.

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

Tabela 2. Klasy ICU4J i Java na Androida

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 ICU4C API za pomocą biblioteki libicu.so, a nie libicuuc.so ani 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. Interfejs C++ nie jest udostępniany przez NDK Androida. Niektóre interfejsy C są niedostępne.

Obsługa wersji

Kolejne wersje platformy Android odpowiadają nowszych wersji OIOM-ów oraz odpowiadające im wersje CLDR i Unicode. Tabela 3 przedstawia tę zgodność od Androida 7.0 (poziom interfejsu 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 CLDR Unicode
Android 7.0–7.1 (poziomy API: 24–25) 56 28 z Androidem 8.0
Android 8.0–8.1 (poziomy interfejsu 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 31–32 interfejsu API) 68,2 38.1 13.0
Android 13 (poziom 33 interfejsu API) 70,1 40 14,0
Android 14 (poziom 34 interfejsu API) 72.1 42 15,0
Android 15 (poziom API 35) 75,1 45 15.1

Ustawienie formatu czasu 24-godzinnego/12-godzinnego

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 ciąg znaków z aktualną godziną, uwzględniając ustawienie użytkownika dotyczące formatu 12-godzinnego lub 24-godzinnego:

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ą dodawać dodatkowe identyfikatory transliteracji. Przed transliteracją tekstu deweloperzy muszą sprawdzić dostępne identyfikatory, które można uzyskać z Transliterator.getAvailableIDs().

Licencjonowanie

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