Android использует библиотеку ICU и проект CLDR для обеспечения поддержки Unicode и других интернационализаций. Обсуждение на этой странице поддержки Unicode и интернационализации разделено на два раздела: Android 6.0 (уровень API 23) и ниже и Android 7.0 (уровень API 24) и выше.
Поддержка Unicode и интернационализации через Android 6.0 (уровень API 23)
Платформа Android использует ICU и CLDR для реализации различных классов для обработки как латинской, так и нелатинской орфографии, предоставляя такие классы, как Locale
, Character
и многие подклассы java.text
. Приложение, которому требуются функции интернационализации, выходящие за рамки представленных классов, и предназначенное для версий платформы до Android 6.0 (уровень API 23), должно включать библиотеку ICU.
Управление версиями
Последующие выпуски платформы Android соответствуют более новым версиям ICU и соответствующим версиям CLDR и Unicode. В таблице 1 показано это соответствие в Android 6.0 (уровень API 23).
Таблица 1. Версии ICU и CLDR, используемые в Android 6.0 (уровень API 23).
Платформа (уровень API) | отделение интенсивной терапии | КЛДР | Юникод |
---|---|---|---|
Android 1.5–2.0 (уровни API 3–7) | 3,8 | 1,5 | 5.0 |
Android 2.2 (уровень API 8) | 4.2 | 1,7 | 5.1 |
Android 2.3–3.0 (уровни API 9–13) | 4.4 | 1,8 | 5.2 |
Android 4.0 (уровни API 14–15) | 4.6 | 1,9 | 6.0 |
Android 4.1 (уровни API 16–17) | 4,8 | 2.0 | 6.0 |
Android 4.3 (уровень API 18) | 50 | 22.1 | 6.2 |
Android 4.4 (уровни API 19–20) | 51 | 23 | 6.2 |
Android 5.0 (уровни API 21–22) | 53 | 25 | 6.3 |
Android 6.0 (уровень API 23) | 55,1 | 27.0.1 | 7.0 |
Платформа Android обеспечивает более полную поддержку Unicode и интернационализацию приложений, предназначенных для Android 7.0 (уровень API 24) и выше. В следующем разделе этой страницы представлена подробная информация об этой поддержке.
Поддержка Unicode и интернационализации в Android 7.0 (уровень API 24) и выше.
Для Android 7.0 (уровень API 24) и более поздних версий платформа Android предоставляет разработчикам приложений подмножество API-интерфейсов ICU4J, которые они могут использовать в пакете android.icu
. ICU4J — это широко используемый набор Java-библиотек с открытым исходным кодом, обеспечивающий поддержку Unicode и интернационализации для программных приложений.
API-интерфейсы ICU4J используют данные локализации, имеющиеся на устройстве. В результате вы можете уменьшить объем вашего приложения, не компилируя библиотеки ICU4J в свое приложение. Вместо этого вы можете обратиться к ним в рамках. В этом случае вам может потребоваться предоставить несколько версий вашего APK , чтобы пользователи, использующие версии Android ниже Android 7.0 (уровень API 24), могли загрузить версию приложения, содержащую библиотеки ICU4J.
Этот раздел начинается с предоставления некоторой базовой информации о минимальных уровнях Android API, необходимых для поддержки этих библиотек. Затем объясняется, что вам нужно знать о реализации ICU4J для Android. Наконец, здесь рассказывается, как использовать API-интерфейсы ICU4J в платформе Android.
ICU4J на Android
Android предоставляет подмножество API-интерфейсов ICU4J через пакет android.icu
, а не через com.ibm.icu
. Некоторые API-интерфейсы ICU4J не предоставляются платформой Android по таким причинам, как API-интерфейсы, которые устарели или не объявлены стабильными. Поскольку команда ICU в будущем откажется от API, Android также пометит их как устаревшие, но продолжит включать их.
Вот несколько напоминаний:
- API-интерфейсы платформы Android ICU4J не включают в себя все API-интерфейсы ICU4J.
- API-интерфейсы в платформе Android не заменяют поддержку Android для локализации с помощью ресурсов .
- В некоторых случаях платформа Android поддерживает больше символов, чем библиотеки ICU. Это относится, например, к поддержке эмодзи классом
android.text
.
Перейдите на пакет android.icu с com.ibm.icu.
Если вы уже используете API-интерфейсы ICU4J в своем приложении и API-интерфейсы android.icu
соответствуют вашим требованиям, то для перехода на API-интерфейсы платформы вам потребуется изменить импорт Java с com.ibm.icu
на android.icu
. Затем вы можете удалить свою копию файлов ICU4J из приложения.
Примечание . API-интерфейсы платформы ICU4J используют пространство имен android.icu
вместо com.ibm.icu
. Это сделано для того, чтобы избежать конфликтов пространств имен в приложениях, содержащих собственные библиотеки com.ibm.icu
.
Миграция на API android.icu из других API Android SDK.
Некоторые классы в пакетах java
и android
имеют эквиваленты классов в ICU4J. Однако ICU4J часто обеспечивает более широкую поддержку стандартов и языков.
В таблице 2 приведены некоторые примеры этих эквивалентов, которые помогут вам начать:
Таблица 2. Классы ICU4J для Android и Java
Сорт | Альтернативы |
---|---|
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 на Android
Android предоставляет подмножество API-интерфейсов ICU4C через библиотеку libicu.so
, а не libicuuc.so
или libicui18n.so
. API доступны начиная с Android 12 (уровень API 31). Заголовки NDK доступны, начиная с версии NDK r22b. API C++ не предоставляется через Android NDK. Некоторые API C недоступны.
Управление версиями
Последующие выпуски платформы Android соответствуют более новым версиям ICU и соответствующим версиям CLDR и Unicode. В таблице 3 показано это соответствие, начиная с Android 7.0 (уровень API 24). Используйте API VersionInfo.ICU_VERSION
(доступен, начиная с Android 7.0), чтобы получить информацию о версии ICU во время выполнения.
Таблица 3. Версии ICU и CLDR, используемые в версиях Android от Android 7.0 (уровень API 24) до Android 15 (уровень API 35).
Платформа (уровень API) | отделение интенсивной терапии | КЛДР | Юникод |
---|---|---|---|
Android 7.0–7.1 (уровни API 24–25) | 56 | 28 | 8.0 |
Android 8.0–8.1 (уровни API 26–27) | 58,2 | 30.0.3 | 9,0 |
Android 9 (уровень API 28) | 60,2 | 32.0.1 | 10,0 |
Android 10 (уровень API 29) | 63,2 | 34 | 11,0 |
Android 11 (уровень API 30) | 66,1 | 36 | 13,0 |
Android 12 (уровни API 31–32) | 68,2 | 38,1 | 13,0 |
Android 13 (уровень API 33) | 70,1 | 40 | 14,0 |
Android 14 (уровень API 34) | 72,1 | 42 | 15,0 |
Android 15 (уровень API 35) | 75,1 | 45 | 15.1 |
Настройка формата времени 24 часа/12 часов
ICU на Android не учитывает настройку формата времени пользователя в 24-часовом/12-часовом формате, полученную изDateFormat.is24HourFormat()
. Чтобы соблюдать этот параметр, либо используйте методы форматирования времени DateFormat
или DateUtils
, либо используйте шаблоны форматирования времени ICU с соответствующими символами шаблонов часов («h» для 12 часов, «H» для 24 часов) для разных возвращаемых значений is24HourFormat()
. Например, этот код генерирует строку с текущим временем, которая соответствует настройке пользователя 12 часов/24 часа: Котлин
val skeleton: String = if (DateFormat.is24HourFormat(context)) "Hm" else "hm" val formattedTime: String = android.icu.text.DateFormat.getInstanceForSkeleton( skeleton, Locale.getDefault()).format(Date() )
Ява
String skeleton = DateFormat.is24HourFormat(context) ? "Hm" : "hm"; String formattedTime = android.icu.text.DateFormat.getInstanceForSkeleton(skeleton, Locale.getDefault()).format(new Date());
Стабильность транслитератора
Начиная с Android 10 (уровень API 29), предоставляетсяTransliterator
для транслитерации текста из одного формата в другой. Набор доступных идентификаторов транслитерации нестабильен в разных версиях Android и на разных устройствах. Производители устройств могут добавлять дополнительные идентификаторы транслитерации. Разработчики должны проверить доступные идентификаторы, полученные из Transliterator.getAvailableIDs()
, перед транслитерацией текста.Лицензирование
ICU4J выпускается под лицензией ICU. Подробную информацию см. в руководстве пользователя ICU .