Unicode CLDR (Common Locale Data Repository) представляет собой централизованное хранилище локализационных данных, используемых в международных программных интерфейсах. Эти данные формируют основу того, как программные системы отображают числа, даты, валюты, тексты и грамматические конструкции в зависимости от локали пользователя.
CLDR поддерживается консорциумом Unicode и описывает правила и шаблоны представления информации для сотен языков и регионов. Он не является библиотекой исполнения, а выступает источником стандартизированных данных, которые интегрируются в реализации международных API, включая ECMAScript Internationalization API (Intl).
Базовым элементом CLDR является локаль, описываемая через
идентификаторы вида language, language-region,
language-script-region.
Примеры:
enen-GBruzh-Hans-CNКаждая локаль наследует данные от более общих локалей. Если специфичное правило отсутствует, используется fallback-цепочка до базовых значений.
Формат описания данных в CLDR основан на Locale Data Markup Language (LDML), который задаёт унифицированную структуру представления локализационных правил. LDML определяет секции для чисел, дат, календарей, единиц измерения и других аспектов форматирования.
ECMAScript Internationalization API не реализует локализационные правила самостоятельно. В большинстве движков JavaScript (V8, SpiderMonkey, JavaScriptCore) Intl построен поверх ICU (International Components for Unicode), а ICU использует CLDR как основной источник локализационных данных.
Таким образом формируется цепочка:
CLDR определяет поведение форматирования чисел для
Intl.NumberFormat.
Ключевые элементы:
Пример влияния CLDR:
1000000 → 1,000,000 (en-US)1000000 → 1 000 000 (ru)Также поддерживаются разные системы счисления:
latn)Эти системы определяют не только цифры, но и правила их отображения в зависимости от локали.
Compact notation (например, “1M”, “1 млн”) также задаётся через CLDR-даты и шаблоны.
Модуль Intl.DateTimeFormat напрямую опирается на CLDR
для формирования шаблонов дат и времени.
CLDR содержит:
Календарные системы:
Каждая локаль может использовать собственные правила представления дат, включая порядок компонентов (день/месяц/год), разделители и формат времени (12/24 часа).
CLDR также определяет skeleton patterns — абстрактные шаблоны, которые ICU преобразует в конкретные форматы.
Intl.PluralRules использует CLDR для определения
грамматических категорий множественного числа.
CLDR описывает набор категорий:
onefewmanyotherzero (в некоторых локалях)Каждый язык имеет собственные условия выбора формы.
Пример логики:
1 item vs 2 items1 файл, 2 файла,
5 файловCLDR формализует эти правила через числовые диапазоны и выражения, что позволяет корректно обрабатывать даже сложные славянские и семитские языки.
Intl.RelativeTimeFormat использует CLDR для построения
выражений вроде:
CLDR предоставляет:
Например, для разных локалей отличаются конструкции:
Intl.ListFormat базируется на CLDR list patterns.
CLDR определяет:
Примеры:
Различаются также стили:
longshortnarrowКаждый стиль задаёт разный уровень формальности и компактности.
Intl.Collator использует данные Unicode Collation
Algorithm (UCA), но CLDR предоставляет локализованные настройки
collation tailoring.
Это включает:
Например:
Intl.DisplayNames опирается на CLDR для отображения
человекочитаемых названий:
ru → «русский»)DE → «Германия»)Latn → «латиница»)CLDR хранит эти данные в стандартизированном виде для сотен локалей, обеспечивая корректное отображение даже редких языков и регионов.
CLDR содержит механизм likelySubtags — вероятных дополнений локали.
Например:
en → en-Latn-USzh → zh-Hans-CNЭто позволяет системе уточнять локаль до полного набора параметров:
Intl использует это для выбора наиболее подходящих правил форматирования.
CLDR регулярно обновляется и расширяется:
Объём данных значителен и включает десятки мегабайт структурированных XML/JSON-подобных описаний.
ICU интегрирует эти данные в бинарные форматы для оптимизации производительности, а JavaScript-движки используют предкомпилированные версии.
CLDR поддерживает различные системы отображения чисел:
Это влияет на:
Intl API позволяет переключать систему через параметр
numberingSystem, который напрямую связан с
CLDR-данными.
CLDR содержит:
$, €, ₸)Для единиц измерения:
CLDR определяет грамматически корректные формы:
Каждый основной объект Intl сопоставляется с соответствующими разделами CLDR:
Intl.NumberFormat → числа, валюты, компактные формы,
системы счисленияIntl.DateTimeFormat → календарные данные, временные
зоны, форматы датIntl.PluralRules → правила множественного числаIntl.RelativeTimeFormat → временные выраженияIntl.ListFormat → шаблоны списковIntl.Collator → collation tailoringIntl.DisplayNames → языки, регионы, скриптыCLDR выступает фундаментом, на котором строится согласованность всех этих API между разными языками и платформами.