Получайте уведомления о предстоящих релизах Intlayer
    Создание:2025-08-23Последнее обновление:2025-10-29

    Интернационализация Next.js (i18n) с next-i18next и Intlayer

    Содержание

    Что такое next-i18next?

    next-i18next — это один из самых популярных фреймворков для интернационализации (i18n) в приложениях Next.js. Построенный на мощной экосистеме i18next, он предоставляет комплексное решение для управления переводами, локализацией и переключением языков в проектах Next.js.

    Однако next-i18next имеет некоторые сложности:

    • Сложная конфигурация: Настройка next-i18next требует нескольких конфигурационных файлов и тщательной настройки экземпляров i18n на стороне сервера и клиента.
    • Разрозненные переводы: Файлы переводов обычно хранятся в отдельных директориях от компонентов, что затрудняет поддержание согласованности.
    • Ручное управление пространствами имён: Разработчикам необходимо вручную управлять пространствами имён и обеспечивать правильную загрузку ресурсов переводов.
    • Ограниченная типобезопасность: Поддержка TypeScript требует дополнительной настройки и не обеспечивает автоматическую генерацию типов для переводов.

    Что такое Intlayer?

    Intlayer — это инновационная, открытая библиотека интернационализации, разработанная для устранения недостатков традиционных решений i18n. Она предлагает современный подход к управлению контентом в приложениях Next.js.

    Смотрите конкретное сравнение с next-intl в нашем блоге next-i18next vs. next-intl vs. Intlayer.

    Почему стоит сочетать Intlayer с next-i18next?

    Хотя Intlayer предоставляет отличное автономное решение для i18n (см. наше руководство по интеграции с Next.js), вы можете захотеть комбинировать его с next-i18next по нескольким причинам:

    1. Существующая кодовая база: У вас уже есть реализованная система next-i18next, и вы хотите постепенно перейти на улучшенный опыт разработки с Intlayer.
    2. Требования наследия: Ваш проект требует совместимости с существующими плагинами или рабочими процессами i18next.
    3. Знакомство команды: Ваша команда привыкла к next-i18next, но хочет лучшее управление контентом.

    Для этого Intlayer может быть реализован как адаптер для next-i18next, чтобы помочь автоматизировать ваши JSON-переводы в CLI или CI/CD пайплайнах, тестировать ваши переводы и многое другое.

    В этом руководстве показано, как использовать превосходную систему декларации контента Intlayer, сохраняя при этом совместимость с next-i18next.


    Пошаговое руководство по настройке Intlayer с next-i18next

    Шаг 1: Установка зависимостей

    Установите необходимые пакеты с помощью предпочитаемого менеджера пакетов:

    npm install intlayer @intlayer/sync-json-plugin

    Объяснение пакетов:

    • intlayer: Основная библиотека для декларации и управления контентом
    • @intlayer/sync-json-plugin: Плагин для синхронизации деклараций контента Intlayer с форматом JSON i18next

    Шаг 2: Реализация плагина Intlayer для обёртывания JSON

    Создайте файл конфигурации Intlayer для определения поддерживаемых локалей:

    Если вы также хотите экспортировать JSON-словарь для i18next, добавьте плагин syncJSON:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";import { syncJSON } from "@intlayer/sync-json-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  plugins: [    syncJSON({      source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,    }),  ],};export default config;

    Плагин syncJSON автоматически обернет JSON. Он будет читать и записывать JSON-файлы без изменения архитектуры контента.

    Если вы хотите, чтобы JSON сосуществовал с файлами декларации контента Intlayer (.content файлы), Intlayer будет работать следующим образом:

    1. загрузит как JSON, так и файлы декларации контента и преобразует их в словарь Intlayer.2. если возникнут конфликты между JSON и файлами декларации контента, Intlayer выполнит слияние всех словарей. В зависимости от приоритета плагинов и файлов декларации контента (все настраивается).

    Если изменения внесены с помощью CLI для перевода JSON или с использованием CMS, Intlayer обновит JSON-файл с новыми переводами.

    Для получения дополнительной информации о плагине syncJSON обратитесь к документации плагина syncJSON.


    (Необязательно) Шаг 3: Реализация перевода JSON по компонентам

    По умолчанию Intlayer загрузит, объединит и синхронизирует как JSON, так и файлы декларации контента. Подробнее смотрите в документации по декларации контента. Но если вы предпочитаете, используя плагин Intlayer, вы также можете реализовать управление локализованным JSON по компонентам в любом месте вашей кодовой базы.

    Для этого вы можете использовать плагин loadJSON.

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },  // Поддерживайте синхронизацию ваших текущих JSON-файлов с словарями Intlayer  plugins: [    /**     * Загрузит все JSON-файлы в src, которые соответствуют шаблону {key}.i18n.json     */    loadJSON({      source: ({ key }) => `./src/**/${key}.i18n.json`,      locale: Locales.ENGLISH,      priority: 1, // Обеспечивает приоритет этих JSON-файлов над файлами в `./public/locales/en/${key}.json`    }),    /**     * Загрузит, а также запишет результаты и переводы обратно в JSON-файлы в директории локалей     */    syncJSON({      source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,      priority: 0,    }),  ],};export default config;

    Это загрузит все JSON-файлы в директории src, которые соответствуют шаблону {key}.i18n.json, и загрузит их как словари Intlayer.


    Конфигурация Git

    Исключите сгенерированные файлы из системы контроля версий:

    .gitignore
    # Игнорировать файлы, сгенерированные Intlayer.intlayerintl

    Эти файлы автоматически пересоздаются во время процесса сборки и не требуют коммита в ваш репозиторий.

    Расширение VS Code

    Для улучшения опыта разработчика установите официальное расширение Intlayer для VS Code:

    Установить из магазина расширений VS Code