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 tab插件制作实现代码
Jun 22 Javascript
过虑特殊字符输入的js代码
Aug 05 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
Dec 12 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
Sep 29 Javascript
jquery监听div内容的变化具体实现思路
Nov 04 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
Aug 05 Javascript
Bootstrap零基础入门教程(二)
Jul 18 Javascript
JS实现改变HTML上文字颜色和内容的方法
Dec 30 Javascript
JavaScript、C# URL编码、解码总结
Jan 21 Javascript
详解JS中的this、apply、call、bind(经典面试题)
Sep 19 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
Aug 20 Javascript
基于js实现的图片拖拽排序源码实例
Nov 04 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
php5.3 注意事项说明
2013/07/01 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
Javascript引用指针使用介绍
2012/11/07 Javascript
JsChart组件使用详解
2018/03/04 Javascript
分析javascript原型及原型链
2018/03/18 Javascript
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
jQuery擦除插件eraser使用方法详解
2020/01/11 jQuery
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
node.js基础知识汇总
2020/08/25 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python中用Decorator来简化元编程的教程
2015/04/13 Python
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
2021/01/24 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
DELPHI面试题研发笔试试卷
2015/11/08 面试题
信息技术课后反思
2014/04/27 职场文书
团日活动总结书格式
2014/05/08 职场文书
提拔干部考察材料
2014/05/26 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
实现GO语言对数组切片去重
2022/04/20 Golang