React の国際化 react-intl の使用

React の国際化 react-intl の使用

React で国際化を実現するにはどうすればよいでしょうか? react-intlプラグインは、Reactの国際化を実装するための一連のメソッドを提供します。具体的な実装は次のとおりです。

1. React環境を構築し、対応するプラグインをダウンロードする

デフォルトでは、Node.js はすでにインストールされています。インストールされていない場合は、Baidu からインストールしてください。ここでは詳細には触れません。

公式のReactスキャフォールディングを使用してReactプロジェクトを構築します。すでにReactプロジェクトがある場合は、この手順を無視できます。次に、関連する依存関係react-intlをダウンロードします。

npx 作成-React-アプリ react-intl-デモ  
npm i react-intl -S

ダウンロードが完了するまでお待ちください

プロジェクトのルートディレクトリにあるsrcフォルダを探し、その中にlocaleという新しいフォルダを作成して言語パックの設定ファイルを保存してください。ここでは中国語と英語のみが切り替わり、他の言語のその後の操作は同じです。

ここに画像の説明を挿入

次に、関連する設定ファイルを記述します

ロケールのintl.jsファイルを見つけて、関連するプラグインを導入してカプセル化し、公開します。

React をインポートし、{useContext} を 'react' から取得します。
import { IntlProvider } from 'react-intl' // react-redux の Provider と同様に、言語の国際化が必要なコンポーネントの最外層にラップされ、コンポーネントとコンポーネント内のサブコンポーネントが react-intlim によって提供される API とメソッドを使用できるようにします。port { mainContext } from '../reducer' // ここでは、useReducer を使用して、ルート ディレクトリに 1 つ作成し、言語のグローバル状態管理を制御します。import zh_CN from './cn' // 中国語パッケージimport en_US from './en' // 英語パッケージconst Inter = (props) => {
    // デフォルトの言語設定を取得します。また、これを、react 自体が提供する redux Mobx や useReducer などのグローバル状態管理と組み合わせて使用​​することもできます。const { state } = useContext(mainContext)
  const chooseLocale = (val) => { 
    _val = val || navigator.language.split('_')[0] とします
    スイッチ (_val) {
      'en'の場合:
        戻る en_US
      ケース 'zh':
        zh_CNを返す
      デフォルト:
        zh_CNを返す
    }
  }
  let locale = state.locale // ロケールを取得する
  {children} = propsとします
  // サブコンポーネントをラップして react-intl の API を共有し、多言語対応を実現します (
    <IntlProvider
      キー={ロケール}
      ロケール={ロケール}
      デフォルトロケール='zh'
      メッセージ={chooseLocale(ロケール)}
    >
      {子供たち}
    </IntlProvider>
  )
}

エクスポートデフォルトインター

翻訳元

定数zh_CN = {
    開始: '開始'、
    スイッチ: 'スイッチ'
  }
  エクスポートデフォルト zh_CN
  

ja.js より

定数 en_US = {
    開始: '開始'、
    スイッチ: 'スイッチ'
  }
  エクスポート デフォルト en_US
  

Reducer.js (src ディレクトリに新規作成)

Reactをインポートし、{useReducer}を'react'からインポートします。
定数CHANGE_LOCALE = 'CHANGE_LOCALE'

const mainContext = React.createContext()

const リデューサー = (状態、アクション) => {
  スイッチ(アクションタイプ){
    CHANGE_LOCALEの場合:
      戻り値 { ...状態、ロケール: action.locale || 'zh' }
    デフォルト:
      状態を返す
  }
}

const ContextProvider = (props) => {
  const [状態, ディスパッチ] = useReducer(reducer, {
    ロケール: 'zh'
  })
  戻る (
    <mainContext.Provider 値 = {{ state, dispatch }}>
      {props.children}
    </mainContext.Provider>
  )
}

エクスポート { リデューサー、メインコンテキスト、コンテキストプロバイダー }

3. 関連ファイルをインポートしてApp.jsで使用する

アプリ

'./App.css' をインポートします。
'./reducer' から {ContextProvider} をインポートします。
'./locale/intl' から Inter をインポートします
'./views' から View をインポートします

関数App() {
  戻る (
    <コンテキストプロバイダー>
      <インター>
        <表示 />
      </インター>
    </コンテキストプロバイダー>
  );
}
デフォルトのアプリをエクスポートします。

4番目に、新しいビューディレクトリを作成し、関連するプラグインとAPIを使用して国際化を実現します。

効果を試すためにビューに新しいindex.jsxファイルを作成します

