# gt-next: General Translation Next.js SDK: Middleware URL: https://generaltranslation.com/ru/docs/next/guides/middleware.mdx --- title: Middleware description: Автоматическое определение языка и маршрутизация URL на основе предпочтений пользователя --- Middleware автоматически определяет языковые предпочтения пользователя и перенаправляет его на соответствующую локализованную версию сайта. Он использует настройки браузера, геолокацию и пользовательские предпочтения, чтобы выбрать нужный язык ещё до загрузки контента. **Расположение файла:** Поместите `proxy.ts` в корень проекта, на одном уровне с каталогом `app/`, а не внутри него. `proxy.ts` (Next.js 16+) или `middleware.ts` (Next.js 15 и ниже) ## Сетап ### Шаг 1: Создайте динамический маршрут Создайте директорию `[locale]` в папке `app/` и переместите в неё все страницы: ### Шаг 2: Добавьте middleware Создайте файл `proxy.ts` в корне проекта: ```ts import { createNextMiddleware } from 'gt-next/middleware'; export default createNextMiddleware(); export const config = { // Совпадать со всеми путями, кроме маршрутов API, статических файлов и внутренних элементов Next.js matcher: ['/((?!api|static|.*\\..*|_next).*)'] }; ``` Это позволяет автоматически определять язык и настраивать маршрутизацию URL с префиксами локали, например `/en/about`, `/es/about`. ## Определение языка Middleware определяет языковые предпочтения пользователя в таком порядке: 1. **Локаль в URL** - `/es/about` → испанский 2. **Пользовательский cookie** - предыдущий выбор языка 3. **Заголовки браузера** - заголовок `Accept-Language` 4. **Локаль по умолчанию** - настроенный запасной язык Middleware автоматически определяет язык браузера и сохраняет cookie без дополнительной настройки. ## Локализованные пути Настройте пути URL для разных языков: ```ts export default createNextMiddleware({ pathConfig: { // Английский: /en/products, Китайский: /zh/产品 "/products": { "zh": "/产品" }, // Динамические маршруты: /en/product/123, /zh/产品/123 "/product/[id]": { "zh": "/产品/[id]" } } }); ``` ## Структура URL По умолчанию к URL для локали по умолчанию **не** добавляется префикс с кодом локали: ``` /about → /about (локаль по умолчанию: English) /about → /es/about (Spanish) /about → /fr/about (French) ``` ### Добавление префикса к локали по умолчанию Чтобы добавить префикс ко всем локалям, включая локаль по умолчанию: ```ts export default createNextMiddleware({ prefixDefaultLocale: true }); ``` Результат: ``` /about → /en/about (English, with prefix) /about → /es/about (Spanish, with prefix) /about → /fr/about (French, with prefix) ``` ## Типичные проблемы ### Отсутствует динамический маршрут Все страницы должны находиться внутри `[locale]/`: ``` ❌ Wrong: app/ ├── page.tsx └── about/page.tsx ✅ Correct: app/ └── [locale]/ ├── page.tsx └── about/page.tsx ``` ### Настройка matcher Исключите маршруты API и статические файлы: ```ts export const config = { matcher: ['/((?!api|static|.*\\..*|_next).*)'] }; ``` Тщательно проверьте конфигурацию middleware — некорректные matchers могут вызвать бесконечные перенаправления или нарушить работу со статическими ресурсами. ## Что дальше **Смотрите в действии:** [пример приложения со Static Site Generation](https://github.com/gt-examples/static-site-generation) включает полную настройку middleware с маршрутизацией по локалям — [онлайн-демо](https://static-site-generation.generaltranslation.dev). * [Руководство по SSG](/docs/next/guides/ssg) - Статическая генерация с маршрутизацией по локалям * [Поддержка RTL](/docs/next/guides/rtl) - Языки с письмом справа налево * Справочник API: