Особенности японского

Языковая специфика и базовый идентификатор локали

Японская локаль в ECMAScript Internationalization API представляется тегом ja-JP. Он активирует набор правил форматирования, учитывающих письменность, календарные системы и числовые традиции Японии.

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

  • использование иероглифической системы письма (kanji, hiragana, katakana)
  • наличие нескольких календарных систем (особенно императорские эры)
  • специфическое форматирование чисел и валют
  • отличающиеся правила сортировки строк (особенно kana ordering)

Пример базовой инициализации:

const locale = 'ja-JP';

const dtf = new Intl.DateTimeFormat(locale);
const nf = new Intl.NumberFormat(locale);
const collator = new Intl.Collator(locale);

Императорские эры в японском календаре

Эра как основа датировки

В японской системе датирование часто опирается не на западный год, а на императорскую эру. Современная эра — Reiwa (令和), начавшаяся в 2019 году.

Intl API поддерживает это через опцию calendar: 'japanese'.

const dtf = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {
  year: 'numeric',
  month: 'long',
  day: 'numeric'
});

dtf.format(new Date(2024, 0, 1));

Результат будет включать японскую эру, например:

  • Reiwa 6年1月1日

Отличие от Gregorian календаря

При использовании стандартного календаря:

new Intl.DateTimeFormat('ja-JP').format(new Date(2024, 0, 1));

вывод соответствует западной системе:

  • 2024/1/1

Использование календаря влияет не только на год, но и на внутреннюю структуру форматирования дат.


Форматирование чисел в японской локали

Отсутствие разделителей тысяч в привычном виде

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

new Intl.NumberFormat('ja-JP').format(1234567);

Результат:

  • 1,234,567

Особенности десятичного разделителя

Десятичный разделитель — точка:

new Intl.NumberFormat('ja-JP').format(1234.56);

Результат:

  • 1,234.56

Каноническая запись чисел

В финансовых и официальных документах иногда используется запись с канжи-цифрами:

  • 一, 二, 三, 四, 五, 六, 七, 八, 九, 十

Intl API напрямую не конвертирует числа в кандзи, но форматирование может сочетаться с внешними слоями локализации.


Японская йена и валютное форматирование

Валюта без дробной части

Японская йена (JPY) не использует дробные единицы в бытовом обороте.

new Intl.NumberFormat('ja-JP', {
  style: 'currency',
  currency: 'JPY'
}).format(1200);

Результат:

  • ¥1,200

Отсутствие десятичных знаков

Даже при наличии дробной части она обычно подавляется:

new Intl.NumberFormat('ja-JP', {
  style: 'currency',
  currency: 'JPY'
}).format(1200.75);

Результат:

  • ¥1,201

Округление происходит автоматически согласно правилам валюты.


Сортировка строк и японский алфавит

Kana и Kanji как основа сортировки

Японский язык использует несколько систем письма:

  • Hiragana
  • Katakana
  • Kanji

Сортировка в Intl.Collator учитывает фонетический порядок, а не визуальный.

const collator = new Intl.Collator('ja-JP');

['あい', 'うえ', 'かき'].sort(collator.compare);

Различие между базовой и расширенной сортировкой

const basic = new Intl.Collator('ja-JP', { sensitivity: 'base' });
const strict = new Intl.Collator('ja-JP', { sensitivity: 'variant' });
  • base игнорирует диакритические и тонкие различия
  • variant учитывает максимальную детализацию символов

Особенности отображения дат

Порядок компонентов даты

В японской локали распространён порядок:

  • год / месяц / день
new Intl.DateTimeFormat('ja-JP', {
  year: 'numeric',
  month: '2-digit',
  day: '2-digit'
}).format(new Date());

Пример:

  • 2026/05/27

Полные формы записи

При использовании длинных форматов:

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

Результат включает день недели на японском языке:

  • 2026年5月27日水曜日

Временные форматы и 12/24-часовая система

Преобладание 24-часового формата

new Intl.DateTimeFormat('ja-JP', {
  hour: '2-digit',
  minute: '2-digit'
}).format(new Date());

Результат:

  • 14:30

Поддержка 12-часового формата

Хотя менее распространён, он возможен:

new Intl.DateTimeFormat('ja-JP', {
  hour: 'numeric',
  minute: 'numeric',
  hour12: true
}).format(new Date());

Форматирование единиц измерения

Метрическая система как стандарт

Японская локаль по умолчанию использует метрическую систему:

new Intl.NumberFormat('ja-JP', {
  style: 'unit',
  unit: 'kilometer'
}).format(5);

Результат:

  • 5 km

Единицы температуры и скорости

new Intl.NumberFormat('ja-JP', {
  style: 'unit',
  unit: 'celsius'
}).format(30);

Лексические особенности и отображение текста

Отсутствие пробелов между словами

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

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

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


Группировка и визуальная плотность чисел

Компактные формы

new Intl.NumberFormat('ja-JP', {
  notation: 'compact'
}).format(1000000);

Результат:

  • 100万

Японская система компактной записи использует числовые единицы:

  • 万 (10⁴)
  • 億 (10⁸)
  • 兆 (10¹²)

Это существенно отличается от западных сокращений K/M/B.


Работа с календарём и эпохами в датах

Отображение текущей эры

new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {
  era: 'long',
  year: 'numeric'
}).format(new Date());

Результат:

  • 令和6年

Переход между эпохами

Смена императора приводит к изменению системы отсчёта, что делает календарь динамическим относительно исторического контекста.


Особенности числового округления и финансовых данных

Отсутствие дробных валютных единиц

JPY считается целочисленной валютой в большинстве API:

new Intl.NumberFormat('ja-JP', {
  style: 'currency',
  currency: 'JPY',
  maximumFractionDigits: 0
});

Банковское округление

Используется округление half-even в зависимости от реализации, что важно для финансовых вычислений.


Текстовые представления и визуальная локализация

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

В японской типографике применяются:

  • 全角 (full-width) символы
  • 半角 (half-width) символы

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


Сравнение строк с учетом японской фонетики

Kana ordering

const collator = new Intl.Collator('ja-JP', {
  usage: 'sort'
});

['カタカナ', 'あいうえお', 'さしすせそ'].sort(collator.compare);

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


Поведение Intl API в японском контексте

Ключевые особенности реализации

  • строгая поддержка календарных систем
  • автоматическое применение правил валюты JPY
  • фонетическая сортировка kana
  • компактные числовые единицы на основе 万/億/兆
  • адаптация дат под локальные форматы записи

Влияние локали на всю цепочку представления данных

Японская локализация в Intl API затрагивает не только формат вывода, но и структуру восприятия данных:

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