32 lines
1.0 KiB
TypeScript
32 lines
1.0 KiB
TypeScript
// middleware.ts
|
||
import { NextRequest, NextResponse } from "next/server";
|
||
|
||
export function middleware(request: NextRequest) {
|
||
// 1. Проверяем существующую куку
|
||
let lang = request.cookies.get("lang")?.value;
|
||
|
||
// 2. Если куки нет, определяем язык из браузера
|
||
if (!lang) {
|
||
lang =
|
||
request.headers
|
||
.get("Accept-Language")
|
||
?.split(",")[0] // Берём первый язык из списка
|
||
.split("-")[0] // Убираем регион (en-US → en)
|
||
.toLowerCase() || "en"; // Fallback на английский
|
||
}
|
||
|
||
// 3. Сохраняем язык в куки
|
||
const response = NextResponse.next();
|
||
if (!request.cookies.has("lang")) {
|
||
response.cookies.set("lang", lang, {
|
||
maxAge: 60 * 60 * 24 * 365, // 1 год
|
||
httpOnly: true,
|
||
});
|
||
}
|
||
|
||
// 4. Добавляем язык в заголовки ВСЕХ исходящих запросов
|
||
response.headers.set("Accept-Language", lang);
|
||
|
||
return response;
|
||
}
|