Интернационализация текстов в веб-приложениях опирается на набор
правил, которые зависят от языка, региона и культурных норм отображения
информации. В JavaScript эти задачи централизованы в объекте
Intl, предоставляющем стандартизированные средства
форматирования строк, чисел, дат, единиц измерения и правил языковой
обработки текста.
Ключевой принцип работы заключается в отделении бизнес-логики от представления данных. Один и тот же набор данных может быть преобразован в разные текстовые формы без изменения исходной структуры.
Формирование числовых строк в разных языках отличается не только разделителями, но и правилами группировки разрядов, обозначениями процентов, валют и порядковых числительных.
Основной инструмент числовой интернационализации —
Intl.NumberFormat, который формирует локализованные строки
чисел с учётом языка и региональных настроек.
Пример логики форматирования:
,. и
,Форматирование выполняется с учётом параметров:
decimal, percent,
currency, unit)При работе с текстами важно учитывать, что числовые значения часто являются частью предложений, поэтому форматирование должно сохранять синтаксическую согласованность языка.
Форматирование дат и времени имеет более сложную структуру, чем числовые значения, так как включает культурные различия в порядке компонентов даты и обозначениях времени.
Intl.DateTimeFormat преобразует объекты
Date в локализованные строки с учётом календаря и часового
пояса.
Основные параметры:
dateStyle и timeStyle для абстрактного
управления уровнем детализацииweekday, year, month,
day, hour, minute,
second для точной настройкиtimeZone для фиксирования временной зоныВ текстовой интернационализации важно учитывать, что:
Использование единообразного форматирования исключает необходимость ручной генерации строк и снижает вероятность ошибок в представлении времени.
Языки различаются по количеству форм множественного числа. В одних используется две формы, в других — до шести и более. Для текстовой интернационализации критично учитывать правильную форму слов в зависимости от числового значения.
Intl.PluralRules определяет категорию числа:
onefewmanyotherКаждый язык имеет собственную систему классификации.
Применение в текстах заключается в выборе правильной формы слова:
Логика работы не ограничивается простым условием
if (n === 1), а использует языковую модель, предоставляемую
браузером или средой выполнения.
Сортировка строк в разных языках не сводится к стандартному лексикографическому сравнению Unicode-кодов.
Intl.Collator обеспечивает корректное сравнение строк с
учётом языковых правил:
Применение особенно важно при построении списков:
Без использования Intl.Collator сортировка может
выглядеть некорректно для пользователя, говорящего на конкретном
языке.
Описания временных интервалов часто встречаются в интерфейсах:
Intl.RelativeTimeFormat формирует такие строки на основе
числового значения и единицы времени.
Поддерживаемые единицы:
Особенность заключается в том, что структура фразы зависит от языка, а не только от значения числа.
При отображении технической информации в текстах часто используются единицы измерения:
Поддержка unit-стиля позволяет автоматически формировать
локализованные выражения:
Ключевой аспект заключается в том, что единица измерения также локализуется, включая её сокращение или полное название.
Текстовые интерфейсы часто содержат динамические названия географических и языковых сущностей.
Intl.DisplayNames позволяет получать локализованные
названия:
Например, одно и то же значение кода страны может отображаться по-разному в зависимости от языка интерфейса.
Это особенно важно для:
В реальных приложениях интернационализация текстов редко ограничивается одним типом форматирования. Чаще всего используется комбинация нескольких API:
Пример логической цепочки формирования текста уведомления:
Такой подход исключает ручное конструирование строк и снижает вероятность ошибок согласования.
Все механизмы Intl используют BCP 47 language tags,
которые определяют:
ru, en, de)ru-RU, en-US,
en-GB)Корректная настройка локали влияет на:
Отсутствие явного указания локали приводит к использованию среды выполнения, что может дать непредсказуемый результат в разных окружениях.
Создание экземпляров Intl-форматтеров является затратной
операцией. При массовой генерации текстов важно учитывать повторное
использование объектов:
Intl.NumberFormatIntl.DateTimeFormatIntl.CollatorIntl.RelativeTimeFormatКэширование позволяет:
При построении текстовых систем форматтеры Intl
используются как слой над шаблонами строк. Вместо ручной конкатенации
применяются структурированные данные:
Формирование текста становится процессом преобразования данных через набор языковых правил, а не ручной сборкой строк.
Несмотря на широкие возможности, Intl не решает все
задачи интернационализации текста:
Однако предоставляет фундаментальный слой, на котором строятся более сложные системы текстовой адаптации.
Корректность текстового представления зависит не только от языка, но и от контекста использования:
Intl обеспечивает базовую языковую корректность, на
которую накладываются правила конкретного приложения.