react国际化化插件react-i18n-auto使用详解


Posted in Javascript onMarch 31, 2020

react-i18n-auto专门为中文国际化提供的自动化方案,快速迭代国际化开发,方法如下

安装

npm install react-i18n-auto --save-dev

第一步:添加babel插件配置(.babelrc添加方式)

{
 "plugins": [
  "@babel/plugin-transform-runtime",
  "react-i18n-auto",
  "..."
 ]
 }

第二步:添加自动化配置 i18n.config.js

const generator = require('react-i18n-auto/generator')
const path = require('path')

generator.gen({

 excluded: /node_modules|output/, //排除文件选项(默认为:/node_modules/)

 src: path.resolve(__dirname, './code'), //源文件目录(必选)

 outputPath: path.resolve(__dirname, './output'), //国际化配置输出目录(必选)

})

然后运行 node i18n.config.js 自动生成配置文件,将localePolyfill.js,localeUtils.js,语言包文件自动生成到outputPath目录下

localePolyfill.js暴露全局方法 $AI, $$AI 和全局变量 LOCALE (语言包),LOCALE_VERSION (语言包版本)

更多配置请移步至react-i18n-auto github主页

第三步:修改webpack配置,为每一个entry入口添加localePolyfill.js

// webpack.config.js
const path = require('path')
module.exports = {
 entry: {
 main: [
  path.resolve(__dirname, './output/localePolyfill.js'),
  path.resolve(__dirname, './src/index.js')
 ],
 ...
 },

第四步:修改当前语言(中文无需加载语言包)

import React from 'react'
import en_US from '../output/en_US/locale'
import localeUtils from '../output/localeUtils'

localeUtils.locale(en_US)
// lolale.js
module.exports = {
 'I_2gaaanh': 'Student',
 'I_2aq02r1': 'Teacher'
}

第五步:唯一的额外的工作,动态加载语言包时(如果语言包已提前加载则无需此操作)

修改前

// const.js 
export default Const = {
 SelectOptions:[
 {
  name:'学生',
  value:'student',
 },
 {
  name:'教师',
  value:'teacher',
 },
 ]
}
// app.js
import React from 'react'
import Const from './const'

export default class App extends React.Component {
 render () {
 return <select>
  {
  Const.selectOptions.map(item => {
   return <option key={item.value} value={item.value}>
    {item.name}
   </option>
  })
  }
 </select>
 }
}

由于const为常量,当语言包LOCALE更新时,const并不会得到更新,需要手动调用$AI,类似的情况都需要手动更新

修改后

import React from 'react'
import Const from './const'

export default class App extends React.Component {
 render () {
 return <select>
  {
  Const.selectOptions.map(item => {
   return <option key={item.value} value={item.value}>
   {$AI(item.$_name, item.name)} {/*唯一需要修改的地方*/}
   </option>
  })
  }
 </select>
 }
}
// 编译后的const.js
// 所有的中文对应的字段,自动添加$_前缀,值为对应中文的uuidKey

export default Const = {
 selectOptions: [{
 name: '学生',
 $_name: "I_2gaaanh",
 value: 'student'
 }, {
 name: '教师',
 $_name: "I_2aq02r1",
 value: 'teacher'
 }]
};

ps :通过代理getter,或提前加载语言包则可跳过步骤5,具体方法可自行尝试

结束

编译前后代码对照,不污染源码,无痕开发

import React from 'react'
export default class App extends React.Component {
 render () {
 return <div>
  <header>这是标题</header>
  <div title='这是提示文字'>
  <p>这是内容</p>
  </div>
  <footer>{this.state.title}</footer>
 </div>
 }
}
import React from 'react'
export default class App extends React.Component {
 render () {
 return <div>
  <header>{$AI('I_5wtgbv1', '这是标题')}</header>
  <div title={$AI('I_7reuhi4', '这是提示文字')}>
  <p>{$AI('I_4ximl4b', '这是内容')}</p>
  </div>
  <footer>{this.state.title}</footer>
 </div>
 }
}

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

Javascript 相关文章推荐
jQuery的初始化与对象构建之浅析
Apr 12 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
Jul 11 Javascript
页面只能打开一次Cooike如何实现
Dec 04 Javascript
jquery背景跟随鼠标滑动导航
Nov 20 Javascript
AngularJS 过滤器(自带和自建)详解
Sep 19 Javascript
Bootstrap基本样式学习笔记之按钮(4)
Dec 07 Javascript
Node.js dgram模块实现UDP通信示例代码
Sep 26 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
Aug 31 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
Apr 10 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
Aug 12 Javascript
JS实现打字游戏
Dec 17 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
Sep 02 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
Mar 31 #Javascript
功能完善的小程序日历组件的实现
Mar 31 #Javascript
小程序双头slider选择器的实现示例
Mar 31 #Javascript
JavaScript实现电灯开关小案例
Mar 30 #Javascript
javascript实现计算器功能
Mar 30 #Javascript
详解Webpack抽离第三方类库以及common解决方案
Mar 30 #Javascript
记一次react前端项目打包优化的方法
Mar 30 #Javascript
You might like
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
php教程之phpize使用方法
2014/02/12 PHP
PHP实现的sqlite数据库连接类
2014/12/12 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
JS实现点击下载的小例子
2013/07/10 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
基于Vue实现timepicker
2017/04/25 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
小程序如何使用分包加载的实现方法
2019/05/22 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
用Python逐行分析文件方法
2019/01/28 Python
Python实现代码块儿折叠
2020/04/15 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
Python 中如何使用 virtualenv 管理虚拟环境
2021/01/21 Python
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
技校毕业生的自我评价
2013/12/27 职场文书
开门红主持词
2014/04/02 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
2014年领班工作总结
2014/11/25 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书