UNPKG

@commercetools-frontend/i18n

Version:
463 lines (443 loc) • 19.7 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _pt = require('prop-types'); var react = require('react'); var sentry = require('@commercetools-frontend/sentry'); var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray'); var _Promise = require('@babel/runtime-corejs3/core-js-stable/promise'); var _includesInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/includes'); var _reduceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/reduce'); var _Object$entries = require('@babel/runtime-corejs3/core-js-stable/object/entries'); var _Object$assign = require('@babel/runtime-corejs3/core-js-stable/object/assign'); var _startsWithInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/starts-with'); var jsxRuntime = require('@emotion/react/jsx-runtime'); var reactIntl = require('react-intl'); function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; } function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n["default"] = e; return Object.freeze(n); } var _pt__default = /*#__PURE__*/_interopDefault(_pt); var _Promise__default = /*#__PURE__*/_interopDefault(_Promise); var _includesInstanceProperty__default = /*#__PURE__*/_interopDefault(_includesInstanceProperty); var _reduceInstanceProperty__default = /*#__PURE__*/_interopDefault(_reduceInstanceProperty); var _Object$entries__default = /*#__PURE__*/_interopDefault(_Object$entries); var _Object$assign__default = /*#__PURE__*/_interopDefault(_Object$assign); var _startsWithInstanceProperty__default = /*#__PURE__*/_interopDefault(_startsWithInstanceProperty); // NOTE: This string will be replaced on build time with the package version. var version = "24.2.1"; // @ts-nocheck /* THIS IS A GENERATED FILE */ async function loadMomentLocales(locale) { const lowercaseLocale = locale.toLowerCase(); switch (lowercaseLocale) { case 'de': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/de')); }); break; case 'de-at': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/de-at')); }); break; case 'de-be': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/de')); }); break; case 'de-ch': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/de-ch')); }); break; case 'de-de': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/de')); }); break; case 'de-li': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/de')); }); break; case 'de-lu': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/de')); }); break; case 'en-au': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/en-au')); }); break; case 'en-ca': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/en-ca')); }); break; case 'en-gb': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/en-gb')); }); break; case 'en-ie': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/en-ie')); }); break; case 'en-in': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/en-in')); }); break; case 'en-nz': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/en-nz')); }); break; case 'en-sg': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/en-sg')); }); break; case 'es': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-ar': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-bo': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-cl': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-co': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-cr': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-cu': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-do': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es-do')); }); break; case 'es-ea': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-ec': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-es': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-gq': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-gt': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-hn': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-ic': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-mx': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es-mx')); }); break; case 'es-ni': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-pa': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-pe': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-pr': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-py': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-sv': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-uy': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'es-ve': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/es')); }); break; case 'fr-fr': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/fr')); }); break; case 'pt-br': await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('moment/dist/locale/pt-br')); }); break; } } const extractLanguageTagFromLocale = locale => _includesInstanceProperty__default["default"](locale).call(locale, '-') ? locale.split('-')[0] : locale; const isStructuredJson = message => message?.string !== undefined; const parseChunkImport = chunkImport => { var _context; // Prefer loading `default` (for ESM bundles) and // fall back to normal import (for CJS bundles). const contents = chunkImport.default || chunkImport; return _reduceInstanceProperty__default["default"](_context = _Object$entries__default["default"](contents)).call(_context, (messages, _ref) => { let _ref2 = _slicedToArray(_ref, 2), messageKey = _ref2[0], messageValue = _ref2[1]; const messageAsString = isStructuredJson(messageValue) ? messageValue.string : messageValue; messages[messageKey] = messageAsString; return messages; }, {}); }; const mergeMessages = function () { for (var _len = arguments.length, messages = new Array(_len), _key = 0; _key < _len; _key++) { messages[_key] = arguments[_key]; } return _Object$assign__default["default"]({}, ...messages); }; const mapLocaleToIntlLocale = locale => { if (_startsWithInstanceProperty__default["default"](locale).call(locale, 'de')) return 'de'; if (_startsWithInstanceProperty__default["default"](locale).call(locale, 'es')) return 'es'; if (_startsWithInstanceProperty__default["default"](locale).call(locale, 'fr')) return 'fr-FR'; if (locale === 'pt-BR') return 'pt-BR'; return 'en'; }; const getUiKitChunkImport = locale => { const intlLocale = mapLocaleToIntlLocale(locale); switch (intlLocale) { case 'de': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(/* webpackChunkName: "i18n-ui-kit-locale-de" */'@commercetools-uikit/i18n/compiled-data/de.json')); }); case 'es': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(/* webpackChunkName: "i18n-ui-kit-locale-es" */'@commercetools-uikit/i18n/compiled-data/es.json')); }); case 'fr-FR': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(/* webpackChunkName: "i18n-ui-kit-locale-fr-FR" */'@commercetools-uikit/i18n/compiled-data/fr-FR.json')); }); case 'pt-BR': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(/* webpackChunkName: "i18n-ui-kit-locale-pt-BR" */'@commercetools-uikit/i18n/compiled-data/pt-BR.json')); }); default: return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(/* webpackChunkName: "i18n-ui-kit-locale-en" */'@commercetools-uikit/i18n/compiled-data/en.json')); }); } }; const getAppKitChunkImport = locale => { const intlLocale = mapLocaleToIntlLocale(locale); switch (intlLocale) { case 'de': return Promise.resolve().then(function () { return require(/* webpackChunkName: "i18n-app-kit-locale-de" */'./de-3a2914d0.cjs.dev.js'); }); case 'es': return Promise.resolve().then(function () { return require(/* webpackChunkName: "i18n-app-kit-locale-es" */'./es-30b341fa.cjs.dev.js'); }); case 'fr-FR': return Promise.resolve().then(function () { return require(/* webpackChunkName: "i18n-app-kit-locale-fr-FR" */'./fr-FR-a92e5ae5.cjs.dev.js'); }); case 'pt-BR': return Promise.resolve().then(function () { return require(/* webpackChunkName: "i18n-app-kit-locale-pt-BR" */'./pt-BR-1d56e80d.cjs.dev.js'); }); default: return Promise.resolve().then(function () { return require(/* webpackChunkName: "i18n-app-kit-locale-en" */'./en-40085af7.cjs.dev.js'); }); } }; const getCommunityKitChunkImport = async locale => { const intlLocale = mapLocaleToIntlLocale(locale); switch (intlLocale) { case 'de': return await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(/* webpackChunkName: "i18n-community-kit-locale-de" */'@commercetools-community-kit/i18n/compiled-data/de.json')); }); case 'es': return await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(/* webpackChunkName: "i18n-community-kit-locale-es" */'@commercetools-community-kit/i18n/compiled-data/es.json')); }); case 'fr-FR': return await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(/* webpackChunkName: "i18n-community-kit-locale-fr-FR" */'@commercetools-community-kit/i18n/compiled-data/fr-FR.json')); }); default: return await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(/* webpackChunkName: "i18n-community-kit-locale-en" */'@commercetools-community-kit/i18n/compiled-data/en.json')); }); } }; // Use default (lazy) so that we will receive one chunk per // locale. https://webpack.js.org/api/module-methods/#import- async function loadI18n(locale) { const _await$Promise$all = await _Promise__default["default"].all([ // Load moment localizations loadMomentLocales(locale), // Load ui-kit translations getUiKitChunkImport(locale), // Load app-kit translations getAppKitChunkImport(locale), // Load community-kit translations getCommunityKitChunkImport(locale)]), _await$Promise$all2 = _slicedToArray(_await$Promise$all, 4), uiKitChunkImport = _await$Promise$all2[1], appKitChunkImport = _await$Promise$all2[2], communityKitChunkImport = _await$Promise$all2[3]; // Prefer loading `default` (for ESM bundles) and // fall back to normal import (for CJS bundles). return mergeMessages(parseChunkImport(uiKitChunkImport), parseChunkImport(appKitChunkImport), parseChunkImport(communityKitChunkImport)); } const initialState = { isLoading: true, messages: undefined, error: undefined }; // Low level hook to load messages for a specific locale. The loading is async // because it's assumed that the translation files are dynamically imported (code splitted). const useAsyncIntlMessages = _ref => { let locale = _ref.locale, loader = _ref.loader; const _useState = react.useState(initialState), _useState2 = _slicedToArray(_useState, 2), state = _useState2[0], setState = _useState2[1]; react.useEffect(() => { let _isUnmounting = false; async function load(_locale) { try { if (!_isUnmounting) { const messages = await loader(_locale); setState({ isLoading: false, messages }); } } catch (error) { if (error instanceof Error) { setState({ isLoading: false, error }); } } } if (locale) load(locale); return () => { _isUnmounting = true; }; }, [locale, loader]); return state; }; const getMessagesForLocale = (data, locale) => { if (!data || !locale) return {}; if (data[locale]) return data[locale]; const fallbackLanguage = extractLanguageTagFromLocale(locale); return data[fallbackLanguage]; }; const useAsyncLocaleData = _ref => { let locale = _ref.locale, applicationMessages = _ref.applicationMessages; const loadApplicationMessages = react.useCallback(async locale => { if (typeof applicationMessages === 'function') { return await applicationMessages(locale); } return getMessagesForLocale(applicationMessages, locale); }, // NOTE: we assume that the `applicationMessages` argument never changes. // Therefore, we disable the dependency array to not depend on that argument. // This is important, to avoid potential infinite loops. // eslint-disable-next-line react-hooks/exhaustive-deps []); const messagesFromKitResult = useAsyncIntlMessages({ locale, loader: loadI18n }); const applicationMessagesResult = useAsyncIntlMessages({ locale, loader: loadApplicationMessages }); // Merge the loaded messages into one return { isLoading: messagesFromKitResult.isLoading || applicationMessagesResult.isLoading, messages: mergeMessages(messagesFromKitResult.messages ?? {}, applicationMessagesResult.messages ?? {}), error: messagesFromKitResult.error ?? applicationMessagesResult.error }; }; const AsyncLocaleData = props => { const _useAsyncLocaleData = useAsyncLocaleData(props), isLoading = _useAsyncLocaleData.isLoading, messages = _useAsyncLocaleData.messages, error = _useAsyncLocaleData.error; react.useEffect(() => { if (error) sentry.reportErrorToSentry(error, {}); }, [error]); return jsxRuntime.jsx(jsxRuntime.Fragment, { children: props.children({ isLoading, locale: isLoading ? undefined : props.locale, messages: error ? undefined : messages }) }); }; AsyncLocaleData.propTypes = { locale: _pt__default["default"].string, applicationMessages: _pt__default["default"].oneOfType([_pt__default["default"].objectOf(_pt__default["default"].any), _pt__default["default"].func]).isRequired, children: _pt__default["default"].func.isRequired }; // TODO: move it to its own package, so that other people can also use it? // Selection of shared messages, to avoid duplicating translations. // Avoid changing the message id, otherwise you need to translate them again in Transifex. const messages = reactIntl.defineMessages({ cancel: { id: 'AppKit.Shared.cancel', defaultMessage: 'Cancel' }, revert: { id: 'AppKit.Shared.revert', defaultMessage: 'Revert' }, confirm: { id: 'AppKit.Shared.confirm', defaultMessage: 'Confirm' }, save: { id: 'AppKit.Shared.save', defaultMessage: 'Save' }, update: { id: 'AppKit.Shared.update', defaultMessage: 'Update' }, create: { id: 'AppKit.Shared.create', defaultMessage: 'Create' }, delete: { id: 'AppKit.Shared.delete', defaultMessage: 'Delete' }, add: { id: 'AppKit.Shared.add', defaultMessage: 'Add' }, remove: { id: 'AppKit.Shared.remove', defaultMessage: 'Remove' }, close: { id: 'AppKit.Shared.close', defaultMessage: 'Close' }, edit: { id: 'AppKit.Shared.edit', defaultMessage: 'Edit' }, open: { id: 'AppKit.Shared.open', defaultMessage: 'Open' }, activate: { id: 'AppKit.Shared.activate', defaultMessage: 'Activate' }, deactivate: { id: 'AppKit.Shared.deactivate', defaultMessage: 'Deactivate' }, active: { id: 'AppKit.Shared.active', defaultMessage: 'Active' }, inactive: { id: 'AppKit.Shared.inactive', defaultMessage: 'Inactive' }, enable: { id: 'AppKit.Shared.enable', defaultMessage: 'Enable' }, disable: { id: 'AppKit.Shared.disable', defaultMessage: 'Disable' } }); exports.AsyncLocaleData = AsyncLocaleData; exports.isStructuredJson = isStructuredJson; exports.mapLocaleToIntlLocale = mapLocaleToIntlLocale; exports.mergeMessages = mergeMessages; exports.parseChunkImport = parseChunkImport; exports.sharedMessages = messages; exports.useAsyncIntlMessages = useAsyncIntlMessages; exports.useAsyncLocaleData = useAsyncLocaleData; exports.version = version;