Разработчик (и) | Консорциум Unicode |
---|---|
Первоначальный выпуск | 1999 |
Стабильный выпуск | 67.1 / 22 апреля 2020 г.; 5 месяцев назад (2020-04-22) |
Репозиторий | |
Написано на | C /C ++ (C + +11) и Java |
Операционная система | Кросс-платформенная |
Тип | библиотеки для Unicode и интернационализации |
Лицензия | Лицензия Unicode |
Веб-сайт | www.icu-project.org |
Международные компоненты для Unicode (ICU ) является открытым исходным кодом проект зрелых библиотек C /C ++ и Java для поддержки Unicode, программного обеспечения интернационализации и глобализации программного обеспечения. ICU широко переносится во многие операционные системы и среды. Он дает приложениям одинаковые результаты на всех платформах и между программным обеспечением C, C ++ и Java. Проект ICU является техническим комитетом Консорциума Unicode и спонсируется, поддерживается и используется IBM и многими другими компаниями.
ICU предоставляет следующие услуги: Unicode обработка текста, полные свойства символов и преобразование набора символов ; Юникод регулярные выражения ; полные наборы Unicode; границы символов, слов и строк; с учетом языка сопоставление и поиск; нормализация, преобразование верхнего и нижнего регистра и транслитерация скрипта ; комплексная локаль архитектура пакета данных и ресурсов через Common Locale Data Repository (CLDR); мульти- календарь и часовые пояса ; и основанное на правилах форматирование и анализ дат, времени, чисел, валют и сообщений. ICU исторически предоставляла услугу сложной текстовой компоновки для арабского, иврита, индийского и тайского языков, но она устарела в версии 54 и была полностью удалена в версии 58 в пользу HarfBuzz.
. ICU предоставляет более широкие возможности интернационализации, чем стандартные библиотеки для C и C ++. ICU 67 поддерживает Unicode 13.0 и обрабатывает удаление Великобритании из регионов ЕС. ICU 64 поддерживает Unicode 12.0, в то время как ICU 64.2 добавила поддержку Unicode 12.1, то есть единственного нового символа для нынешней японской эпохи Reiwa (но поддержка для него также была перенесена в более старые версии ICU до ICU 4.8.2). ICU 58 (с поддержкой Unicode 9.0) - последняя версия, поддерживающая старые платформы, такие как Windows XP, Windows Vista. Поддержка AIX, Solaris и z / OS также ограничена в более поздних версиях.
ICU исторически использовал UTF-16, и по-прежнему работает только для Java; в то время как для C / C ++ поддерживается UTF-8, включая правильную обработку «недопустимого UTF-8».
После того, как Taligent стал частью IBM в начале 1996 года, Sun Microsystems решили, что новый язык Java должен лучше поддерживать интернационализацию. Поскольку Taligent имела опыт работы с такими технологиями и была близка географически, их группе Text и International было предложено внести международные классы в Java Development Kit в рамках интернационализации JDK 1.1 API. Большая часть этого кода все еще существует в пакетах java.text
и java.util
. Дополнительные функции интернационализации добавлялись с каждым последующим выпуском Java.
Затем классы интернационализации Java были перенесены на C ++ и C как часть библиотеки, известной как ICU4C («ICU для C»). Проект ICU также предоставляет ICU4J («ICU для Java»), который добавляет функции, отсутствующие в стандартных библиотеках Java. ICU4C и ICU4J очень похожи, хотя и не идентичны; например, ICU4C включает API регулярных выражений, а ICU4J - нет. Обе платформы со временем были усовершенствованы для поддержки новых возможностей и новых функций Unicode и Common Locale Data Repository (CLDR).
ICU был выпущен как проект с открытым исходным кодом в 1999 году под названием IBM Classes for Unicode. Позже он был переименован в Международные компоненты для Unicode. В мае 2016 года проект ICU присоединился к консорциуму Unicode в качестве технического комитета ICU-TC, и исходные тексты библиотеки теперь распространяются по лицензии Unicode.
Часть ICU является MessageFormat класс, система форматирования "локализация 2.0" (l20n), которая позволяет любому количеству аргументов управлять формой множественного числа (множественное число
, selectordinal
) или более общий switch-case выбор стиля (select
) для таких вещей, как грамматический род. Эти утверждения могут быть вложенными. Порт JavaScript этой библиотеки обычно используется разработчиками Angular.js в сочетании с ngx-translate
, так что простая библиотека на основе ключей может обрабатывать нюансы входы локализации. Пример для этой системы может выглядеть так:
# Использование YAML для простоты примера. привет: Привет, {пользователь}! # offset позволяет вычитать категории на указанную сумму перед обработкой. Однако это не влияет на систему точного соответствия. party: {user} пригласил {player_count, plural, offset: 1, = 0 {никто} один {игрок} другой {# Players}} в {user_gender, select, male {his}, female {her}, other { их}} партия.
// Используя простую форму https://messageformat.github.io/messageformat/page-build импортировать сообщение из функции './example.yaml' say (messageKey, options) {console.log (msg [messageKey ] (options))} say ('hello', {user: 'Jimmy'}) // Привет, Джимми! say ('party', {user: 'Whales', player_count: 5000, user_gender: 'male'}) // Кит пригласил в свою игру 4999 игроков. say ('party', {user: 'Dolphin', player_count: 20, user_gender: 'other'}) // Дельфин пригласил 19 игроков в свою игру. say ('party', {user: 'Elephant', player_count: 1, user_gender: 'female'}) // Elephant никого не пригласил в свою игру.
Обратите внимание, что ICU не вызывает MessageFormat как систему l20n. Термин происходит от одноименной библиотеки JavaScript от Mozilla с аналогичной функциональностью, которая позже была заменена другой системой JavaScript, названной «Fluent».
ICU MessageFormat был создан путем добавления системы множественного числа и выбора к системе с идентичным именем в Java SE.