react をインポートし、{useContext} を 'react' から取得します。
'../reducer' から { mainContext } をインポートします。
'react-intl' から { FormattedMessage } をインポートします。
 
関数インデックス() {
    const { ディスパッチ、状態 } = useContext(mainContext)
    const { ロケール } = 状態
    const changeLang = () => { // 状態の言語を変更して切り替えます。dispatch({
            タイプ: 'CHANGE_LOCALE'、
            ロケール: ロケール === 'zh' ? 'en' : 'zh'
        })
    }
    戻る (
        <div>
           <div>
            <フォーマットされたメッセージ id="開始" ></フォーマットされたメッセージ>
           </div>
           <div>
                <button onClick={changeLang} > <FormattedMessage id="switch" ></FormattedMessage></button>
           </div>
        </div>
    );
}
デフォルトのインデックスをエクスポートします。

最終ディレクトリの赤いボックスは新しく追加されたものです

ここに画像の説明を挿入

こんな感じで、簡単なReactの国際化が完了しました!
ぜひ試してみてください。プロジェクトで必要な場合は、この方法で移植することもできます。このデモはGitHubにアップロードされています。githubアドレスでクローンして自分で実行できます。

これで、React の国際化における react-intl の使用に関するこの記事は終了です。React の国際化に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • ReactプロジェクトにSCSSを導入する方法
  • ReactでAngularコンポーネントを導入する方法
  • ReactはコンテナコンポーネントとディスプレイコンポーネントをVueに導入します
  • React 合成イベントの説明
  • ReactのPropsの簡単な比較
  • antd+reactプロジェクトをviteに移行するためのソリューションの詳細な説明
  • Reactイベントスロットリング効果が失敗する理由と解決策
  • Amap を使用した React 実装例 (react-amap)
  • Reactの簡単な紹介

<<:  my.cnf (my.ini) 重要なパラメータの最適化設定手順

>>:  MAC で MySQL のデフォルトの文字セットを utf8 に変更する方法

推薦する

WeChatアプレットのスクロールビューは、プルアップ時にデータの読み込みを重複させるソリューションを実装しています。

WeChat アプレットのスクロール ビューでは、プルアップして読み込むときにバグが多く発生します...

MYSQL ログとバックアップおよび復元の問題の詳細な説明

この記事では、参考までにMYSQLログとバックアップとリストアについて紹介します。具体的な内容は以下...

HTMLでは、div内のコンテンツが次のサイズを超えたときに自動的にスクロールバーが表示されるように設定します。

HTML ページでは、div 内のコンテンツが制限を超えた後に自動的にスクロール バーを表示する必要...

HTML でのテキストエリアの使用と一般的な問題およびケース分析

textarea タグはよく使われる HTML タグです。主に長いテキストを入力するときに改行するた...

Docker-compose を使用して ELK クラスターを構築する方法

すべてのオーケストレーション ファイルと構成ファイルは、私の Github からアクセスできます。構...

Vueベースのカスタムコンポーネントを実装してアイコンを導入する

序文プロジェクト開発では、アイコンを使用する方法はたくさんあります。iconfont で適切なアイコ...

HTMLフォーム送信方法のケーススタディ

フォームの送信方法をまとめると次のようになります。 1. 送信ボタンを使用して送信します。送信ボタン...

ネイティブJSが様々なスポーツの均一な動きを実現

この記事では、ネイティブ JS で実装された均一なモーションを紹介します。その効果は次のとおりです。...

Zabbix ベースの Jenkins プロセス監視の詳細な説明

1. 監視アーキテクチャ図 2. 実装のアイデアJenkins に Metrics プラグインをイン...

MySQLユーザー管理操作例の分析

この記事では、MySQL ユーザー管理操作について説明します。ご参考までに、詳細は以下の通りです。こ...

Vue+Echart 棒グラフで疫病データ統計を実現

目次1. まずプロジェクトにechartsをインストールします2. echartsに縦棒グラフテンプ...

Linux の ufw ファイアウォールの紹介

Linux のufw (Uncomplicated Firewall) を見て、ファイアウォールに変...

Windows 版 MySQL のインストール、起動、基本設定に関する詳細なグラフィック チュートリアル

ダウンロード:ステップ 1: ウェブサイトを開きます (ダウンロードするには公式ウェブサイトにアクセ...

ソケット '/tmp/mysql.sock' 経由でローカル MySQL に接続できない解決策

エラーメッセージ:エラー 2002: ソケット '/tmp/mysql.sock' ...

nginx keepaliveの具体的な使い方

http1.1 プロトコルのデフォルトのリクエスト ヘッダーでは、図に示すように、デフォルトで ke...