Files
cydweb/middleware.ts
DESKTOP-PUHFO60\dsx2016 e2fa28e501 Show Chinese locale only when Chinese language signals are detected.
Hide the language switcher for English-only browsers; gate /zh via Accept-Language and a client cookie.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-19 19:50:37 +08:00

39 lines
1.1 KiB
TypeScript

import createMiddleware from "next-intl/middleware";
import { NextRequest, NextResponse } from "next/server";
import { routing } from "./i18n/routing";
import {
acceptLanguageHasChinese,
ZH_OK_COOKIE,
} from "./lib/chinese-locale";
const intlMiddleware = createMiddleware({
...routing,
localeDetection: true,
});
function requestAllowsChinese(request: NextRequest): boolean {
if (acceptLanguageHasChinese(request.headers.get("accept-language"))) {
return true;
}
return request.cookies.get(ZH_OK_COOKIE)?.value === "1";
}
export default function middleware(request: NextRequest) {
const { pathname } = request.nextUrl;
// Shared /zh links: without Chinese signals → English only
if (pathname === "/zh" || pathname.startsWith("/zh/")) {
if (!requestAllowsChinese(request)) {
const url = request.nextUrl.clone();
url.pathname = pathname.replace(/^\/zh/, "/en") || "/en";
return NextResponse.redirect(url);
}
}
return intlMiddleware(request);
}
export const config = {
matcher: ["/", "/(en|zh)/:path*", "/((?!api|_next|_vercel|.*\\..*).*)"],
};