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

next-intl默认Locale不识别问题求助(Next.js 13.4.0)

解决Next.js 13.4.0 + next-intl@3.0.0-beta.16默认Locale(en)无法识别的问题

问题复盘

配置en(默认)、de两种Locale后,de可正常访问,但切换至en时触发NEXT_NOT_FOUND错误,提示Locale不存在;语言切换组件显示正常但功能失效,已尝试更换版本、清除node_modules无效。

核心排查点与解决方案

1. 补全i18n.ts配置(关键缺失项)

next-intl/plugin依赖根目录的i18n.ts完成Locale核心配置,你提供的代码中未包含该文件,需创建并补充:

// i18n.ts
import {getRequestConfig} from 'next-intl/server';

export default getRequestConfig(async ({locale}) => ({
  // 确保项目根目录存在messages文件夹,且内部有en.json、de.json文件(可先放空对象{}占位)
  messages: (await import(`./messages/${locale}.json`)).default
}));

2. 修正Middleware配置,添加Locale前缀规则

默认情况下next-intl会为所有Locale添加URL前缀,但你将en设为默认Locale,需配置localePrefix: 'as-needed'让默认Locale不显示前缀,避免路由匹配失败:

// middleware.ts
import createMiddleware from 'next-intl/middleware';
 
export default createMiddleware({
  locales: ['en', 'de'],
  defaultLocale: 'en',
  // 新增:仅为非默认Locale添加URL前缀
  localePrefix: 'as-needed'
});
 
export const config = {
  matcher: ['/((?!api|_next|.*\\..*).*)']
};

3. 确认App目录路由结构

需确保页面路由适配next-intl的本地化规则:

  • 方案1(推荐):使用动态Locale路由段,目录结构为app/[locale]/page.tsx,所有页面放在[locale]文件夹下
  • 方案2(无默认前缀):若保留app/page.tsx作为默认Locale入口,需在该页面中通过useLocale等工具处理本地化逻辑,确保Middleware能正确将根路径映射到en

4. 清除Next.js缓存并重建

依赖缓存或构建缓存可能导致配置不生效,执行以下命令:

rm -rf .next
npm run build
npm run dev

5. 验证语言切换组件

next-intl/link会自动根据Locale生成正确URL,无需手动拼接前缀。当前组件代码逻辑正确,需验证:

  • 点击ENG时生成的URL是根路径/(而非/en/)
  • 点击DEU时生成的URL是/de/

验证步骤

  1. 启动项目后,访问/应自动识别为en并正常加载
  2. 点击DEU切换至/de/,确认页面正常
  3. 点击ENG切换回/,确认无NEXT_NOT_FOUND错误

内容的提问来源于stack exchange,提问作者Paul S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:07:24