Android wykorzystuje bibliotekę ICU i projekt CLDR, aby zapewnić obsługę standardu Unicode i innych funkcji internacjonalizacji. Omówienie obsługi standardu Unicode i internacjonalizacji na tej stronie jest 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 standardu Unicode i internacjonalizacji w Androidzie 6.0 (poziom interfejsu API 23)
Platforma Androida używa ICU i CLDR do implementowania różnych klas do obsługi ortografii łacińskiej i niełacińskiej, udostępniając 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 do 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 te zależności do 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 API 14–15) | 4,6 | 1,9 | 6.0 |
| Android 4.1 (poziomy 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 (poziomy 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ę standardu Unicode i internacjonalizacji w przypadku aplikacji kierowanych na Androida 7.0 (poziom interfejsu API 24) lub nowszego. W następnej sekcji tej strony znajdziesz szczegółowe informacje o tej pomocy.
Obsługa standardu Unicode i internacjonalizacji na 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 w pakiecie android.icu.
ICU4J to powszechnie używany zestaw bibliotek Java typu open source, który zapewnia obsługę standardu Unicode i internacjonalizacji w aplikacjach.
Interfejsy API ICU4J korzystają z danych lokalizacyjnych dostępnych na urządzeniu. Dzięki temu możesz zmniejszyć rozmiar aplikacji, nie kompilując w niej bibliotek ICU4J. Zamiast tego możesz wywoływać je w środowisku. 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 (interfejs API na poziomie 24) mogli pobrać wersję aplikacji zawierającą biblioteki ICU4J.
Ta sekcja zaczyna się od podstawowych informacji 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 API ICU4J w platformie Androida.
ICU4J na Androidzie
Android udostępnia podzbiór interfejsów ICU4J API w pakiecie android.icu, a nie com.ibm.icu. Niektóre interfejsy API ICU4J nie są udostępniane przez platformę Androida, ponieważ zostały wycofane lub nie zostały uznane za stabilne. Gdy w przyszłości zespół ICU wycofa interfejsy API, Android również oznaczy je jako wycofane, ale nadal będzie je uwzględniać.
Oto kilka przypomnień:
- Interfejsy API platformy Androida ICU4J nie obejmują wszystkich interfejsów API ICU4J.
- Interfejsy API w platformie Androida nie zastępują obsługi lokalizacji za pomocą zasobów.
- W niektórych przypadkach platforma Androida obsługuje więcej znaków niż biblioteki ICU. Dotyczy to na przykład obsługi emotikonów przez klasę
android.text.
Przejście z pakietu com.ibm.icu na android.icu
Jeśli używasz już interfejsów ICU4J API w aplikacji i interfejsy android.icu API spełniają Twoje wymagania, przejście na interfejsy API platformy wymaga zmiany importów Java z com.ibm.icu na android.icu. Następnie 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ą odpowiedniki w ICU4J. Jednak ICU4J często zapewnia szerszą obsługę standardów i języków.
Tabela 2 zawiera kilka przykładów takich odpowiedników:
Tabela 2. Klasy ICU4J w Androidzie i Javie
| Klasa | 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 czy libicui18n.so. Interfejsy API są dostępne od Androida 12 (poziom API 31). Nagłówki NDK są dostępne od wersji NDK r22b.
Interfejs API C++ nie jest udostępniany przez Android NDK. Niektóre interfejsy API języka C są niedostępne.
Obsługa wersji
Kolejne wersje platformy Androida odpowiadają nowszym wersjom ICU oraz odpowiednim wersjom CLDR i Unicode. Tabela 3 przedstawia te zależności od Androida 7.0 (poziom 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 (poziom API 24) do Androida 15 (poziom API 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 24h/12h
ICU na Androidzie nie uwzględnia ustawienia formatu czasu 24-godzinnego/12-godzinnego użytkownika, które jest pobierane zDateFormat.is24HourFormat().
Aby zastosować to ustawienie, użyj metod formatowania czasu DateFormat lub DateUtils albo wzorców formatowania czasu ICU z odpowiednimi symbolami wzorca godziny („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 12- lub 24-godzinne 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 API 29) dostępna jest klasaTransliterator, która umożliwia transliterację 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.