210просмотров
3 ноября 2025 г.
Score: 231
Малоизвестные возможности Intl Intl часто ассоциируется с простым форматированием чисел, дат и валют. Однако это API содержит и другие полезные функции: Intl.ListFormat — форматирует перечисления, корректно вставляя запятые и союзы: // "яблоки, груши и бананы"
(new Intl.ListFormat("RU")).format( ["яблоки", "груши", "бананы"]
); Intl.RelativeTimeFormat — форматирует относительное время: const rtf = new Intl.RelativeTimeFormat("RU");
rtf.format(3, "days"); // "через 3 дня"
rtf.format(-2, "hours"); // "2 часа назад" Intl.DurationFormat — форматирует интервалы времени: const time = { hours: 2, minutes: 35 }; // 2 часа 35 минут
(new Intl.DurationFormat("RU", { style: "long",
})).format(time); // 02:35:00
(new Intl.DurationFormat("RU", { hours: "2-digit",
})).format(time); Intl.Segmenter — позволяет разбивать строки на сегменты с учётом особенностей локали и правил Юникод, что обеспечивает корректную работу даже для сложных языков и символов. // ["Несколько", " ", "слов", " ", "в", " ", "строке", " ", "😎", "."]
Array.from( (new Intl.Segmenter("RU", { granularity: "word" })) .segment("Несколько слов в строке 😎.")
) .map((item) => "${item.segment}"); Например, в отличие от обычного .split(""), Segmenter не разбивает эмодзи: // ['\uD83D', '\uDE0E']
"😎".split(""); // => [{segment: "😎"}]
[...(new Intl.Segmenter("RU")).segment("😎")];