你观察得很对,这不是你理解错了,而是 Next.js 的“静态导出”(next export)确实和 i18n 配置存在冲突。我来帮你理清这两者的核心区别和矛盾在哪里。
⚠️ 官方文档说了什么?
你看到的这段(出自:nextjs.org/docs/pages/…
next exportdoes not support i18n routing.
You will need to manually configure and generate each language version of your pages.
即:
❗ 静态导出(next export)不支持 next.config.js 中的 i18n 选项
🤔 那前面我说的“配合 i18n 路由可以生成多语言静态页面”是不是错的?
答案是:不是错的,但你混淆了两种不同的“静态生成” 。
✅ 核心区分:next export vs. next build + getStaticProps
| 功能 | next build + getStaticProps | next export |
|---|---|---|
✅ 支持 i18n(locales) | 是 | ❌ 否 |
| ✅ 支持 SSG(静态生成 HTML) | 是 | 是 |
| ✅ 支持动态路由 | 是(配合 getStaticPaths) | 部分 |
✅ 支持 app/ 目录 | 是 | ❌(不推荐) |
| ✅ 输出为纯静态站点 | ❌(还需 Node.js 服务) | ✅ 完全静态可部署到 GitHub Pages、S3、Netlify |
| ✅ 支持国际化 URL | 是 | ❌ ❌ ❌ |
🧠 那我到底该怎么做?
✅ 如果你想要支持国际化路由(如 /en, /zh):
👉 你必须用 next build,不能用 next export。
你仍然可以用 getStaticProps + generateStaticParams 做 SSG,但你部署方式不能是纯静态(out/ 文件夹)。推荐部署到支持 Node.js 的平台(如 Vercel、Netlify Functions)。
✅ 如果你非要用 next export(生成纯静态站点):
那你有两种选择:
❌ 不能使用 next.config.js 中的 i18n 配置。
你要:
-
手动处理每种语言为一个“分站”;
-
例如用:
pages/ en/ index.tsx zh/ index.tsx -
每个页面自己加载语言资源;
-
next export时生成:out/ en/index.html zh/index.html
可以配合 next-intl 或 react-i18next,但 你自己负责语言路由逻辑(因为 Next 不帮你处理了)。
🎯 总结:这不是矛盾,而是选择的差异
| 你想要什么? | 推荐方案 |
|---|---|
| SEO友好 + 多语言 URL + 自动语言解析 | next.config.js + getStaticProps + next-intl(但不能用 next export) |
| 完全静态站点(如部署到 GitHub Pages) | 手动做分语言目录结构,不能用 i18n 配置,自己处理语言逻辑 |
要不要我帮你设计一个兼容 next export 的国际化结构?或者你告诉我你更偏向哪种部署方式(纯静态 vs 动态 SSG),我帮你定结构。