返回

gt-next@6.9.0

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

概述

此行为现已弃用。有关新行为,请参见 gt-next@6.10.0

静态渲染是 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. 配置中间件

为动态请求配置中间件:

// 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 期间,则使用默认行为 (读取请求头、Cookie 等) 。

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 内置的根参数系统,兼容静态渲染。


其他特性

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