FormatJS 是javascript的模塊化集合,用於格式化數字, 日期和字符串以進行國際化操做。它由一組核心庫組成, 這些核心庫是基於 JavaScript Intl 內置和行業範圍 i18n 標準的核心庫,以及如今通用模板和組件庫的。 javascript
Formatjs 集成react的包文件,用來格式化日期、數字和字符串,包括複數和處理翻譯。web app 進行國際化是一項牽連複雜的任務, 若是以前在JavaScript中沒有接觸過i8n, 推薦先開始如下規則:html
npm install react-intl --save
複製代碼
react-intl npm 包文件能夠經過設置package.json 文件的main的方式能夠爲commnjs, ES6, UMD dev, UMD prod這幾個版本,但不管是使用那個版本的React Intl, 它們都提供相同的命名導出以下:java
injectIntl
defineMessages
IntlProvider
FormattedDate
FormattedTime
FormattedRelativeTime
FormattedNumber
FormattedPlural
FormattedMessage
FormattedHTMLMessage
<IntlProvider>
組件ReactDOM.render(
<IntlProvider locale={usersLocale} messages={translationsForUsersLocale}>
<App />
</IntlProvider>,
document.getElementById('container')
);
複製代碼
React Intl 經過react component 以及它的api 兩種方式來格式化數據。組件提供了經常使用的react native apps集成國際化的方式,如<Formatted*>
組件, 而須要將數據格式化爲不適合 React 元素的字符串值時,應使用 API。 例如, 標題或 aria 屬性,或組件 DidMount 中的反作用。react
React Intl 提供的 API 可經過高階組件 (HOC) 工廠注入 Intl 進行訪問。它使用一個高階的React 組件將傳入的 React 組件包裝,該組件提供強制格式化 API。(這相似於Flux 實現中的鏈接到存儲模式。)git
下面是一個使用<IntlProvider>
、FormattedRelative>
組件和 API intl.formatDate(date)
設置 i18n 上下文和格式化數據的的示例:github
import React from 'react';
import ReactDOM from 'react-dom';
import {injectIntl, IntlProvider, FormattedRelative} from 'react-intl';
const PostDate = injectIntl(({date, intl}) => (
<span title={intl.formatDate(date)}>
<FormattedRelative value={date} />
</span>
));
const App = ({post}) => (
<div>
<h1>{post.title}</h1>
<p>
<PostDate date={post.date} />
</p>
<div>{post.body}</div>
</div>
);
ReactDOM.render(
<IntlProvider locale={navigator.language}>
<App
post={{
title: 'Hello, World!',
date: new Date(1459913574887),
body: 'Amazing content.',
}}
/>
</IntlProvider>,
document.getElementById('container')
);
複製代碼