UNPKG

angular-l10n

Version:

An Angular library to translate messages, dates and numbers

270 lines 8.61 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { IntlAPI } from '../services/intl-api'; import { NumberFormatStyle, ISO8601_DATE_REGEX, FORMAT_ALIASES, NUMBER_FORMAT_REGEXP } from './types'; import { Logger } from './logger'; var IntlFormatter = /** @class */ (function () { function IntlFormatter() { } /** * @param {?} value * @param {?} defaultLocale * @param {?} style * @param {?=} digits * @param {?=} currency * @param {?=} currencyDisplay * @return {?} */ IntlFormatter.formatNumber = /** * @param {?} value * @param {?} defaultLocale * @param {?} style * @param {?=} digits * @param {?=} currency * @param {?=} currencyDisplay * @return {?} */ function (value, defaultLocale, style, digits, currency, currencyDisplay) { if (!IntlAPI.hasNumberFormat()) return currency ? value + " " + currency : value; value = typeof value === "string" && !isNaN(+value - parseFloat(value)) ? +value : value; return IntlFormatter.numberFormatter(value, defaultLocale, style, digits, currency, currencyDisplay); }; /** * @param {?} value * @param {?} defaultLocale * @param {?} format * @param {?=} timezone * @return {?} */ IntlFormatter.formatDate = /** * @param {?} value * @param {?} defaultLocale * @param {?} format * @param {?=} timezone * @return {?} */ function (value, defaultLocale, format, timezone) { if (!IntlAPI.hasDateTimeFormat()) return value; /** @type {?} */ var date; if (typeof value === "string") { value = value.trim(); } if (IntlFormatter.isDate(value)) { date = value; } else if (!isNaN(value - parseFloat(value))) { date = new Date(parseFloat(value)); } else if (typeof value === "string" && /^(\d{4}-\d{1,2}-\d{1,2})$/.test(value)) { var _a = value.split('-').map(function (val) { return parseInt(val, 10); }), y = _a[0], m = _a[1], d = _a[2]; date = new Date(y, m - 1, d); } else { date = new Date(value); } if (!IntlFormatter.isDate(date)) { /** @type {?} */ var match = void 0; if ((typeof value === "string") && (match = value.match(ISO8601_DATE_REGEX))) { date = IntlFormatter.isoStringToDate(match); } } return IntlFormatter.dateTimeFormatter(date, defaultLocale, format, timezone); }; /** * @param {?} value * @param {?} unit * @param {?} defaultLocale * @param {?=} format * @return {?} */ IntlFormatter.formatRelativeTime = /** * @param {?} value * @param {?} unit * @param {?} defaultLocale * @param {?=} format * @return {?} */ function (value, unit, defaultLocale, format) { if (!IntlAPI.hasRelativeTimeFormat()) return value + " " + unit; value = typeof value === "string" && !isNaN(+value - parseFloat(value)) ? +value : value; return IntlFormatter.relativeTimeFormatter(value, unit, defaultLocale, format); }; /** * @param {?} num * @param {?} defaultLocale * @param {?} style * @param {?=} digits * @param {?=} currency * @param {?=} currencyDisplay * @return {?} */ IntlFormatter.numberFormatter = /** * @param {?} num * @param {?} defaultLocale * @param {?} style * @param {?=} digits * @param {?=} currency * @param {?=} currencyDisplay * @return {?} */ function (num, defaultLocale, style, digits, currency, currencyDisplay) { /** @type {?} */ var options = {}; if (digits) { if (typeof digits === "string") { /** @type {?} */ var digitsOptions = formatDigitsAliases(digits); if (digitsOptions != null) { options = digitsOptions; } else { Logger.log('IntlFormatter', 'invalidNumberFormatAlias'); } } else { options = digits; } } options.style = NumberFormatStyle[style].toLowerCase(); if (style == NumberFormatStyle.Currency) { options.currency = currency; options.currencyDisplay = currencyDisplay; } return new Intl.NumberFormat(defaultLocale, options).format(num); }; /** * @param {?} date * @param {?} defaultLocale * @param {?} format * @param {?=} timezone * @return {?} */ IntlFormatter.dateTimeFormatter = /** * @param {?} date * @param {?} defaultLocale * @param {?} format * @param {?=} timezone * @return {?} */ function (date, defaultLocale, format, timezone) { /** @type {?} */ var options = {}; if (format) { if (typeof format === "string") { /** @type {?} */ var dateTimeOptions = FORMAT_ALIASES[format]; if (dateTimeOptions) { options = dateTimeOptions; } else { Logger.log('IntlFormatter', 'invalidDateFormatAlias'); } } else { options = format; } } options.timeZone = IntlAPI.hasTimezone() ? timezone : 'UTC'; return new Intl.DateTimeFormat(defaultLocale, options).format(date).replace(/[\u200e\u200f]/g, ""); }; /** * @param {?} value * @param {?} unit * @param {?} defaultLocale * @param {?=} format * @return {?} */ IntlFormatter.relativeTimeFormatter = /** * @param {?} value * @param {?} unit * @param {?} defaultLocale * @param {?=} format * @return {?} */ function (value, unit, defaultLocale, format) { /** @type {?} */ var options = {}; if (format) { options = format; } return new Intl.RelativeTimeFormat(defaultLocale, options).format(value, unit); }; /** * @param {?} value * @return {?} */ IntlFormatter.isDate = /** * @param {?} value * @return {?} */ function (value) { return value instanceof Date && !isNaN(value.valueOf()); }; /** * @param {?} match * @return {?} */ IntlFormatter.isoStringToDate = /** * @param {?} match * @return {?} */ function (match) { /** @type {?} */ var date = new Date(0); /** @type {?} */ var tzHour = 0; /** @type {?} */ var tzMin = 0; /** @type {?} */ var dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear; /** @type {?} */ var timeSetter = match[8] ? date.setUTCHours : date.setHours; if (match[9]) { tzHour = +(match[9] + match[10]); tzMin = +(match[9] + match[11]); } dateSetter.call(date, +(match[1]), +(match[2]) - 1, +(match[3])); /** @type {?} */ var h = +(match[4] || '0') - tzHour; /** @type {?} */ var m = +(match[5] || '0') - tzMin; /** @type {?} */ var s = +(match[6] || '0'); /** @type {?} */ var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000); timeSetter.call(date, h, m, s, ms); return date; }; return IntlFormatter; }()); export { IntlFormatter }; /** * @param {?} digits * @return {?} */ export function formatDigitsAliases(digits) { /** @type {?} */ var parts = digits.match(NUMBER_FORMAT_REGEXP); if (parts == null) return null; /** @type {?} */ var digitsOptions = {}; if (parts[1] != null) { digitsOptions.minimumIntegerDigits = parseInt(parts[1]); } if (parts[3] != null) { digitsOptions.minimumFractionDigits = parseInt(parts[3]); } if (parts[5] != null) { digitsOptions.maximumFractionDigits = parseInt(parts[5]); } return digitsOptions; } //# sourceMappingURL=intl-formatter.js.map