В интернационализации пользовательских интерфейсов ключевую роль играет корректная работа с системами письма (scripts) и направлением текста (text directionality). В JavaScript-экосистеме эти задачи часто решаются через Globalize, опирающийся на данные CLDR и стандарты Unicode.
Система письма представляет собой набор графических символов и правил их использования для записи языка. В рамках интернационализации это понятие расширяется до связки:
Примеры:
В Unicode каждая письменность идентифицируется четырёхбуквенным кодом
ISO 15924: Latn, Cyrl, Arab,
Hani и др. Эти коды используются в CLDR и, следовательно, в
Globalize для выбора локализованных правил отображения данных.
Globalize не «рисует» символы и не выполняет рендеринг текста, но определяет, как данные должны интерпретироваться и форматироваться в зависимости от языка и письменности.
Структура локали обычно включает язык и, при необходимости, письменность:
en — английский (по умолчанию латиница)sr-Cyrl — сербский на кириллицеzh-Hans — упрощённый китайский (Simplified Han)zh-Hant — традиционный китайский (Traditional Han)ar — арабский язык (арабское письмо
подразумевается)Globalize использует данные CLDR, где script subtags играют важную роль при выборе:
Хотя система письма напрямую не влияет на математические операции, она определяет представление результата, особенно при форматировании пользовательского интерфейса.
Направление текста — это фундаментальное свойство письменности, определяющее порядок отображения символов в строке.
Основные направления:
Примеры:
Unicode задаёт алгоритм двунаправленного текста (Bidirectional Algorithm), который определяет порядок отображения смешанных строк, содержащих LTR и RTL сегменты.
Globalize не реализует bidi-алгоритм самостоятельно, но предоставляет данные, необходимые для интеграции с UI-слоем, где этот алгоритм уже применяется (например, браузерным движком).
В реальных приложениях часто встречаются смешанные строки:
Например:
مرحبا user123، لديك 5 رسائل جديدة
Без корректной обработки направления текста визуальный порядок символов может не совпадать с логическим.
Unicode определяет:
Эти классы используются для вычисления визуального порядка отображения.
Globalize, работая поверх CLDR, предоставляет информацию о локали, которая позволяет корректно интерпретировать такие строки в связке с UI-слоем.
CLDR содержит структурированные данные о локалях, включая:
Для арабского языка CLDR определяет:
Для английского:
Globalize использует CLDR как источник истины, что позволяет унифицировать поведение форматирования вне зависимости от браузера или платформы.
Globalize опирается на CLDR JSON-данные, где присутствуют записи, связанные с языками и письменностями.
Основные сценарии:
Пример структуры данных CLDR:
{
"main": {
"ar": {
"identity": {
"language": { "type": "ar" },
"script": { "type": "Arab" },
"territory": { "type": "EG" }
}
}
}
}
Script здесь определяет базовую письменность, используемую для языка.
Хотя числа универсальны, их представление зависит от письменности.
Примеры:
Globalize, используя CLDR, может форматировать числа в зависимости от локали:
Пример:
Globalize("ar").numberFormatter()(1234.56);
Результат зависит от локали и может использовать восточно-арабские цифры и запятые/точки в соответствии с региональными правилами.
Направление текста влияет не только на строки, но и на:
Для RTL-интерфейсов:
Globalize не управляет DOM, но его данные используются для принятия решений на уровне UI-фреймворков.
При смене локали меняется не только язык, но и:
Пример сценариев:
en → латиница, LTRar → арабское письмо, RTLhe → иврит, RTLru → кириллица, LTRЭто требует от системы UI динамического пересчёта layout.
В сложных интерфейсах встречаются комбинации:
Unicode bidi-алгоритм обеспечивает базовую корректность, но разработчики должны учитывать:
Globalize помогает на уровне данных, предоставляя правильные локализованные строки и числовые представления.
Некоторые языки используют несколько письменностей:
CLDR учитывает такие случаи через расширенные локали:
sr-Cyrlsr-LatnGlobalize использует эти различия для корректного выбора форматов и правил отображения.
Формат даты может визуально меняться в зависимости от script и direction:
12/05/2026CLDR задаёт предпочтительные форматы:
Globalize применяет эти данные при форматировании:
Globalize("ar").dateFormatter({ datetime: "medium" })(new Date());
Сортировка (collation) зависит от письменности:
CLDR предоставляет collation tables, которые Globalize использует для:
Это особенно важно в многоязычных интерфейсах, где смешиваются разные scripts.
Globalize выполняет роль слоя абстракции между:
Его задачи:
Вся логика script и direction остаётся декларативной: данные описываются в CLDR, а Globalize предоставляет API для их использования.
Система письма влияет не только на визуальное представление, но и на:
LTR интерфейсы обычно предполагают линейное движение слева направо, тогда как RTL требует зеркалирования структуры.
В многоязычных приложениях это приводит к необходимости:
Globalize обеспечивает корректность данных, но семантическая адаптация выполняется на уровне UI-слоя с учётом его локализованных данных.