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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • compound extreme_particular conditions

    compound extreme_particular conditions在看SpringSide代码过程中,发现SS使用了extremecomponents于是,今天看了看extremecomponents的使用,发觉extremecomponents真是个好用西。可以直接接受response的数据。按照test例子自己做的:效果不错哟eXtremeTable是一个可扩展的用于以表格的形式来显示数据的一组JSP标签库.网站:http://www.extreme…

  • SSM 项目 ——— 小米商城后台管理系统

    SSM 项目 ——— 小米商城后台管理系统目录一、项目名称二、使用技术三、开发步骤四、具体实现1、创建数据库表2、项目结构3、配置文件一、项目名称名称:小米商城后台管理系统本项目主要目的是使学员更深层的了解IT企业的文化和岗位需求、模拟企业的工作场景,分享研制成果,增加学员对今后工作岗位及计算机应用开发对客观世界影响的感性认识,使学员对技术有更深入的理解,在今后工作中能有更明确的目标和方向。并能为日后职业规划提供很好的指导作用。二、使用技术服务端:Spring+SpringMVC+MyBatis框架整合数据库:MySql8.0

  • A卡福利 : AMD Fluid Motion Video补帧教程,让你的视频从24帧补到60帧(144)

    A卡福利 : AMD Fluid Motion Video补帧教程,让你的视频从24帧补到60帧(144)背景:AMDFluidMotionVideo是一项AMD研发,将帧率为24FPS【即帧每秒,FramesperSecond】或者其他帧率低于60FPS的视频补帧成60帧的技术。1.准备工具:完美解码(Potplayer),BuleskyFrc2.打开AMD的深红驱动设置,依次点击"视频"-"自定义"-"AMDFluidMotionVideo…

  • mysql8 2058_SQLyog连接MySQL8.0报2058错误的解决方案[通俗易懂]

    mysql8 2058_SQLyog连接MySQL8.0报2058错误的解决方案[通俗易懂]引言用SQLyog连接MySQL8.0(社区版:mysql-installer-community-8.0.15.0.msi),出现错误2058(Plugincaching_sha2_passwordcouldnotbeloaded:xxxx),通过查询资料了解了该错误的原因并在本文中提出了该问题的方案。原因该错误提示如下图所示:具体原因:新的MySQL8.0安装,在初始化数据目录时,…

  • 八数码问题及A*算法

    八数码问题及A*算法一.八数码问题八数码问题也称为九宫问题。在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格,与空格相邻的棋子可以移到空格中。要求解决的

  • linux设置和修改时间与时区命令_linux 文件修改时间

    linux设置和修改时间与时区命令_linux 文件修改时间linux系统时间有两个,一个是硬件时间,即BIOS时间,就是我们进行CMOS设置时看到的时间,另一个是系统时间,是linux系统Kernel时间。当Linux启动时,系统Kernel会去读取硬件时钟的设置,然后系统时钟就会独立于硬件运作。有时我们会发现系统时钟和硬件时钟不一致,因此需要执行时间同步。方法一一、date查看/设置系统时间1、将日期设置为2017年11月3日[root@linux

    2022年10月26日

发表回复

您的电子邮箱地址不会被公开。

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