ts-intl
Документация
Доступна интеграция с Astro|ts-intl-astro

Интернационализация для современного TypeScript

Ноль зависимостей · Безопасность типов · Не зависит от фреймворка

$
pnpm add@aaakul/ts-intl
export default {
  dashboard: {
    greeting: "Привет, {name: string}!",
    membership: "{role, select, admin {Администратор} pro {Pro-аккаунт} other {Обычный аккаунт}}",
    cart: "{count, plural, =0 {Корзина пуста} one {В корзине # товар} few {В корзине # товара} many {В корзине # товаров} other {В корзине # товара}}",
    discount: "Распродажа: <badge>Скидка 20%</badge> на всё",
    invoice: "Итого: {amount, number, currency}",
    delivery: "Ориентировочная доставка: {time}",
  },
} as const;
Интерактивный просмотр

Привет, Алексей!

Pro-аккаунт
Распродажа: Скидка 20% на всё
В корзине 3 товараИтого: 12 990 ₽
Ориентировочная доставка: через 2 дня

Безопасность типов

Обеспечивает вывод типов TypeScript для ключей перевода, пространств имён и параметров, проверяя согласованность схемы между локалями.

Ноль зависимостей во время выполнения

Построен на базе TypeScript и стандартных Web API Intl, не требует этапа генерации кода при сборке. Minified + Gzipped: < 5 kB

Поддержка ICU Message Format

Поддерживает формы множественного числа, порядковые числительные, ветвление select и интерполяцию тегов форматированного текста без внешних парсеров.

Не зависит от фреймворка

Работает в Astro, Next.js, React, Vue, Svelte, Node.js, Bun и Cloudflare Workers.

Бенчмарк

Бенчмарк размера передачи по сети

Измеряет реальный объем сетевого трафика всех ресурсов i18n при начальном предрендеринге и гидратации на стороне клиента.

Объем сетевой передачи (КБ)

Playwright Headless Chromium · Real HTTP Transfer Size

paraglideЧерез middleware
-91%36.3 KB
ts-intlРазделение по локалям
-86%57.8 KB
paraglideПолный бандл
-82%76.6 KB
i18nextHTTP-загрузка
-55%188.7 KB
ts-intlПолный бандл
-14%360.0 KB
i18nextПолный бандл
Baseline420.4 KB
Зависимости во время выполнения и размер

i18next содержит полноценные парсеры и рантайм плагинов, создавая ощутимый базовый оверхед. В ts-intl нет сторонних зависимостей (ядро ~2 КБ), а в режиме разделения локалей передается словарь только активного языка.

Компиляция против динамического разделения

Paraglide компилирует сообщения в JS-функции и удаляет неиспользуемые ключи через tree-shaking. ts-intl является библиотекой времени выполнения без генерации кода и использует стандартный динамический import, предотвращая накопление словарей разных языков в бандле.