Особенности хинди

Локаль hi-IN (хинди, Индия) в JavaScript Internationalization API описывает поведение форматирования данных с учётом языковых, культурных и региональных особенностей хинди. Она основана на стандарте BCP 47 и комбинирует язык hi с регионом IN.

Основная задача локали — обеспечить корректное отображение чисел, дат, времени, текста и правил грамматики в соответствии с принятыми нормами Индии и хинди как языка.

Ключевые особенности:

  • письменность: Devanagari (देवनागरी)
  • направление письма: слева направо
  • специфическая система чисел и символов
  • культурно-обусловленные правила форматирования дат и времени

Письменность Devanagari и влияние на отображение текста

Хинди использует абугида-систему письма Devanagari, где символы обозначают слоги, а не отдельные фонемы. Это влияет не на сам Intl API напрямую, а на окружение отображения текста.

В контексте Intl API важны следующие аспекты:

  • строки остаются Unicode-совместимыми
  • сортировка и сравнение учитывают особенности лексикографического порядка
  • визуальное отображение зависит от шрифтов и рендеринга браузера

Пример строки на хинди:

भारत, दिल्ली, मुंबई

Intl API не трансформирует текст, но обеспечивает корректное сравнение и сортировку через Intl.Collator.


Числовые системы и особенности индийского форматирования

Для хинди-локали характерно использование двух систем записи чисел:

  1. Латинские цифры (0–9) — стандарт по умолчанию в большинстве JS-окружений
  2. Деванагари-цифры (०१२३४५६७८९) — традиционное представление

Intl API позволяет управлять этим через параметр numberingSystem.

Пример NumberFormat с хинди-локалью

const formatter = new Intl.NumberFormat('hi-IN');
formatter.format(1234567);

Результат (в зависимости от окружения):

12,34,567

Особенность индийской системы группировки:

  • первая группа: 3 цифры
  • последующие группы: по 2 цифры

Это отличается от западной системы (3-3-3):

Система Формат
США/Европа 1,234,567
Индия 12,34,567

Intl.NumberFormat и локаль hi-IN

Intl.NumberFormat в хинди-локали учитывает сразу несколько особенностей:

  • индийская система группировки разрядов
  • локальные обозначения валют
  • возможность выбора системы чисел

Валютное форматирование

new Intl.NumberFormat('hi-IN', {
  style: 'currency',
  currency: 'INR'
}).format(1500);

Возможный результат:

₹1,500.00

или (в зависимости от системных настроек):

₹ 1,500.00

Проценты и единицы измерения

new Intl.NumberFormat('hi-IN', {
  style: 'percent'
}).format(0.25);

Результат:

25%

Особенность: символы процентов и валют остаются латинскими, даже при использовании Devanagari-чисел.


Intl.DateTimeFormat и особенности календаря

Для локали hi-IN по умолчанию используется григорианский календарь, но с региональными форматами отображения дат.

new Intl.DateTimeFormat('hi-IN').format(new Date());

Типичный результат:

27/5/2026

Форматы дат

Можно явно управлять стилем:

new Intl.DateTimeFormat('hi-IN', {
  dateStyle: 'full'
}).format(new Date());

Возможный результат:

बुधवार, 27 मई 2026

(день недели и месяц отображаются на хинди)


Отображение времени

new Intl.DateTimeFormat('hi-IN', {
  timeStyle: 'short'
}).format(new Date());

Результат:

14:35

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

  • 24-часовой формат используется чаще
  • AM/PM зависит от системных настроек и может быть локализован

Intl.Collator и сортировка строк на хинди

Сортировка текстов в хинди-локали имеет важное значение из-за особенностей Unicode и Devanagari.

const collator = new Intl.Collator('hi-IN');

['अजय', 'करण', 'भारत'].sort(collator.compare);

Intl.Collator обеспечивает:

  • корректный порядок Unicode-символов
  • учет диакритики и составных символов
  • стабильную сортировку для индийских текстов

Параметры Collator

new Intl.Collator('hi-IN', {
  sensitivity: 'base',
  ignorePunctuation: true
});
  • sensitivity: 'base' — игнорирование различий в диакритике
  • ignorePunctuation — игнорирование знаков пунктуации

Intl.PluralRules и грамматика множественности

Хинди, как и многие индийские языки, имеет относительно простую систему множественности по сравнению с европейскими языками.

const pr = new Intl.PluralRules('hi-IN');

pr.select(1); // one
pr.select(2); // other

Основные категории:

  • one
  • other

Использование в прикладных системах

const messages = {
  one: '1 वस्तु',
  other: '{count} वस्तुएँ'
};

Intl.RelativeTimeFormat и временные выражения

Для выражений вроде «2 дня назад» используется Intl.RelativeTimeFormat.

const rtf = new Intl.RelativeTimeFormat('hi-IN');

rtf.format(-2, 'day');

Результат:

2 दिन पहले

Примеры единиц:

  • second
  • minute
  • hour
  • day
  • month
  • year

Положительные значения:

rtf.format(3, 'day');
3 दिन में

NumberingSystem и Devanagari-цифры

Intl API поддерживает альтернативные системы чисел:

new Intl.NumberFormat('hi-IN-u-nu-deva').format(123);

Результат:

१२३

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

  • используется Unicode extension nu-deva
  • цифры отображаются в системе Devanagari
  • применяется только при поддержке окружения

Региональные различия внутри hi-IN

Несмотря на единый язык, форматирование может варьироваться:

  • различия в отображении даты (DD/MM/YYYY vs локальные вариации)
  • различия в валютных форматах
  • различия в использовании запятой и пробела как разделителя

Intl API абстрагирует эти различия, но браузер и ОС могут вносить изменения в итоговый вывод.


Unicode и комбинированные символы

Devanagari использует сложные Unicode-композиции:

  • базовый символ + матра
  • лигатуры
  • диакритические комбинации

Пример:

कि + ा = क्या

Intl API не изменяет такие строки, но:

  • Collator учитывает нормализацию Unicode
  • сравнение строк зависит от формы представления (NFC/NFD)

Особенности поведения в разных движках JavaScript

Реализация Intl API может различаться:

  • V8 (Chrome, Node.js)
  • SpiderMonkey (Firefox)
  • JavaScriptCore (Safari)

Различия проявляются в:

  • форматировании дат
  • поддержке numberingSystem
  • деталях сортировки

Практическая модель использования hi-IN в приложениях

Intl API для хинди-локали применяется в:

  • индийских финансовых системах
  • локализованных интерфейсах
  • образовательных платформах
  • государственных порталах

Ключевые компоненты:

Intl.NumberFormat('hi-IN')
Intl.DateTimeFormat('hi-IN')
Intl.Collator('hi-IN')
Intl.PluralRules('hi-IN')
Intl.RelativeTimeFormat('hi-IN')

Совместная работа этих API обеспечивает полную языковую локализацию без ручной обработки строк.