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 1.3 和 Validation 验证插件1.5.1
Jul 09 Javascript
最短的javascript:地址栏载入脚本代码
Oct 13 Javascript
40款非常有用的 jQuery 插件推荐(系列一)
Dec 21 Javascript
JavaScript基础函数整理汇总
Jan 30 Javascript
jQuery对table表格进行增删改查
Dec 22 Javascript
jQuery实现限制文本框的输入长度
Jan 11 Javascript
Node.JS中快速扫描端口并发现局域网内的Web服务器地址(80)
Sep 18 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
Jul 27 Javascript
Vue自定义toast组件的实例代码
Aug 15 Javascript
vue+AI智能机器人回复功能实现
Jul 16 Javascript
详解JavaScript 高阶函数
Sep 14 Javascript
vue实现单一筛选、删除筛选条件
Oct 26 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实现的xml操作类
2016/01/15 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
javascript面向对象之Javascript 继承
2010/05/04 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
jQuery中prevUntil()方法用法实例
2015/01/08 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
Python 代码性能优化技巧分享
2012/08/07 Python
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
numpy数组广播的机制
2019/07/12 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
Django视图、传参和forms验证操作
2020/07/15 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
蛋白质世界:Protein World
2017/11/23 全球购物
大学生收银员求职信分享
2014/01/02 职场文书
公司业务员岗位职责
2014/03/18 职场文书
聘任书模板
2014/03/29 职场文书
医院院务公开实施方案
2014/05/03 职场文书
党支部班子“四风”问题自我剖析材料
2014/09/28 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
教师岗位职责
2015/02/03 职场文书
七一活动主持词
2015/06/29 职场文书
PHP基本语法
2021/03/31 PHP