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

[特殊字符] useTranslations 客户端使用教程(Next.js + next-intl)

✅ 适用场景

  • 用于 客户端组件(加了 "use client" 声明)
  • 配合 React Hooks 使用翻译
  • 动态渲染、事件响应等需要在客户端处理的地方

📦 安装(如未安装)

npm install next-intl

📁 项目结构参考

.
├── app
│   ├── [locale]
│   │   ├── layout.tsx        # 设置 IntlProvider
│   │   ├── page.tsx
├── messages
│   ├── en.json
│   ├── zh.json

✨ 1. 设置 Provider(app/[locale]/layout.tsx

这是必须步骤,让 useTranslations 能获取到当前语言环境。

import { NextIntlClientProvider, useMessages } from 'next-intl';export default function LocaleLayout({children,params: { locale }
}: {children: React.ReactNode;params: { locale: string };
}) {const messages = useMessages(); // 服务器端提供翻译内容return (<NextIntlClientProvider locale={locale} messages={messages}>{children}</NextIntlClientProvider>);
}

💡 2. 客户端组件中使用 useTranslations

📄 components/Greeting.tsx

'use client';import { useTranslations } from 'next-intl';export default function Greeting() {const t = useTranslations('user'); // 对应 messages/en.json 中的 "user" 命名空间return <p>{t('greeting', { name: 'David' })}</p>;
}

🌍 messages/en.json 示例:

{"user": {"greeting": "Hello, {name}!"}
}

🗣 渲染结果为:Hello, David!


🎉 支持嵌套命名空间

const t = useTranslations();
t('user.greeting', { name: 'Alice' });

📌 注意事项

  • useTranslations只能在客户端组件中使用,必须加 "use client"
  • 如果没有正确设置 NextIntlClientProvider,会抛出错误。
  • 参数占位 {name} 支持动态替换。

✅ 用于按钮、交互、表单等

'use client';import { useTranslations } from 'next-intl';export function SubmitButton() {const t = useTranslations('form');return <button>{t('submit')}</button>;
}

对应 messages:

{"form": {"submit": "Submit"}
}

🧩 示例组合:page.tsx + 客户端组件

// app/[locale]/page.tsx
import Greeting from '@/components/Greeting';export default function HomePage() {return (<div><Greeting /></div>);
}

🧠 总结

用法用于示例函数
getTranslations服务端组件 (page.tsx
, layout.tsx
)
const t = await getTranslations('home')
useTranslations客户端组件 ("use client"
组件)
const t = useTranslations('user')
http://www.xdnf.cn/news/659215.html

相关文章:

  • n8n中文版安装指南,使用Docker部署N8N中文版
  • 深度学习入门6:pytorch卷积神经网络CNN实现手写数字识别准确率99%
  • 深度学习中的卷积和反卷积
  • 北京大学肖臻老师《区块链技术与应用》公开课:01-课程简介
  • 《软件工程》第 11 章 - 结构化软件开发
  • Qt Creator快捷键合集
  • GESP2024年9月认证C++二级( 第三部分编程题(2)小杨的矩阵)
  • LangChain理解
  • Mybatis框架
  • Redis分布式缓存核心架构全解析:持久化、高可用与分片实战
  • UDP协议原理与Java编程实战:无连接通信的奥秘
  • 【Webtrees 手册】第 4 章 - 编辑指南
  • 通用的管理账号设置设计(一)
  • 02. [Python+Golang+PHP]三数之和,多种语言实现最优解demo
  • 华为OD机试真题——分糖果(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • Linux 网络配置现代实践:Netplan 与 ifcfg 的全景对比与工程指南20250526
  • 身份证二要素核验:数字经济时代的信任基石
  • React从基础入门到高级实战:React 核心技术 - 表单处理与验证深度指南
  • 关于模型记忆力的实现方式
  • Linux GPIO子系统深度解析:从历史演进到实战应用
  • 使用 Pfam 和 InterProScan 进行蛋白质家族和功能域的分析
  • 第一章:MLOps/LLMOps 导论:原则、生命周期与挑战
  • 激光开卷落料线:技术革新与产业应用综述
  • PCCW Global 与银河航天在港成功完成低轨卫星测试
  • 紫光同创FPGA实现视频采集转USB2.0输出,基于CY7C68013芯片,提供PDS工程源码和技术支持和QT上位机
  • DC-DC升压
  • 【Qt】Debug版本正常运行,Release版本运行卡死
  • FreeRTOS 事件标志组详解:原理、用法与实战技巧
  • 网页模板素材网站 web前端网页制作模板
  • 如何清除浏览器启动hao点360