最近公司为了跟上时代潮流,要求我把之前的项目都进行国际化,实现中英文双语言切换功能,然后我只能连夜调研各大国际化组件,最终选择了这个react-intl-universal,它相比于 react-intl、react-i18next最大的亮点就是支持在js中使用,并且配置简单,提供的API也简单好用。

npm安装:

npm install react-intl-universal --save

一、编写配置文件

目录结构:

emit.js(获取EventEmitter实例,用于注册监听器,在项目中主动修改语言版本):

const EventEmitter = require('events').EventEmitter;
const emit = new EventEmitter();
export { emit };

en-US.json:

{"userSetting": "setting","language": "English","changeSkin": "change skin","usageFeedback": "usage feedback"
}

zh-CN.json:

{"userSetting": "设置","language": "中文","changeSkin": "切换皮肤","usageFeedback": "使用反馈"
}

二、初始化intl

我们在创建好配置文件后,下一步就需要在项目入口文件app.js中进行初始化。首先我们需要引入以下几个文件:

import intl from 'react-intl-universal';
import {emit} from "../locales/emit";const locales = {'en_US': require('../locales/en-US.json'),'zh_CN': require('../locales/zh-CN.json'),
};

然后在componentWillMount生命周期里进行初始化:

componentWillMount() {//语言初始化emit.on('change_language', lang => this.loadLocales(lang)); // 监听语言改变事件this.loadLocales(); // 初始化语言
}loadLocales = (lang = "zh_CN") => {intl.init({currentLocale: lang,  // 设置初始语言locales})
}    

到这步准备工作已经做完了,接下来就可以在项目中进行使用了。

三、intl的使用

在项目显示文字的地方,利用intl.get("key")方法替换文字显示,key就是在之前配置时,en-US.json和zh-CN.json文件中所设置的相对应的键。

<Tooltipplacement="bottomLeft"title={<ul className="setting_list"><li onClick={this.changeLanguage}><i className="language"></i>{intl.get("language")}</li><li onClick={this.changeSkin}><i className="skin"></i>{intl.get("changeSkin")}</li><li><i className="use"></i>{intl.get("usageFeedback")}</li></ul>}overlayClassName="setting_tooltip"
><div className={`setting ${className}`}>{intl.get('userSetting')}</div>
</Tooltip>

中文效果:

英文效果:

实现切换语言版本功能:

changeLanguage = () => {let {currentLang} = this.state;let val = currentLang === "zh_CN"? "en_US": "zh_CN";emit.emit('change_language', val);this.setState({currentLang: val})
}    

大功告成!

知识点总结:

1、EventEmitter对象

EventEmitter 的核心就是事件触发与事件监听器功能的封装

使用:
var events = require('events');
var emitter = new events.EventEmitter(); 

2、react-intl-universal相关api

(1)inrl.get("key",  obj)

key: 则是在json文件中设置的键

obj:obj中可以设置参数,key对应的值当中也可以设置变量,obj中设置的参数就能将变量转化为相对应语言文字

示例:

//配置
{"myWorld": "my world","test": "hello {userName}, welcome to {myWorld}!"
}{"myWorld": "我的世界","test": "哈喽 {userName}, 欢迎来到{myWorld}!"
}//调用
intl.get("test", { userName: "不吃西红柿", myWorld: intl.get("myWorld")})

(2)设置html

格式:intl.getHTML(key,  obj)

{"myWorld": "my world","test": "hello <span style='color: red'>{userName}</span>, welcome to {myWorld}!"
}intl.getHTML("test", { userName: "不吃西红柿", myWorld: intl.get("myWorld")})

react-intl-universal实现中英文语言切换(国际化)相关推荐

  1. java国际化转换_java 实现国际化 中英文语言切换

    [实例简介] java实现国际化中英文语言切换 java语言切换JSP国际化 [实例截图] [核心代码] JAVA国际化实现 └── struts01 ├── src │   ├── com │   ...

  2. 网页中英文语言切换解决方案

    网页中英文语言切换解决方案 参考文章: (1)网页中英文语言切换解决方案 (2)https://www.cnblogs.com/seasons1987/archive/2012/10/09/27163 ...

  3. vue当前页面中英文语言切换

    在开发页面时,比如就一个页面,需要切换语言的元素并不多时,我们就不必从外部引入各种插件,包,直接在项目内实现语言切换,以vue项目为例,下面为具体实现过程 写入中英文数据 在vue中,把要展示的中英文 ...

  4. Winform界面实现控件中英文语言切换

    一.业务需求 在Winform项目的开发过程中,涉及到一个基础的功能就是需要对界面中的显示语言内容可以进行选择切换,方便不同地区的使用者快速上手使用:效果如下: 二.需求分析 需要实现对Winform ...

  5. Android 中英文语言切换

    非常简便,只需替换一个文件再添加上去即可 strings和-zh文件链接:https://download.csdn.net/download/meixi_android/11367095 1.首先替 ...

  6. vue 使用vue-i18n实现中英文语言切换,以及动态添加中英文

    一.安装. npm install vue-i18n 二.使用.(这里只写了核心代码) main.js引入: // 引入插件和语言包 import VueI18n from 'vue-i18n' im ...

  7. UE4中英文语言切换的三种方式(当然也可以多种语言)

    一.用ue4的Localization Dashboard 1. 2. 3. 4. 5.最后,必须独立运行游戏才能看到效果 二.使用WidgetSwitcher 1. 2. 3. 4.用一个按钮点击进 ...

  8. C#批量更改控件显示名称(举例中英文语言切换)

    在WinFrom开发中有中英文切换需求时 需要批量更改控件的显示名称 可以将控件名字和显示名称保存在xml文件中 可以将控件保存进文件,也可从文件中加载来更改显示名 牵涉xml文件的读写插入修改基本知 ...

  9. IOS APP软件多国语言切换,国际化app

    转自:http://www.lanrenios.com/tutorials/advanced/2013/0406/1033.html App Store 中很多流行的应用程序有多种语言版本.虽然这些应 ...

最新文章

  1. 使用SharpPCap在C#下进行网络抓包
  2. 关于Cocos2d-x很多奇怪的报错
  3. android 不同activity之间传递数据
  4. vue右键复制粘贴功能_这可能是最高效的复制粘贴方法
  5. vue从其它页面返回_vue---详细页点返回列表页,停留在原先位置
  6. Visual Studio 2010或者2012上安装VASSISTX
  7. C#对Microsoft.VisualBasic My对象兰台妙选
  8. 25个好用到爆的一行Python代码,建议收藏
  9. pcb中layer stack manager 中,右上角的layer pairs 、internal layer pairs和build-up,三者的区别?
  10. C语言变量的定义包括变量存储类型和变量的什么?
  11. LeetCode 1110. 删点成林(二叉树递归)
  12. springmvc接收日期字段处理方式
  13. Linux软件安装方法小结
  14. mysql迁移、备份数据表,导出表数据与结构
  15. 二级计算机vf题型,2010计算机等级考试二级VF考试题型与解题技巧
  16. 数据结构笔记(二十三)--哈夫曼树
  17. python回溯算法全排列_python 回溯法 子集树模板 系列 —— 11、全排列
  18. 工作效率低,怎么办?
  19. r语言平均值显著性检验_5.3 两总体均值检验和方差分析的R语言操作(26页)-原创力文档...
  20. golang-文章翻译-go常见的10种错误

热门文章

  1. JavaWeb电商 秒杀业务分析
  2. [转载]Elsevier上发表论文的若干要求
  3. WML语言基础(WAP建站)四(转)
  4. 狂神学JAVA--基础篇:JavaSE Xmind总结 思维导图
  5. 海信电视使用优酷投屏的方法
  6. PAT 乙级 (Basic Level) Practice 1014 福尔摩斯的约会 解题思路
  7. (一)数字逻辑基础1
  8. 今日热榜前 5 的 GitHub 项目
  9. 如何成为一名黑客 (英文原文 )
  10. 《FM/AM相邻信道选择性测试》