Особенности китайского

Китайская локализация в 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);
}

Результат будет зависеть от реализации движка, но логика ориентируется на статистические модели словарей.


Сортировка (Collator) и различия между zh-CN и zh-TW

Сортировка китайских символов не основана на алфавите в привычном понимании. Intl.Collator учитывает несколько стратегий:

  • количество штрихов
  • фонетическую транскрипцию (pinyin)
  • региональные правила

Пример:

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());

Результат:

星期三

Структура:

  • 星期 — неделя
  • — третий день (среда)

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


Unicode и символическая плотность китайского текста

Китайские строки имеют высокую информационную плотность: один символ часто несёт значение слова или морфемы. Это влияет на работу:

  • измерения длины строк
  • разбиения текста
  • UI-верстки
  • выравнивания чисел и дат

Intl API не решает эти проблемы напрямую, но предоставляет инструменты для корректного отображения локализованных значений, минимизируя ошибки на уровне форматирования.


Практические особенности применения в интерфейсах

При работе с китайскими локалями важно учитывать:

  • отсутствие пробелов между словами
  • различия zh-CN / zh-TW / zh-HK
  • специфическую структуру дат
  • культурные формы чисел (например, 亿, 万)
  • региональные валютные стандарты

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