Автор:
    Создание:2026-09-02Последнее обновление:2026-09-02

    Устарел ли vue-i18n в 2026 году?

    В сообществе Vue трудно найти более популярную библиотеку, чем vue-i18n. Развиваемая Kazupon еще со времен Vue 2, она лежит в основе @nuxtjs/i18n и используется почти в каждом многоязычном Vue-приложении.

    Однако бенчмарки 2026 года привели к неожиданному выводу: vue-i18n оказался самым тяжелым runtime среди всех протестированных фронтенд-фреймворков.

    В базовом проекте на Vite + Vue размером 31.5 КБ добавление vue-i18n увеличило средний объем JavaScript на страницу до 136.4 КБ, более чем в четыре раза превысив исходный вес.

    Как фреймворк, славящийся легкостью и лаконичностью, получил настолько тяжелый инструмент локализации? И оправдана ли сегодня классическая runtime-модель?

    Главные выводы

    Самый тяжелый протестированный runtime:

    С весом 24.3 КБ gzipped (83.2 КБ minified) до добавления текстов vue-i18n примерно в 9 раз тяжелее движка intlayer (2.7 КБ).

    Увеличение объема страницы на 330%:

    vue-i18n увеличил страницу Vue с 31.5 КБ до 136.4 КБ. Intlayer обеспечил 59.3 КБ, что на 56% легче.

    Скрытый компилятор в браузере:

    По умолчанию, без настройки специальных алиасов в сборщике, vue-i18n загружает весь компилятор сообщений в браузер для разбора строк на лету.

    Темпы обновлений:

    За прошедший год vue-i18n получил ~259 коммитов, сфокусированных на исправлении ошибок и совместимости с Vue.

    Отсутствие нативного современного инструментария:

    Нет встроенной поддержки Language Server (LSP), MCP-серверов для ИИ или автоматизированных CLI-команд перевода.

    Поддержка vs. современные инструменты

    Репозиторий Звезды Всего коммитов Коммитов / год Последний коммит
    intlify/vue-i18n stars commits yearly last
    aymericzip/intlayer stars commits yearly last

    Показатели за 12 месяцев:

    • intlify/vue-i18n: 259 коммитов (плановые исправления для Vue 3 и Nuxt).
    • aymericzip/intlayer: 4 343 коммита (развитие компилятора, LSP-утилит и интеграций с ИИ-агентами).

    Star History Chart

    Зрелая библиотека гарантирует стабильность. Но современные фронтенды используют AST-преобразования при сборке, удаление мертвого кода и автоматический перевод нейросетями. Системе, работающей исключительно во время выполнения, сложно использовать эти новшества.

    Производительность в Vite + Vue

    Бенчмарк проведен на проекте из 10 страниц и 10 языков на Vite и Vue 3:

    Динамическая загрузка JSON

    Ленивая загрузка переводов во время выполнения

    Ограниченный JSON (пространства имен)

    Пространства имен перевода для каждой страницы

    Бенчмарк производительности I18n

    Что это за метрика?

    Общий размер пакета библиотеки интернационализации в формате gzip. Он включает в себя только провайдер и логику извлечения контента после tree-shaking и минификации.

    Почему это важно?

    Меньший размер библиотеки снижает начальную загрузку JavaScript, что ускоряет загрузку и выполнение кода на клиенте.

    Вид

    Измерения в реальных браузерах с gzip-сжатием. Данные доступны в документации бенчмарка Vue.

    Начальный оверхед библиотек

    Размер до добавления переводов:

    Библиотека Gzipped Minified
    vue-i18n@11.4.0 24.3 КБ 83.2 КБ
    intlayer@8.7.12 2.7 КБ 7.6 КБ

    Runtime vue-i18n весит 24.3 КБ gzipped, что сопоставимо с ядром самого Vue. Intlayer добавляет лишь 2.7 КБ.

    Вес страниц и утечка данных

    Конфигурация Ср. JS / стр. (gz) Утечка языков Утечка др. страниц Ср. компонент (gz)
    База (без i18n) 31.5 КБ 0.0% 90.0% 0.9 КБ
    vue-i18n 136.4 КБ 50.2% 90.0% 196.0 КБ
    Intlayer 59.3 КБ 51.1% 0.0% 6.5 КБ

    Главные наблюдения

    Значительный относительный рост:

    Поскольку базовый стек Vue очень компактен (~31 КБ), подключение vue-i18n увеличивает вес страницы в четыре с лишним раза.

    Утечка на другие маршруты:

    По умолчанию 90% текста, передаваемого на страницу, относится к другим разделам сайта. Intlayer полностью исключает эти данные, снижая показатель до 0.0%.

    Вес изолированных компонентов:

    Компоненты с локальными областями видимости занимали в среднем 196 КБ в vue-i18n из-за дублирования каталогов против 6.5 КБ в Intlayer.

    Почему vue-i18n тяжелый?

    Парсер AST в браузере

    vue-i18n содержит встроенный компилятор сообщений. Правила множественного числа и интерполяции преобразуются в деревья AST прямо в браузере во время выполнения.

    Чтобы избежать этого, необходимо прописывать алиасы на vue-i18n/dist/vue-i18n.runtime.esm-bundler.js и компилировать каталоги через @intlify/unplugin-vue-i18n. Многие команды упускают этот шаг.

    Монолитный набор возможностей

    vue-i18n включает форматирование чисел и дат, связанные сообщения, мосты для Options API ($t, v-t) и реактивные прокси. Даже если вам нужны только простые строки в <script setup>, браузер загружает всю функциональность.

    Динамические ключи препятствуют tree-shaking

    Так как "home.hero.title" вычисляется в рантайме, бандлеры не могут узнать, какие ключи реально вызываются. Неиспользуемые строки остаются в итоговом коде.

    Hero.vue
    <script setup>
    import { useI18n } from "vue-i18n";
    
    const { t } = useI18n();
    </script>
    
    <template>
      <h1>{{ t("home.hero.title") }}</h1>
    </template>
    
    Hero.vue
    <script setup>
    import { useIntlayer } from "vue-intlayer";
    
    const { title } = useIntlayer("hero");
    </script>
    
    <template>
      <h1>{{ title }}</h1>
    </template>
    

    Компилятор Intlayer отслеживает точные обращения к полям и исключает лишнее до сборки клиентских файлов. Подробнее в оптимизации бандла.

    Опыт разработки

    Внешние каталоги против совместного размещения

    В vue-i18n тексты вынесены в обособленный каталог locales/. Intlayer располагает файлы контента непосредственно рядом с компонентами:

    locales/en.json
    {
      "hero": {
        "title": "Ship in every language"
      }
    }
    
    locales/ru.json
    {
      "hero": {
        "title": "Запускайте на любом языке"
      }
    }
    
    Hero.vue
    <script setup>
    import { useI18n } from "vue-i18n";
    
    const { t } = useI18n();
    </script>
    
    <template>
      <h1>{{ t("hero.title") }}</h1>
    </template>
    
    Hero.content.ts
    import { t, type Dictionary } from "intlayer";
    
    export default {
      key: "hero",
      content: {
        title: t({
          en: "Ship in every language",
          ru: "Запускайте на любом языке",
        }),
      },
    } satisfies Dictionary;
    
    Hero.vue
    <script setup>
    import { useIntlayer } from "vue-intlayer";
    
    const { title } = useIntlayer("hero");
    </script>
    
    <template>
      <h1>{{ title }}</h1>
    </template>
    

    При переносе или удалении Hero.vue файл контента перемещается или удаляется автоматически.

    Автодополнение против строгой проверки полноты

    DefineLocaleMessage дает автодополнение в редакторе по базовой схеме. Но оно не гарантирует полноту всех переводов. Пропуск ключа в ru.json не вызовет ошибку сборки TypeScript.

    В Intlayer словари валидируются строго. Включение strictMode приводит к ошибке сборки при отсутствии перевода в любом настроенном языке.

    Инструменты для IDE и ИИ

    Возможность vue-i18n Intlayer
    Расширение VS Code Стороннее (i18n Ally) Официальное расширение
    Language Server (LSP) ❌ Нет Встроенный LSP
    MCP Server для ИИ ❌ Нет Интегрированный MCP-сервер
    Навыки агентов (Skills) ❌ Нет Готовые навыки
    Визуальная CMS ❌ Нет Бесплатная Open Source CMS

    Процессы перевода

    vue-i18n не имеет встроенной команды для генерации переводов. Файлы обычно выгружают на внешние платформы вроде Crowdin или Phrase.

    Intlayer предлагает встроенные решения:

    Автодополнение через локальный ИИ (intlayer fill):

    Заполняет недостающие ключи с использованием ваших API-ключей OpenAI, Anthropic, Mistral или Gemini.

    Автономная визуальная CMS:

    Используйте Intlayer CMS, чтобы контент-менеджеры редактировали тексты визуально с фиксацией изменений прямо в Git.

    Свободная лицензия:

    Все компоненты распространяются под лицензией Apache 2.0.

    Когда vue-i18n по-прежнему оправдан?

    Если маршрутизация жестко завязана на @nuxtjs/i18n, переработка не всегда целесообразна.

    При широком использовании сложных связанных сообщений или нестандартных правил форматирования.

    Если размер клиентского бандла не является значимым фактором.

    Как улучшить текущую конфигурацию vue-i18n?

    Intlayer предлагает готовые пакеты совместимости, полностью повторяющие сигнатуры функций vue-i18n и @nuxtjs/i18n (useI18n, $t, <i18n-t>). Вам не нужно переписывать шаблоны или composables, чтобы воспользоваться преимуществами легкой архитектуры на базе компилятора.

    Настройка выполняется одной командой:

    bash
    npx intlayer init --interactive
    

    Интерактивный интерфейс командной строки:

    1. Устанавливает пакет совместимости @intlayer/vue-i18n или @intlayer/nuxt-i18n.
    2. Настраивает алиасы сборщика (Vite или Nuxt), чтобы привычные импорты и теги в шаблонах прозрачно вели на Intlayer, позволяя удалить vue-i18n из package.json.
    3. Мгновенно включает диагностику языкового сервера (LSP), исключает 24-килобайтный AST-парсер из клиентского бандла и открывает локальные сценарии ИИ-перевода без глобального рефакторинга.

    Подробные инструкции можно найти в наших руководствах:

    • Простая совместимость: Сохраняйте существующие шаблоны с помощью адаптера для vue-i18n или @nuxtjs/i18n.
    • Руководства по миграции: Конвертируйте JSON-файлы в типизированные словари по нашим инструкциям: с vue-i18n или с @nuxtjs/i18n.
    • Гибридный подход: Оставьте vue-i18n в работе, подключив Intlayer к vue-i18n для строгой типизации и локального ИИ-перевода.

    Проверьте сайт на утечки с помощью бесплатного SEO-сканера i18n:

    Дополнительные статьи

    Комментарии

    Пока нет комментариев. Будьте первым, кто поделится своими мыслями.

    Похожие сообщения

    Последние сообщения