Автор:
    Создание:2026-06-25Последнее обновление:2026-06-25

    intlayerProxy

    intlayerProxy — это плагин Vite, который регистрирует промежуточное ПО (middleware) локализации роутинга для любой среды: dev-сервера, preview-сервера и продакшен SSR (Nitro / TanStack Start).

    Начиная с Intlayer v9 intlayerProxy автоматически включается в основной плагин intlayer() и активирован по умолчанию с помощью настройки routing.enableProxy: true. Вам нужно регистрировать его отдельно только в том случае, если вам нужен низкоуровневый контроль или если вы используете его за пределами стандартной конфигурации intlayer().

    Использование

    В составе intlayer() (рекомендуется, v9+)

    Передайте параметры proxy в основной плагин вместо отдельной регистрации intlayerProxy:

    ts
    // vite.config.ts
    import { defineConfig } from "vite";
    import { intlayer } from "vite-intlayer";
    
    export default defineConfig({
      plugins: [
        intlayer({
          proxy: {
            ignore: (req) => req.url?.startsWith("/api"),
          },
        }),
      ],
    });
    

    Отдельно (при необходимости)

    ts
    // vite.config.ts
    import { defineConfig } from "vite";
    import { intlayer } from "vite-intlayer";
    
    export default defineConfig({
      plugins: [intlayer()],
    });
    

    Параметры

    ts
    import type { IntlayerProxyPluginOptions } from "vite-intlayer";
    

    Все параметры являются необязательными и передаются в виде единого объекта:

    Параметр Тип Описание
    ignore (req: IncomingMessage) => boolean Предикат, который исключает запросы из локализации роутинга. Верните true, чтобы пропустить запрос (например, для роутов API, health check-ов).
    configOptions GetConfigurationOptions Переопределения конфигурации Intlayer, передаваемые в getConfiguration(). Используйте, когда вам нужно, чтобы прокси читал конкретный конфигурационный файл или переопределял значения.

    Пример

    ts
    intlayerProxy({
      ignore: (req) => req.url?.startsWith("/api"),
      configOptions: { configFile: "./config/intlayer.config.ts" },
    });
    

    createIntlayerProxyHandler

    createIntlayerProxyHandler создает независимый от фреймворка Node.js middleware (req, res, next), который содержит всю логику локализации роутинга. Это полезно в средах, где API плагинов Vite недоступен (например, на обычном сервере Node.js или в кастомном модуле Nitro).

    ts
    import { createIntlayerProxyHandler } from "vite-intlayer";
    
    const handler = createIntlayerProxyHandler({
      ignore: (req) => req.url?.startsWith("/api"),
      configOptions: { configFile: "./config/intlayer.config.ts" },
    });
    
    // Express / Connect
    app.use(handler);
    

    Продакшен SSR (TanStack Start / Nitro через h3)

    ts
    // server/middleware/intlayerProxy.ts
    import { fromNodeMiddleware } from "h3";
    import { createIntlayerProxyHandler } from "vite-intlayer";
    
    export default fromNodeMiddleware(
      createIntlayerProxyHandler({
        ignore: (req) => req.url?.startsWith("/api"),
      })
    );
    

    Поведение роутинга

    Этот middleware дублирует логику роутинга из middleware next-intlayer и поддерживает все режимы роутинга Intlayer.

    Режимы роутинга

    Режим URL виден в браузере Поведение
    prefix /ru/about По умолчанию. Префикс языка в URL. Язык по умолчанию перенаправляет на URL без префикса, если не активен prefix-all.
    prefix-all /en/about, /ru/about Все языки (включая язык по умолчанию) всегда имеют префикс в URL.
    no-prefix /about Нет языка в URL. Язык сохраняется только в cookies; перезапись URL происходит на внутреннем уровне.
    search-params /about?locale=ru Язык передается как query-параметр. Перенаправляет для добавления/обновления параметра locale, если он отсутствует или устарел.

    Приоритет определения

    1. Префикс пути URL (например, /ru/aboutru).
    2. Значение в cookie / localStorage (intlayer-locale).
    3. Заголовок Accept-Language.
    4. defaultLocale из конфигурации.

    Автоматический обход (Bypass)

    Этот middleware всегда пропускает следующие запросы напрямую без обработки локали:

    • Запросы, соответствующие предикату ignore.
    • /node_modules/**
    • /@** — внутренние запросы Vite (@vite/, @fs/, @id/ и т.д.).
    • /_** — внутренние запросы сервера (__vite_ping, __manifest и т.д.).
    • Запросы, путь которых заканчивается расширением файла (статические файлы). Если в пути статического файла присутствует языковой префикс (например, /ru/logo.png), он удаляется, чтобы файл мог быть отдан корректно.

    Роутинг по доменам

    Когда в вашей конфигурации Intlayer настроен параметр routing.domains, этот middleware обрабатывает роутинг языков между разными доменами:

    • Запрос для /zh/about на домене intlayer.org перенаправляется на https://intlayer.zh/about, когда domains.zh = "intlayer.zh".
    • Запрос к intlayer.zh/about внутренне переписывается в /zh/about, чтобы заполнился параметр маршрута [locale].

    Защита от бесконечного редиректа

    Этот middleware отслеживает количество перенаправлений для пары originalUrl → newUrl в скользящем 2-секундном окне. Более 10 перенаправлений в этом окне возвращают ошибку 500 с подробным описанием вместо бесконечного цикла.

    Nitro / SSR в продакшене (автоматическое внедрение, v9+)

    Когда intlayerProxy используется как плагин Vite, он содержит свойство .nitro. Плагин сборки nitro/vite считывает это свойство и помещает его в nitroConfig.modules, благодаря чему intlayerNitroHandler регистрируется как middleware сервера Nitro автоматически — для продакшен SSR не требуется ручная настройка.

    Обработчик Nitro использует модель событий Web Fetch API h3 v2 (а не fromNodeMiddleware), поэтому он совместим со всеми пресетами Nitro: Node, Bun, Deno, edge runtimes.

    Устаревшие алиасы

    Устаревший экспорт Замена
    intlayerMiddleware intlayerProxy
    intLayerMiddlewarePlugin intlayerProxy