Японская локаль в ECMAScript Internationalization API представляется
тегом ja-JP. Он активирует набор правил форматирования,
учитывающих письменность, календарные системы и числовые традиции
Японии.
Ключевые особенности:
Пример базовой инициализации:
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));
Результат будет включать японскую эру, например:
При использовании стандартного календаря:
new Intl.DateTimeFormat('ja-JP').format(new Date(2024, 0, 1));
вывод соответствует западной системе:
Использование календаря влияет не только на год, но и на внутреннюю структуру форматирования дат.
В японской локали часто используется запятая как разделитель тысяч, но в некоторых контекстах возможны альтернативные формы группировки.
new Intl.NumberFormat('ja-JP').format(1234567);
Результат:
Десятичный разделитель — точка:
new Intl.NumberFormat('ja-JP').format(1234.56);
Результат:
В финансовых и официальных документах иногда используется запись с канжи-цифрами:
Intl API напрямую не конвертирует числа в кандзи, но форматирование может сочетаться с внешними слоями локализации.
Японская йена (JPY) не использует дробные единицы в бытовом обороте.
new Intl.NumberFormat('ja-JP', {
style: 'currency',
currency: 'JPY'
}).format(1200);
Результат:
Даже при наличии дробной части она обычно подавляется:
new Intl.NumberFormat('ja-JP', {
style: 'currency',
currency: 'JPY'
}).format(1200.75);
Результат:
Округление происходит автоматически согласно правилам валюты.
Японский язык использует несколько систем письма:
Сортировка в 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());
Пример:
При использовании длинных форматов:
new Intl.DateTimeFormat('ja-JP', {
dateStyle: 'full'
}).format(new Date());
Результат включает день недели на японском языке:
new Intl.DateTimeFormat('ja-JP', {
hour: '2-digit',
minute: '2-digit'
}).format(new Date());
Результат:
Хотя менее распространён, он возможен:
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);
Результат:
new Intl.NumberFormat('ja-JP', {
style: 'unit',
unit: 'celsius'
}).format(30);
Японский текст не использует пробелы как основной разделитель слов, что влияет на поведение алгоритмов:
Intl API не выполняет морфологический разбор, но Collator учитывает базовые правила языка.
new Intl.NumberFormat('ja-JP', {
notation: 'compact'
}).format(1000000);
Результат:
Японская система компактной записи использует числовые единицы:
Это существенно отличается от западных сокращений K/M/B.
new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {
era: 'long',
year: 'numeric'
}).format(new Date());
Результат:
Смена императора приводит к изменению системы отсчёта, что делает календарь динамическим относительно исторического контекста.
JPY считается целочисленной валютой в большинстве API:
new Intl.NumberFormat('ja-JP', {
style: 'currency',
currency: 'JPY',
maximumFractionDigits: 0
});
Используется округление half-even в зависимости от реализации, что важно для финансовых вычислений.
В японской типографике применяются:
Intl API не конвертирует их напрямую, но результаты форматирования могут отображаться в разных формах в зависимости от окружения.
const collator = new Intl.Collator('ja-JP', {
usage: 'sort'
});
['カタカナ', 'あいうえお', 'さしすせそ'].sort(collator.compare);
Сортировка учитывает фонетический порядок, а не визуальное расположение символов.
Японская локализация в Intl API затрагивает не только формат вывода, но и структуру восприятия данных: