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 相关文章推荐
多广告投放代码 推荐
Nov 13 Javascript
jQuery阻止同类型事件小结
Apr 19 Javascript
只需20行代码就可以写出CSS覆盖率测试脚本
Apr 24 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
Oct 17 Javascript
jQuery实现HTML5 placeholder效果实例
Dec 09 Javascript
Javascript基础教程之argument 详解
Jan 18 Javascript
使用Chart.js图表库制作漂亮的响应式表单
Oct 28 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
Dec 02 Javascript
javascript Promise简单学习使用方法小结
May 17 Javascript
JS控制HTML元素的显示和隐藏的两种方法
Sep 27 Javascript
BootStrap入门学习第一篇
Aug 28 Javascript
js瀑布流布局的实现
Jun 28 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
德生S2000电路分析
2021/03/02 无线电
消息持续发送的完整例子
2006/10/09 PHP
PHP4实际应用经验篇(8)
2006/10/09 PHP
window.location和document.location的区别分析
2008/12/23 Javascript
javascript处理table表格的代码
2010/12/06 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
JavaScript中定义类的方式详解
2016/01/07 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
微信小程序实现提交input信息到后台的方法示例
2019/01/19 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
vue+canvas实现移动端手写签名
2020/05/21 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
python处理csv数据的方法
2015/03/11 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
2014法院四风问题对照检查材料思想汇报
2014/10/04 职场文书
大学生毕业个人总结
2015/02/15 职场文书
仓库统计员岗位职责
2015/04/14 职场文书