# 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: