К содержимому

Библиотеки i18n для Svelte: сравнение (2026)

Для Svelte и SvelteKit есть несколько библиотек i18n, и отличаются они по существу: сторы или руны, поиск во время выполнения или скомпилированные функции, ICU или MessageFormat 2. Здесь svelte-dialect сравнивается с svelte-i18n, Sveltia I18n, sveltekit-i18n, Paraglide JS, typesafe-i18n и wuchale.

Эту страницу написал автор svelte-dialect. Все утверждения о других библиотеках взяты из их актуальных README, документации и страниц на npm (список в разделе «Источники»). То, что подтвердить не удалось, мы не включали.

Для нового приложения на SvelteKit начните с Paraglide JS: это официальный аддон sv, он компилирует сообщения в функции, которые поддаются tree-shaking, и выпускает релизы часто. Остальные библиотеки уместны там, где совпадает их сильная сторона, как описано ниже.

Как они устроены #

БиблиотекаAPI для SvelteФормат сообщенийТипобезопасностьБандл
svelte-dialectAPI для Svelte:Svelte 5. Локаль — руна, t() — обычная функция.Формат сообщений:Только MessageFormat 2.Типобезопасность:CLI генерирует union ключей и типы параметров. Произвольные строки по-прежнему компилируются.Бандл:Рантайм. Сообщения разбираются в браузере, tree-shaking по отдельным сообщениям нет.
svelte-i18nAPI для Svelte:Сторы ($_, $locale). Диапазон peer-зависимости включает Svelte 3, 4 и 5.Формат сообщений:ICU MessageFormat через formatjs.Типобезопасность:Ключи — обычные строки. Типизация ключей в документации не описана.Бандл:Рантайм, intl-messageformat в зависимостях.
Sveltia I18nAPI для Svelte:Svelte 5. locale — реактивный объект, t() — обычная функция, имена функций как в svelte-i18n.Формат сообщений:Только MessageFormat 2, через messageformat.Типобезопасность:Ключи — обычные строки. Типизация ключей в README не описана.Бандл:Во время выполнения, единственная зависимость — messageformat.
sveltekit-i18nAPI для Svelte:Только Svelte 5. Реактивный экземпляр с t(), сторы $t через расширение.Формат сообщений:По умолчанию Curly. Парсеры ICU, MF2 и i18next — отдельные пакеты.Типобезопасность:Vite-плагин typegen пишет схему для типизированных ключей и параметров.Бандл:Рантайм. Загрузчики можно привязать к маршруту.
Paraglide JSAPI для Svelte:Обычные функции сообщений, например m.greeting({ name }). Смена локали перезагружает документ.Формат сообщений:По умолчанию формат inlang, с разметкой и селекторами в стиле MF2. ICU 1 и i18next — через плагины.Типобезопасность:Компилятор выдаёт типизированные функции сообщений, поэтому неверный ключ или параметр не скомпилируется.Бандл:Компиляция и tree-shaking по каждому сообщению. По их собственному бенчмарку, до 70% меньше, чем у рантайм-библиотек.
typesafe-i18nAPI для Svelte:Сгенерированные сторы Svelte ($LL).Формат сообщений:Собственный синтаксис: {name}, {{one|many}}, switch-case.Типобезопасность:Генератор пишет типы по базовой локали. Для обычного JavaScript работает JSDoc.Бандл:Рантайм около 1 КБ, как сказано в их README.
wuchaleAPI для Svelte:Адаптер для Svelte 5. Скомпилированный код использует $derived.Формат сообщений:Каталоги gettext PO. Плюралы через помощник plural().Типобезопасность:Ключей нет: ключом служит исходный текст, поэтому типизировать нечего.Бандл:Компиляция. Каталоги — обычные массивы без ключей.

Сервер, маршрутизация и поддержка #

БиблиотекаОпределение локали и URLЛенивая загрузкаРазметка в переводахПоследний релиз
svelte-dialectОпределение локали и URL:Куки, Accept-Language или префикс в URL (routing: true, без папки [locale]). Изоляция по запросам.Ленивая загрузка:По пространствам имён: чанки динамического импорта, fetch или remote functions.Разметка в переводах:Разметка MF2, которую Rich отрисовывает через сниппеты.Последний релиз:0.1.0. Проект начат в июле 2026. Есть аддон для sv (npx sv add svelte-dialect).
svelte-i18nОпределение локали и URL:Руководство по SvelteKit читает Accept-Language в handle и записывает значение в глобальный стор. Маршрутизации по URL в документации нет.Ленивая загрузка:register(locale, loader) загружает по одной локали.Разметка в переводах:В документации не описана.Последний релиз:4.0.1, октябрь 2024.
Sveltia I18nОпределение локали и URL:Хелперы getLocaleFrom* для браузера, пути или query. Локаль — одно значение на модуль, поэтому README называет SSR небезопасным под нагрузкой и советует определять её в браузере.Ленивая загрузка:register(locale, loader) загружает по одной локали.Разметка в переводах:В README не описано.Последний релиз:1.5.0, октябрь 2026. Первая публикация — апрель 2026.
sveltekit-i18nОпределение локали и URL:Один экземпляр на запрос: preferredLocale, затем Accept-Language, затем значение по умолчанию. Локали в URL показаны в примерах приложений.Ленивая загрузка:Загрузчики по маршруту или пространству имён, в том числе из API.Разметка в переводах:Пакет extension-html добавляет компонент T.Последний релиз:3.4.1, октябрь 2026. С июля 2023 по сентябрь 2026 релизов не было.
Paraglide JSОпределение локали и URL:Middleware со стратегиями: url, cookie, localStorage, язык браузера. Локализованные URL встроены.Ленивая загрузка:Каждое сообщение содержит все локали. Разбиение по локалям экспериментально.Разметка в переводах:Разметка {#link}…{/link}, отрисовка через сниппеты из @inlang/paraglide-js-svelte.Последний релиз:2.29.0, октябрь 2026. Официальный аддон sv.
typesafe-i18nОпределение локали и URL:Детекторы локали для браузера и сервера. В README маршрутизации по URL нет.Ленивая загрузка:Необязательная асинхронная загрузка локалей, плюс пространства имён.Разметка в переводах:В README не описана.Последний релиз:5.27.1, февраль 2026.
wuchaleОпределение локали и URL:runWithLocale изолирует запросы, а локаль задаёте вы. Шаблоны URL переводятся и локализуются.Ленивая загрузка:Набор блоков для любой стратегии. Сервер загружает все каталоги при старте.Разметка в переводах:Вложенная разметка в компонентах извлекается без дополнительного синтаксиса.Последний релиз:0.26.7, сентябрь 2026. Версии до 1.0.

svelte-dialect #

Библиотека для Svelte 5 на MessageFormat 2. Локаль — руна, маршрутизация и определение локали для SvelteKit встроены, а в обычном Svelte она работает и без Kit.

Выбирайте её, если нужен MessageFormat 2 и страницы, которые сервер рендерит на языке каждого посетителя, локаль в URL без папки маршрутов [locale] и типизированные ключи.

Поищите другое, если нужны годы работы в продакшене, tree-shaking по отдельным сообщениям или зрелая экосистема вокруг библиотеки. Она молодая (0.1.x) и небольшая, разбирает сообщения во время выполнения, а MF2 пока непривычен большинству переводчиков.

svelte-i18n #

Построена на сторах, сообщения ICU обрабатывает formatjs, на каждую локаль один словарь. Версия 4.0.1 вышла в октябре 2024, а в README сказано, что переработка с синглтона на экземпляры ждёт времени и приоритета.

Выбирайте её, если она у вас уже работает, если переводчики и инструменты ожидают ICU или если в кодовой базе ещё смешаны Svelte 3, 4 и 5. В документации для предпросмотра сообщений рекомендуется расширение i18n-ally для VS Code.

Поищите другое, если нужны руны, типизированные ключи или SSR, рассчитанный на SvelteKit. В README sveltekit-i18n предупреждают, что экземпляр уровня модуля на сервере общий для параллельных запросов, а руководство svelte-i18n по SvelteKit записывает локаль в глобальный стор в handle. Поэтому перед использованием проверьте одновременные запросы на разных языках.

Sveltia I18n #

Переписанный на рунах svelte-i18n от команды Sveltia CMS: те же имена функций, MessageFormat 2 вместо ICU, а локаль заодно держит в актуальном состоянии <html lang dir>. На ней в продакшене работают Sveltia CMS и Sveltia UI.

Выбирайте её, если уходите с svelte-i18n и хотите MF2 за уже знакомым API, или если приложение рендерится в браузере (SPA или adapter-static с выбором локали на клиенте).

Поищите другое, если сервер рендерит страницы на языке посетителя: на сервере локаль общая для всех запросов, и README (issue #2) советует вместо этого определять её на клиенте. Роутинга в URL и типизации ключей в документации тоже нет.

sveltekit-i18n #

Переписана как 3.x в сентябре 2026 после перерыва в релизах с июля 2023 и с тех пор развивается быстро: 3.4.1 вышла 7 октября. Требует Svelte 5, даёт реактивный экземпляр на запрос, загружает переводы по маршрутам и имеет плагин для типизированных ключей.

Выбирайте её, если нужны загрузка по маршрутам, типизированные ключи через typegen или выбор синтаксиса сообщений. По охвату она ближе всех к svelte-dialect, а система расширений у неё больше.

Поищите другое, если важна долгая история: линейке 3.x около месяца. Локали в URL показаны как примеры приложений, а не как одна опция, и чтобы взять парсер MF2, нужно строить на базовом пакете напрямую, а не на основном.

Paraglide JS #

Сначала компилятор. Сообщения становятся типизированными функциями, и сборщик отбрасывает те, что вы не вызываете. Это один из официальных аддонов sv (npx sv add paraglide), версия 2.29.0 опубликована 15 октября 2026.

Выбирайте её, если важен размер бандла, если нужны ошибки компиляции при неверных ключах и параметрах или если вам подходит интеграция, которую предлагает Svelte CLI. Локализованные URL и изоляция SSR по запросам встроены, а при других фронтендах она работает и вне Svelte.

Поищите другое, если большинство переводов известно только во время выполнения, например ключи из CMS или базы данных (в их FAQ сказано, что рантайм-библиотека может подойти лучше). Смена локали перезагружает документ вместо обновления руны, а ленивая загрузка по локалям пока экспериментальна.

typesafe-i18n #

Собственный синтаксис сообщений, генератор, который пишет типы по базовой локали, и сторы Svelte через $LL. Версия 5.27.1 вышла в феврале 2026, первая после августа 2023, а репозиторий теперь находится в организации codingcommons.

Выбирайте её, если важнее всего типобезопасность на очень маленьком рантайме и нужна одна библиотека для фронтенда, бэкенда и API. Генератор покрывает типизированные ключи и параметры, а JSDoc распространяет это на обычный JavaScript.

Поищите другое, если нужны руны, стандартный формат сообщений, который понимают инструменты перевода, или встроенная маршрутизация по URL. Релизы редки: 5.26.2 в августе 2023, затем 5.27.1 в феврале 2026.

wuchale #

Другой подход: нет ни ключей, ни вызовов t(). На этапе сборки она читает обычную разметку компонентов, выносит текст в PO-файлы и заменяет его обращениями по индексу к скомпилированным массивам. Адаптер для Svelte 5 — версия 0.26.7, опубликована в сентябре 2026.

Выбирайте её, если нужно добавить i18n в готовое приложение без переписывания компонентов, если нужны файлы gettext PO, которые понимают Weblate или Crowdin, или если нужны переведённые пути URL вроде /about в /es/acerca-de.

Поищите другое, если нужны явные типизированные ключи, которых здесь намеренно нет, или стабильный API 1.0. Определение локали при SSR тоже остаётся за вами: в примере из их документации локаль читается из параметра запроса.

i18next #

i18next — универсальная рантайм-библиотека, а не библиотека для Svelte. Версия 26.4.7 вышла 16 октября 2026, тогда как обёртка для Svelte svelte-i18next последний раз публиковалась в октябре 2023.

Выбирайте её, если те же файлы переводов должны обслуживать React, Node или мобильные приложения. Обёртка для сохранения файлов не нужна: Paraglide читает файлы i18next через плагин, у sveltekit-i18n есть парсер i18next, а команда migrate в svelte-dialect переводит интерполяцию {{name}} и суффиксы плюралов в MF2.

Источники #

Проверено в октябре 2026. Номера версий и даты релизов взяты из реестра npm на эту дату.