# gt-next: General Translation Next.js SDK: Middleware
URL: https://generaltranslation.com/es/docs/next/guides/middleware.mdx
---
title: Middleware
description: Detección automática del idioma y enrutamiento de URL según las preferencias del usuario
---
Middleware detecta automáticamente las preferencias de idioma del usuario y lo redirige a la versión localizada correspondiente de tu sitio.
Usa la configuración del navegador, la geolocalización y las preferencias del usuario para mostrar el idioma adecuado antes de que se cargue cualquier contenido.
**Ubicación del archivo:** Coloca `proxy.ts` en la raíz de tu proyecto, al mismo nivel que tu directorio `app/`, no dentro de él. `proxy.ts` (Next.js 16+) o `middleware.ts` (Next.js 15 y versiones anteriores)
## Configuración
### Paso 1: Crear una ruta dinámica
Crea un directorio `[locale]` en la carpeta `app/` y mueve todas las páginas dentro de él:
### Paso 2: Agrega el middleware
Crea `proxy.ts` en la raíz de tu proyecto:
```ts
import { createNextMiddleware } from 'gt-next/middleware';
export default createNextMiddleware();
export const config = {
// Coincide con todas las rutas excepto rutas de API, archivos estáticos e internos de Next.js
matcher: ['/((?!api|static|.*\\..*|_next).*)']
};
```
Esto permite la detección automática del idioma y el enrutamiento de URL con prefijos de configuración regional como `/en/about`, `/es/about`.
## Detección de idioma
El middleware detecta las preferencias de idioma del usuario en este orden:
1. **Configuración regional de la URL** - `/es/about` → español
2. **cookie del usuario** - Selección de idioma previa
3. **Encabezados del navegador** - Encabezado `Accept-Language`
4. **Configuración regional predeterminada** - Idioma de respaldo configurado
El middleware gestiona automáticamente la detección del idioma del navegador y la persistencia de la cookie sin necesidad de configuración adicional.
## Rutas localizadas
Personaliza las rutas de las URL para diferentes idiomas:
```ts
export default createNextMiddleware({
pathConfig: {
// Inglés: /en/products, Chino: /zh/产品
"/products": {
"zh": "/产品"
},
// Rutas dinámicas: /en/product/123, /zh/产品/123
"/product/[id]": {
"zh": "/产品/[id]"
}
}
});
```
## Estructura de URL
De forma predeterminada, tu configuración regional predeterminada **no** tendrá como prefijo un código de configuración regional:
```
/about → /about (configuración regional predeterminada: inglés)
/about → /es/about (español)
/about → /fr/about (francés)
```
### Añadir un prefijo a la configuración regional predeterminada
Para añadir un prefijo a todas las configuraciones regionales, incluida la predeterminada:
```ts
export default createNextMiddleware({
prefixDefaultLocale: true
});
```
Resultado:
```
/about → /en/about (English, with prefix)
/about → /es/about (Spanish, with prefix)
/about → /fr/about (French, with prefix)
```
## Problemas frecuentes
### Falta la ruta dinámica
Todas las páginas deben estar dentro de `[locale]/`:
```
❌ Wrong:
app/
├── page.tsx
└── about/page.tsx
✅ Correct:
app/
└── [locale]/
├── page.tsx
└── about/page.tsx
```
### Configuración del matcher
Excluye las rutas de API y los archivos estáticos:
```ts
export const config = {
matcher: ['/((?!api|static|.*\\..*|_next).*)']
};
```
Prueba a fondo la configuración de tu middleware: unos `matchers` incorrectos pueden causar redirecciones infinitas o hacer que los archivos estáticos dejen de funcionar.
## Próximos pasos
**Véalo en acción:** La [aplicación de ejemplo de generación de sitios estáticos](https://github.com/gt-examples/static-site-generation) incluye una configuración completa del middleware con enrutamiento por configuración regional — [vista previa en vivo](https://static-site-generation.generaltranslation.dev).
* [Guía de SSG](/docs/next/guides/ssg) - Generación estática con enrutamiento por configuración regional
* [Compatibilidad con RTL](/docs/next/guides/rtl) - Idiomas de escritura de derecha a izquierda
* Referencias de API: