# gt-next: General Translation Next.js SDK: 中间件
URL: https://generaltranslation.com/zh/docs/next/guides/middleware.mdx
---
title: 中间件
description: 根据用户偏好自动进行语言检测并进行 URL 路由
---
中间件会自动检测用户的语言偏好,并将其重定向到站点对应的本地化版本。
它会在内容加载前根据浏览器设置、地理位置和用户偏好提供正确的语言版本。
**文件位置:** 将 `proxy.ts` 放在项目根目录下,与 `app/` 目录同级——不要放在 `app/` 目录内。`proxy.ts` (Next.js 16+) 或 `middleware.ts` (Next.js 15 及以下)
## 配置
### 第 1 步:创建动态路由
在 `app/` 文件夹中创建一个 `[locale]` 目录,并将所有页面移到其中:
### 第 2 步:添加中间件
在项目根目录下创建 `proxy.ts`:
```ts
import { createNextMiddleware } from 'gt-next/middleware';
export default createNextMiddleware();
export const config = {
// 匹配除 API 路由、静态文件和 Next.js 内部路径之外的所有路径
matcher: ['/((?!api|static|.*\\..*|_next).*)']
};
```
这会启用自动语言检测,以及使用 `/en/about`、`/es/about` 这类区域设置前缀进行 URL 路由。
## 语言检测
中间件会按以下顺序检测用户的语言偏好:
1. **URL 区域设置** - `/es/about` → 西班牙语
2. **用户 Cookie** - 之前选择的语言
3. **浏览器请求头** - `Accept-Language` 请求头
4. **默认区域设置** - 配置的回退语言
中间件会自动处理浏览器语言检测和 Cookie 持久化,无需额外配置。
## 本地化路径
为不同语言自定义 URL 路径:
```ts
export default createNextMiddleware({
pathConfig: {
// 英文:/en/products,中文:/zh/产品
"/products": {
"zh": "/产品"
},
// 动态路由:/en/product/123,/zh/产品/123
"/product/[id]": {
"zh": "/产品/[id]"
}
}
});
```
## URL 结构
默认情况下,默认区域设置**不会**带有区域设置代码前缀:
```
/about → /about (默认区域设置:英语)
/about → /es/about (西班牙语)
/about → /fr/about (法语)
```
### 为默认区域设置添加前缀
如需为包括默认区域设置在内的所有区域设置添加前缀:
```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
```
### 匹配器配置
排除 API 路由和静态文件:
```ts
export const config = {
matcher: ['/((?!api|static|.*\\..*|_next).*)']
};
```
请务必充分测试你的中间件配置——错误的匹配器可能导致无限重定向,或使静态资源无法正常加载。
## 后续步骤
**查看实际效果:**[静态站点生成示例应用](https://github.com/gt-examples/static-site-generation)包含完整的中间件 setup 和区域设置路由——[在线预览](https://static-site-generation.generaltranslation.dev)。
* [SSG 指南](/docs/next/guides/ssg) - 基于区域设置路由的静态生成
* [RTL 支持](/docs/next/guides/rtl) - 从右到左书写语言
* API 参考: