欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

最近在項(xiàng)目中添加了語(yǔ)言國(guó)際化的功能。

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

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

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

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

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

組件用法

為了和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 />

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

我們要?jiǎng)討B(tài)切換語(yǔ)言,需要?jiǎng)討B(tài)改這兩個(gè)配置。

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)前語(yǔ)言環(huán)境是 中文,它會(huì)顯示你好 ,如果是英文環(huán)境,會(huì)顯示Hello.

動(dòng)態(tài)傳值

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

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

6.其它組件用法

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

API用法

有時(shí)候我們可能需要在代碼中動(dòng)態(tài)做 國(guó)際化,這就需要?jiǎng)討B(tài)API 了。下面我簡(jiǎn)單介紹下怎么用

1.導(dǎo)入 injectIntl

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

2.在組件中注入

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

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

3.使用 intl 對(duì)象

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

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

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

結(jié)束語(yǔ)

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

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

相關(guān)文章

  • ahooks正式發(fā)布React?Hooks工具庫(kù)

    ahooks正式發(fā)布React?Hooks工具庫(kù)

    這篇文章主要為大家介紹了ahooks正式發(fā)布值得擁有的React?Hooks工具庫(kù)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • React創(chuàng)建組件的三種方式及其區(qū)別是什么

    React創(chuàng)建組件的三種方式及其區(qū)別是什么

    在React中,創(chuàng)建組件的三種主要方式是函數(shù)式組件、類組件和使用React Hooks的函數(shù)式組件,本文就詳細(xì)的介紹一下如何使用,感興趣的可以了解一下
    2023-08-08
  • React之PureComponent的使用作用

    React之PureComponent的使用作用

    這篇文章主要介紹了React之PureComponent的使用作用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • React-hooks面試考察知識(shí)點(diǎn)匯總小結(jié)(推薦)

    React-hooks面試考察知識(shí)點(diǎn)匯總小結(jié)(推薦)

    這篇文章主要介紹了React-hooks面試考察知識(shí)點(diǎn)匯總,Hook?使你在無(wú)需修改組件結(jié)構(gòu)的情況下復(fù)用狀態(tài)邏輯,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • react中實(shí)現(xiàn)修改input的defaultValue

    react中實(shí)現(xiàn)修改input的defaultValue

    這篇文章主要介紹了react中實(shí)現(xiàn)修改input的defaultValue方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • react?component?function組件使用詳解

    react?component?function組件使用詳解

    這篇文章主要為大家介紹了react?component?function組件的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • React組件三大屬性之state,props,refs

    React組件三大屬性之state,props,refs

    這篇文章主要介紹了React組件三大屬性之state,props,refs,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • react子組件接收的props賦值給state的陷阱問(wèn)題

    react子組件接收的props賦值給state的陷阱問(wèn)題

    這篇文章主要介紹了react子組件接收的props賦值給state的陷阱問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 解決React報(bào)錯(cuò)Property does not exist on type 'JSX.IntrinsicElements'

    解決React報(bào)錯(cuò)Property does not exist on 

    這篇文章主要為大家介紹了React報(bào)錯(cuò)Property does not exist on type 'JSX.IntrinsicElements'解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • React中傳遞組件的三種方式小結(jié)

    React中傳遞組件的三種方式小結(jié)

    通過(guò)傳遞組件,我們可以將復(fù)雜組件內(nèi)部的一部分 UI 交由外部組件來(lái)控制渲染,這也是控制反轉(zhuǎn)(Inversion of Control)的一種體現(xiàn),在 React 中,我們可以通過(guò)三種方式來(lái)傳遞組件,本文就來(lái)給大家述說(shuō)這三種方式,需要的朋友可以參考下
    2023-07-07

最新評(píng)論