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 相关文章推荐
刷新时清空文本框内容的js代码
Apr 23 Javascript
类似GMAIL的Ajax信息反馈显示
Feb 16 Javascript
九种js弹出对话框的方法总结
Mar 12 Javascript
JS 获取select(多选下拉)中所选值的示例代码
Aug 02 Javascript
jquery无刷新验证邮箱地址实现实例
Feb 19 Javascript
Fullpage.js固定导航栏-实现定位导航栏
Mar 17 Javascript
使用BootStrap实现用户登录界面UI
Aug 10 Javascript
jQuery鼠标事件总结
Oct 13 Javascript
Vue中的字符串模板的使用
May 17 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
Oct 08 Javascript
Bootstrap 按钮样式与使用代码详解
Dec 09 Javascript
JavaScript中数组去重的5种方法
Jul 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
php 删除cookie和浏览器重定向
2009/03/16 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
php+ajax实现无刷新分页的方法
2014/11/04 PHP
ubuntu下配置nginx+php+mysql详解
2015/09/10 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
修复ie8&amp;chrome下window的resize事件多次执行
2011/10/20 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
bootstrap警告框示例代码分享
2017/05/17 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
Python自动扫雷实现方法
2015/07/25 Python
Python Django使用forms来实现评论功能
2016/08/17 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
python中count函数知识点浅析
2020/12/17 Python
Wiggle中国:英国骑行、跑步、游泳 & 铁三运动装备专卖网店
2016/08/02 全球购物
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
北美领先的智能产品购物网站:Wellbots
2018/06/11 全球购物
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
最热门的自我评价
2013/12/30 职场文书
网吧消防安全责任书
2014/07/29 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
2016年三八节红领巾广播稿
2015/12/17 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
SpringBoot集成Redis的思路详解
2021/10/16 Redis
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python