UNPKG

react-i18nify

Version:

Simple i18n translation and localization components and helpers for React.

220 lines (165 loc) 7.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.translate = exports.settings = exports.setTranslationsGetter = exports.setTranslations = exports.setLocaleGetter = exports.setLocale = exports.setHandleMissingTranslation = exports.setHandleFailedLocalization = exports.localize = exports.getTranslations = exports.getLocale = exports.forceComponentsUpdate = exports.addLocales = exports.addLocale = void 0; var _parse = _interopRequireDefault(require("date-fns/parse")); var _format = _interopRequireDefault(require("date-fns/format")); var _formatDistanceToNowStrict = _interopRequireDefault(require("date-fns/formatDistanceToNowStrict")); var _Base = _interopRequireDefault(require("./Base")); var _utils = require("./utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var settings = { availableLocales: {}, localeKey: 'en', translationsObject: {}, getTranslations: null, getLocale: null, handleMissingTranslation: function handleMissingTranslation(text) { return text.split('.').pop(); }, handleFailedLocalization: function handleFailedLocalization() { return null; }, get translations() { return this.getTranslations ? this.getTranslations() : this.translationsObject; }, set translations(translations) { this.translationsObject = translations; }, get locale() { return this.getLocale ? this.getLocale() : this.localeKey; }, set locale(locale) { this.localeKey = locale; }, getLocaleObject: function getLocaleObject(locale) { var l = locale || this.locale; return this.availableLocales[l] || this.availableLocales[l.split('-')[0]]; } }; exports.settings = settings; var getLocale = function getLocale() { return settings.locale; }; exports.getLocale = getLocale; var setLocale = function setLocale(locale) { var rerenderComponents = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; settings.locale = locale; settings.getLocale = null; if (rerenderComponents) { _Base.default.rerenderAll(); } }; exports.setLocale = setLocale; var addLocale = function addLocale(name, locale) { settings.availableLocales[name] = locale; }; exports.addLocale = addLocale; var addLocales = function addLocales(locales) { settings.availableLocales = _objectSpread(_objectSpread({}, settings.availableLocales), locales); }; exports.addLocales = addLocales; var getTranslations = function getTranslations() { return settings.translations; }; exports.getTranslations = getTranslations; var setTranslations = function setTranslations(translations) { var rerenderComponents = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; settings.translations = translations; settings.getTranslations = null; if (rerenderComponents) { _Base.default.rerenderAll(); } }; exports.setTranslations = setTranslations; var setLocaleGetter = function setLocaleGetter(fn) { if (typeof fn !== 'function') { throw new Error('Locale getter must be a function'); } settings.getLocale = fn; }; exports.setLocaleGetter = setLocaleGetter; var setTranslationsGetter = function setTranslationsGetter(fn) { if (typeof fn !== 'function') { throw new Error('Translations getter must be a function'); } settings.getTranslations = fn; }; exports.setTranslationsGetter = setTranslationsGetter; var setHandleMissingTranslation = function setHandleMissingTranslation(fn) { if (typeof fn !== 'function') { throw new Error('Handle missing translation must be a function'); } settings.handleMissingTranslation = fn; }; exports.setHandleMissingTranslation = setHandleMissingTranslation; var setHandleFailedLocalization = function setHandleFailedLocalization(fn) { if (typeof fn !== 'function') { throw new Error('Handle failed localization must be a function'); } settings.handleFailedLocalization = fn; }; exports.setHandleFailedLocalization = setHandleFailedLocalization; var translate = function translate(key) { var replacements = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var locale = options.locale || settings.locale; var translation = ''; try { var translationLocale = settings.translations[locale] ? locale : locale.split('-')[0]; translation = (0, _utils.fetchTranslation)(settings.translations, "".concat(translationLocale, ".").concat(key), replacements.count); } catch (err) { if (options.returnNullOnError) return null; if (options.returnKeyOnError) return key; return settings.handleMissingTranslation(key, replacements, options, err); } return (0, _utils.replace)(translation, replacements); }; exports.translate = translate; var localize = function localize(value) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var locale = options.locale || settings.locale; if (options.dateFormat) { try { var localeObject = settings.getLocaleObject(locale); if (!localeObject) throw new Error("Locale ".concat(locale, " not added")); var parsedDate = options.parseFormat ? (0, _parse.default)(value, translate(options.parseFormat, {}, { locale: locale, returnKeyOnError: true }), new Date(), { locale: localeObject }) : new Date(value); if (options.dateFormat === 'distance-to-now') { return (0, _formatDistanceToNowStrict.default)(parsedDate, { addSuffix: true, locale: localeObject }); } return (0, _format.default)(parsedDate, translate(options.dateFormat, {}, { locale: locale, returnKeyOnError: true }), { locale: localeObject }); } catch (err) { return settings.handleFailedLocalization(value, options, err); } } if (typeof value === 'number') { try { return new Intl.NumberFormat(locale, options).format(value); } catch (err) { return settings.handleFailedLocalization(value, options, err); } } return value; }; exports.localize = localize; var forceComponentsUpdate = function forceComponentsUpdate() { _Base.default.rerenderAll(); }; exports.forceComponentsUpdate = forceComponentsUpdate;