Китайская локализация в JavaScript через Intl API представляет собой
один из наиболее сложных и многослойных сценариев интернационализации.
Это связано с тем, что под обозначением «китайский язык» фактически
скрывается несколько стандартов письма, региональных форматов и
культурных традиций отображения данных. Основные локали:
zh-CN (упрощённый китайский, материковый Китай),
zh-TW (традиционный китайский, Тайвань), zh-HK
(Гонконг).
Ключевая особенность работы с китайским языком в Intl заключается в том, что визуальная и семантическая интерпретация данных часто зависит не только от языка, но и от региона.
В китайской среде используются как арабские цифры, так и иероглифические формы записи чисел в специфических контекстах (финансовые документы, официальные бумаги). Однако в веб-приложениях стандартом остаются арабские цифры с локализованными разделителями и валютой.
new Intl.NumberFormat('zh-CN', {
style: 'decimal'
}).format(1234567.89);
Результат:
1,234,567.89
Особенность китайских локалей — использование запятой как разделителя тысяч сохраняется, несмотря на наличие собственных числовых систем в письменности.
Для китайской локали критично корректное отображение валюты CNY (жэньминьби).
new Intl.NumberFormat('zh-CN', {
style: 'currency',
currency: 'CNY'
}).format(1234.5);
Результат:
¥1,234.50
Особенности:
¥Для Гонконга:
new Intl.NumberFormat('zh-HK', {
style: 'currency',
currency: 'HKD'
}).format(1234.5);
Китайские локали используют григорианский календарь, но отображение дат может включать локализованные названия месяцев и порядок элементов.
new Intl.DateTimeFormat('zh-CN', {
year: 'numeric',
month: 'long',
day: 'numeric'
}).format(new Date());
Пример результата:
2026年5月27日
Особенность заключается в использовании иероглифических маркеров:
年 — год月 — месяц日 — деньЭти элементы являются частью строки формата, а не отдельными токенами API.
Китайский текст не использует пробелы для разделения слов, что делает задачи поиска, подсветки и разбиения текста принципиально сложнее.
const text = "我喜欢学习JavaScript国际化API";
Для обработки таких строк используется:
new Intl.Segmenter('zh-CN', { granularity: 'word' });
Однако важно учитывать, что сегментация китайского текста не всегда однозначна, поскольку границы слов зависят от контекста.
const segmenter = new Intl.Segmenter('zh-CN', { granularity: 'word' });
for (const segment of segmenter.segment(text)) {
console.log(segment.segment);
}
Результат будет зависеть от реализации движка, но логика ориентируется на статистические модели словарей.
Сортировка китайских символов не основана на алфавите в привычном понимании. Intl.Collator учитывает несколько стратегий:
Пример:
const collator = new Intl.Collator('zh-CN');
['张', '王', '李'].sort(collator.compare);
В зависимости от конфигурации результат может отличаться.
Для фонетической сортировки (пиньинь):
new Intl.Collator('zh-CN-u-co-pinyin');
Для традиционного китайского (Тайвань):
new Intl.Collator('zh-TW');
Здесь сортировка ближе к традиционной системе словарей, а не к материковому стандарту.
Intl API не выполняет автоматическое преобразование символов между упрощённой и традиционной письменностью. Это означает, что:
zh-CN и zh-TW считаются разными
локалямиПример:
new Intl.DisplayNames('zh-HK', { type: 'language' }).of('en');
Результат будет отображён в традиционных иероглифах, характерных для региона Гонконга.
Intl.DisplayNames особенно полезен для китайских
интерфейсов, где перевод системных терминов критически важен.
new Intl.DisplayNames('zh-CN', { type: 'language' }).of('en');
Результат:
英语
Аналогично для стран:
new Intl.DisplayNames('zh-CN', { type: 'region' }).of('JP');
Результат:
日本
Особенность китайского отображения — высокая степень иероглифической компактности, где одно слово может заменять длинное описание.
Китайский язык использует специфические конструкции для выражения относительного времени.
new Intl.RelativeTimeFormat('zh-CN').format(-1, 'day');
Результат:
1天前
new Intl.RelativeTimeFormat('zh-CN').format(2, 'hour');
2小时后
Особенность:
В китайской системе существует группировка чисел по 10 000, а не по 1 000. Однако Intl API не отображает эту систему по умолчанию, но важно учитывать при форматировании бизнес-логики.
new Intl.NumberFormat('zh-CN').format(100000000);
Результат:
100,000,000
В то время как в китайской традиционной записи часто используется:
1亿
Эта разница критична при отображении финансовых данных в локализованных интерфейсах.
В китайских локалях названия месяцев и дней недели локализуются:
new Intl.DateTimeFormat('zh-CN', { weekday: 'long' }).format(new Date());
Результат:
星期三
Структура:
星期 — неделя三 — третий день (среда)Это показывает важную особенность: дни недели в китайском часто выражаются числовой системой, а не уникальными названиями.
Китайские строки имеют высокую информационную плотность: один символ часто несёт значение слова или морфемы. Это влияет на работу:
Intl API не решает эти проблемы напрямую, но предоставляет инструменты для корректного отображения локализованных значений, минимизируя ошибки на уровне форматирования.
При работе с китайскими локалями важно учитывать:
Intl API обеспечивает базовую стандартизацию отображения, но не заменяет языковую адаптацию бизнес-логики и контента.