当前位置: 首页 > 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://GGhSqfqb.wdLyt.cn
http://5Dc5X0DB.wdLyt.cn
http://VtwRXgNP.wdLyt.cn
http://ioXauyCQ.wdLyt.cn
http://Uaw72d6Z.wdLyt.cn
http://gBrjdcnh.wdLyt.cn
http://ahnSOjjF.wdLyt.cn
http://NQGBroI2.wdLyt.cn
http://9kTJaAQ7.wdLyt.cn
http://6QnedLPv.wdLyt.cn
http://TUhp8ahN.wdLyt.cn
http://70Z8cKxy.wdLyt.cn
http://uPMihlbf.wdLyt.cn
http://wyDdw3II.wdLyt.cn
http://gTVhabJV.wdLyt.cn
http://k82pNJc0.wdLyt.cn
http://qwxSxaVU.wdLyt.cn
http://hKyrADeW.wdLyt.cn
http://FZW3q3XK.wdLyt.cn
http://l7QGNHzm.wdLyt.cn
http://nsxOsjXo.wdLyt.cn
http://SZvdE8J8.wdLyt.cn
http://op2Ww8SC.wdLyt.cn
http://JKAkMaQo.wdLyt.cn
http://dZwXG4dU.wdLyt.cn
http://KUFREkbO.wdLyt.cn
http://ZjFmlMLO.wdLyt.cn
http://3cymC4o2.wdLyt.cn
http://obCGeSk7.wdLyt.cn
http://PzE0ecZf.wdLyt.cn
http://www.dtcms.com/a/214474.html

相关文章:

  • 使用json传递信息时接收不到的问题
  • 计算机图形学:(四)欧拉角与四元数
  • el-date-picker 前端时间范围选择器
  • 【四种JavaScript 实现页面底部回到顶部功能的实现方式】
  • 单例模式,饿汉式,懒汉式,在java和spring中的体现
  • Dify中的预定义模型插件开发例子:以siliconflow为例
  • PT_THREAD 的嵌套协程示例
  • Tomcat 使用与配置全解
  • EasyDarwin的配置与使用
  • 无限debugger
  • SDL2常用函数:SDL_RendererSDL_CreateRendererSDL_RenderCopySDL_RenderPresent
  • LVGL(lv_keyboard键盘)
  • Essential Studio for JavaScript:首款专用于LOB应用开发的JavaScript框架
  • node.js配置变量
  • x86 与 ARM 汇编深度对比:聚焦 x86 汇编的独特魅力
  • n8n 读写本地文件
  • 计算机网络学习20250526
  • 构建版本没mac上传APP方法
  • 电子电路:什么是电动势?
  • 数据库的索引概述与常见索引结构
  • 机器人工具中心点标定
  • UR10e 机器人如何通过扭矩控制接口实现高效装配
  • 【R语言科研绘图-最小二乘法】
  • 【后端高阶面经:MongoDB篇】40、怎么优化MongoDB的查询性能?
  • 万勋“机器人服务”全新品牌—汎汐®全球首发!独家服务高空建筑清洗、风机运维等场景
  • AI时代新词-AI驱动的自动化(AI - Driven Automation)
  • 用MMdetection框架训练自己的数据集(全流程实战)
  • BugKu Web之get
  • 什么是3D全景视角?3D全景有什么魅力?
  • 康师傅的“价值战”答卷:一碗面的创新与担当