React 中 react-i18next 切换语言( 项目国际化 )

devtools/2024/9/20 9:20:40/ 标签: React国际化, i18n

思路

首先在项目中安装i18n插件,然后将插件引入到项目,然后配置语言包(语言包需要你自己来进行配置,自己编写语言包,或者你能找到跟你项目适配的也可以),然后就用特定的方法来展示可以切换语言的字段

实现步骤

一、安装环境

需要同时安装 i18next 和 react-i18next 依赖:

npm install react-i18next i18next --save

二、配置文件

src下新建i18n文件夹,以存放国际化相关配置
i18n中分别新建三个文件

  • config.ts:对 i18n 进行初始化操作及插件配置

  • en.json:英文语言配置文件

  • zh.json:中文语言配置文件

2.1、config.ts
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import translation_en from './en.json';
import translation_zh from './zh.json';const resources = {en: {translation: translation_en,},zh: {translation: translation_zh,},
};// 进行初始化
i18n.use(initReactI18next).init({// 我们自己的语言文件resources,// 默认语言  zh/en  中文/英文lng: localStorage.getItem('language') || 'zh',interpolation: {escapeValue: false,// 不会为了xss攻击,而把我们的内容强行转成字符串},
});export default i18n;
2.2、zh.json
{"language": "语言","switch": "选择",
}
2.3、en.json
{"language": "Language","switch": "Switch",
}

三、使用

3.1、引用配置文件

在 page 的index.tsx中引用i18n的配置文件 :import '../i18n/config';

import Page1 from './page1';
import Page2 from './page2';
// 引用配置文件
// import '../i18n/config';
import '@/i18n/config';export default function IndexPage() {return (<div><Page1 /><Page2 /></div>);
}
3.2、在组件中使用

在 函数式组件 中使用useTranslation 的 hook 来处理国际化

// Page1 函数式组件
import React from 'react';
// 引入 useTranslation 
import { useTranslation } from 'react-i18next';const Page1: React.FC = () => {const { t } = useTranslation();return (<div><p>这是Page1</p><p>{t('language')}</p></div>);
};export default Page1;

在 类组件 中使用withTranslation 高阶函数(HOC) 来完成语言配置的数据注入

// Page2  类组件
import React from 'react';
// 引入HOC高阶函数 withTranslation 和 i18n 的ts类型定义 WithTranslation
import { withTranslation, WithTranslation } from 'react-i18next';class ClassComponent extends React.Component<WithTranslation> {render() {const { t } = this.props;return (<div><p>{t('language')}</p></div>);}
}
// withTranslation 完成语言配置数据注入
export const Page2 = withTranslation()(ClassComponent); 
3.3、切换语言

使用changeLanguage() config 中配置 切换语言

通过调用这个i18n changeLanguage(languageType) 这样一个方法就可以简单的修改我们当前的语言

// 函数式组件
import React from 'react';
import { useTranslation, Trans } from 'react-i18next';const Page1: React.FC = () => {const { t, i18n } = useTranslation();return (<div><button onClick={() => i18n.changeLanguage(i18n.language == 'en' ? 'zh' : 'en')}>{i18n.language == 'en' ? 'zh' : 'en'}</button><p>{t('language')}</p></div>);
};export default Page1;
//  类式组件
import i18n from 'i18next';const changeLanguage= (val) => {i18n.changeLanguage(val); // 传入 'en' / 'zh'
};

3.4、 在reducer中要操作i18n的配置文件


