i18n,也就是internationalization,我們可以透過它管理多國語言切換,而react-intl則是FormatJS的一部分。FormatJS是用於i18n的JavaScript library的modual集合,並著重於向使用者顯示的格式化數字、日期和字串。
當初想切入i18n時剛好受到這則影片的啟發,讓我內心湧起:"欸油~好像不錯!"的念頭,所以就讓我們一起看看react-intl是怎麼實現多國語系切換的吧!
首先,先來看看他有什麼特徵吧!
這次先不急著實作,先一起來看看react intl有哪些module可以使用!
The React Intl Module
import {addLocaleData} from 'react-intl';
import frLocaleData from 'react-intl/locale-data/fr';
addLocaleData(frLocaleData);
connect
類似,透過props.intl注入formatting API以供component使用。一般來說我們會使用到的格式化訊息大多使用React Intl Components產出react element,但有些使用情境需要的是改變element的attribute(比如說title、aria或是用於componentDidMount的side-effect。<IntlProvider>
用來設定i18n context,通常會把整個root component包起來。其中props的設定常見的有:
<IntlProvider locale={localeProp} key={localeProp} messages={messagesProp}>
<App />
</IntlProvider>
<FormattedDate value={new Date(1459832991883)}/>
<span>4/5/2016</span>
有options的範例:
<FormattedDate
value={new Date(1459832991883)}
year='numeric'
month='long'
day='2-digit'
/>
<span>April 05, 2016</span>
<FormattedTime value={new Date(1459832991883)}/>
<span>1:09 AM</span>
<FormattedNumber value={1000}/>
<span>1,000</span>
對不起已經被我的重複碎念感到厭煩的各位,基本上就是用不同的api,加上不同的options,產出不同的內容,但都會是<span>,之後我們快速用範例帶過吧!
<FormattedPlural
value={10}
one='message'
other='messages'
/>
<span>messages</span>
<FormattedMessage
id='app.greeting'
description='Greeting to welcome the user to the app'
defaultMessage='Hello, {name}!'
values={{
name: 'Eric'
}}
/>
<span>Hello, Eric!</span>
<FormattedMessage id="title">
{(txt) => (
<H1>
{txt}
</H1>
)}
</FormattedMessage>
<h1>Hello, Eric!</h1>
今日總結:
大概有了概念後,明天我們就來實作吧!
看起來主要會影響的範疇就在時間、數字和訊息做語系替換,稍微了解之後,其實i18n也是蠻親民的呢~
希望明天順利!