next export ssg

67 阅读2分钟

你观察得很对,这不是你理解错了,而是 Next.js 的“静态导出”(next export)确实和 i18n 配置存在冲突。我来帮你理清这两者的核心区别和矛盾在哪里。


⚠️ 官方文档说了什么?

你看到的这段(出自:nextjs.org/docs/pages/…

next export does 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 + getStaticPropsnext 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 配置。

你要:

  1. 手动处理每种语言为一个“分站”;

  2. 例如用:

    pages/
      en/
        index.tsx
      zh/
        index.tsx
    
  3. 每个页面自己加载语言资源;

  4. next export 时生成:

    out/
      en/index.html
      zh/index.html
    

可以配合 next-intlreact-i18next,但 你自己负责语言路由逻辑(因为 Next 不帮你处理了)。


🎯 总结:这不是矛盾,而是选择的差异

你想要什么?推荐方案
SEO友好 + 多语言 URL + 自动语言解析next.config.js + getStaticProps + next-intl(但不能用 next export
完全静态站点(如部署到 GitHub Pages)手动做分语言目录结构,不能用 i18n 配置,自己处理语言逻辑

要不要我帮你设计一个兼容 next export 的国际化结构?或者你告诉我你更偏向哪种部署方式(纯静态 vs 动态 SSG),我帮你定结构。