Next.js 13 i18n路由报错:Incorrect locale information provided
下面是针对该报错的具体排查和修复步骤:
检查
next.config.js的i18n配置准确性
确保配置中的locales列表、defaultLocale没有拼写错误,格式符合规范(比如en-US而非en_us),示例正确配置:module.exports = { i18n: { locales: ['en-US', 'fr', 'zh-CN'], defaultLocale: 'en-US', }, }注意:
locales中的值必须和页面文件夹命名(比如pages/fr)或动态路由的locale参数完全一致。验证数据获取函数的locale处理逻辑
在getStaticProps或getServerSideProps中,确保正确接收并使用context.locale参数,不要手动硬编码locale值。比如:export async function getStaticProps({ locale }) { const data = await fetch(`https://api.example.com/data?locale=${locale}`) return { props: { data } } }如果使用
getStaticPaths,要确保paths数组中包含所有配置的locale路径,比如:export async function getStaticPaths({ locales }) { return { paths: locales.map(locale => ({ params: { id: '1' }, locale, })), fallback: false, } }排查自定义App组件的干扰
检查_app.js/_app.tsx中是否有修改router.locale或覆盖locale相关属性的代码,比如错误地在useEffect中修改路由的locale值,导致Next.js收到不合法的locale信息。检查中间件对locale的影响
如果项目中使用了自定义路由中间件(middleware.js/middleware.ts)或第三方国际化中间件,确认它们没有错误修改请求的next-url或accept-language头,导致Next.js无法正确识别locale。清除Next.js缓存并重新构建
删除项目根目录下的.next文件夹和node_modules/.cache目录,然后执行npm run build或yarn build重新构建,避免旧配置缓存引发的问题。核对Next.js版本兼容性
某些旧版本的Next.js在i18n路由功能上存在已知bug,建议升级到最新的稳定版(比如v13+),确保和官方文档的版本一致。
内容的提问来源于stack exchange,提问作者a0m0rajab

