@formatjs/intl
Version:
Internationalize JS apps. This library provides an API to format dates, numbers, and strings, including pluralization and handling translations.
30 lines (29 loc) • 1.4 kB
JavaScript
import { getNamedFormat, filterProps } from './utils';
import { FormatError, ErrorCode } from 'intl-messageformat';
import { IntlFormatError } from './error';
var RELATIVE_TIME_FORMAT_OPTIONS = ['numeric', 'style'];
function getFormatter(_a, getRelativeTimeFormat, options) {
var locale = _a.locale, formats = _a.formats, onError = _a.onError;
if (options === void 0) { options = {}; }
var format = options.format;
var defaults = (!!format && getNamedFormat(formats, 'relative', format, onError)) || {};
var filteredOptions = filterProps(options, RELATIVE_TIME_FORMAT_OPTIONS, defaults);
return getRelativeTimeFormat(locale, filteredOptions);
}
export function formatRelativeTime(config, getRelativeTimeFormat, value, unit, options) {
if (options === void 0) { options = {}; }
if (!unit) {
unit = 'second';
}
var RelativeTimeFormat = Intl.RelativeTimeFormat;
if (!RelativeTimeFormat) {
config.onError(new FormatError("Intl.RelativeTimeFormat is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-relativetimeformat\"\n", ErrorCode.MISSING_INTL_API));
}
try {
return getFormatter(config, getRelativeTimeFormat, options).format(value, unit);
}
catch (e) {
config.onError(new IntlFormatError('Error formatting relative time.', config.locale, e));
}
return String(value);
}