Android korzysta z biblioteki IU i projektu CLDR, aby zapewnić obsługę standardu Unicode oraz innych procesów internacjonalizacji. Omówienie obsługi Unicode i internacjonalizacji jest podzielone na 2 sekcje: Android 6.0 (poziom interfejsu API 23) i starszy oraz Android 7.0 (poziom API 24) i nowsze.
Obsługa Unicode i internacjonalizacji w Androidzie 6.0 (poziom API 23)
Platforma Android używa ICU i CLDR do wdrażania różnych klas do obsługi ortograficznych alfabetów łacińskich i innych niż łacińskie, a także klas ekspozycji, takich jak Locale
, Character
i wielu podklas, w tym java.text
. Aplikacja, która wymaga funkcji internacjonalizacji wykraczających poza dostępne klasy i jest kierowana na wersje platformy na Androida 6.0 (poziom interfejsu API 23), musi zawierać bibliotekę ICU.
Obsługa wersji
Kolejne wersje platformy Androida odpowiadają nowszym wersjom ICU oraz odpowiednim wersjom CLDR i Unicode. Tabela 1 przedstawia tę zależność 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 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 interfejsu 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 API 18) | 50 | 22,1 | 6.2 |
Android 4.4 (poziomy interfejsu API 19–20) | 51 | 23 | 6.2 |
Android 5.0 (poziomy interfejsu API 21–22) | 53 | 25 | 6.3 |
Android 6.0 (poziom API 23) | 55,1 | 27.0.1 | 7,0 |
Platforma Android zapewnia bardziej kompleksową obsługę Unicode oraz internacjonalizacji w przypadku aplikacji kierowanych na Androida 7.0 (poziom API 24) i nowsze. W następnej sekcji tej strony znajdziesz szczegółowe informacje o tej obsłudze.
Obsługa Unicode i internacjonalizacji na 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 API ICU4J deweloperom aplikacji w ramach pakietu android.icu
.
ICU4J to powszechnie używany zestaw bibliotek Java typu open source, umożliwiający obsługę kodowania Unicode i internacjonalizacji dla aplikacji.
Interfejsy ICU4J API używają danych lokalizacyjnych znajdujących się na urządzeniu. W rezultacie możesz zmniejszyć użycie pamięci aplikacji, nie instalując w niej bibliotek ICU4J. Zamiast tego możesz zwracać się do nich w ramach platformy. Jeśli to zrobisz, możesz udostępnić kilka 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.
Na początku tej sekcji przedstawiamy podstawowe informacje o minimalnych poziomach interfejsu Android API wymaganych do obsługi tych bibliotek. Wyjaśniono w nim, co należy wiedzieć o implementacji ICU4J w Androidzie. Szkolenie zawiera też instrukcje korzystania z interfejsów API ICU4J w platformie Androida.
ICU4J na Androidzie
Android ujawnia 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 powodu ich wycofania lub niezadeklarowania jako stabilnej. Ponieważ zespół ICU wycofuje interfejsy API w przyszłości, Android również oznaczy je jako wycofane, ale nadal będzie je uwzględniać.
Oto kilka przypomnień:
- Interfejsy API platformy Android ICU4J nie zawierają wszystkich interfejsów ICU4J.
- Interfejsy API w ramach platformy Android nie zastępują obsługi lokalizowania za pomocą zasobów obsługiwanego przez Androida.
- 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ź ze strony com.ibm.icu na pakiet android.icu
Jeśli w swojej aplikacji korzystasz już z interfejsów API ICU4J, a interfejsy API android.icu
spełniają Twoje wymagania, migracja do interfejsów API platformy wymaga zmiany importów w Javie z com.ibm.icu
na android.icu
. Potem możesz usunąć z aplikacji własną kopię plików ICU4J.
Uwaga: interfejsy API platformy ICU4J używają przestrzeni nazw android.icu
zamiast com.ibm.icu
. Ma to na celu uniknięcie konfliktów przestrzeni nazw 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ą swoje odpowiedniki w ICU4J. ICU4J często jednak zapewnia szerszą obsługę standardów i języków.
Na początek tabela 2 zawiera kilka przykładów porównań:
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 ujawnia podzbiór interfejsów API ICU4C za pomocą biblioteki libicu.so
, a nie libicuuc.so
czy libicui18n.so
. Interfejsy API są dostępne od Androida 12 (poziom API 31). Nagłówki NDK są dostępne od wersji r22b NDK.
Żaden interfejs API C++ nie jest dostępny w pakiecie NDK Androida. Niektóre interfejsy API typu C są niedostępne.
Obsługa wersji
Kolejne wersje platformy Androida odpowiadają nowszym wersjom ICU oraz odpowiednim wersjom CLDR i Unicode. Tabela 3 przedstawia tę korespondencję od Androida 7.0 (poziom API 24).
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 31 interfejsu API) | 68,2 | 38,1 | 13,0 |
Ustawienie formatu godziny: 24 godz./12 godz.
Okienko ICU na urządzeniu z Androidem nie obserwuje ustawienia formatu godziny 24 godzin i 12 godzin użytkownika (uzyskane zDateFormat.is24HourFormat()
).
Aby obserwować to ustawienie, użyj metod formatowania czasu DateFormat
lub DateUtils
lub wzorców formatowania czasu ICU z odpowiednimi symbolami godzin („h” – 12 godz., „H” – 24 godz.) dla różnych wartości zwracanych parametru is24HourFormat()
.
Na przykład ten kod generuje ciąg znaków z bieżącą godziną zgodną z ustawieniem 12/24 godz.
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) dostępny jest interfejsTransliterator
do transliteracji tekstu z jednego formatu na inny. Zbiór dostępnych identyfikatorów translacji jest niestabilny w przypadku różnych wersji i urządzeń z Androidem. Producenci urządzeń mogą dodać dodatkowe identyfikatory transliteracji. Przed transliteracją tekstu deweloperzy muszą sprawdzić dostępne identyfikatory uzyskane z kodu
Transliterator.getAvailableIDs()
.
Licencjonowanie
Zwolnienie z ICU4J w ramach licencji na OIOM-ie. Szczegółowe informacje znajdziesz w przewodniku użytkownika ICC (w języku angielskim).