# icu

Комплексная библиотека для поддержки интернационализации (i18n) и локализации (l10n) в приложениях. Она предоставляет полный набор инструментов для работы с Unicode, преобразования текста, форматирования данных с учетом языковых стандартов и других операций, необходимых для создания приложений, поддерживающих множество языков и культур. Библиотека используется в операционных системах, браузерах и корпоративных приложениях для обеспечения кросс-платформенной поддержки интернационализации.

## Особенности

- полная поддержка стандарта Unicode и всех связанных с ним технологий;
- форматирование чисел, дат, времени, валют с учетом локали;
- преобразование текста (транслитерация, нормализация, регистр);
- анализ и обработка текста (разбивка на слова, предложения, символы);
- поддержка двунаправленного текста (BIDI) для языков с написанием справа налево.

## Основные компоненты

ICU состоит из нескольких модулей, каждый из которых отвечает за определенный аспект интернационализации и работы с Unicode (подробнее с документацией можно ознакомиться [здесь](https://unicode-org.github.io/icu-docs/)).

### Обработка Unicode и текста

Библиотека предоставляет фундаментальные функции для работы с текстом в формате Unicode, включая нормализацию, преобразование регистра, поддержку различных систем письма и обработку специальных символов.

Ключевые функции обработки текста:

- `u_strToUpper()`, `u_strToLower()`, `u_strToTitle()` — преобразование регистра с учетом локали;
- `unorm_normalize()` — нормализация Unicode (NFC, NFD, NFKC, NFKD);
- `u_strHasMoreChar32()` и `u_strNext32()` — итерация по символам Unicode (code points);
- `u_getIntPropertyValue()` — получение свойств символов Unicode;
- `ubidi_open()` и `ubidi_setPara()` — обработка двунаправленного текста (BIDI).

### Форматирование данных с учетом локали

ICU предоставляет мощные средства для форматирования чисел, дат, времени, валют и других типов данных в соответствии с правилами конкретного языка и региона. Эти функции учитывают все особенности локали, включая разделители, валютные символы и порядок элементов.

Функции форматирования:

- `icu::NumberFormat` — форматирование чисел (целых, дробных, процентов, валют);
- `icu::DateFormat` — форматирование дат и времени (различные стили, календарные системы);
- `icu::MessageFormat` — форматирование сообщений с плюрализацией и выбором по полу;
- `icu::PluralFormat` и `icu::PluralRules` — работа с формами множественного числа;
- `icu::MeasureFormat` — форматирование единиц измерения.

### Преобразования кодировок и текста

Библиотека включает систему преобразования текста между различными кодировками, а также инструменты для транслитерации и других преобразований текста. Поддерживаются сотни кодировок, включая все современные стандарты.

Функции преобразования:

- `icu::Converter` — преобразование между различными кодировками (ICU4C: `ucnv_open()`, `ucnv_convert()`);
- `icu::Transliterator` — транслитерация текста между системами письма;
- `icu::IDNA` — обработка доменных имен в международных форматах (IDNA 2003/2008);
- `icu::StringPrep` — подготовка строк по стандарту SASLprep, Nameprep и другим.

### Анализ текста и границ

ICU предоставляет средства для лингвистического анализа текста, включая определение границ символов, слов, предложений и строк. Это особенно важно для правильного отображения текста, переноса слов и текстового поиска.

Функции анализа:

- `icu::BreakIterator` — определение границ символов, слов, предложений и строк;
- `icu::CharsetDetector` — автоматическое определение кодировки текста;
- `icu::Collator` — сравнение и сортировка строк с учетом локали;
- `icu::StringSearch` — поиск подстрок с учетом особенностей языка.

### Календари и временные зоны

Библиотека поддерживает различные календарные системы (григорианский, исламский, еврейский, китайский и др.) и предоставляет инструменты для работы с временными зонами по всему миру.

Функции работы с календарями и временем:

- `icu::Calendar` — абстракция календаря с поддержкой множества календарных систем;
- `icu::TimeZone` — работа с временными зонами (конвертация, получение смещений);
- `icu::SimpleDateFormat` — форматирование дат и времени для конкретного календаря;
- Расчеты с датами (добавление, вычитание, получение полей).
