clientjs/packages/dashboard-components/src/intl.jsx
author ymh <ymh.work@gmail.com>
Thu, 20 Sep 2018 17:51:15 +0200
changeset 11 37ecf0b9c174
permissions -rw-r--r--
Add Nextleap dashboard

import React from 'react';
import _ from 'lodash';

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

import messagesBase from './locales/messages.json';

export default function setIntl(messagesDataExt, WrappedComponent, localeData) {
  const messagesData = _.merge(_.cloneDeep(messagesBase), messagesDataExt || {});

  addLocaleData(localeData);

  let language = (navigator.languages && navigator.languages[0])
    || navigator.language
    || navigator.userLanguage;

  let language6391 = language.toLowerCase().split(/[_-]+/)[0];

  if (!(language6391 in messagesData)) {
    language = 'en';
    language6391 = 'en';
  }

  const messages = messagesData[language6391] || messagesData[language] || messagesData.en;

  return props => (
    <IntlProvider
      locale={language}
      messages={messages}
    >
      <WrappedComponent {...props} />
    </IntlProvider>
  );
}