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

react + i18n:国际化

注意版本 我这是旧版 react
react 16.8.6
i18next 20.6.1
react-i18next 11.18.6

文件:zh.json

{“hello”: "你好"
}

文件:en.json

{“hello”: "hello"
}

文件:i18n.tsx

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';// 静态导入翻译文件
import enTranslation from './en.json';
import zhTranslation from './zh.json';const langLocal = window.localStorage.getItem('logan-config-content-lan');
let lang = 'zh';
if (langLocal) {lang = langLocal === 'zh-CN' ? 'zh': 'en';
} else {window.localStorage.setItem('logan-config-content-lan', lang);
}
// 直接使用(默认从 translation 查找)
// t('hello')
// t('common.hello') 如果设置了 ns(命名空间) 则需要加前缀
// 同时 en: { common: enTranslation } 这路也需要改写,还是 translation 更容易伟华
i18n.use(initReactI18next).init({resources: {en: { translation: enTranslation }, // 英文资源  改为默认的 translation 命名空间zh: { translation: zhTranslation }, // 中文资源},lng: lang, // 默认语言fallbackLng: 'zh', // 回退语言keySeparator: false, interpolation: {escapeValue: false}// ns: ['common'], // 命名空间// defaultNS: 'common', // 默认填写命令空间
});export default i18n;

文件 base.tsx

AppContainer 是 React Hot Loader(或 react-hot-loader)提供的一个高阶组件,用于在开发过程中实现 热模块替换(Hot Module Replacement, HMR),即在不刷新整个页面的情况下,实时更新 React 组件的状态

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { AppContainer } from 'react-hot-loader';
import { I18nextProvider } from 'react-i18next'; // 引入 I18nextProvider
import Layout from './layout';
import i18n from '../i18n/i18n';
import { BaseProps } from './type';
export default function bootstrap(App) {class Base extends Component<BaseProps, any> {render() {return (<I18nextProvider i18n={i18n}> {/* 包裹整个应用 */}<Layout {...this.props}><App {...this.props} /></Layout></I18nextProvider>);}}if (EASY_ENV_IS_NODE) {return Base;}const state = window.__INITIAL_STATE__;window.__INITIAL_STATE__ = {};const root = document.getElementById('app');if (EASY_ENV_IS_DEV) {ReactDOM.hydrate(<AppContainer><I18nextProvider i18n={i18n}> {/* 开发环境同样需要包裹 */}<App {...state} /></I18nextProvider></AppContainer>,root);if (module.hot) {module.hot.accept();}} else {ReactDOM.hydrate(<I18nextProvider i18n={i18n}> {/* 生产环境包裹 */}<App {...state} /></I18nextProvider>,root);}
}
http://www.dtcms.com/a/331755.html

相关文章:

  • HTML5二十四节气网站源码
  • 【web自动化】-1- 前端基础及selenium原理和环境安装
  • 传输层协议TCP(3)
  • Observer:优雅管理事件订阅的秘密武器
  • TCP 连接管理:深入分析四次握手与三次挥手
  • C++:浅尝gdb
  • 创客匠人:共情力在创始人IP塑造中的作用
  • 使用Docker和Miniconda3搭建YOLOv13开发环境
  • 如何在 Ubuntu 24.04 LTS Noble Linux 上安装 Wine HQ
  • Java多线程进阶-深入synchronized与CAS
  • RS232串行线是什么?
  • 考研408《计算机组成原理》复习笔记,第五章(1)——CPU功能和结构
  • C#WPF实战出真汁01--搭建项目三层架构
  • 解决 pip 安装包时出现的 ReadTimeoutError 方法 1: 临时使用镜像源(单次安装)
  • LeetCode 1780:判断一个数字是否可以表示成3的幂的和-进制转换解法
  • 基于 LDA 模型的安徽地震舆情数据分析
  • 相机Camera日志实例分析之十四:相机Camx【照片后置炫彩拍照】单帧流程日志详解
  • python——mock接口开发
  • CSS中的 :root 伪类
  • GitHub 仓库代码上传指南
  • svg 转 emf
  • MySQL 事务隔离级别深度解析:从问题实例到场景选择
  • Java 中实体类、VO 与 DTO 的深度解析:定义、异同及实践案例
  • 20道JavaScript进阶相关前端面试题及答案
  • 报数游戏(我将每文更新tips)
  • emqx tar包安装
  • DAY 22|算法篇——贪心四
  • 调整磁盘分区格式为GPT
  • 数据结构:优先队列 (Priority Queue)
  • 解剖HashMap的put <五> JDK1.8