Webpack+React+多語(yǔ)言(二) 多語(yǔ)言組件

基礎(chǔ)配置Webpack+React+多語(yǔ)言(一) 基礎(chǔ)配置
github地址
完整代碼:webpack-react-language
多語(yǔ)言組件webpack-react-language
關(guān)鍵字:react 多語(yǔ)言 國(guó)際版 React-intl

現(xiàn)在項(xiàng)目基本能跑起來(lái)了蚪腐,我們開始準(zhǔn)備多語(yǔ)言部分


打開調(diào)試器优床,會(huì)看到下面這句話焦读,推薦你安裝React DevTools

"Download the React DevTools for a better development experience: https://fb.me/react-devtools"

推薦安裝React DevTools.png

如果你可以打開chrome商店蛮原,搜索到React Developer Tools就可以直接點(diǎn)擊下載安裝

  • 1.項(xiàng)目中添加了語(yǔ)言國(guó)際化的功能

一開始的時(shí)候日川,我考慮的是為整個(gè)項(xiàng)目添加config文件寓盗,根據(jù)不同的語(yǔ)言和地區(qū)辣垒,加載不同的config文件望侈,就能夠達(dá)到界面語(yǔ)言切換的目的。(我們的pc端多語(yǔ)言就是這么做的勋桶,兩個(gè)不同的配置文件脱衙,根據(jù)當(dāng)前頁(yè)面的語(yǔ)言,加載合適的文件)

但是語(yǔ)言的國(guó)際化不僅僅是將界面上的UI文字翻譯成另一種語(yǔ)言例驹,還包括了:

  • 日期&時(shí)間顯示
  • 數(shù)字顯示(英文環(huán)境下每隔3位一個(gè)逗號(hào):1,000)
  • 量詞的顯示(一個(gè)蘋果是apple捐韩,兩個(gè)蘋果就應(yīng)該是apples)
  • 甚至還有一個(gè)字符串中間插了一個(gè)變量的情況("今天午飯吃了{(lán)count}個(gè)雞腿")
  • ...

React-intl是雅虎的語(yǔ)言國(guó)際化開源項(xiàng)目FormatJS的一部分,通過(guò)其提供的組件和API可以與ReactJS綁定鹃锈。

React-intl提供了兩種使用方法

  • 一種是引用React組建
  • 另一種是直接調(diào)取API
    官方更加推薦在React項(xiàng)目中使用前者荤胁,只有在無(wú)法使用React組件的地方,才應(yīng)該調(diào)用框架提供的API屎债。

  • 2.下面先來(lái)介紹React-intl提供的React組件仅政,有如下幾種:

以下幾種,在github中我都會(huì)放一個(gè)經(jīng)過(guò)實(shí)踐是可用的例子

  • <IntlProvider />
    包裹在需要語(yǔ)言國(guó)際化的組建的最外層盆驹,為包含在其中的所有組建提供包含id和字符串的鍵值對(duì)
    (如: "homepage.title":"Hommily"; )
  • <FormattedDate />
    用于格式化日期圆丹,能夠?qū)⒁粋€(gè)時(shí)間戳格式化成不同語(yǔ)言中的日期格式。
    傳入時(shí)間戳作為參數(shù):
<FormattedDate 
    value={new Date(1459832991883)}
/>

輸出結(jié)果:

<span>4/5/2016</span>
  • <FormattedTime />
    用于格式化時(shí)間召娜,效果與<FormattedDate />相似
    傳入時(shí)間戳作為參數(shù):
<FormattedTime 
    value={new Date(1459832991883)}
/> 

輸出結(jié)果:

<span>1:09 AM</span>
  • <FormattedRelative />
    通過(guò)這個(gè)組件可以顯示傳入組件的某個(gè)時(shí)間戳和當(dāng)前時(shí)間的關(guān)系运褪,比如 “ 10 minutes ago"
    傳入時(shí)間戳作為參數(shù):
<FormattedRelative 
    value={Date.now()}
/>

輸出結(jié)果:

<span>now</span>

10秒之后的輸出結(jié)果:

<span>10 seconds ago</span>

1分鐘之后的輸出結(jié)果:

<span>1 minute ago</span>
  • <FormattedNumber />
    這個(gè)組件最主要的用途是用來(lái)給一串?dāng)?shù)字標(biāo)逗號(hào),比如10000這個(gè)數(shù)字玖瘸,在中文的語(yǔ)言環(huán)境中應(yīng)該是1,0000秸讹,是每隔4位加一個(gè)逗號(hào),而在英語(yǔ)的環(huán)境中是10,000雅倒,每隔3位加一個(gè)逗號(hào)璃诀。
    傳入數(shù)字作為參數(shù):
<FormattedNumber value={1000} />

輸出結(jié)果:

<span>1,000</span>
  • <FormattedPlural />
    這個(gè)組件可用于格式化量詞,實(shí)際上可以傳入組件的量詞包括 zero, one, two, few, many, other 已經(jīng)涵蓋了所有的情況
<FormattedPlural 
    value={10} 
    one='message' 
    other='messages'
/>

輸出結(jié)果:

<span>messages</span>
  • <FormattedMessage />
    這個(gè)組件用于格式化字符串蔑匣,是所有的組件中使用頻率最高的組件劣欢,因?yàn)榛旧献厮校琔I上面的每一個(gè)字符串都應(yīng)該用這個(gè)組件替代

比如我們?cè)趌ocale配置文件中寫了如下內(nèi)容:

const app = { 
    greeting:'Hello Howard!",
}
export default app;

使用這個(gè)組件的時(shí)候,我們這么寫:

