Создание:2025-09-09Последнее обновление:2026-08-30

    Переведите ваш Nest backend с Intlayer | Интернационализация (i18n)

    express-intlayer, это мощный middleware для интернационализации (i18n) в приложениях на Express, разработанный для того, чтобы сделать ваши бэкенд-сервисы доступными по всему миру, предоставляя локализованные ответы в зависимости от предпочтений клиента. Поскольку NestJS построен поверх Express, вы можете без проблем интегрировать express-intlayer в ваши приложения на NestJS для эффективной работы с многоязычным контентом.

    тические сценарии использования

    • Отображение ошибок бэкенда на языке пользователя: Когда возникает ошибка, отображение сообщений на родном языке пользователя улучшает понимание и снижает разочарование. Это особенно полезно для динамических сообщений об ошибках, которые могут отображаться в компонентах фронтенда, таких как toast-уведомления или модальные окна.

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

    • Отправка многоязычных писем: Отправка писем (будь то транзакционные письма, маркетинговые кампании или уведомления) на языке получателя может значительно повысить engagement и эффективность.

    • Многоязычные Push-уведомления: Для мобильных приложений отправка push-уведомлений на предпочитаемом пользователем языке может повысить взаимодействие и удержание пользователей. Такой личный подход может сделать уведомления более релевантными и полезными.

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

    Интернационализируя backend, ваше приложение не только учитывает культурные различия, но и лучше соответствует потребностям глобального рынка, что является ключевым шагом в расширении ваших услуг по всему миру.

    Начало работы

    Создание нового проекта NestJS

    bash
    npm install -g @nestjs/cli
    nest new my-nest-app
    

    Установка

    Чтобы начать использовать express-intlayer, установите пакет с помощью npm:

    bash
    npx intlayer init --interactive
    
    флаг --interactive не является обязательным. Используйте intlayer-cli init, если вы являетесь ИИ-агентом.
    Эта команда определит вашу среду и установит необходимые пакеты. Например:
    bash
    npm install intlayer express-intlayer
    

    Настройка tsconfig.json

    Чтобы использовать Intlayer с TypeScript, убедитесь, что ваш файл tsconfig.json настроен для поддержки ES-модулей. Для этого установите параметры module и moduleResolution в значение nodenext.

    tsconfig.json
    {
      compilerOptions: {
        module: "nodenext",
        moduleResolution: "nodenext",
        // ... другие параметры
      },
    }
    

    Настройка

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

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], // поддерживаемые локали
        defaultLocale: Locales.ENGLISH, // локаль по умолчанию
      },
    };
    
    export default config;
    

    Объявление вашего контента

    Создайте и управляйте объявлениями контента для хранения переводов:

    Ваши объявления контента могут быть определены в любом месте вашего приложения, при условии, что они включены в директорию contentDir (по умолчанию, ./src). И соответствуют расширению файла объявления контента (по умолчанию, .content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).
    Для получения дополнительной информации обратитесь к документации по объявлениям контента.

    Настройка промежуточного ПО Express

    Интегрируйте промежуточное ПО express-intlayer в ваше приложение NestJS для обработки интернационализации:

    src/app.module.ts
    import { MiddlewareConsumer, Module, NestModule } from "@nestjs/common";
    import { AppController } from "./app.controller";
    import { AppService } from "./app.service";
    import { intlayer } from "express-intlayer";
    
    @Module({
      imports: [],
      controllers: [AppController],
      providers: [AppService],
    })
    export class AppModule implements NestModule {
      configure(consumer: MiddlewareConsumer) {
        consumer.apply(intlayer()).forRoutes("*"); // Применить ко всем маршрутам
      }
    }
    

    Использование переводов в ваших сервисах или контроллерах

    Теперь вы можете использовать функцию getIntlayer для доступа к переводам в ваших сервисах или контроллерах:

    src/app.service.ts
    import { Injectable } from "@nestjs/common";
    import { getIntlayer } from "express-intlayer";
    
    @Injectable()
    export class AppService {
      getHello(): string {
        return getIntlayer("app").greet; // Получить приветствие из переводов
      }
    }
    

    Совместимость

    express-intlayer полностью совместим с:

    Он также без проблем работает с любыми решениями для интернационализации в различных средах, включая браузеры и API-запросы. Вы можете настроить промежуточное ПО для определения локали через заголовки или куки:

    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;
    

    По умолчанию express-intlayer будет интерпретировать заголовок Accept-Language для определения предпочтительного языка клиента.

    Для получения дополнительной информации о конфигурации и продвинутых темах посетите нашу документацию.

    Настройка TypeScript

    express-intlayer использует мощные возможности TypeScript для улучшения процесса интернационализации. Статическая типизация TypeScript гарантирует, что каждый ключ перевода учтен, снижая риск отсутствия переводов и повышая удобство сопровождения.

    Autocompletion

    Translation error

    Убедитесь, что автогенерируемые типы (по умолчанию в ./types/intlayer.d.ts) включены в ваш файл tsconfig.json.

    tsconfig.json
    {
      // ... Ваши существующие настройки TypeScript
      include: [
        // ... Ваши существующие настройки TypeScript
        ".intlayer/**/*.ts", // Включить автогенерируемые типы
      ],
    }
    

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

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

    Установить из VS Code Marketplace

    Это расширение предоставляет:

    • Автозаполнение ключей перевода.
    • Обнаружение ошибок в реальном времени для отсутствующих переводов.
    • Встроенный просмотр переведенного содержимого.
    • Быстрые действия для удобного создания и обновления переводов.

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

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

    Рекомендуется игнорировать файлы, сгенерированные Intlayer. Это позволит избежать их коммита в ваш репозиторий Git.

    Чтобы сделать это, вы можете добавить следующие инструкции в ваш файл .gitignore:

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

    Часто задаваемые вопросы

    У NestJS есть nestjs-i18n, который является обычным выбором и покрывает каталоги JSON или YAML с сервисом, ограниченным областью запроса. Альтернатива - Intlayer через express-intlayer, который использует тот же объявленный контент, что и ваш фронтенд, типизирован по вашим словарям и поставляется с ИИ-переводом и CMS.

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

    См. почему Intlayer.

    Очень немного. Словари компилируются заранее, и включаются только те локали, которые вы объявляете, поэтому нет ни загрузки каталогов при старте, ни чтения файлов на пути запроса. Это важнее всего в serverless- и edge-развёртываниях, где размер бандла определяет время холодного старта. См. оптимизацию бандла.

    Да, и есть два пути. Вы можете мигрировать контент постепенно с помощью руководства по миграции с i18next. Или вы можете полностью сохранить свой текущий API: адаптеры совместимости предоставляют точно такой же API, как i18next, но обслуживаемый словарями Intlayer, поэтому меняются импорты, а код обработчиков - нет.

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

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

    На стороне фронтенда того же проекта Компилятор Intlayer идёт дальше и генерирует словари во время сборки из вашего исходного кода 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.
    • Навыки агентов: сфокусированные навыки, такие как intlayer-config, intlayer-cli и intlayer-content, плюс по одному на фреймворк, которые обучают агента вашей настройке маршрутизации и типам узлов контента.
    • Плагин ESLint: no-raw-text помечает жёстко закодированные строки, с дополнительными правилами для статических ключей словаря и неиспользуемого контента.