React项目的国际化

 最近做的react项目需要支持国际化,网上查了一下,发现一款很好的插件“react-intl-universal”,由阿里巴巴团队开发,这款插件是原先的国际化插件“react-intl”的升级版,“react-intl”因为一些“致命”缺陷现已被其取代,npm官网有罗列原因,有兴趣的可以去了解一下。下面具体介绍一下这款插件的使用方法。1.安装npminstallreact-i…

大家好,又见面了,我是你们的朋友全栈君。

 

最近做的react项目需要支持国际化,网上查了一下,发现一款很好的插件“react-intl-universal”,由阿里巴巴团队开发,这款插件是原先的国际化插件“react-intl”的升级版,“react-intl”因为一些“致命”缺陷现已被其取代,npm官网有罗列原因,有兴趣的可以去了解一下。下面具体介绍一下这款插件的使用方法。

1. 安装

npm install react-intl-universal --save

2.初始化

1.配置语言包,json文件根据需要支持几种语言来决定,下面的图片中仅支持中英文:

React项目的国际化

2.于项目入口文件中配置国际化

import intl from 'react-intl-universal';
 
// locale data
const locales = {
  "en-US": require('./locales/en-US.js'),
  "zh-CN": require('./locales/zh-CN.js'),
};
 
class App extends Component {
 
  state = {initDone: false}
 
  componentDidMount() {
    this.loadLocales();
  }
 
  loadLocales() {
    // init method will load CLDR locale data according to currentLocale
    // react-intl-universal is singleton, so you should init it only once in your app
    intl.init({
      currentLocale: 'en-US', // TODO: determine locale here
      locales,
    })
    .then(() => {
      // After loading CLDR locale data, start to render
      this.setState({initDone: true});
    });
  }
 
  render() {
    return (
      this.state.initDone &&
      <div>
        {intl.get('SIMPLE')}
      </div>
    );
  }
 
}

 

3.使用

1.在component中导入插件

import intl from 'react-intl-universal';

2.html中引用资源包里的文字

a.纯文字,使用intl.get()

<div> {intl.get('SIMPLE')} </div>

b.带html模板的文字,使用intl.getHTML()方法

例如资源包里是这样定义的

{ 
   "SIMPLE": "This is <span style='color:red'>HTML</span>" 
}

引用时需使用getHTML()方法获取文字

<div>{intl.getHTML('SIMPLE')}</div>

3.配置默认message

当遇到比如因拼写错误导致无法匹配到资源包里的文字时,可以事先配置默认的message,这时当无法匹配的资源包时会显示默认message

//"defaultMessage()"可简写为"d()"
intl.get('not-exist-key').defaultMessage('没有找到这句话');

同理亦可配置带html模板的默认message

intl.getHTML('not-exist-key').d(<h2>没有找到这句话</h2>)

4.带变量的message

资源包里的配置如下

{
    "HELLO": "Hello, {name}. Welcome to {where}!" 
}

在html中引用时

<div> intl.get('HELLO', {name:'banana', where:'China'}) </div>

显示的结果为:Hello, banana. Welcome to China!

5.数字形式和千分位分隔符

是第四种用法的延伸,举例:

下例中的变量为num,给它标记为plural后,它的值只能为数字。当num值为0时,显示”no photos.”;当值为1时,显示”one photo.”;当值为其他数字比如25000时,显示“25,000 photos.”,这里的’#’表示给num的值添加千分位分隔符后显示

{ 
   "PHOTO": "You have {num, plural, =0 {no photos.} =1 {one photo.} other {# photos.}}" 
}

引用结果如下:

intl.get('PHOTO', {num:0}); // "You have no photos."
intl.get('PHOTO', {num:1}); // "You have one photo."
intl.get('PHOTO', {num:1000000}); // "You have 1,000,000 photos."

6.显示货币格式

具体语法为{变量名, 类型, 格式化},下例中变量名为”price”,它的类型是number,”USD”表示在值前面加上美元符号($)

{ 
   "SALE_PRICE": "The price is {price, number, USD}" 
}

