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

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

背景

平时中会遇到需求,就是切换语言,语种等。其实总的来说都是用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: 'zh',interpolation: {escapeValue: false,},
});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';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 中配置 切换语言

// 函数式组件
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'
};

相关文章:

  • 3Dexcite deltgen 2022x 新功能
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • String字符串性能优化的几种方案
  • C++中类和动态内存分配
  • linux硬盘扩容
  • 十六、RabbitMQ快速入门
  • 开源更安全? yum源配置/rpm 什么是SSH?
  • Vue 2.0中引入的类型检查Flow
  • TypeError: expected np.ndarray (got Tensor)解决办法
  • 【机器学习基础】对数几率回归(logistic回归)
  • elementplus DateTimePicker 日期范围选择器 设置默认时间范围为当前月的起始时间到结束时间
  • pytorch下载离线包的网址
  • 设置指定时间之前的时间不可选
  • kubernetes测试部署一个nginx
  • 【自学记录】深度学习进阶:自然语言处理(第一章 神经网络的复习)
  • 「面试题」如何实现一个圣杯布局?
  • 【附node操作实例】redis简明入门系列—字符串类型
  • CentOS从零开始部署Nodejs项目
  • Consul Config 使用Git做版本控制的实现
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • v-if和v-for连用出现的问题
  • 初识MongoDB分片
  • 关于Java中分层中遇到的一些问题
  • 区块链技术特点之去中心化特性
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 新手搭建网站的主要流程
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • MyCAT水平分库
  • 通过调用文摘列表API获取文摘
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​Linux·i2c驱动架构​
  • ​linux启动进程的方式
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (11)MATLAB PCA+SVM 人脸识别
  • (3)llvm ir转换过程
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)计算机毕业设计大学生兼职系统
  • (篇九)MySQL常用内置函数
  • (算法设计与分析)第一章算法概述-习题
  • (已解决)什么是vue导航守卫
  • (转)编辑寄语:因为爱心,所以美丽
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ***测试-HTTP方法
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .Net Memory Profiler的使用举例
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET导入Excel数据
  • .Net中wcf服务生成及调用
  • .php文件都打不开,打不开php文件怎么办