Creation:2025-10-05Last update:2026-05-31
将此文档参考到您的 AI 助手ChatGPTClaudeDeepSeekGoogle AI modeGeminiPerplexityMistralGrok
使用您最喜欢的AI助手总结文档,并引用此页面和AI提供商
此页面的内容已使用 AI 翻译。
查看英文原文的最新版本编辑此文档
如果您有改善此文档的想法,请随时通过在GitHub上提交拉取请求来贡献。
文档的 GitHub 链接Copy
复制文档 Markdown 到剪贴板
使用 Intlayer 翻译你的 Next.js 15 next-intl 网站 | 国际化 (i18n)
本指南将引导你了解 next-intl 在 Next.js 15(App Router)应用中的最佳实践,并展示如何在其基础上叠加 Intlayer,实现强大的翻译管理和自动化。
请参阅next-i18next vs next-intl vs Intlayer中的比较。
- 针对初级开发者:按照分步章节操作,构建一个可用的多语言应用。
- 针对中级开发者:关注负载优化和服务器/客户端的分离。
- 针对高级开发者:关注静态生成、中间件、SEO 集成和自动化钩子。
我们将涵盖的内容:
- 设置和文件结构
- 优化消息加载方式
- 客户端和服务器组件的使用
- 元数据、站点地图、robots 以支持 SEO
- 用于本地化路由的中间件
- 在此基础上添加 Intlayer(CLI 和自动化)
使用 next-intl 设置你的应用
安装 next-intl 依赖:
bash
复制代码
复制代码到剪贴板
bash
复制代码
复制代码到剪贴板
设置和加载内容
仅加载路由所需的命名空间,并尽早验证 locales。尽可能保持服务器组件同步,只将所需的消息推送到客户端。
src/i18n.ts
复制代码
复制代码到剪贴板
src/app/[locale]/layout.tsx
复制代码
复制代码到剪贴板
src/app/[locale]/about/page.tsx
复制代码
复制代码到剪贴板
在客户端组件中的使用示例
让我们来看一个渲染计数器的客户端组件示例。
翻译内容(复用结构;根据需要加载到 next-intl 消息中)
locales/en/about.json
复制代码
复制代码到剪贴板
locales/fr/about.json
复制代码
复制代码到剪贴板
客户端组件
src/components/ClientComponentExample.tsx
复制代码
复制代码到剪贴板
不要忘记在页面客户端消息中添加 "about" 消息 (只包含您的客户端实际需要的命名空间)。
在服务器组件中的使用
此 UI 组件是一个服务器组件,可以在客户端组件下渲染(页面 → 客户端 → 服务器)。通过传递预先计算好的字符串保持同步。
src/components/ServerComponent.tsx
复制代码
复制代码到剪贴板
注意:
- 在服务器端计算
formattedCount(例如,const initialFormattedCount = format.number(0))。 - 避免将函数或不可序列化的对象传递给服务器组件。
src/app/[locale]/about/layout.tsx
复制代码
复制代码到剪贴板
src/app/sitemap.ts
复制代码
复制代码到剪贴板
src/app/robots.ts
复制代码
复制代码到剪贴板
用于语言路由的中间件
添加一个中间件来处理语言环境检测和路由:
src/middleware.ts
复制代码
复制代码到剪贴板
最佳实践
- 设置 html 的
lang和dir:在src/app/[locale]/layout.tsx中,通过getLocaleDirection(locale)计算dir,并设置<html lang={locale} dir={dir}>。 - 按命名空间拆分消息:按语言环境和命名空间组织 JSON(例如,
common.json、about.json)。 - 最小化客户端负载:在页面中,只向
NextIntlClientProvider发送所需的命名空间(例如,pick(messages, ['common', 'about']))。 - 优先使用静态页面:导出
export const dynamic = 'force-static'并为所有locales生成静态参数。 - 同步服务器组件:传递预先计算好的字符串(翻译标签、格式化数字),而不是异步调用或不可序列化的函数。
在 next-intl 之上实现 Intlayer
安装 intlayer 依赖:
bash
复制代码
复制代码到剪贴板
创建 intlayer 配置文件:
intlayer.config.ts
复制代码
复制代码到剪贴板
添加 package.json 脚本:
package.json
复制代码
复制代码到剪贴板
备注:
intlayer fill:使用您的 AI 提供者根据配置的语言环境填充缺失的翻译。intlayer test:检查缺失或无效的翻译(在持续集成中使用)。
您可以配置参数和提供者;详情请参见 Intlayer CLI。