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 相关文章推荐
javascript中的location用法简单介绍
Mar 07 Javascript
jQuery extend 的简单实例
Sep 18 Javascript
JavaScript实现强制重定向至HTTPS页面
Jun 10 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
Jun 24 Javascript
通过JS获取Request.QueryString()参数的值实现方法
Sep 27 Javascript
JS求解三元一次方程组值的方法
Jan 03 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
Mar 24 Javascript
详解Angular5 路由传参的3种方法
Apr 28 Javascript
详解Node.js读写中文内容文件操作
Oct 10 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
Aug 01 Javascript
详细分析JavaScript中的深浅拷贝
Sep 17 Javascript
Webpack的Loader和Plugin的区别
Nov 09 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的引用计数机制
2013/06/14 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
2018/09/12 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
对python中if语句的真假判断实例详解
2019/02/18 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
我就是这样学习Python中的列表
2019/06/02 Python
python程序需要编译吗
2020/06/19 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
python 用struct模块解决黏包问题
2020/11/07 Python
详解使用HTML5 Canvas创建动态粒子网格动画
2016/12/14 HTML / CSS
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
Wallis官网:英国女装零售商
2020/01/21 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
广州品高软件.net笔面试题目
2012/04/18 面试题
适用于所有创业者的创业计划书
2014/02/05 职场文书
会计专业毕业生自荐书
2014/06/25 职场文书
销售人员求职信
2014/07/22 职场文书
中学生教师节演讲稿
2014/09/03 职场文书
针对吵架老公保证书
2015/05/08 职场文书
莫言获奖感言(全文)
2015/07/31 职场文书
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
分享Python异步爬取知乎热榜
2022/04/12 Python