Source: i18n/index.js

/**
 * #### Import members from **@edx/frontend-platform/i18n**
 * The i18n module relies on react-intl and re-exports all of that package's exports.
 *
 * For each locale we want to support, react-intl needs 1) the locale-data, which includes
 * information about how to format numbers, handle plurals, etc., and 2) the translations, as an
 * object holding message id / translated string pairs.  A locale string and the messages object are
 * passed into the IntlProvider element that wraps your element hierarchy.
 *
 * Note that react-intl has no way of checking if the translations you give it actually have
 * anything to do with the locale you pass it; it will happily use whatever messages object you pass
 * in.  However, if the locale data for the locale you passed into the IntlProvider was not
 * correctly installed with addLocaleData, all of your translations will fall back to the default
 * (in our case English), *even if you gave IntlProvider the correct messages object for that
 * locale*.
 *
 * Messages are provided to this module via the configure() function below.
 *
 *
 * @module Internationalization
 * @see {@link https://github.com/openedx/frontend-platform/blob/master/docs/how_tos/i18n.rst}
 * @see {@link https://formatjs.io/docs/react-intl/components/ Intl} for components exported from this module.
 *
 */

/**
 * @name createIntl
 * @kind function
 * @see {@link https://formatjs.io/docs/react-intl/api#createIntl Intl}
 */

/**
 * @name FormattedDate
 * @kind class
 * @see {@link https://formatjs.io/docs/react-intl/components/#formatteddate Intl}
 */

/**
 * @name FormattedTime
 * @kind class
 * @see {@link https://formatjs.io/docs/react-intl/components/#formattedtime Intl}
 */

/**
 * @name FormattedRelativeTime
 * @kind class
 * @see {@link https://formatjs.io/docs/react-intl/components/#formattedrelativetime Intl}
 */

/**
 * @name FormattedNumber
 * @kind class
 * @see {@link https://formatjs.io/docs/react-intl/components/#formattednumber Intl}
 */

/**
 * @name FormattedPlural
 * @kind class
 * @see {@link https://formatjs.io/docs/react-intl/components/#formattedplural Intl}
 */

/**
 * @name FormattedMessage
 * @kind class
 * @see {@link https://formatjs.io/docs/react-intl/components/#formattedmessage Intl}
 */

/**
 * @name IntlProvider
 * @kind class
 * @see {@link https://formatjs.io/docs/react-intl/components/#intlprovider Intl}
 */

/**
 * @name defineMessages
 * @kind function
 * @see {@link https://formatjs.io/docs/react-intl/api#definemessagesdefinemessage Intl}
 */

/**
 * @name useIntl
 * @kind function
 * @see {@link https://formatjs.io/docs/react-intl/api#useIntl Intl}
 */

export {
  createIntl,
  FormattedDate,
  FormattedTime,
  FormattedRelativeTime,
  FormattedNumber,
  FormattedPlural,
  FormattedMessage,
  defineMessages,
  IntlProvider,
  useIntl,
} from 'react-intl';

export {
  intlShape,
  configure,
  getPrimaryLanguageSubtag,
  getLocale,
  getMessages,
  isRtl,
  handleRtl,
  mergeMessages,
  LOCALE_CHANGED,
  LOCALE_TOPIC,
} from './lib';

export {
  default as injectIntl,
} from './injectIntlWithShim';

export {
  getCountryList,
  getCountryMessages,
} from './countries';

export {
  getLanguageList,
  getLanguageMessages,
} from './languages';