react-i18nify
Version:
Simple i18n translation and localization components and helpers for React.
54 lines (52 loc) • 2.31 kB
JavaScript
;
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;