返回

gt-next@6.9.0

Ernest McCarter avatarErnest McCarter
gt-nextv6.9.0静态渲染静态站点生成翻译i18n

概览

静态渲染是 Next.js 框架的核心能力之一,它会在构建时预渲染页面,从而实现最佳性能和 SEO 效果。 在此基础上,任何原生支持 Next.js 的库都应当能够在这种渲染模型下无缝运行。 gt-next 6.9.0 引入了静态渲染支持,使国际化应用可以在不牺牲语言环境检测或翻译功能的前提下,充分利用 Next.js 的完整静态生成能力。

什么是静态渲染?

静态渲染是在构建阶段生成 HTML,而不是在每次请求时生成。 这种方式虽然能带来极佳的性能,但也会给那些通常依赖请求头、Cookie 或中间件来确定用户语言环境的 i18n 库带来挑战。 在静态渲染过程中,这些与请求时机相关的依赖不可用,因此需要借助其他方式进行语言环境检测。


静态渲染设置

在配置 gt-next 之前,请先根据 generateStaticParams 文档 将你的 Next.js 应用配置为使用静态生成。

该设置涉及三个关键组件:

1. 在配置中启用静态渲染

export default withGTConfig(nextConfig, {
  experimentalEnableSSG: true,
})

2. 配置 Middleware

为动态请求配置 Middleware:

// proxy.ts(Next.js 16+)或 middleware.ts(Next.js 15 及以下版本)
import { createNextMiddleware } from 'gt-next/middleware'

export default createNextMiddleware();

export const config = {
  matcher: [
    "/((?!api|static|.*\\..*|_next).*)",
  ],
}

3. 定义静态语言环境检测

创建一个 getStaticLocale 函数,用于在静态渲染阶段确定语言环境。此函数只会在静态生成时运行——在 SSR 期间,将使用默认行为(读取 headers、cookies 等)。

Next.js 15.5+

// getStaticLocale.ts
import { locale } from "next/root-params";

export default async function getStaticLocale() {
  return await locale();
}

Next.js 15.1–15.4

// getStaticLocale.ts  
import { unstable_rootParams } from "next/server";

export default async function getStaticLocale() {
  return (await unstable_rootParams())?.locale;
}

在静态渲染阶段,可以调用 getStaticRegion 来自定义地区检测。


优点

Next.js 原生支持:利用 Next.js 内置的 root 参数系统,实现与静态渲染的兼容。


其他功能

除了静态生成外,此版本还支持自定义 getLocale()getRegion() 函数,可在 SSR 和静态渲染环境中进行配置。