React国际化react-i18next详解
文章图片
简介
react-i18next 是基于 i18next
的一款强大的国际化框架,可以用于 react
和 react-native
应用,是目前非常主流的国际化解决方案。
i18next
有着以下优点:
- 基于i18next不仅限于react,学一次就可以用在其它地方
- 提供多种组件在hoc、hook和class的情况下进行国际化操作
- 适合服务端的渲染
- 历史悠久,始于2011年比大多数的前端框架都要年长
- 因为历史悠久所以更成熟,目前还没有i18next解决不了的国际化问题
- 有许多插件的支持,比如可以用插件检测当前系统的语言环境,从服务器或者文件系统加载翻译资源
i18next
和 react-i18next
依赖:npm install react-i18next i18next --save
或
yarn add react-i18next i18next --save
配置
在
src
下新建i18n
文件夹,以存放国际化相关配置i18n
中分别新建三个文件:config.ts
:对 i18n 进行初始化操作及插件配置en.json
:英文语言配置文件zh.json
:中文语言配置文件
文章图片
en.json
{"header": {"register":"Register","signin":"Sign In","home": "Home"},"footer": {"detail" : "All rights reserved @ React"},"home": {"hot_recommended": "Hot Recommended","new_arrival": "New arrival","joint_venture": "Joint Venture"}}
zh.json
{"header": {"register":"注册","signin":"登陆","home": "首页"},"footer": {"detail" : "版权所有 @ React"},"home": {"hot_recommended": "爆款推荐","new_arrival": "新品上市","joint_venture": "合作企业"}}
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,lng: 'zh',interpolation: {escapeValue: false,},}); export default i18n;
使用 引用配置文件
在
index.tsx
中引用i18n
的配置文件 :import './i18n/config';
import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; import './i18n/config'; // 引用配置文件ReactDOM.render(,document.getElementById('root'));
在组件中使用 方法一
在 类组件 中使用
withTranslation
高阶函数(HOC) 来完成语言配置的数据注入import React from 'react'; import styles from './Home.module.css'; // 引入HOC高阶函数withTranslation 和 i18n的ts类型定义WithTranslation import { withTranslation, WithTranslation } from "react-i18next"class HomeComponent extends React.Component{render() {const { t } = this.props; return <>{t('header.home')} >}}export const Home = withTranslation()(HomeComponent); // 使用withTranslation高阶函数来完成语言配置的数据注入
- {t('home.hot_recommended')}
- {t('home.new_arrival')}
- {t('home.joint_venture')}
方法二
在 函数式组件 中使用
useTranslation
的 hook 来处理国际化import React from 'react'; import { useTranslation, Trans } from 'react-i18next'export const Home: React.FC = () => {const { t } = useTranslation()return ({t('header.home')}); };
- {t('home.hot_recommended')}
{/* 还有一种方式 */}home.new_arrival
切换语言
import i18n from 'i18next'; const changeLanguage= (val) => { i18n.changeLanguage(val); // val入参值为'en'或'zh'};
或
import React from 'react'; import { useTranslation } from 'react-i18next'export const Home: React.FC = () => {const { t, i18n } = useTranslation()return (); };
【React国际化react-i18next详解】到此这篇关于React国际化react-i18next的文章就介绍到这了,更多相关React国际化react-i18next内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- react|react 安装
- React.js学习笔记(17)|React.js学习笔记(17) Mobx
- React.js的表单(六)
- 【React|【React Native填坑之旅】从源码角度看JavaModule注册及重载陷阱
- react-navigation|react-navigation 动态修改 tabBar 样式
- Flutter|Flutter SwiftUI React 对比
- React|React refs和onRefs的使用
- 手写|手写 React-Native 方法调用式的 Modal 弹框、Toast 提示
- react组件通信
- react-native中Text包含Image大小问题