You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

next-intl中仅禁用Accept-Language头自动区域检测,保留Cookie检测

解决next-intl仅禁用Accept-Language检测、保留Cookie检测的问题

要实现仅禁用基于Accept-Language请求头的区域设置检测,同时保留Cookie中的区域设置值,可以通过自定义区域检测逻辑替代默认配置:

  1. 关闭默认自动检测,手动从Cookie提取有效locale
  2. 验证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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:54:57