react国际化react-intl的使用


Posted in Javascript onMay 06, 2021

react怎么实现国际化?react-intl插件提供了一套实现react国际化的方法,具体实现如下~~

一 搭建react环境和下载相应插件

默认你已经安装了nodejs 如果没有装的百度装下 这里不再细讲

利用react官方脚手架搭建react项目,已经存在有的react项目也可忽略搭建这步;然后下载相关依赖 react-intl

npx create-react-app react-intl-demo  
npm i react-intl -S

等待下载完成

找到项目根目录下的src文件夹 在里面新建一个叫locale的文件夹 存放语言包设置的文件;这里只实现中英文切换,后续其他语言的都是一样的操作

react国际化react-intl的使用 

二 写相关的配置文件

找到locale的intl.js文件 引入相关的插件 进行封装暴露出去

import React, { useContext } from 'react'
import { IntlProvider } from 'react-intl' // 包裹在需要语言国际化的组件的最外层,和react-redux的Provider一样 让组件和组件内的子组件都能使用react-intl提供的api和方法
import { mainContext } from '../reducer' // 这里使用的是useReducer 简单的在根目录下创建一个 来控制语言的全局状态维护
import zh_CN from './cn' // 中文包
import en_US from './en' // 英文包

const Inter = (props) => {
    // 获取默认的语言设置 也可以配合一些全局状态管理进行结合使用 如redux Mobx或者react自身提供的useReducer等
  const { state } = useContext(mainContext)
  const chooseLocale = (val) => { 
    let _val = val || navigator.language.split('_')[0]
    switch (_val) {
      case 'en':
        return en_US
      case 'zh':
        return zh_CN
      default:
        return zh_CN
    }
  }
  let locale = state.locale // 获取 locale
  let { children } = props
  // 包裹子组件 让子组件共享react-intl的api 实现多语言
  return (
    <IntlProvider
      key={locale}
      locale={locale}
      defaultLocale='zh'
      messages={chooseLocale(locale)}
    >
      {children}
    </IntlProvider>
  )
}

export default Inter

cn.js

const zh_CN = {
    start: '开始',
    switch: '切换'
  }
  export default zh_CN

en.js

const en_US = {
    start: 'start',
    switch: 'switch'
  }
  export default en_US

reducer.js (src目录下新建一个)

import React, { useReducer } from 'react'
const CHANGE_LOCALE = 'CHANGE_LOCALE'

const mainContext = React.createContext()

const reducer = (state, action) => {
  switch (action.type) {
    case CHANGE_LOCALE:
      return { ...state, locale: action.locale || 'zh' }
    default:
      return state
  }
}

const ContextProvider = (props) => {
  const [state, dispatch] = useReducer(reducer, {
    locale: 'zh'
  })
  return (
    <mainContext.Provider value={{ state, dispatch }}>
      {props.children}
    </mainContext.Provider>
  )
}

export { reducer, mainContext, ContextProvider }

三 在App.js引入相关文件并使用

App.js

import './App.css';
import { ContextProvider } from './reducer'
import Inter from './locale/intl'
import View from './views'

function App() {
  return (
    <ContextProvider>
      <Inter>
        <View />
      </Inter>
    </ContextProvider>
  );
}
export default App;

四 新建views目录下面使用相关的插件和api实现国际化

views新建一个 index.jsx 文件试试效果

import react, { useContext} from 'react'
import { mainContext } from '../reducer'
import { FormattedMessage } from 'react-intl'
 
function Index() {
    const { dispatch, state } = useContext(mainContext)
    const { locale } = state
    const changeLang = () => { // 改变状态里的 语言 进行切换
        dispatch({
            type: 'CHANGE_LOCALE',
            locale: locale === 'zh' ? 'en' : 'zh'
        })
    }
    return (
        <div>
           <div>
            <FormattedMessage id="start" ></FormattedMessage>
           </div>
           <div>
                <button onClick={changeLang} > <FormattedMessage id="switch" ></FormattedMessage></button>
           </div>
        </div>
    );
}
export default Index;

最终目录 红框为新增

react国际化react-intl的使用

就这样 一个简单的react国际化就完成了!
可以去试一试,如果项目有需要也可以按照这种移植进去
本次的demo已上传GitHub:github地址 可自行克隆运行

到此这篇关于react国际化react-intl的使用的文章就介绍到这了,更多相关react 国际化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
Sep 14 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
May 13 Javascript
js动态移动滚动条至底部示例代码
Apr 24 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
Aug 24 Javascript
js仿百度登录页实现拖动窗口效果
Mar 11 Javascript
使用Script元素发送JSONP请求的方法
Jun 12 Javascript
Javascript 事件冒泡机制详细介绍
Oct 10 Javascript
javascript基于原型链的继承及call和apply函数用法分析
Dec 15 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
Aug 31 Javascript
利用babel将es6语法转es5的简单示例
Dec 01 Javascript
小程序input数据双向绑定实现方法
Oct 17 Javascript
Vue+Bootstrap实现简易学生管理系统
Feb 09 Vue.js
LayUI+Shiro实现动态菜单并记住菜单收展的示例
如何用JavaScript实现一个数组惰性求值库
原生JS中应该禁止出现的写法
May 05 #Javascript
详解Javascript实践中的命令模式
如何制作自己的原生JavaScript路由
May 05 #Javascript
Vue项目中如何封装axios(统一管理http请求)
May 02 #Vue.js
如何用JavaScript学习算法复杂度
You might like
PHP中的数组处理函数实例总结
2016/01/09 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
jcrop基本参数一览
2013/07/16 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
JS实现两周内自动登录功能
2017/03/23 Javascript
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
Python 实现随机数详解及实例代码
2017/04/15 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
查看python下OpenCV版本的方法
2018/08/03 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
June Jacobs尊积帕官网:知名的spa水疗护肤品牌
2019/03/21 全球购物
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
开发中都用到了那些设计模式?用在什么场合?
2014/08/21 面试题
如何写毕业求职自荐信
2013/11/06 职场文书
应届生保险求职信
2013/11/11 职场文书
十一酒店活动方案
2014/02/20 职场文书
初中英语演讲稿
2014/04/29 职场文书
个人评语大全
2014/05/04 职场文书
教师竞聘演讲稿
2014/05/16 职场文书
小学校长汇报材料
2014/08/20 职场文书
公司酒会致辞
2015/07/30 职场文书
公司备用金管理制度
2015/08/04 职场文书