最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React-intl 實現(xiàn)多語言的示例代碼

 更新時間:2017年11月03日 09:01:06   作者:快樂的開發(fā)者  
本篇文章主要介紹了React-intl 實現(xiàn)多語言的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

最近在項目中添加了語言國際化的功能。

語言國際化,也有人說成是語言本地化,其實就是為Web App添加多語言,我們的項目當(dāng)前包含了中文版和英文版,按理來說『逐字替換』也不是多大事兒,但是,這么Low的做法,有錢途嗎?

一開始的時候,我考慮的是傳統(tǒng)的為整個項目添加config文件,根據(jù)不同的語言和地區(qū),加載不同的config文件,就能夠達(dá)到界面語言切換的目的。當(dāng)然,也正是因為這個想法太過于幼稚,所以才被稱為『一開始』的想法。語言的國際化不僅僅是將界面上的UI文字翻譯成另一種語言,還包括了日期&時間顯示,數(shù)字顯示(英文環(huán)境下每隔3位一個逗號:1,000),量詞的顯示(一個蘋果是apple,兩個蘋果就應(yīng)該是apples),甚至還有一個字符串中間插了一個變量的情況("今天午飯吃了{(lán)count}個雞腿")...

所以這并不只是一個簡單的字符替換問題,并且,我們要很方便的導(dǎo)出一個目錄,放到word或者page當(dāng)中,給到其他同事對照著進(jìn)行翻譯工作,這個非常重要??!難道你要讓產(chǎn)品經(jīng)理直接在代碼里改么?或者你想一個一個搜索替換?不考慮清楚就干的話,相信我,You'll pay for this。

作為一個有追求的代碼家,你肯定不希望在index.html當(dāng)中增加一行<Script>引用吧?另外,UI中的文字全部都是使用圖片的那個同學(xué),請起立,滾。如果想要在一個React項目中,優(yōu)雅的import something from somewhere,然后將界面中的文字用<首字母大寫 /> 組件替代,最后通過簡單的配置實現(xiàn)語言的國際化,那我們就用React-intl吧。

React 做國際化,我推薦使用 React-intl , 這個庫提供了 React 組件和Api兩種方式來格式化日期,數(shù)字和字符串等。知道這個庫了,那讓我們開始使用它

組件用法

為了和React 比較融和,我們可以使用組件的方式

1.安裝

npm install react-intl --save

2.添加引用

import {IntlProvider, addLocaleData} from 'react-intl';

3.添加 locale 配置文件

zh-CN.js

const zh_CN = { 'intl.hello': "你好", 'intl.name': '我的名字是 {name}' } export default zh_CN;

en-US.js

const en_US = { 'intl.hello': "hello", 'intl.name': 'my name is {name}' } export default en_US;

4.使用<IntlProvider />

這個組件用于設(shè)置 i18n 的上下文,它將包裝應(yīng)用程序的根組件,以便整個應(yīng)用程序?qū)⑴渲迷?i18n 的上下文中.
最主要的兩個配置項是: loacle 當(dāng)前的語言環(huán)境 messages 當(dāng)前語言的內(nèi)容。

我們要動態(tài)切換語言,需要動態(tài)改這兩個配置。

import zhCN from './locale/zh.js';  //導(dǎo)入 i18n 配置文件
import enUS from './locale/en.js';

addLocaleData([...en, ...zh]);

export default class Root extends Component {
  static propTypes = {
    store: PropTypes.object.isRequired,
    history: PropTypes.object.isRequired
  }

  render() {
    const { store , history } = this.props;
    return (
      <IntlProvider locale='zh' messages={zhCN}>
        <Provider store={store}>
          <Router history={history}>
          </Router>
        </Provider>
      </IntlProvider>
    )
  }
}

5.使用<FormattedMessage />

基礎(chǔ)用法

<FormattedMessage 
  id="intl.hello"
  defaultMessage={'hello'}
/>

如果當(dāng)前語言環(huán)境是 中文,它會顯示你好 ,如果是英文環(huán)境,會顯示Hello.

動態(tài)傳值

<FormattedMessage
  id="intl.name"
  values={{name: <b>{name}</b>}}
/>

我們定義 intl.name 的時候模板里用到了{(lán)name} ,這個代表我們可以動態(tài)傳值,我們可以通過FormattedMessage中的 values 屬性傳一個JSON對象,這是就會動態(tài)顯示我們的內(nèi)容了。

6.其它組件用法

Ract-intl 為我們提供了豐富的組件,可以幫我們很好的處理字符串,時間,日期 ,大家可以自己查看 API,如有不明白的地方,我可以留言。