<FormattedMessage 
    id='app.greeting' 
    description='say hello to Howard' 
    defaultMessage='Hello, Howard!' 
/>

id指代的是這個(gè)字符串在locale配置文件中的屬性名
description指的是對(duì)于這個(gè)位置替代的字符串的描述凿将,便于維護(hù)代碼校套,不寫的話也不會(huì)影響輸出的結(jié)果
當(dāng)在locale配置文件中沒(méi)有找到這個(gè)id的時(shí)候,輸出的結(jié)果就是defaultMessage的值
輸出的結(jié)果:

<span>Hello, Howard!</span>
  • <FormattedHTMLMessage />
    這個(gè)組件的用法和<FormattedMessage />完全相同牧抵,唯一的不同就是輸出的字符串可以包含HTML標(biāo)簽笛匙,但是官方不太推薦使用這個(gè)方法,如果可以想辦法用<FormattedMessage />的話犀变,就不應(yīng)該使用這個(gè)組件
  • 3.安裝react-intl

注意:為了兼容Safari各個(gè)版本妹孙,需要同時(shí)安裝 intl,intl在大部分的『現(xiàn)代』瀏覽器中是默認(rèn)自帶的获枝,但是Safari和IE11以下的版本就沒(méi)有了蠢正,這里需要留個(gè)心眼。
雅虎React-intl項(xiàng)目地址

npm install react-intl --save-dev
npm install intl --save-dev

在Dialog組件中

import React, {Component} from 'react';
import {FormattedMessage} from 'react-intl';
class Dialog extends Component {    
    constructor(props) {        
        super(props);        
        this.state = {            
            name       : 'W.mf',            
            unreadCount: 1000,        
        };    
    }    
    render() {        
        const {name, unreadCount} = this.state;        
        return (            
            <p>                
                <FormattedMessage                    
                    id="welcome"                    
                    defaultMessage={`Hello {name}, you have {unreadCount, number} 
                        {unreadCount, plural,                      
                        one {message}                      
                        other {messages}                    
                    }`}                    
                    values={{name: <b>{name}</b>, unreadCount}} 
                />            
            </p>        
        );    
    }
}
export default Dialog;

wap/main.js

import React from 'react';
import ReactDOM from 'react-dom';
import {IntlProvider} from 'react-intl';
import Dialog from './components/Dialog.jsx';
ReactDOM.render(    
    <IntlProvider locale="en">        
        <Dialog />    
    </IntlProvider>,    
    document.getElementById('content')
);
執(zhí)行結(jié)果.png

基礎(chǔ)配置Webpack+React+多語(yǔ)言(一) 基礎(chǔ)配置
github地址 :webpack-react-language
關(guān)鍵字:react 多語(yǔ)言 國(guó)際版 React-intl

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末省店,一起剝皮案震驚了整個(gè)濱河市嚣崭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌萨西,老刑警劉巖有鹿,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谎脯,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)持寄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門源梭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人稍味,你說(shuō)我怎么就攤上這事废麻。” “怎么了模庐?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵烛愧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我掂碱,道長(zhǎng)怜姿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任疼燥,我火速辦了婚禮沧卢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘醉者。我一直安慰自己但狭,他們只是感情好披诗,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著立磁,像睡著了一般呈队。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唱歧,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天掂咒,我揣著相機(jī)與錄音,去河邊找鬼迈喉。 笑死绍刮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挨摸。 我是一名探鬼主播孩革,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼得运!你這毒婦竟也來(lái)了膝蜈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤熔掺,失蹤者是張志新(化名)和其女友劉穎饱搏,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體置逻,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡推沸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了券坞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鬓催。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖恨锚,靈堂內(nèi)的尸體忽然破棺而出宇驾,到底是詐尸還是另有隱情,我是刑警寧澤猴伶,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布课舍,位于F島的核電站,受9級(jí)特大地震影響他挎,放射性物質(zhì)發(fā)生泄漏筝尾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一雇盖、第九天 我趴在偏房一處隱蔽的房頂上張望忿等。 院中可真熱鬧,春花似錦崔挖、人聲如沸贸街。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)薛匪。三九已至捐川,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逸尖,已是汗流浹背古沥。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留娇跟,地道東北人岩齿。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像苞俘,于是被迫代替她去往敵國(guó)和親盹沈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • GitChat技術(shù)雜談 前言 本文較長(zhǎng)吃谣,為了節(jié)省你的閱讀時(shí)間乞封,在文前列寫作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,674評(píng)論 7 110
  • 無(wú)意中看到zhangwnag大佬分享的webpack教程感覺(jué)受益匪淺岗憋,特此分享以備自己日后查看肃晚,也希望更多的人看到...
    小小字符閱讀 8,140評(píng)論 7 35
  • 構(gòu)建一個(gè)小項(xiàng)目——FlyBird,學(xué)習(xí)webpack和react仔戈。(本文成文于2017/2/25) 從webpac...
    布蕾布蕾閱讀 16,801評(píng)論 31 98
  • -1- 我們可以用各種各樣的方式來(lái)介紹一個(gè)作家呈現(xiàn)給我們的作品关串。比如,我們可以把 1965年首版的《斯通納》比喻成...
    清澈的北風(fēng)閱讀 818評(píng)論 61 70
  • 01 校園暴力早已不是新聞,前段時(shí)間才爆出數(shù)起女生宿舍凌辱事件耐量,12月5日在湖南電子科技職業(yè)學(xué)院又發(fā)生了一起大一新...
    漢尼拔絲蘋果9閱讀 461評(píng)論 3 3