Автор:
    Дата створення: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:

    З вагою 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-команд перекладу.

    Підтримка проти сучасного інструментарію

    Репозиторій Зірки Всього комітів Комітів / рік Останній коміт
    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/uk.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",
          uk: "Запускайте будь-якою мовою",
        }),
      },
    } satisfies Dictionary;
    
    Hero.vue
    <script setup>
    import { useIntlayer } from "vue-intlayer";
    
    const { title } = useIntlayer("hero");
    </script>
    
    <template>
      <h1>{{ title }}</h1>
    </template>
    

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

    Автодоповнення проти суворої перевірки повноти

    DefineLocaleMessage забезпечує автодоповнення в IDE на основі базової схеми. Проте воно не гарантує повноту всіх мов. Пропуск ключа в uk.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):

    Заповнює відсутні ключі з використанням ваших особистих ключів 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
    

    Цей інтерактивний CLI:

    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 у runtime, підключивши Intlayer до vue-i18n для суворої типізації та локального ШІ-перекладу.

    Перевірте ваш сайт за допомогою безкоштовного SEO-сканера i18n:

    Корисні матеріали

    Коментарі

    Поки що немає коментарів. Будьте першим, хто поділиться своїми думками.

    Схожі публікації

    Останні публікації