Android korzysta z biblioteki ICU i projektu CLDR, aby zapewniać obsługę Unicode i innych funkcji związanych z międzynarodowością. Informacje na tej stronie dotyczące obsługi Unicode i międzynarodowości są podzielone na 2 sekcje: Android 6.0 (poziom interfejsu API 23) i starsze oraz Android 7.0 (poziom interfejsu API 24) i nowsze.
Obsługa Unicode i międzynarodowości do Androida 6.0 (poziom interfejsu API 23)
Platforma Androida korzysta z bibliotek ICU i CLDR do implementowania różnych klas, które obsługują ortografię zarówno łacińską, jak i niełacińską, udostępniając klasy takie jak Locale
, Character
i wiele podklas java.text
. Aplikacja, która wymaga funkcji związanych z międzynarodowością wykraczających poza udostępnione klasy 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ą nowszym wersjom ICU oraz odpowiednim wersjom CLDR i Unicode. Tabela 1 pokazuje tę korespondencję w Androidzie 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 14–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 18 interfejsu API) | 50 | 22.1 | 6.2 |
Android 4.4 (poziomy API: 19–20) | 51 | 23 | 6.2 |
Android 5.0 (poziom interfejsu API 21–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 usłudze.
Obsługa Unicode i międzynarodowościowości w Androidzie 7.0 (poziom interfejsu API 24) i nowszych wersjach
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 używany zestaw bibliotek Java, które zapewniają obsługę Unicode i międzynarodową aplikacji oprogramowania.
Interfejsy ICU4J API korzystają z danych lokalizacji obecnych na urządzeniu. Dzięki temu możesz zmniejszyć rozmiar swojej aplikacji, nie kompilując w niej bibliotek ICU4J. Zamiast tego możesz wywoływać je w ramach frameworka. W takim przypadku warto udostępnić kilka wersji pliku APK, aby użytkownicy korzystający z wersji Androida starszych 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. 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 API 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. Gdy zespół ICU w przyszłości wycofa interfejsy API, Android również je oznaczy jako przestarzałe, ale nadal będzie je uwzględniać.
Oto kilka przypomnięć:
- Interfejsy API platformy ICU4J na Androida nie obejmują wszystkich interfejsów ICU4J.
- 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ź z pakietu com.ibm.icu na pakiet android.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ąć 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 klasy w pakietach java
i android
mają odpowiedniki w pakiecie ICU4J. Jednak ICU4J często zapewnia szerszą obsługę standardów i języków.
Tabela 2 zawiera kilka przykładów tych odpowiedników:
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 od wersji NDK r22b.
Interfejs C++ nie jest udostępniany przez NDK Androida. Niektóre interfejsy API w języku C są niedostępne.
Obsługa wersji
Kolejne wersje platformy Android odpowiadają nowszych wersji ICU oraz odpowiadających im wersji CLDR i Unicode. Tabela 3 przedstawia tę zgodność od Androida 7.0 (poziom interfejsu API 24). Aby uzyskać informacje o wersji ICU w czasie działania, użyj interfejsu API
VersionInfo.ICU_VERSION
(dostępnego od Androida 7.0).
Platforma (poziom interfejsu API) | OIOM | CLDR | Unicode |
---|---|---|---|
Android 7.0–7.1 (poziomy interfejsu 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 API 31–32) | 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 35 interfejsu API) | 75,1 | 45 | 15.1 |
Ustawienie formatu czasu 24-godzinnego/12-godzinnego
ICU na Androidzie nie uwzględnia ustawień formatu czasu 24-godzinnego lub 12-godzinnego użytkownika uzyskanych zDateFormat.is24HourFormat()
.
Aby zastosować to ustawienie, użyj metod formatowania czasu DateFormat
lub DateUtils
lub użyj wzorów formatowania czasu ICU z odpowiednimi symbolami godzin ('h' dla 12 godzin, 'H' dla 24 godzin) dla różnych wartości zwracanych przez is24HourFormat()
.
Ten kod generuje ciąg znaków z aktualną godziną, uwzględniając ustawienie czasu 12-godzinnego lub 24-godzinnego użytkownika:
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) można używać znakuTransliterator
do transliteracji tekstu z jednego formatu na inny. 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, które można uzyskać z
Transliterator.getAvailableIDs()
.
Licencjonowanie
ICU4J jest udostępniany na licencji ICU. Szczegółowe informacje znajdziesz w przewodniku użytkownika po ICC.