亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

React-intl 實現多語言的示例代碼

2024-05-06 16:40:40
字體:
來源:轉載
供稿:網友

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

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

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

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

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

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

組件用法

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

這個組件用于設置 i18n 的上下文,它將包裝應用程序的根組件,以便整個應用程序將配置在 i18n 的上下文中.
最主要的兩個配置項是: loacle 當前的語言環境 messages 當前語言的內容。

我們要動態切換語言,需要動態改這兩個配置。

import zhCN from './locale/zh.js';  //導入 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 />

基礎用法

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

如果當前語言環境是 中文,它會顯示你好 ,如果是英文環境,會顯示Hello.

動態傳值

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

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

6.其它組件用法

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

API用法

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

1.導入 injectIntl

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

2.在組件中注入

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

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

3.使用 intl 對象

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

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

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

結束語

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品99国产精品酒店日本| 日韩精品高清在线观看| 91国内产香蕉| 国产一区二区三区在线免费观看| 中国人与牲禽动交精品| 亚洲综合中文字幕在线观看| 97在线观看视频| 亚洲专区在线视频| 91精品久久久久久久久久另类| 国产亚洲欧美日韩一区二区| 亚洲国产婷婷香蕉久久久久久| 日韩精品免费在线视频观看| 国产在线精品一区免费香蕉| 中文字幕亚洲专区| 国产精品av电影| 97视频在线观看免费高清完整版在线观看| 欧美日韩国产精品一区二区三区四区| 韩国三级电影久久久久久| 国产日韩欧美在线播放| 中文字幕久热精品在线视频| 欧美日韩在线免费| 国产精品羞羞答答| 欧美日韩激情美女| 国产在线观看一区二区三区| 国产精品久久久精品| 亚洲精品在线视频| 国产欧美欧洲在线观看| 日韩精品久久久久| 奇门遁甲1982国语版免费观看高清| 最近2019年日本中文免费字幕| 欧美成人免费观看| 国产精品爽爽爽| 欧美另类高清videos| 国产欧美日韩综合精品| 久久999免费视频| 91九色国产在线| 美女扒开尿口让男人操亚洲视频网站| 日韩中文字幕免费看| 精品亚洲一区二区三区在线观看| 国产精品免费久久久久久| 国产精品露脸av在线| 国产精品福利在线观看网址| 色多多国产成人永久免费网站| 亚洲xxxx在线| 国产精品久久久久久久7电影| 欧美视频在线观看 亚洲欧| 日韩在线观看免费av| 欧美性猛交xxxx免费看| 亚洲国产精品久久精品怡红院| 精品小视频在线| 97香蕉久久超级碰碰高清版| 日韩欧美一区二区在线| 亚洲成人精品在线| 欧美在线免费视频| 日韩精品中文字幕有码专区| 国模精品系列视频| 欧美不卡视频一区发布| 欧美专区福利在线| 精品成人国产在线观看男人呻吟| 亚洲精品自在久久| 亚洲精品久久久久久久久久久久| 久久人人爽人人爽人人片av高清| 亚洲无亚洲人成网站77777| 欧美国产日韩精品| 在线看日韩av| 爱福利视频一区| 亚洲国产一区二区三区四区| 51视频国产精品一区二区| 欧美老女人xx| 两个人的视频www国产精品| 麻豆成人在线看| 欧美亚洲免费电影| 欧美日韩电影在线观看| 亚洲精品在线观看www| 久久久久久久999| 国产精品扒开腿做爽爽爽的视频| 亚洲电影免费观看高清完整版| 久久av资源网站| 亚洲人在线视频| 午夜精品在线视频| 精品国产乱码久久久久久天美| 91av在线看| 欧美成人在线免费视频| 自拍偷拍亚洲欧美| 国产一区二区三区日韩欧美| 成人网欧美在线视频| 亚洲视频视频在线| 久久国内精品一国内精品| 不卡在线观看电视剧完整版| 欧美巨乳在线观看| 国产剧情久久久久久| 国产精品电影观看| 亚洲精品456在线播放狼人| 亚洲a一级视频| 中文字幕日韩高清| 精品久久久久久久久久| 91精品国产高清久久久久久| 亚洲毛茸茸少妇高潮呻吟| 国产精品夫妻激情| 久久久久亚洲精品国产| 国产精品一区二区电影| 亚洲欧美制服综合另类| 欧美在线精品免播放器视频| 日韩精品视频在线观看网址| 久久久精品美女| 中文字幕一精品亚洲无线一区| 久久综合色影院| 91成人性视频| 久久久久久免费精品| 欧美老女人bb| 成人黄色生活片| 茄子视频成人在线| 亚洲高清免费观看高清完整版| 亚洲天堂av在线免费| 欧美黑人一区二区三区| 欧美大人香蕉在线| 日韩av一区二区在线| 一区二区福利视频| 国产精品亚洲第一区| 国产精品自拍偷拍| 久久乐国产精品| 在线成人激情视频| 国产成人精品a视频一区www| 欧美电影在线播放| 久久精品电影一区二区| 日韩精品高清视频| 欧美精品久久久久久久免费观看| 亚洲免费一级电影| 国产精品丝袜一区二区三区| 91产国在线观看动作片喷水| 成人黄色片网站| 欧美黑人性生活视频| 久久久精品视频在线观看| 97在线视频免费看| 亚洲男女性事视频| 国产男女猛烈无遮挡91| 国产精品av免费在线观看| 性欧美xxxx| 精品偷拍一区二区三区在线看| 国产午夜精品美女视频明星a级| 精品国内亚洲在观看18黄| 亚洲aⅴ日韩av电影在线观看| 亚洲第一免费网站| 欧美大荫蒂xxx| 久久精品这里热有精品| 国产精品96久久久久久| 日韩美女主播视频| 一区二区成人av| 欧洲成人在线视频| 一区二区三区高清国产| 亚洲自拍欧美色图| 亚洲欧美国产日韩天堂区| 精品久久久久久中文字幕大豆网| 国内免费久久久久久久久久久| 高清亚洲成在人网站天堂| 国产91|九色| 91精品国产99| 亚洲аv电影天堂网| 国产91对白在线播放| 欧美激情综合色| 亚洲国产欧美一区二区三区久久| 亚洲精品91美女久久久久久久| 91黑丝高跟在线| 国产精品一区二区久久久|