Android korzysta z biblioteki ICU i projektu CLDR, aby zapewnić obsługę Unicode i innych funkcji internacjonalizacji. Omówienie obsługi Unicode i internacjonalizacji na tej stronie zostało podzielone na 2 sekcje: Android 6.0 (poziom interfejsu API 23) i starsze wersje oraz Android 7.0 (poziom interfejsu API 24) i nowsze wersje.
Obsługa Unicode i internacjonalizacji w Androidzie 6.0 (poziom interfejsu API 23)
Platforma Android korzysta z ICU i CLDR do implementowania różnych klas obsługujących ortografie oparte na alfabecie łacińskim i innych alfabetach. Udostępnia klasy takie jak Locale
, Character
i wiele podklas java.text
. Aplikacja, która wymaga funkcji internacjonalizacji wykraczających poza udostępnione klasy i jest kierowana na wersje platformy starsze niż Android 6.0 (API na poziomie 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ę zależność w przypadku Androida 6.0 (poziom interfejsu API 23).
Tabela 1. Wersje ICU i CLDR używane w Androidzie 6.0 (poziom interfejsu API 23).
Platforma (poziom interfejsu API) | OIOM | CLDR | Unicode |
---|---|---|---|
Android 1.5–2.0 (poziomy 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 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 18 interfejsu API) | 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 23 interfejsu API) | 55,1 | 27.0.1 | 7,0 |
Platforma Androida zapewnia bardziej kompleksową obsługę Unicode i internacjonalizacji w przypadku aplikacji kierowanych na Androida 7.0 (poziom interfejsu API 24) i nowsze wersje. W następnej sekcji tej strony znajdziesz szczegółowe informacje o tej pomocy.
Obsługa Unicode i internacjonalizacji 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 deweloperom aplikacji podzbiór interfejsów API ICU4J do używania w pakiecie android.icu
.
ICU4J to zestaw bibliotek Java typu open source, które są powszechnie używane i zapewniają obsługę Unicode i internacjonalizacji w aplikacjach.
Interfejsy ICU4J API korzystają z danych lokalizacyjnych dostępnych na urządzeniu. Dzięki temu możesz zmniejszyć rozmiar aplikacji, ponieważ nie musisz kompilować w niej bibliotek ICU4J. Zamiast tego możesz wywoływać je w ramach platformy. Jeśli to zrobisz, możesz udostępnić kilka wersji pliku APK, aby użytkownicy korzystający z wersji Androida starszych niż Android 7.0 (poziom 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 na Androidzie. Na koniec dowiesz się, jak używać interfejsów ICU4J API w platformie Android.
ICU4J na Androidzie
Android udostępnia podzbiór interfejsów API ICU4J w pakiecie android.icu
, a nie com.ibm.icu
. Niektóre interfejsy API ICU4J nie są udostępniane przez platformę Android z różnych powodów, np. ze względu na to, że są wycofane lub nie zostały uznane za stabilne. Gdy zespół ICU wycofa w przyszłości interfejsy API, Android również oznaczy je jako przestarzałe, ale nadal będzie je uwzględniać.
Oto kilka przypomnień:
- Interfejsy API platformy ICU4J na Androida nie obejmują wszystkich interfejsów API ICU4J.
- Interfejsy API w platformie Android nie zastępują obsługi lokalizacji za pomocą zasobów w Androidzie.
- W niektórych przypadkach platforma Android obsługuje więcej znaków niż biblioteki ICU. Dotyczy to na przykład obsługi emoji przez klasę
android.text
.
Przejście z pakietu com.ibm.icu na pakiet android.icu
Jeśli w aplikacji używasz już interfejsów ICU4J API, a interfejsy android.icu
API spełniają Twoje wymagania, migracja do interfejsów framework API wymaga zmiany importów Java z com.ibm.icu
na android.icu
. Następnie możesz usunąć własną kopię plików ICU4J z aplikacji.
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
.
Przejście z innych interfejsów Android SDK API na interfejsy android.icu API
Niektóre klasy w pakietach java
i android
mają odpowiedniki w ICU4J. Biblioteka ICU4J często zapewnia jednak szerszą obsługę standardów i języków.
W tabeli 2 znajdziesz przykłady tych odpowiedników, które pomogą Ci zacząć:
Tabela 2. Klasy ICU4J na Androidzie i 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
ani libicui18n.so
. Interfejsy API są dostępne od Androida 12 (poziom API 31). Nagłówki NDK są dostępne od wersji NDK r22b.
W Androidzie NDK nie ma interfejsu C++ API. Niektóre interfejsy API w języku C są niedostępne.
Obsługa wersji
Kolejne wersje platformy Android odpowiadają nowszym wersjom ICU oraz odpowiednim wersjom CLDR i Unicode. Tabela 3 przedstawia tę korespondencję
od Androida 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 w wersjach Androida od Androida 7.0 (API na poziomie 24) do Androida 15 (API na poziomie 35).
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–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 35 interfejsu API) | 75,1 | 45 | 15.1 |
Ustawienie formatu czasu 24-godzinnego lub 12-godzinnego
ICU na Androidzie nie uwzględnia ustawienia formatu czasu 24-godzinnego lub 12-godzinnego użytkownika, uzyskanego zDateFormat.is24HourFormat()
.
Aby sprawdzić to ustawienie, użyj metod formatowania czasu DateFormat
lub DateUtils
albo wzorców formatowania czasu ICU z odpowiednimi symbolami wzorca godzinowego („h” dla formatu 12-godzinnego, „H” dla formatu 24-godzinnego) dla różnych wartości zwracanych przez is24HourFormat()
.
Na przykład ten kod generuje ciąg znaków z bieżącą godziną, który uwzględnia 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 29 interfejsu API)Transliterator
służy 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 uzyskane z
Transliterator.getAvailableIDs()
.
Licencjonowanie
Biblioteka ICU4J jest udostępniana na licencji ICU. Więcej informacji znajdziesz w przewodniku użytkownika ICU.