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 相关文章推荐
复制小说文本时出现的随机乱码的去除方法
Sep 07 Javascript
javascript判断用户浏览器插件安装情况的代码
Jan 01 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
Jul 04 Javascript
举例简介AngularJS的内部语言环境
Jun 17 Javascript
最常见和最有用的字符串相关的方法详解
Feb 06 Javascript
Angularjs上传图片实例详解
Aug 06 Javascript
webpack vue项目开发环境局域网访问方法
Mar 20 Javascript
js中apply和Math.max()函数的问题及区别介绍
Mar 27 Javascript
小程序tab页无法传递参数的方法
Aug 03 Javascript
微信小程序wepy框架笔记小结
Aug 08 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
Sep 05 jQuery
在vue中获取微信支付code及code被占用问题的解决方法
Apr 16 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 array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
session 加入redis的实现代码
2016/07/15 PHP
javascript进行数组追加方法小结
2014/06/16 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
JavaScript SHA512加密算法详细代码
2016/10/06 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
2019/05/26 Javascript
js简单遍历获取对象中的属性值的方法示例
2019/06/19 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
vue 组件基础知识总结
2021/01/26 Vue.js
python实现简单的TCP代理服务器
2014/10/08 Python
python非递归全排列实现方法
2017/04/10 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
Python常用数据分析模块原理解析
2020/07/20 Python
消防安全责任书范本
2014/04/15 职场文书
市场拓展计划书
2014/05/03 职场文书
道德大讲堂实施方案
2014/05/14 职场文书
大学毕业生个人自荐书
2014/07/02 职场文书
爱国主义教育演讲稿
2014/08/26 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
依法行政工作汇报
2014/10/28 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
Django migrate报错的解决方案
2021/05/20 Python
MySQL大小写敏感的注意事项
2021/05/24 MySQL
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