
前端国际化【免费下载链接】react-i18nextInternationalization for react done right. Using the i18next i18n ecosystem.项目地址https://gitcode.com/gh_mirrors/re/react-i18next点击查看免费下载导读本文围绕 react-i18next 仓库中的 example/react 示例工程展开讲解如何用 Vite 搭建一个开箱即用的 React 国际化应用从npm start启动开发服务器、npm run build产出生产构建到使用useTranslationHook、withTranslation高阶组件、Trans组件三种方式渲染翻译文本再到通过 i18next-http-backend 从/public/locales按语言加载 JSON 资源。文章还顺带梳理了同仓库的 example/locize 示例说明如何接入 locize 在线翻译管理与 InContext Editor。读完本文你将能独立复现这套工程结构并理解 react-i18next 在真实项目中的完整接入链路。一、示例工程概览一个最小可用的 React 国际化样板example/react是 react-i18next 仓库自带的 React 示例工程其目录结构清晰地展示了国际化应用的标准分层example/react/ ├── index.html # Vite 入口 HTML ├── package.json # 依赖与脚本声明 ├── vite.config.js # Vite 配置 ├── public/ │ └── locales/ │ ├── en/translation.json │ ├── de/translation.json │ └── sv/translation.json └── src/ ├── main.jsx # 应用入口导入并初始化 i18n ├── i18n.js # i18next 初始化配置 └── App.jsx # 演示三种翻译 API 的页面组件从 package.json 可以看出工程的依赖与技术选型react/react-domReact 19.xi18nexti18next 核心负责语言包加载、插值、复数等基础能力react-i18next将 i18next 桥接进 React 的渲染与组件生命周期i18next-http-backend通过 HTTP 从静态目录加载翻译 JSONi18next-browser-languagedetector自动检测浏览器语言vitevitejs/plugin-react开发与构建工具这一组合也是当前 react-i18next 官方示例中推荐的浏览器端标准栈HTTP 后端负责资源加载语言检测器负责自动识别initReactI18next负责把 i18n 实例注入 React 生态。二、工程脚本从开发到生产构建的完整命令原文档列出了三个核心 npm 脚本对应 Vite 的完整工作流命令说明npm start等价于npm run dev启动开发服务器默认地址为 http://localhost:5173支持热更新npm run build生产构建产物输出到dist/目录npm run preview在本地预览生产构建产物这些脚本在 package.json 中均有对应声明scripts: { start: vite, dev: vite, build: vite build, preview: vite preview }其中start与dev指向同一个命令因此两种写法完全等价。由于工程声明了type: module所有源码均使用 ES Module 语法import/export这与 vite.config.js 中使用的defineConfig及vitejs/plugin-react插件完全匹配。三、i18n 初始化HTTP 后端、语言检测与 react-i18next 的装配示例工程的核心初始化逻辑集中在 src/i18n.js它展示了接入 react-i18next 的标准三步装配import i18n from i18next; import Backend from i18next-http-backend; import LanguageDetector from i18next-browser-languagedetector; import { initReactI18next } from react-i18next; i18n // 1) 通过 HTTP 加载翻译资源 - 见 /public/locales .use(Backend) // 2) 自动检测用户语言 .use(LanguageDetector) // 3) 将 i18n 实例传递给 react-i18next .use(initReactI18next) // 4) 初始化 i18next .init({ fallbackLng: en, debug: true, }); export default i18n;3.1 三个插件的职责i18next-http-backend按{lng}/{ns}.json的默认规则从/public/locales目录加载翻译文件。示例工程提供的三份资源文件恰好与页面上的三个语言切换按钮对应public/locales/en/translation.json英文public/locales/de/translation.json德文public/locales/sv/translation.json瑞典文i18next-browser-languagedetector自动检测浏览器语言支持 cookie、localStorage、navigator 等检测顺序让应用首次打开即使用用户母语。initReactI18next由 react-i18next 提供的初始化插件作用是把 i18n 实例挂载进 React 的上下文机制。从 initReactI18next.js 的实现可以看到它会在 init 阶段把实例与默认配置注入 React 上下文I18nContext由 context.js 导出后续useTranslation、withTranslation、Trans等 API 均依赖这一上下文取用实例。3.2 初始化参数示例只显式配置了两个参数其余均采用 i18next 默认值fallbackLng: en当目标语言缺少某个 key 时回退到英文保证界面不出现空白debug: true在浏览器控制台输出 i18next 的初始化与查找过程便于排查 key 未命中等问题生产环境建议关闭。3.3 入口处的导入顺序在 src/main.jsx 中import ./i18n必须早于App的渲染执行——这正是 i18n 初始化的时机保证import React from react; import { createRoot } from react-dom/client; import ./index.css; import App from ./App; // import i18n (needs to be bundled ;)) import ./i18n; const root createRoot(document.getElementById(root)); root.render( React.StrictMode App / /React.StrictMode, );模块导入具有副作用执行顺序保证App.jsx内部通过useTranslation等 API 访问 i18n 实例时实例必然已完成init。这是 react-i18next 接入中最常见、也最容易被忽略的时序约束。四、三种翻译 API 的对照演示src/App.jsx 是理解 react-i18next 三种编程接口的最佳教材它在同一个页面中并置了三种用法4.1 HookuseTranslation函数组件中的首选方式返回{ t, i18n }function Page() { const { t, i18n } useTranslation(); const changeLanguage (lng) { i18n.changeLanguage(lng); }; // ... div{t(description.part2)}/div }t(description.part2)会沿着命名空间默认值translation、key 路径description.part2查找资源。以英文资源为例命中Switch language between english and german using buttons above.见 public/locales/en/translation.json。语言切换按钮直接调用i18n.changeLanguage(de | en | sv)触发后 react-i18next 会响应languageChanged事件并重渲染使用该实例的组件。4.2 高阶组件withTranslation用于类组件Class Component的经典方案把t等属性注入到 propsclass LegacyWelcomeClass extends Component { render() { const { t } this.props; return h2{t(title)}/h2; } } const Welcome withTranslation()(LegacyWelcomeClass);withTranslation()不传参数时默认绑定translation命名空间。从 withTranslation.js 的实现可以推断它会包一层组件并通过上下文订阅 i18n 实例因此类组件同样能在语言切换后获得最新的t。4.3 组件Trans当翻译文本中需要混入 React 元素如code、链接时Trans组件允许直接在 JSX 中书写默认文本再用 i18nKey 绑定资源function MyComponent() { return ( Trans i18nKeydescription.part1 To get started, edit codesrc/App.js/code and save to reload. /Trans ); }对应的英文资源为To get started, edit 1src/App.js/1 and save to reload.public/locales/en/translation.json。Trans会把 JSX 子节点按顺序编号1、2...渲染时用资源字符串中对应的占位标签替换为真实的 React 元素——这是 react-i18next 中翻译文本携带富文本结构的标准做法Trans的实现位于 Trans.js。4.4 Suspense 与翻译资源加载App.jsx使用Suspense包裹页面配合Loader作为加载兜底const Loader () ( div classNameApp img src{logo} classNameApp-logo altlogo / divloading.../div /div ); export default function App() { return ( Suspense fallback{Loader /} Page / /Suspense ); }当翻译资源尚未加载完成例如首次访问时 HTTP 后端还在请求/locales/en/translation.jsonuseTranslation会挂起suspendSuspense显示 fallback资源就绪后自动渲染真实内容。这是 react-i18next 在异步资源场景下的关键机制也解释了为何整个页面需要被Suspense包裹。五、语言资源文件的组织方式示例工程的语言资源遵循 i18next 的默认目录约定/public/locales/{lng}/{ns}.json。三份文件结构完全对称以英文版为例{ title: Welcome to react using react-i18next, description: { part1: To get started, edit 1src/App.js/1 and save to reload., part2: Switch language between english and german using buttons above. } }要点资源支持嵌套结构description.part1无需扁平化资源字符串中的1.../1是给Trans组件使用的富文本占位语法德文版de/translation.json与瑞典文版sv/translation.json保持相同的 key 结构只是 value 不同——这正是 i18next 资源模型的核心约定key 是稳定的契约value 随语言变化。六、进阶接入 locize 翻译管理与 InContext Editor原文档将example/react与同仓库的 example/locize 示例关联当翻译规模变大、需要多人协作或让非开发人员直接编辑文案时可以接入 locize 翻译管理平台。其价值主要体现在翻译管理在网页端集中管理全部语言资源替代手改 JSONInContext Editor在应用页面上直接点击文本进行翻译编辑所见即所得saveMissing运行时代码中出现的新 key 自动回传平台避免 key 遗漏使用 locize 也直接支持 i18next 与 react-i18next 的持续发展。example/locize的 src/i18n.js 展示了完整接入方式与example/react的差异仅在于多装了三个插件import Backend from i18next-locize-backend; import LastUsed from locize-lastused; import { locizePlugin } from locize; i18n .use(Backend) // 从 locize 项目加载/保存翻译 .use(LastUsed) // 记录每个翻译片段的最后使用时间 .use(locizePlugin) // 通过 ?incontexttrue 启用 InContext Editor .use(LanguageDetector) .use(initReactI18next) .init({ fallbackLng: en, debug: true, saveMissing: true, interpolation: { escapeValue: false, // react 默认转义此处无需重复转义 }, backend: locizeOptions, locizeLastUsed: locizeOptions, react: { bindI18n: languageChanged editorSaved, // 编辑器保存后立即刷新页面 }, });其中locizeOptions需要projectId与apiKey示例工程中直接内嵌了演示用的 projectId/apiKey并明确注释提醒不应在面向生产环境的代码中暴露应用的 API key。这段配置还揭示了一个 react-i18next 的重要扩展点react.bindI18n允许指定额外的 i18n 事件如editorSaved来触发 React 侧的重渲染这正是翻译管理平台保存后页面即时更新的机制来源。七、react-i18next 的 API 全貌与本示例的对应关系从 src/index.js 的导出可以看出 react-i18next 的全部公开 API本示例工程实际使用了其中三种核心 API对应关系如下API类型示例中的使用位置useTranslationHookPage组件返回{ t, i18n }withTranslationHOC包裹LegacyWelcomeClass类组件Trans组件MyComponent渲染带富文本的翻译initReactI18next初始化插件i18n.js中装配到 i18n 实例Suspense支持机制由useTranslation触发App中包裹其余 API如I18nextProvider、useSSR、withSSR、Translation渲染 props 组件、IcuTrans、nodesToString、setDefaults/getDefaults等服务于服务端渲染、ICU 语法、命令式默认配置等场景示例工程未涉及但可通过 src/index.js 中的导出清单逐一了解。八、结语从示例到生产项目的三步迁移本文以 example/react 为蓝本完整拆解了一个 Vite React react-i18next 国际化应用的骨架。将其迁移到生产项目时只需三步复制src/i18n.js的初始化配置按需保留/移除LanguageDetector与debug按/public/locales/{lng}/{ns}.json约定放置语言资源或改用其他 backend如 locize从云端加载在组件中按场景选用useTranslation函数组件、withTranslation类组件与Trans富文本并用Suspense包裹异步资源加载区域。当翻译管理成为团队协作瓶颈时参考 example/locize 接入 locize即可获得在线编辑、InContext Editor 与 saveMissing 等企业级能力。赞分享前端国际化【免费下载链接】react-i18nextInternationalization for react done right. Using the i18next i18n ecosystem.项目地址https://gitcode.com/gh_mirrors/re/react-i18next点击查看免费下载相关推荐React Native 项目接入 locize 国际化基于 react-i18next 与 i18next 生态的完整实战指南React Native 项目接入 locize 国际化基于 react i18next 与 i18next 生态的完整实战指南 导读 本文以 react i前端国际化react-i18next 集成 locize 翻译管理平台InContext 编辑器与运行时翻译保存实战指南react i18next 集成 locize 翻译管理平台InContext 编辑器与运行时翻译保存实战指南 导读 本指南以仓库中的 example/loc前端国际化react-i18next 实战指南基于 i18next 生态的 React 国际化完整方案react i18next 实战指南基于 i18next 生态的 React 国际化完整方案 导读 react i18next 是 i18next 国际化生态前端国际化上一篇从零到一如何在30分钟内搭建你的AI投资智囊团下一篇本地AI虚拟主播终极搭建指南从零构建智能交互虚拟形象创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考