clientjs/packages/dashboard-components/src/intl.jsx
author ymh <ymh.work@gmail.com>
Mon, 04 Apr 2022 17:02:10 +0200
changeset 26 eb14941af2e7
parent 11 37ecf0b9c174
permissions -rw-r--r--
Added tag 0.2.2 for changeset 7f7cdcd01dea

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>
  );
}