import i18n from "i18next";export interface LanguageState {language: stringlanguageList: { name: string, code: string }[]
}const defaultState: LanguageState = {language: "zh",languageList: [{ name: "中文", code: "zh" },{ name: "English", code: "en" },],
}export default (state = defaultState, action) => {console.log(state,action)if (action.type === 'change_language') {i18n.changeLanguage(action.payload); // 这样处理是不标准的,有副作用const newState = { ...state, language: action.payload  }return newState}return state
}


http://www.ppmy.cn/devtools/95265.html

相关文章

【运维高级内容--haproxy】

proxies代理配置-defaults tcp 四层 http七层 haproxy、http默认使用80端口&#xff0c;如需同时启动haproxy、http&#xff0c;为防止端口被占用&#xff0c;需修改http使用的端口&#xff1a; vim /etc/httpd/conf/httpd.conf Listen 80 --> Listen 8080 …

网络协议八 网络安全相关

网络通讯中的4种 安全问题 网络层- ARP欺骗 ARP欺骗的防护原理 DoS&#xff0c;DDoS 攻击 应用层 DNS 劫持 HTTP 协议的安全问题 单向散列函数&#xff0c;不可逆 MD4,MD5,SHA全家桶 可逆&#xff0c;对称加密 DES,3DES,AES DES,已经被破解&#xff0c;不建议使用 3DES AES 目前…

启动虚拟机:另一个程序已锁定文件的一部分,进程无法访问,打不开磁盘xxx或它所依赖的某个快照磁盘

theme: nico 你们好&#xff0c;我是金金金。 场景 启动虚拟机时报错如下 造成error的原因 这是一种虚拟机的保护机制 虚拟机在运行时&#xff0c;为了防止数据被篡改&#xff0c;会将所运行的文件保护起来。 当虚拟机突然崩溃或强制结束导致异常退出&#xff08;我昨天是直接…

新手学习华为HCIE,会遇到哪些“坑”?

在众多认证中&#xff0c;HCIE无疑是里程碑式的金牌&#xff0c;吸引着无数网工朋友们的目光。 它不仅代表着专业技能的巅峰&#xff0c;更是通往高端网络工程师职位的金钥匙。 但是&#xff0c;对于那些刚踏上这条路的小白来说&#xff0c;HCIE的学习之旅可谓充满了不少大大小…

viser-vue官网地址

viser-vue官网地址&#xff1a;Viser

Eval绕过限制参数限制

PHP Eval函数参数限制在16个字符 PHP代码 <?php$param $_REQUEST[param]; if (strlen($param) < 17 && stripos($param, eval) false && stripos($param, assert) false){eval($param);}?># 部署环境属于ubuntu系统 通过GET传参绕过 由于是…

公用事业公司签署大规模电力供应协议

随着人工智能技术的迅猛发展&#xff0c;美国公用事业公司与数据中心运营商之间的电力供应协议数量显著增加&#xff0c;为未来几季度的销售和利润增长奠定了基础。根据高盛今年5月发布的一份报告&#xff0c;到2030年&#xff0c;数据中心的发电量预计将占美国总发电量的8%&am…

【计算机毕设项目】2025级计算机专业小程序项目推荐 (小程序+后台管理)

以下项目选题适合计算机专业大部分专业&#xff0c;技术栈主要为&#xff1a;前端小程序&#xff0c;后端Java语言&#xff0c;数据库MySQL 后台免费获取源码&#xff0c;可提供远程调试、环境安装配置服务。&#xff08;文末有联系方式&#xff09; 以下是本次部分项目推荐1…

从今年的计算机视觉比赛看风向

记第一次参加CV比赛的经历-长三角&#xff08;芜湖&#xff09;人工智能视觉算法大赛-CSDN博客 去年参赛的记录里说了&#xff1a; 最近&#xff0c;同样的由芜湖举办的比赛又上线了&#xff0c;果然&#xff1a; 2023年是这些赛题&#xff0c;典型的CV&#xff1a; 今年变成…

音视频相关知识

H.264编码格式 音频 PCM就是要把声音从模拟信号转换成数字信号的一种技术&#xff0c;他的原理简单地说就是利用一个固定的频率对模拟信号进行采样。 pcm是无损音频音频文件格式

TSN 交换机

TSN&#xff08;Time-Sensitive Networking&#xff09;交换机是一种支持时间敏感网络协议的网络交换设备&#xff0c;用于在以太网网络中实现低延迟、高确定性的数据传输。TSN 是一组 IEEE 802 标准的集合&#xff0c;旨在通过标准化的方式&#xff0c;将传统的以太网扩展到需…

用python制作88键赛博钢琴(能用鼠标键盘进行弹奏)

用python制作88键赛博钢琴 前言 恭喜这位博主终于想起了自己的账号密码&#xff01; 时光荏苒&#xff0c;转眼间已逾一年未曾在此留下墨香。尽管这一年间&#xff0c;博主投身于无尽的忙碌与挑战之中&#xff0c;但令人欣慰的是&#xff0c;那份初心与热情似乎并未因岁月的流…

信号完整性(1)-消失人口回归第一篇

前言 消失停更了十个来天&#xff0c;每天顾着最近的奥运比赛以及一些其他的事情&#xff0c;但更多的原因还是因为最近事情比较多&#xff0c;心难以静下来写写东西&#xff0c;也可以说是放了个小暑假吧。其实究其本质&#xff0c;还是懒惰思维又来了。今天正式回归。 7月小…

RK3576 芯片介绍

RK3576 芯片介绍 RK3576瑞芯微第二代8nm高性能AIOT平台&#xff0c;它集成了独立的6TOPS&#xff08;Tera Operations Per Second&#xff0c;每秒万亿次操作&#xff09;NPU&#xff08;神经网络处理单元&#xff09;&#xff0c;用于处理人工智能相关的任务。此外&#xff0…

2023卫星视频综述论文Recent Advances in Intelligent Processing of Satellite Video

2023卫星视频综述论文Recent Advances in Intelligent Processing of Satellite Video 1.摘要2.引言3. 文章的定量分析4 难点与挑战5 方法论系统A. 卫星视频观察的特点B. 卫星视频目标跟踪与运动估计C. 卫星视频目标检测D. 卫星视频超分辨率 (VSR)E. 卫星视频目标分割&#xff…

Kotlin之lateinit 和 lazy 区别

目录 lateinitlazy区别总结适用范围&#xff1a;初始化时机&#xff1a;线程安全&#xff1a;检查是否初始化&#xff1a;缓存结果&#xff1a;使用场景 在 Kotlin 中&#xff0c;lateinit 和 lazy 都用于延迟初始化变量&#xff0c;但它们有不同的应用场景和使用方式。 latein…

freeRTOS之任务调度

本节课的内容是重中之重&#xff0c;对复习操作系统的任务调度也很有帮助。

微服务相关复习

目录 Spring Cloud 5大组件服务注册发现&#xff1b;nacos与eureka的区别负载均衡&#xff1b;Ribbon负载均衡策略&#xff1b;自定义负载均衡策略 服务雪崩、降级、熔断微服务是怎么监控的&#xff1f;有没有做过限流&#xff1f;怎么做CAP理论&#xff1b;BASE理论采用哪种分…

GD32 ADC配置跳坑

GD32 ADC配置跳坑 &#xff1a;时钟使能配置需在ADC前面 放在后面读取ADC值失败。 DMA配置放在ADC配置后面可以正常读取ADC的值 不同的模式选择可能会导致ADC存在读取失败的问题&#xff0c;红色部分是常用的模式&#xff0c;一般可以读取到相应的ADC的值 adc_software_trigge…

Vue3+Echarts+饼图环形图

记得给容器宽高 <div id"leftChartguawang" style"height: 28vh"></div> 配置函数 const leftChartguawang () > {const chartBox echarts.init(document.getElementById(leftChartguawang))let datas [[{ name: 居民节能建筑, value…