Отримуйте сповіщення про майбутні випуски Intlayer
    Дата створення:2024-08-14Останнє оновлення:2025-09-27

    Чому варто розглянути Intlayer?

    Що таке Intlayer?

    Intlayer — це бібліотека інтернаціоналізації, спеціально розроблена для JavaScript-розробників. Вона дозволяє декларувати ваш контент у будь-якому місці коду. Вона перетворює декларації багатомовного контенту на структуровані словники для легкої інтеграції у ваш код. Використовуючи TypeScript, Intlayer робить вашу розробку більш надійною та ефективною.

    Чому було створено Intlayer?

    Intlayer було створено, щоб вирішити поширену проблему, яка впливає на всі звичні i18n-бібліотеки, такі як next-intl, react-i18next, react-intl, next-i18next, react-intl, та vue-i18n.

    Усі ці рішення застосовують централізований підхід до переліку й управління вашим контентом. Наприклад:

    .├── locales│   ├── en.json│   ├── es.json│   └── fr.json├── i18n.ts└── src    └── components        └── MyComponent            └── index.tsx

    Або тут з використанням namespace:

    .├── locales│   ├── en│   │  ├── footer.json│   │  └── navbar.json│   ├── fr│   │  ├── footer.json│   │  └── navbar.json│   └── es│      ├── footer.json│      └── navbar.json├── i18n.ts└── src    └── components        └── MyComponent            └── index.tsx

    Такий тип архітектури уповільнює процес розробки й ускладнює підтримку codebase з кількох причин:

    1. Для будь-якого нового створеного компонента ви повинні:

      • Створити новий ресурс/namespace у папці locales
      • Не забути імпортувати новий namespace на вашій сторінці
      • Перекласти ваш контент (часто робиться вручну шляхом копіювання/вставки з AI-провайдерів)
    2. При будь-якій зміні ваших компонентів ви повинні:

      • Знайти відповідний ресурс/namespace (розташований далеко від компонента)
      • Перекласти ваш контент
      • Переконатися, що ваш контент актуальний для кожної локалі
      • Перевірити, що у вашому namespace немає невикористаних ключів/значень
      • Переконатися, що структура ваших JSON-файлів однакова для всіх локалей

    У професійних проєктах, які використовують такі рішення, часто застосовують платформи локалізації для управління перекладами контенту. Однак для великих проєктів це може швидко стати дорогим.

    Щоб вирішити цю проблему, Intlayer застосовує підхід, який розподіляє контент на рівні компонентів і тримає його поруч із компонентом, як ми зазвичай робимо з CSS (styled-components), types, документацією (storybook) або unit-тестами (jest).

    bash
    .└── components    └── MyComponent        ├── index.content.ts        ├── index.test.tsx        ├── index.stories.tsx        └── index.tsx
    ./components/MyComponent/index.content.ts
    import { t, type Dictionary } from "intlayer";const componentExampleContent = {  key: "component-example",  content: {    myTranslatedContent: t({      uk: "Привіт, світ",      en: "Hello World",      uk: "Привіт, світ",      es: "Hola Mundo",      fr: "Bonjour le monde",    }),  },} satisfies Dictionary;export default componentExampleContent;
    ./components/MyComponent/index.tsx
    import { useIntlayer } from "react-intlayer";export const ComponentExample = () => {  const { myTranslatedContent } = useIntlayer("component-example");  return <span>{myTranslatedContent}</span>;};

    Цей підхід дозволяє вам:

    1. Збільшити швидкість розробки

      • Файли .content.{{ts|mjs|cjs|json}} можна створювати за допомогою розширення VSCode
      • Інструменти автозаповнення на базі AI у вашому IDE (наприклад, GitHub Copilot) можуть допомогти оголошувати ваш контент, зменшуючи копіювання/вставлення
    2. Очистити ваш codebase

      • Зменшити складність
      • Підвищити підтримуваність
    3. Легше дублювати ваші компоненти та пов’язаний контент (наприклад: компоненти входу/реєстрації тощо)

      • Обмежуючи ризик впливу на контент інших компонентів
      • Шляхом копіювання/вставлення вашого контенту з одного застосунку в інший без зовнішніх залежностей
    4. Уникнення засмічення вашої codebase непотрібними ключами/значеннями для невикористовуваних компонентів

      • Якщо ви не використовуєте компонент, Intlayer не імпортує пов'язаний з ним контент
      • Якщо ви видалите компонент, вам буде простіше не забути видалити пов'язаний контент, оскільки він знаходитиметься в тій самій папці
    5. Знизити навантаження на агентів ШІ при формуванні вашого багатомовного контенту

      • Агенту ШІ не потрібно сканувати всю codebase, щоб дізнатися, де реалізувати ваш контент
      • Переклади можна легко виконати за допомогою інструментів автозаповнення на основі ШІ у вашому IDE (наприклад, GitHub Copilot)
    6. Оптимізація продуктивності завантаження

      • Якщо компонент завантажується ліниво (lazy-loaded), пов'язаний з ним контент буде завантажено одночасно

    Додаткові можливості Intlayer

    Особливість Опис
    Функція Підтримка різних фреймворків

    Intlayer сумісний з усіма основними фреймворками та бібліотеками, включаючи Next.js, React, Vite, Vue.js, Nuxt, Preact, Express та інші.
    Особливість Керування контентом на основі JavaScript

    Використовуйте гнучкість JavaScript, щоб ефективно визначати й керувати контентом.

    - Оголошення контенту
    Особливість Компілятор

    Компілятор Intlayer автоматично витягує вміст із компонентів і генерує файли словників.

    - Компілятор
    Функція Файл оголошення вмісту для кожної локалі

    Прискоріть розробку, оголошуючи вміст один раз перед автогенерацією.

    - Файл оголошення вмісту для кожної локалі
    Feature Типобезпечне середовище

    Використовуйте TypeScript, щоб гарантувати, що ваші визначення контенту та код позбавлені помилок, а також отримати автодоповнення в IDE.

    - Налаштування TypeScript
    Feature Спрощене налаштування

    Швидко почніть роботу з мінімальною конфігурацією. Легко налаштовуйте параметри інтернаціоналізації, маршрутизації, AI, build та обробки контенту.

    - Дізнайтеся про інтеграцію з Next.js
    Feature Спрощене отримання контенту

    Немає потреби викликати вашу функцію t для кожного елемента контенту. Отримуйте весь контент безпосередньо, використовуючи один хук.

    - Інтеграція з React
    Feature Послідовна реалізація серверних компонентів

    Ідеально підходить для Server Components у Next.js: використовуйте одну й ту саму реалізацію як для клієнтських, так і для серверних компонентів — немає потреби передавати функцію t через кожен серверний компонент.

    - Server Components
    Особливість Організована кодова база

    Тримайте вашу кодову базу більш організованою: 1 компонент = 1 словник у тій же папці. Переклади, розташовані поруч із відповідними компонентами, покращують підтримку та зрозумілість.

    - Як працює Intlayer
    Feature Покращена маршрутизація

    Повна підтримка маршрутизації додатка, що плавно адаптується до складних структур застосунків — для Next.js, React, Vite, Vue.js тощо.

    - Дізнатися про інтеграцію з Next.js
    Функція Підтримка Markdown

    Імпортуйте та інтерпретуйте файли локалей і віддалені Markdown-файли для багатомовного контенту, такого як політики конфіденційності, документація тощо. Інтерпретуйте та зробіть метадані Markdown доступними у вашому коді.

    - Файли контенту
    Feature Безкоштовний візуальний редактор і CMS

    Для авторів контенту доступні безкоштовний візуальний редактор та CMS, що усуває потребу в платформі локалізації. Підтримуйте синхронізацію контенту через Git або зовнішньо розміщуйте його повністю чи частково через CMS.

    - Intlayer Editor
    - Intlayer CMS
    Функція Tree-shakable контент

    Tree-shakable контент, що зменшує розмір фінального бандла. Завантажує контент на рівні компонентів, виключаючи будь-який невикористаний контент з вашого бандла. Підтримує lazy loading для підвищення ефективності завантаження додатка.

    - Оптимізація збірки додатка
    Функція Статичний рендеринг

    Не блокує статичний рендеринг.

    - Інтеграція з Next.js
    Feature Переклад із підтримкою AI

    Перетворіть свій вебсайт на 231 мову всього за один клік, використовуючи передові інструменти перекладу Intlayer на базі AI з вашим власним AI-провайдером/ключем API.

    - Інтеграція CI/CD
    - Intlayer CLI
    - Автозаповнення
    Feature Інтеграція MCP-сервера

    Надає MCP (Model Context Protocol) сервер для автоматизації IDE, що дозволяє безшовне керування контентом та i18n-воркфлоу безпосередньо у вашому середовищі розробки.

    - Сервер MCP
    Feature Розширення VSCode

    Intlayer надає розширення для VSCode, яке допомагає вам керувати контентом та перекладами, формувати ваші словники, перекладати вміст і багато іншого.

    - Розширення VSCode
    Feature Інтероперабельність

    Надає сумісність із react-i18next, next-i18next, next-intl і react-intl.

    - Intlayer і react-intl
    - Intlayer і next-intl
    - Intlayer і next-i18next
    Тестування відсутніх перекладів (CLI/CI) ✅ CLI: npx intlayer content test (аудит, дружній до CI)

    Порівняння Intlayer з іншими рішеннями

    Особливість intlayer react-i18next react-intl (FormatJS) lingui next-intl next-i18next vue-i18n
    Переклади поруч із компонентами ✅ Так — вміст розміщено поруч із кожним компонентом ❌ Ні ❌ Ні ❌ Ні ❌ Ні ❌ Ні ✅ Так — використання Single File Components (SFCs)
    Інтеграція TypeScript ✅ Просунута інтеграція, автоматично згенеровані строгі типи ⚠️ Базова; потрібна додаткова конфігурація для безпеки ✅ Добре, але менш строгі типи ⚠️ Типізація, потребує конфігурації ✅ Добре ⚠️ Базова ✅ Добре (типи доступні; для безпеки ключів потрібне налаштування)
    Виявлення відсутнього перекладу ✅ Виділення помилок TypeScript та помилка/попередження під час збірки ⚠️ Переважно fallback-рядки під час виконання ⚠️ fallback-рядки ⚠️ Потребує додаткової конфігурації ⚠️ fallback під час виконання ⚠️ fallback під час виконання ⚠️ fallback під час виконання/попередження (можна налаштувати)
    Багатий вміст (JSX/Markdown/компоненти) ✅ Пряма підтримка ⚠️ Обмежено / лише інтерполяція ⚠️ Синтаксис ICU, не справжній JSX ⚠️ Обмежено ❌ Не призначено для багатих вузлів ⚠️ Обмежено ⚠️ Обмежено (компоненти через <i18n-t>, Markdown через плагіни)
    AI-асистований переклад ✅ Так, підтримує кількох постачальників AI. Можна використовувати власні API-ключі. Враховує контекст вашого додатку та обсяг контенту ❌ Ні ❌ Ні ❌ Ні ❌ Ні ❌ Ні ❌ Ні
    Візуальний редактор ✅ Так, локальний Visual Editor + опційний CMS; може винести контент із codebase; вбудовується ❌ Ні / доступно через зовнішні платформи локалізації ❌ Ні / доступно через зовнішні платформи локалізації ❌ Ні / доступно через зовнішні платформи локалізації ❌ Ні / доступно через зовнішні платформи локалізації ❌ Ні / доступно через зовнішні платформи локалізації ❌ Ні / доступно через зовнішні платформи локалізації
    Локалізована маршрутизація ✅ Так, підтримує локалізовані шляхи «з коробки» (працює з Next.js та Vite) ⚠️ Не вбудовано, потребує плагінів (наприклад, next-i18next) або власної конфігурації роутера ❌ Ні, лише форматування повідомлень, маршрутизацію потрібно робити вручну ⚠️ Не вбудовано, потребує плагінів або ручної конфігурації ✅ Вбудовано, App Router підтримує сегмент [locale] ✅ Вбудовано ✅ Вбудовано
    Генерація динамічних маршрутів ✅ Так ⚠️ Плагін/екосистема або ручне налаштування ❌ Не передбачено ⚠️ Плагін/ручне налаштування ✅ Так ✅ Так ❌ Не передбачено (надає Nuxt i18n)
    Плюралізація ✅ Шаблони, засновані на переліченнях ✅ Налаштовуване (плагіни, такі як i18next-icu) ✅ (ICU) ✅ (ICU/messageformat) ✅ Добре ✅ Добре ✅ Вбудовані правила множини
    Форматування (дати, числа, валюти) ✅ Оптимізовані форматери (Intl під капотом) ⚠️ Через плагіни або кастомне використання Intl ✅ Форматери ICU ✅ ICU/CLI допоміжні інструменти ✅ Добре (Intl helpers) ✅ Добре (Intl helpers) ✅ Вбудовані форматери дат/чисел (Intl)
    Формат контенту ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml WIP) ⚠️ .json ✅ .json, .js ⚠️ .po, .json ✅ .json, .js, .ts ⚠️ .json ✅ .json, .js
    Підтримка ICU ⚠️ У розробці ⚠️ Через плагін (i18next-icu) ✅ Так ✅ Так ✅ Так ⚠️ Через плагін (i18next-icu) ⚠️ Через кастомний форматер/компілятор
    SEO Helpers (hreflang, sitemap) ✅ Вбудовані інструменти: допоміжні функції для sitemap, robots.txt, metadata ⚠️ Плагіни спільноти / ручне налаштування ❌ Не є частиною ядра ❌ Не є частиною ядра ✅ Добре ✅ Добре ❌ Не є частиною ядра (Nuxt i18n надає хелпери)
    Екосистема / Спільнота ⚠️ Менша, але швидко зростає та реактивна ✅ Найбільша та зріла ✅ Велика ⚠️ Менша ✅ Середня за розміром, орієнтована на Next.js ✅ Середня за розміром, орієнтована на Next.js ✅ Велика в екосистемі Vue
    Рендеринг на сервері та Server Components ✅ Так, оптимізовано для SSR / React Server Components ⚠️ Підтримується на рівні сторінки, але потрібно передавати t-functions через дерево компонентів для дочірніх server components ⚠️ Підтримується на рівні сторінки з додатковою настройкою, але потрібно передавати t-functions через дерево компонентів для дочірніх server components ✅ Підтримується, потрібне налаштування ⚠️ Підтримується на рівні сторінки, але потрібно передавати t-functions через дерево компонентів для дочірніх server components ⚠️ Підтримується на рівні сторінки, але потрібно передавати t-functions через дерево компонентів для дочірніх server components ✅ SSR через Nuxt/Vue SSR (без RSC)
    Tree-shaking (завантажувати лише використовуваний контент) ✅ Так, на рівні компонентів під час збірки через плагіни Babel/SWC ⚠️ Зазвичай завантажує все (можна покращити за допомогою namespaces/розділення коду) ⚠️ Зазвичай завантажує все ❌ Не за замовчуванням ⚠️ Частково ⚠️ Частково ⚠️ Частково (з розділенням коду/ручним налаштуванням)
    Ліниве завантаження ✅ Так, для кожної локалі / для кожного словника ✅ Так (наприклад, backends/namespaces за вимогою) ✅ Так (розділення бандлів локалі) ✅ Так (динамічний імпорт каталогів) ✅ Так (для кожного маршруту/локалі), потрібне керування mamespace ✅ Так (для кожного маршруту/локалі), потрібне керування mamespace ✅ Так (асинхронні повідомлення локалі)
    Очищення невикористаного контенту ✅ Так — по словниках під час збірки ❌ Ні — тільки через ручну сегментацію namespace ❌ Ні — всі оголошені повідомлення включені в бандл ✅ Так — невикористані ключі виявляються і видаляються під час збірки ❌ Ні — можна керувати вручну через namespace management ❌ Ні — можна керувати вручну через namespace management ❌ Ні — можливо лише через ручний lazy-loading
    Управління великими проєктами ✅ Сприяє модульності, підходить для design-system ⚠️ Вимагає хорошої дисципліни щодо файлів ⚠️ Центральні каталоги можуть стати великими ⚠️ Може ускладнюватися ✅ Модульна після налаштування ✅ Модульна після налаштування ✅ Модульна при налаштуванні Vue Router/Nuxt i18n

    Зірки GitHub

    Зірки GitHub є вагомим індикатором популярності проєкту, довіри спільноти та його довгострокової релевантності. Хоча вони не є прямою мірою технічної якості, вони відображають, скільки розробників вважають проєкт корисним, стежать за його розвитком і ймовірно його впровадять. Для оцінки цінності проєкту зірки допомагають порівняти рівень зацікавленості серед альтернатив і дають уявлення про зростання екосистеми.

    Графік історії зірок


    Інтероперабельність

    intlayer також може допомогти керувати вашими namespaces для react-intl, react-i18next, next-intl, next-i18next та vue-i18n.

    За допомогою intlayer ви можете оголосити ваш контент у форматі улюбленої i18n-бібліотеки, і intlayer згенерує ваші простори імен у вибраному вами місці (наприклад: /messages/{{locale}}/{{namespace}}.json).

    Зверніться до dictionaryOutput та i18nextResourcesDir опцій для детальнішої інформації.

    Отримуйте сповіщення про майбутні випуски Intlayer