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> } }
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】