引用及显示结果如下:

intl.get('SALE_PRICE', {price:123456.78}); // The price is $123,456.78

7.显示日期

语法同上:{变量名, 类型, 格式化},当类型为”date”时,格式化有以下几个选项:short,medium,long,full,也可不格式化

{
  "SALE_START": "Sale begins {start, date}",
  "SALE_END": "Sale ends {end, date, long}"
}

引用及显示:

intl.get('SALE_START', {start:new Date()}); // Sale begins 4/19/2017
intl.get('SALE_END', {end:new Date()}); // Sale ends April 19, 2017

我的例子可下载核心代码查看

链接: https://pan.baidu.com/s/1W7cR3_4iAO_nWDzuaVmX0w

密码: a6mm

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128875.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 马云口中的“计划经济” 其实是一种大数据和人工智能[通俗易懂]

    马云口中的“计划经济” 其实是一种大数据和人工智能

    2022年3月5日
    93
  • HtmlAgilityPack 总结(一)

    HtmlAgilityPack 总结(一)一个解析html的C#类库HtmlAgilityPack,今天终于有时间整理一下,并把Demo分享一下。HtmlAgilityPack是一个基于.Net的、第三方免费开源的微型类库,主要用于在服务器端解析html文档(在B/S结构的程序中客户端可以用Javascript、jquery解析html)。截止到本文发表时,HtmlAgilityPack的最新版本为1.4.6。下载地址:ht

    2022年7月15日
    13
  • oracle9i如何卸载,教你怎么样卸载Oracle9i[通俗易懂]

    oracle9i如何卸载,教你怎么样卸载Oracle9i[通俗易懂]欢迎进入Oracle社区论坛,与200万技术人员互动交流>>进入在win2000企业版操作系统下,卸载Oracle9i:1、停止所有Oracle服务2、删除注册表中的所有关于Oracle项(1)在HKEY_LOCAL_MACHINE\SOFTWARE下,删除Oracle目录(2)在HKEY_LOCAL_MACHINE\SYSTE欢迎进入Oracle社区论坛,与200万技…

    2022年10月20日
    3
  • 激光slam理论与实践_SLAM算法

    激光slam理论与实践_SLAM算法激光SLAM笔记(1)——激光SLAM框架和基本数学理论1、SLAM分类1.1、基于传感器的分类1.2、基于后端的分类2、激光SLAM算法(基于优化的算法)2.1、激光SLAM算法的流程2.2、激光SLAM常用算法2.3、激光SLAM在实际环境中的问题3、激光SLAM算法介绍3.1、2D激光SLAM3.2、3D激光SLAM1、SLAM分类1.1、基于传感器的分类1.2、基于后端的分类 …

    2022年8月23日
    8
  • 关于用户路径分析模型_spark用户行为分析

    关于用户路径分析模型_spark用户行为分析一、需求背景在互联网数据化运营实践中,有一类数据分析应用是互联网行业所独有的——路径分析。路径分析应用是对特定页面的上下游进行可视化展示并分析用户在使用产品时的路径分布情况。比如:当用户使用某APP时,是怎样从【首页】进入【详情页】的,用户从【首页】分别进入【详情页】、【播放页】、【下载页】的比例是怎样的,以及可以帮助我们分析用户离开的节点是什么。在场景对应到具体的技术方案设计上,我们将访问数据根据session划分,挖掘出用户频繁访问的路径;功能上允许用户即时查看所选节点相关路径,支持用户自定义设

    2022年8月24日
    6
  • 什么是JavaSE,写给第一次接触Java的人

    什么是JavaSE,写给第一次接触Java的人Java语法基础Java开发环境搭建Java概述Java是一门编程语言,是用来编写软件的。QQ、迅雷、淘宝、京东等等这些常用软件都可以用Java来编写。其实,Java最擅长的是编写如下类型的软件:1、互联网:电商、P2P2、企业级应用:ERP、CRM、BOS、OAJavaSE是java分类中的标准版,是刚接触java要学习的基础知识。JavaEE是java分类中的企

    2022年7月8日
    21

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号