UNPKG

react-i18nify

Version:

Simple i18n translation and localization components and helpers for React.

54 lines (52 loc) 2.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _dayjs = _interopRequireDefault(require("dayjs")); var _customParseFormat = _interopRequireDefault(require("dayjs/plugin/customParseFormat")); var _advancedFormat = _interopRequireDefault(require("dayjs/plugin/advancedFormat")); var _localizedFormat = _interopRequireDefault(require("dayjs/plugin/localizedFormat")); var _relativeTime = _interopRequireDefault(require("dayjs/plugin/relativeTime")); var _settings = require("./settings"); var _translate = _interopRequireDefault(require("./translate")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } _dayjs.default.extend(_customParseFormat.default); _dayjs.default.extend(_advancedFormat.default); _dayjs.default.extend(_localizedFormat.default); _dayjs.default.extend(_relativeTime.default); var _default = (value, options = {}) => { const locale = options.locale || (0, _settings.getLocale)(); if (options.dateFormat) { try { let dayJsLocale = locale.toLowerCase(); if (dayJsLocale === 'no') dayJsLocale = 'nb'; // Bokmål as default Norwegian const parsedDate = (options.parseFormat ? (0, _dayjs.default)(value, (0, _translate.default)(options.parseFormat, {}, { locale, returnKeyOnError: true }), dayJsLocale) : (0, _dayjs.default)(value)).locale(dayJsLocale); if (!dayJsLocale.startsWith(parsedDate.locale())) throw new Error('Invalid locale'); if (!parsedDate.isValid()) throw new Error('Invalid date'); if (options.dateFormat === 'distance-to-now') { return parsedDate.fromNow(); } return parsedDate.format((0, _translate.default)(options.dateFormat, {}, { locale, returnKeyOnError: true })); } catch (err) { return (0, _settings.handleFailedLocalization)(value, options, err); } } if (typeof value === 'number') { try { let intlLocale = locale; if (intlLocale.toLowerCase() === 'ar') intlLocale = 'ar-EG'; // work-around for Chrome return new Intl.NumberFormat(intlLocale, options).format(value); } catch (err) { return (0, _settings.handleFailedLocalization)(value, options, err); } } return value; }; exports.default = _default;