[React Intl] Install and Configure the Entry Point of react-intl

Posted Answer1215

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[React Intl] Install and Configure the Entry Point of react-intl相关的知识,希望对你有一定的参考价值。

We’ll install react-intl, then add it to the mounting point of our React app.

Then, we’ll use react-intl helpers to load locales in our app, including English, Spanish and French and choose which locale data to load based on the user‘s browser language.

We’ll also set up and include messages files for each language, which hold all of the translated strings for our app.

 

Install:

npm install --save react-intl

 

index.js:

import React from ‘react‘;
import ReactDOM from ‘react-dom‘;

import { addLocaleData, IntlProvider } from ‘react-intl‘;
import en from ‘react-intl/locale-data/en‘;
import fr from ‘react-intl/locale-data/fr‘;
import es from ‘react-intl/locale-data/es‘;

import messages from ‘./messages‘;

import App from ‘./App‘;
import ‘./index.css‘;

addLocaleData([...en, ...fr, ...es]);

let locale = (navigator.languages && navigator.languages[0])
             || navigator.language
             || navigator.userLanguage
             || ‘en-US‘;

ReactDOM.render(
  <IntlProvider locale={locale} messages={messages[locale]}>
    <App />
  </IntlProvider>,
  document.getElementById(‘root‘)
);

 

For messages.js, it contains all the translations:

export default {
  ‘en-US‘: {
    detail: {
      toggle: ‘Toggle‘,
      purchase: ‘Purchase this book from:‘,
      reviewsHeading: ‘Reviews‘
    }
  },
  ‘es-ES‘: {
    detail: {
      toggle: ‘Palanca‘,
      purchase: ‘Compre este libro de:‘,
      reviewsHeading: ‘Comentarios
    }
  },
  ‘fr-FR‘: {
    detail: {
      toggle:‘Basculer‘,
      purchase: ‘Achetez ce livre à partir de:‘,
      reviewsHeading: ‘Avis‘
    }
  }
}

It is recommended to use flatten structures. So we can use fatten utils:

export function flattenMessages(nestedMessages, prefix = ‘‘) {
  return Object.keys(nestedMessages).reduce((messages, key) => {
    let value = nestedMessages[key];
    let prefixedKey = prefix ? `${prefix}.${key}` : key;

    if (typeof value === ‘string‘) {
      messages[prefixedKey] = value;
    } else {
      Object.assign(messages, flattenMessages(value, prefixedKey));
    }

    return messages;
  }, {});
}

 

Modify provider to use flattenMessages method:

ReactDOM.render(
  <IntlProvider locale={locale} messages={flattenMessages(messages[locale])}>
    <App />
  </IntlProvider>,
  document.getElementById(‘root‘)
);

 

The way to use it:

import { FormattedMessage } from ‘react-intl‘;

<FormattedMessage id="detail.toggle"/>

 

以上是关于[React Intl] Install and Configure the Entry Point of react-intl的主要内容,如果未能解决你的问题,请参考以下文章

[React Intl] Format Numbers with Separators and Currency Symbols using react-intl FormattedNumber(代码

Centos install ICU, INTL for php

brew install php55-intl 失败,无法安装 Composer

[React Intl] Render Content with Placeholders using react-intl FormattedMessage

为 react/react-intl 动态导入语言 json 文件

非组件的 React-intl