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 prototype截取字符串函数
Apr 01 Javascript
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
Jan 15 Javascript
js操作textarea 常用方法总结
Dec 03 Javascript
浅析Js中的单引号与双引号问题
Nov 06 Javascript
javascript贪吃蛇完整版(源码)
Dec 09 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
May 05 Javascript
js图片处理示例代码
May 12 Javascript
javascript实现3D变换的立体圆圈实例
Aug 06 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
Jul 02 Javascript
vue+element实现批量删除功能的示例
Feb 28 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
Jan 10 Javascript
Vue使用zTree插件封装树组件操作示例
Apr 25 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 has encountered an Access Violation
2007/01/15 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
2013/11/26 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
jQuery插件 tabBox实现代码
2010/02/09 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
2018/12/05 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
点击按钮弹出模态框的一系列操作代码实例
2019/03/29 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
node读写Excel操作实例分析
2019/11/06 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
Python实现队列的方法
2015/05/26 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
django url到views参数传递的实例
2019/07/19 Python
解决python-docx打包之后找不到default.docx的问题
2020/02/13 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
女生节标语
2014/06/26 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
社区班子对照检查材料
2014/08/27 职场文书
幼儿园小班个人工作总结
2015/02/12 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
有关三国演义的读书笔记
2015/06/25 职场文书
春节慰问简报
2015/07/21 职场文书
幼儿园托班教育随笔
2015/08/14 职场文书
初一语文教学反思
2016/03/03 职场文书
CentOS安装Nginx并部署vue
2022/04/12 Servers