next-intl中仅禁用Accept-Language头自动区域检测,保留Cookie检测
要实现仅禁用基于Accept-Language请求头的区域设置检测,同时保留Cookie中的区域设置值,可以通过自定义区域检测逻辑替代默认配置:
- 关闭默认自动检测,手动从Cookie提取有效locale
- 验证Cookie中的locale是否在支持列表内,有效则使用,无效则回退到默认locale
具体代码示例如下:
import createMiddleware from 'next-intl/middleware'; import { cookies } from 'next/headers'; // 定义应用支持的区域列表 const locales = ['en', 'zh-CN']; // 定义默认区域 const defaultLocale = 'en'; export default createMiddleware({ locales, defaultLocale, localeDetection: false, // 关闭默认的自动检测逻辑 // 自定义区域解析逻辑 async localeResolver(request) { // 读取next-intl默认存储locale的Cookie const cookieLocale = cookies().get('NEXT_LOCALE')?.value; // 验证Cookie中的locale是否合法 if (cookieLocale && locales.includes(cookieLocale)) { return cookieLocale; } // Cookie无有效值时直接使用默认locale,忽略Accept-Language头 return defaultLocale; } }); export const config = { matcher: ['/((?!api|_next|.*\\..*).*)'] };
关键说明
localeResolver是next-intl提供的自定义解析入口,完全控制locale来源- 仅从
NEXT_LOCALECookie读取值(next-intl默认用该名称存储用户选择的locale) - 全程不读取
Accept-Language请求头,实现仅禁用该检测的需求
内容的提问来源于stack exchange,提问作者Wint
相关产品推荐
相关产品推荐