API用法

有時候我們可能需要在代碼中動態(tài)做 國際化,這就需要動態(tài)API 了。下面我簡單介紹下怎么用

1.導(dǎo)入 injectIntl

import { injectIntl, FormattedMessage } from 'react-intl';

2.在組件中注入

export default connect(mapStateToProps,mapActionCreators)(injectIntl(App))

我在項目中用到了Redux,注入的時候應(yīng)該向上面那樣,如果你沒有用Redux ,只需要 export defuault injectIntl(App)

3.使用 intl 對象

我們通過第二步的注入,現(xiàn)在在我們在 組件的 props 上會得到一個 intl 對象,它提供的方法和咱們上邊介紹的組件基本相對應(yīng),這時候我們想要顯示字符串,可以使用formatMessage 方法:

const {intl} = this.props;
  
let tmp = intl.formatMessage({id: 'intl.name'},{name: 'joe'});

formatMessage的第一個參數(shù)可以傳入Id, 第二個參數(shù)傳入 values ,更詳細(xì)的了解,請查看API

結(jié)束語

教程的代碼,我已放到github 上,大家如果需要,自行查看 React-intl

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于react封裝一個通用可編輯組件

    基于react封裝一個通用可編輯組件

    前段時間接到這樣一個需求,需要封裝一個組件實現(xiàn)可編輯,這個到底有多通用呢,就是需要在普通的文字展示包括表格,列表等等,所以本文將給大家介紹如何基于react封裝一個通用可編輯組件,需要的朋友可以參考下
    2024-02-02
  • 基于React.js實現(xiàn)原生js拖拽效果引發(fā)的思考

    基于React.js實現(xiàn)原生js拖拽效果引發(fā)的思考

    這篇文章主要為大家詳細(xì)介紹了基于React.js實現(xiàn)原生js拖拽效果,繼而引發(fā)的一系列思考,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 深入探討前端框架react

    深入探討前端框架react

    本文帶領(lǐng)大家一起探討前端框架react,涉及到前端框架react相關(guān)知識,對前端框架react相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • React路由組件傳參的三種方式(params、search、state)

    React路由組件傳參的三種方式(params、search、state)

    本文主要介紹了React路由組件傳參的三種方式,主要包括了params、search、state,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • JavaScript React如何修改默認(rèn)端口號方法詳解

    JavaScript React如何修改默認(rèn)端口號方法詳解

    這篇文章主要介紹了JavaScript React如何修改默認(rèn)端口號方法詳解,文中通過步驟圖片解析介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳解React自定義Hook

    詳解React自定義Hook

    在React項目中,我們經(jīng)常會使用到React自帶的幾個內(nèi)置Hooks,如 useState,useContext和useEffect。雖然在React中找不到這些 Hooks,但React提供了非常靈活的方式讓你為自己的需求來創(chuàng)建自己的自定義Hooks,想了解更多的,歡迎閱讀本文
    2023-04-04
  • react diff算法源碼解析

    react diff算法源碼解析

    這篇文章主要介紹了react diff算法源碼解析的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用react,感興趣的朋友可以了解下
    2021-04-04
  • React中用@符號編寫文件路徑實現(xiàn)方法介紹

    React中用@符號編寫文件路徑實現(xiàn)方法介紹

    在Vue中,我們導(dǎo)入文件時,文件路徑中可以使用@符號指代src目錄,極大的簡化了我們對路徑的書寫。但是react中,要想實現(xiàn)這種方式書寫文件路徑,需要寫配置文件來實現(xiàn)
    2022-09-09
  • react源碼層分析協(xié)調(diào)與調(diào)度

    react源碼層分析協(xié)調(diào)與調(diào)度

    本文主要介紹了深入理解React協(xié)調(diào)與調(diào)度(Scheduler)原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-10-10
  • 手把手教您實現(xiàn)react異步加載高階組件

    手把手教您實現(xiàn)react異步加載高階組件

    這篇文章主要介紹了手把手教您實現(xiàn)react異步加載高階組件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04

最新評論

静乐县| 绥阳县| 喜德县| 吉林省| 滦南县| 太谷县| 济阳县| 商都县| 鲜城| 瑞昌市| 铁力市| 太谷县| 黄山市| 尚义县| 津南区| 商城县| 德化县| 手机| 四子王旗| 湾仔区| 樟树市| 抚远县| 晋城| 东乌| 息烽县| 栾城县| 临西县| 天水市| 鹰潭市| 西峡县| 田阳县| 子长县| 延津县| 察哈| 通州市| 囊谦县| 洞头县| 青河县| 达州市| 会昌县| 宁国市|