Автор:
    Дата створення:2025-08-23Останнє оновлення:2026-05-31

    Перекладіть свій бекенд на Hono за допомогою Intlayer

    hono-intlayer, це потужне проміжне ПЗ (middleware) для інтернаціоналізації (i18n) додатків Hono, розроблене для того, щоб зробити ваші бекенд-сервіси доступними в усьому світі, надаючи локалізовані відповіді на основі вподобань клієнта.

    Практичні сценарії використання

    • Відображення помилок бекенда мовою користувача: коли стається помилка, відображення повідомлень рідною мовою користувача покращує розуміння та знижує роздратування. Це особливо корисно для динамічних повідомлень про помилки, які можуть відображатися у фронтенд-компонентах, таких як сповіщення (toasts) або модальні вікна.

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

    • Надсилання багатомовних листів: будь то транзакційні листи, маркетингові кампанії чи сповіщення, надсилання електронних листів мовою одержувача може значно підвищити залученість та ефективність.

    • Багатомовні push-сповіщення: для мобільних додатків надсилання push-сповіщень бажаною мовою користувача може покращити взаємодію та утримання. Цей персональний підхід робить сповіщення більш актуальними та дієвими.

    • Інші комунікації: будь-яка форма комунікації з бекенда, така як SMS-повідомлення, системні сповіщення або оновлення інтерфейсу користувача, виграє від використання мови користувача, забезпечуючи чіткість та покращуючи загальний досвід користувача.

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

    Початок роботи

    ide.intlayer.org

    Дивіться Application Template на GitHub.

    Встановлення

    Щоб почати використовувати hono-intlayer, встановіть пакет за допомогою npm:

    bash
    npx intlayer init --interactive
    
    прапорець --interactive не є обов'язковим. Використовуйте intlayer-cli init, якщо ви є ШІ-агентом.
    Ця команда виявить ваше середовище та встановить необхідні пакети. Наприклад:
    bash
    npm install intlayer hono-intlayer
    

    Налаштування

    Налаштуйте параметри інтернаціоналізації, створивши файл intlayer.config.ts у корені вашого проєкту:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [
          Locales.ENGLISH,
          Locales.FRENCH,
          Locales.SPANISH_MEXICO,
          Locales.SPANISH_SPAIN,
          Locales.UKRAINIAN,
        ],
        defaultLocale: Locales.ENGLISH,
      },
    };
    
    export default config;
    

    Оголошення вмісту

    Створюйте та керуйте оголошеннями вмісту для зберігання перекладів:

    src/index.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const indexContent = {
      key: "index",
      content: {
        exampleOfContent: t({
          en: "Example of returned content in English",
          fr: "Exemple de contenu renvoyé en français",
          uk: "Приклад контенту, що повертається українською мовою",
        }),
      },
    } satisfies Dictionary;
    
    export default indexContent;
    
    Ваші оголошення вмісту можуть бути визначені в будь-якому місці вашого додатка, якщо вони включені в каталог contentDir (за замовчуванням ./src) і відповідають розширенню файлу оголошення вмісту (за замовчуванням .content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).
    Для отримання додаткової інформації зверніться до документації з оголошення вмісту.

    Налаштування додатка Hono

    Налаштуйте свій додаток Hono для використання hono-intlayer:

    src/index.ts
    import { Hono } from "hono";
    import { intlayer, t, getDictionary, getIntlayer } from "hono-intlayer";
    import dictionaryExample from "./index.content";
    
    const app = new Hono();
    
    // Завантаження обробника запитів інтернаціоналізації
    app.use("*", intlayer());
    
    // Маршрути
    app.get("/t_example", (c) => {
      return c.text(
        t({
          en: "Example of returned content in English",
          fr: "Exemple de contenu renvoyé en français",
          uk: "Приклад контенту, що повертається українською мовою",
        })
      );
    });
    
    app.get("/getIntlayer_example", (c) => {
      return c.json(getIntlayer("index").exampleOfContent);
    });
    
    app.get("/getDictionary_example", (c) => {
      return c.json(getDictionary(dictionaryExample).exampleOfContent);
    });
    
    export default app;
    

    Сумісність

    hono-intlayer повністю сумісний із:

    Він також безперешкодно працює з будь-яким рішенням для інтернаціоналізації в різних середовищах, включаючи браузери та API-запити. Ви можете налаштувати проміжне ПЗ для виявлення локалі через заголовки або файли cookie:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      // ... Інші параметри конфігурації
      routing: {
        storage: [
          { type: "header", name: "my-locale-header" },
          { type: "cookie", name: "my-locale-cookie" },
        ],
      },
    };
    
    export default config;
    

    За замовчуванням hono-intlayer буде інтерпретувати заголовок Accept-Language для визначення бажаної мови клієнта.

    Для отримання додаткової інформації про конфігурацію та розширені теми відвідайте нашу документацію.

    Налаштування TypeScript

    hono-intlayer використовує можливості TypeScript для покращення процесу інтернаціоналізації. Статична типізація TypeScript гарантує, що кожен ключ перекладу врахований, що знижує ризик пропущених перекладів та покращує підтримуваність.

    Автодоповнення

    Помилка перекладу

    Переконайтеся, що автоматично згенеровані типи (за замовчуванням у ./types/intlayer.d.ts) включені у ваш файл tsconfig.json.

    tsconfig.json
    {
      // ... Ваші існуючі конфігурації TypeScript
      "include": [
        // ... Ваші існуючі конфігурації TypeScript
        ".intlayer/**/*.ts", // Включити автоматично згенеровані типи
      ],
    }
    

    Розширення VS Code

    Для покращення досвіду розробки з Intlayer ви можете встановити офіційне розширення Intlayer VS Code.

    Це розширення забезпечує:

    • Автодоповнення для ключів перекладу.
    • Виявлення помилок у реальному часі для пропущених перекладів.
    • Вбудований перегляд перекладеного вмісту.
    • Швидкі дії для легкого створення та оновлення перекладів.

    Для отримання додаткової інформації про те, як використовувати розширення, зверніться до документації розширення Intlayer VS Code.

    Налаштування Git

    Рекомендується ігнорувати файли, що генеруються Intlayer. Це дозволить уникнути їх фіксації у вашому Git-репозиторії.

    Для цього ви можете додати наступні інструкції до вашого файлу .gitignore:

    .gitignore
    # Ігнорувати файли, що генеруються Intlayer
    .intlayer
    

    Часто задавані запитання

    Hono не має власного рівня i18n, тому варіантами є загальна бібліотека, така як i18next, підключена вручну до middleware, або Intlayer через hono-intlayer, який реєструє middleware для вас, визначає локаль для кожного запиту та використовує той самий оголошений вміст, що й ваш фронтенд.

    Причина інтернаціоналізації бекенду полягає в тому, що значна частина тексту, який бачить користувач, ніколи не проходить через фронтенд: повідомлення про помилки API, транзакційні електронні листи, push-сповіщення, SMS та експорт у PDF. Вони потребують мови одержувача, яка визначається для кожного запиту, а не для кожної сесії.

    Див. чому Intlayer.

    Дуже мало. Словники компілюються заздалегідь, і до бандла потрапляють лише оголошені вами локалі, тому немає завантаження каталогів під час запуску та немає читання файлів під час обробки запиту. Це найважливіше для serverless- та edge-розгортань, де розмір бандла визначає час холодного старту. Див. оптимізацію бандла.

    Так, і для цього є два шляхи. Ви можете мігрувати контент поступово за допомогою посібника з міграції з i18next. Або ви можете повністю зберегти поточний API: compat-адаптери надають точно такий самий API, як i18next, але працюють на словниках Intlayer, тож змінюються лише імпорти, а код обробників залишається незмінним.

    Так. sync JSON плагін зберігає ваші файли /messages/{locale}/{namespace}.json як джерело істини та генерує словники Intlayer з них в обох напрямках. sync PO плагін робить те ж саме для gettext каталогів, а файли для окремих локалей дозволяють розділити контент за мовами замість групування локалей в один файл.

    Ні. Запустіть npx intlayer extract, і Intlayer прочитає ваші вихідні файли, витягне призначені для користувача рядки і створить файл .content поруч із кожним із них, завдяки чому ви переглядаєте diff замість копіювання рядків у каталог по одному. Див. команду extract.

    На фронтенд-стороні того ж проєкту Intlayer Compiler іде ще далі й генерує словники під час збирання з вашого коду JSX, TSX, Vue або Svelte, тож обидві половини застосунку спільно використовують один шар контенту без жодних ключів, які потрібно підтримувати вручну.

    П'ять інструментів, усі опціональні:

    • Розширення VS Code: перехід від ключа useIntlayer до файлу контенту, який його оголошує, вилучення контенту з компонента та запуск build, fill, test, push і pull із палітри команд або окремої вкладки Intlayer.
    • LSP сервер: те саме розуміння коду в будь-якому редакторі з підтримкою LSP: перехід до визначення, пошук усіх посилань, перегляд перекладеного значення під час наведення, автодоповнення ключів і полів та попередження, коли ключ ніде не оголошено. Він також розпізнає виклики i18next, react-i18next, next-intl та use-intl, що допомагає під час міграції.
    • MCP сервер: надає документацію та CLI Intlayer для Cursor, VS Code, Claude Desktop, Claude Code та ChatGPT, тож асистент відповідає на основі актуальної документації замість здогадок і може сам виконувати команди, як-от intlayer fill.
    • Навички агента (Agent skills): спеціалізовані навички, такі як intlayer-config, intlayer-cli та intlayer-content, а також по одній для кожного фреймворку, які навчають агента вашого налаштування маршрутизації та типів вузлів контенту.
    • Плагін ESLint: правило no-raw-text позначає жорстко закодовані рядки, а додаткові правила стосуються статичних ключів словників і невикористаного контенту.