当前位置: 首页 > news >正文

[特殊字符] next-intl 服务端 i18n getTranslations 教程

next-intl 是为 Next.js 提供国际化(i18n)支持的强大库,getTranslations 是它在 服务器端加载翻译文本 时的重要函数,适用于 App Router 场景(如 app/ 目录下的页面、layout、server component)。


✅ 安装 next-intl

如果你还没安装:

npm install next-intl

🌍 项目结构建议

.
├── app
│   ├── [locale]             # 动态路由处理多语言
│   │   ├── page.tsx
│   │   ├── layout.tsx
├── messages
│   ├── en.json
│   ├── zh.json
├── middleware.ts

📦 创建多语言 JSON 文件(如 messages/en.json

jsonCopyEdit
{"home": {"title": "Welcome to the site!","description": "This is a demo page."}
}

🛠 配置 middleware.ts

tsCopyEdit
import createMiddleware from 'next-intl/middleware';export default createMiddleware({locales: ['en', 'zh'],defaultLocale: 'en'
});export const config = {matcher: ['/', '/(en|zh)/:path*']
};

📚 使用 getTranslations(核心部分)

👇 示例:app/[locale]/page.tsx

tsxCopyEdit
import { getTranslations } from 'next-intl/server';export default async function HomePage() {const t = await getTranslations('home'); // 读取 "home" 命名空间return (<div><h1>{t('title')}</h1><p>{t('description')}</p></div>);
}

getTranslations服务器端函数,适用于 Server Component 中(也就是不能用于 use client 的组件中)。


📌 getTranslations 的参数说明

tsCopyEdit
const t = await getTranslations(namespace?: string);
  • namespace(可选):对应 JSON 中的顶层键,如 home
  • 返回的 t 是一个类似函数的对象,可用于 t('key') 获取翻译值。

如果你的翻译结构是这样的:

jsonCopyEdit
{"hello": "你好","user": {"greeting": "你好,{name}!"}
}

你可以这样用:

tsCopyEdit
const t = await getTranslations();
t('hello'); // "你好"
t('user.greeting', { name: '小明' }); // "你好,小明!"

⚠ 注意事项

  • getTranslations 只能在 服务器组件、layout.tsx 或 page.tsx 中使用。
  • 对于客户端组件,使用 useTranslations()(配合 use client)代替。
  • 多语言的 JSON 文件应放在统一的 messages/ 目录,并按语言命名。

🎯 小技巧:动态传参

tsCopyEdit
const t = await getTranslations();
const name = 'David';
t('user.greeting', { name }); // "Hello, David!"

💡 配合 layout 使用

tsxCopyEdit
// app/[locale]/layout.tsx
import { getTranslations } from 'next-intl/server';export default async function LocaleLayout({ children }: { children: React.ReactNode }) {const t = await getTranslations('layout');return (<><header>{t('title')}</header>{children}</>);
}

🧪 适用于的场景

  • SEO 友好的 SSR 多语言页面
  • 服务端渲染组件中需要使用国际化
  • App Router 模式下使用 layout.tsxpage.tsxserver component
http://www.xdnf.cn/news/650107.html

相关文章:

  • 三分钟了解 MCP 概念(Model Context Protocol,模型上下文协议)
  • CLAM完整流程。patches-feature-split-train-eval
  • 5.26 面经整理 360共有云 golang
  • Java大师成长计划之第31天:Docker与Java应用容器化
  • 基于matlab版本的三维直流电法反演算法
  • 论文阅读: 2023 NeurIPS Jailbroken: How does llm safety training fail?
  • 支持selenium的chrome driver更新到136.0.7103.113
  • C++寻位映射的究极密码:哈希扩展
  • ubuntu 22.04 配置静态IP、网关、DNS
  • 鸿蒙OSUniApp 实现的日期选择器与时间选择器组件#三方框架 #Uniapp
  • 对数的运算困惑
  • 鸿蒙OSUniApp 开发带有通知提示的功能组件#三方框架 #Uniapp
  • Linux《基础IO》
  • 深入Java TCP流套接字编程:高效服务器构建与高并发实战优化指南​
  • Kafka自定义分区策略实战避坑指南
  • 论文阅读笔记:YOLO-World: Real-Time Open-Vocabulary Object Detection
  • nginx安全防护与https部署实战
  • 简述各类机器学习问题
  • 机器学习k近邻,高斯朴素贝叶斯分类器
  • html使用JS实现账号密码登录的简单案例
  • uboot常用命令之eMMC/SD卡命令
  • rpm安装jenkins-2.452
  • 关于vue结合elementUI输入框回车刷新问题
  • API Gateway CLI 实操入门笔记(基于 LocalStack)
  • SQL注入原理及防护方案
  • 如何用 SQL 找到最受欢迎的用户?
  • 基数排序---Java版本
  • PcVue助力常熟三爱富实现FFKM后处理工艺智能化升级
  • 达梦JNI方式调用Logmnr接口调用示例
  • Node.js全局对象详解:console、process与核心功能