Локаль hi-IN (хинди, Индия) в JavaScript
Internationalization API описывает поведение форматирования данных с
учётом языковых, культурных и региональных особенностей хинди. Она
основана на стандарте BCP 47 и комбинирует язык hi с
регионом IN.
Основная задача локали — обеспечить корректное отображение чисел, дат, времени, текста и правил грамматики в соответствии с принятыми нормами Индии и хинди как языка.
Ключевые особенности:
Хинди использует абугида-систему письма Devanagari, где символы обозначают слоги, а не отдельные фонемы. Это влияет не на сам Intl API напрямую, а на окружение отображения текста.
В контексте Intl API важны следующие аспекты:
Пример строки на хинди:
भारत, दिल्ली, मुंबई
Intl API не трансформирует текст, но обеспечивает корректное
сравнение и сортировку через Intl.Collator.
Для хинди-локали характерно использование двух систем записи чисел:
Intl API позволяет управлять этим через параметр
numberingSystem.
const formatter = new Intl.NumberFormat('hi-IN');
formatter.format(1234567);
Результат (в зависимости от окружения):
12,34,567
Особенность индийской системы группировки:
Это отличается от западной системы (3-3-3):
| Система | Формат |
|---|---|
| США/Европа | 1,234,567 |
| Индия | 12,34,567 |
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-чисел.
Для локали 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
Особенности:
Сортировка текстов в хинди-локали имеет важное значение из-за особенностей Unicode и Devanagari.
const collator = new Intl.Collator('hi-IN');
['अजय', 'करण', 'भारत'].sort(collator.compare);
Intl.Collator обеспечивает:
new Intl.Collator('hi-IN', {
sensitivity: 'base',
ignorePunctuation: true
});
sensitivity: 'base' — игнорирование различий в
диакритикеignorePunctuation — игнорирование знаков
пунктуацииХинди, как и многие индийские языки, имеет относительно простую систему множественности по сравнению с европейскими языками.
const pr = new Intl.PluralRules('hi-IN');
pr.select(1); // one
pr.select(2); // other
Основные категории:
oneotherconst messages = {
one: '1 वस्तु',
other: '{count} वस्तुएँ'
};
Для выражений вроде «2 дня назад» используется
Intl.RelativeTimeFormat.
const rtf = new Intl.RelativeTimeFormat('hi-IN');
rtf.format(-2, 'day');
Результат:
2 दिन पहले
Примеры единиц:
secondminutehourdaymonthyearПоложительные значения:
rtf.format(3, 'day');
3 दिन में
Intl API поддерживает альтернативные системы чисел:
new Intl.NumberFormat('hi-IN-u-nu-deva').format(123);
Результат:
१२३
Особенности:
nu-devaНесмотря на единый язык, форматирование может варьироваться:
Intl API абстрагирует эти различия, но браузер и ОС могут вносить изменения в итоговый вывод.
Devanagari использует сложные Unicode-композиции:
Пример:
कि + ा = क्या
Intl API не изменяет такие строки, но:
Реализация Intl API может различаться:
Различия проявляются в:
Intl API для хинди-локали применяется в:
Ключевые компоненты:
Intl.NumberFormat('hi-IN')
Intl.DateTimeFormat('hi-IN')
Intl.Collator('hi-IN')
Intl.PluralRules('hi-IN')
Intl.RelativeTimeFormat('hi-IN')
Совместная работа этих API обеспечивает полную языковую локализацию без ручной обработки строк.