UNPKG

@haiilo/ngx-intl

Version:

Standalone Angular pipes using the ECMAScript Internationalization API, which provides language sensitive string comparison, number formatting, and date and time formatting.

59 lines 8.17 kB
import { Inject, InjectionToken, LOCALE_ID, Optional, Pipe } from '@angular/core'; import * as i0 from "@angular/core"; export const INTL_PLURAL_OPTIONS = new InjectionToken('IntlPluralOptions'); export const INTL_PLURAL_PRESET_CARDINAL = { type: 'cardinal' }; export const INTL_PLURAL_PRESET_ORDINAL = { type: 'ordinal' }; /** * A pipe that pluralizes a string using the Intl.PluralRules API. */ export class IntlPluralPipe { constructor(locale, options) { this.locale = locale; this.options = options; } transform(value, options, ...locales) { if (value === null) { return null; } const _locales = this.getLocales(locales); const _options = this.getOptions(options); return new Intl.PluralRules(_locales, _options).select(value); } getLocales(locales) { return [...locales, this.locale]; } getOptions(options) { const presetStr = typeof options === 'string'; const presetKey = !presetStr ? options?.preset || this.options?.defaultPreset || IntlPluralPipe.DEFAULT_OPTIONS.defaultPreset : options; const preset = presetKey ? (this.options?.presets?.[presetKey] || IntlPluralPipe.DEFAULT_OPTIONS.presets?.[presetKey]) : undefined; return { ...preset, ...(!presetStr ? options : undefined) }; } } IntlPluralPipe.DEFAULT_OPTIONS = { presets: { cardinal: INTL_PLURAL_PRESET_CARDINAL, ordinal: INTL_PLURAL_PRESET_ORDINAL } }; IntlPluralPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IntlPluralPipe, deps: [{ token: LOCALE_ID }, { token: INTL_PLURAL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Pipe }); IntlPluralPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: IntlPluralPipe, isStandalone: true, name: "IntlPlural" }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IntlPluralPipe, decorators: [{ type: Pipe, args: [{ name: 'IntlPlural', standalone: true }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID] }] }, { type: undefined, decorators: [{ type: Inject, args: [INTL_PLURAL_OPTIONS] }, { type: Optional }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50bC1wbHVyYWwucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1pbnRsL3NyYy9saWIvaW50bC1wbHVyYWwucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBZ0JqRyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FDOUIsSUFBSSxjQUFjLENBQTBCLG1CQUFtQixDQUFDLENBQUM7QUFFbkUsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQ3RDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ3ZCLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUNyQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUV0Qjs7R0FFRztBQUtILE1BQU0sT0FBTyxjQUFjO0lBUXpCLFlBQ3NDLE1BQWMsRUFDUSxPQUF1QztRQUQ3RCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ1EsWUFBTyxHQUFQLE9BQU8sQ0FBZ0M7SUFDaEcsQ0FBQztJQUVKLFNBQVMsQ0FBQyxLQUFvQixFQUFFLE9BQXlDLEVBQUUsR0FBRyxPQUFpQjtRQUM3RixJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxVQUFVLENBQUMsT0FBaUI7UUFDbEMsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sVUFBVSxDQUFDLE9BQXlDO1FBQzFELE1BQU0sU0FBUyxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQztRQUM5QyxNQUFNLFNBQVMsR0FBRyxDQUFDLFNBQVM7WUFDMUIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLElBQUksY0FBYyxDQUFDLGVBQWUsQ0FBQyxhQUFhO1lBQ2hHLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDWixNQUFNLE1BQU0sR0FBRyxTQUFTO1lBQ3RCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksY0FBYyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3RixDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsT0FBTyxFQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBQyxDQUFDO0lBQzVELENBQUM7O0FBbkN1Qiw4QkFBZSxHQUE0QjtJQUNqRSxPQUFPLEVBQUU7UUFDUCxRQUFRLEVBQUUsMkJBQTJCO1FBQ3JDLE9BQU8sRUFBRSwwQkFBMEI7S0FDcEM7Q0FDRCxDQUFBOzJHQU5TLGNBQWMsa0JBU2YsU0FBUyxhQUNULG1CQUFtQjt5R0FWbEIsY0FBYzsyRkFBZCxjQUFjO2tCQUoxQixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxZQUFZO29CQUNsQixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OzBCQVVJLE1BQU07MkJBQUMsU0FBUzs7MEJBQ2hCLE1BQU07MkJBQUMsbUJBQW1COzswQkFBRyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgTE9DQUxFX0lELCBPcHRpb25hbCwgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKiogQSBwcmVjb25maWd1cmVkIG9wdGlvbiBwcmVzZXQgZm9yIHRoZSBJbnRsUGx1cmFsUGlwZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50bFBsdXJhbE9wdGlvbnMgZXh0ZW5kcyBJbnRsLlBsdXJhbFJ1bGVzT3B0aW9ucyB7fVxuXG4vKiogR2xvYmFsIG9wdGlvbnMgYW5kIHByZXNldHMgZm9yIHRoZSBJbnRsUGx1cmFsUGlwZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50bFBsdXJhbEdsb2JhbE9wdGlvbnMge1xuICBwcmVzZXRzPzogeyBba2V5OiBzdHJpbmddOiBJbnRsUGx1cmFsT3B0aW9ucyB9O1xuICBkZWZhdWx0UHJlc2V0Pzogc3RyaW5nO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgYSB0cmFuc2Zvcm0gY2FsbCBvZiB0aGUgSW50bFBsdXJhbFBpcGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGxQbHVyYWxMb2NhbE9wdGlvbnMgZXh0ZW5kcyBJbnRsUGx1cmFsT3B0aW9ucyB7XG4gIHByZXNldD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IElOVExfUExVUkFMX09QVElPTlMgPVxuICBuZXcgSW5qZWN0aW9uVG9rZW48SW50bFBsdXJhbEdsb2JhbE9wdGlvbnM+KCdJbnRsUGx1cmFsT3B0aW9ucycpO1xuXG5leHBvcnQgY29uc3QgSU5UTF9QTFVSQUxfUFJFU0VUX0NBUkRJTkFMOiBJbnRsUGx1cmFsT3B0aW9ucyA9XG4gIHsgdHlwZTogJ2NhcmRpbmFsJyB9O1xuZXhwb3J0IGNvbnN0IElOVExfUExVUkFMX1BSRVNFVF9PUkRJTkFMOiBJbnRsUGx1cmFsT3B0aW9ucyA9XG4gIHsgdHlwZTogJ29yZGluYWwnIH07XG5cbi8qKlxuICogQSBwaXBlIHRoYXQgcGx1cmFsaXplcyBhIHN0cmluZyB1c2luZyB0aGUgSW50bC5QbHVyYWxSdWxlcyBBUEkuXG4gKi9cbkBQaXBlKHtcbiAgbmFtZTogJ0ludGxQbHVyYWwnLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEludGxQbHVyYWxQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfT1BUSU9OUzogSW50bFBsdXJhbEdsb2JhbE9wdGlvbnMgPSB7XG4gICAgcHJlc2V0czoge1xuICAgICAgY2FyZGluYWw6IElOVExfUExVUkFMX1BSRVNFVF9DQVJESU5BTCxcbiAgICAgIG9yZGluYWw6IElOVExfUExVUkFMX1BSRVNFVF9PUkRJTkFMXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTE9DQUxFX0lEKSBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZTogc3RyaW5nLFxuICAgIEBJbmplY3QoSU5UTF9QTFVSQUxfT1BUSU9OUykgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBJbnRsUGx1cmFsR2xvYmFsT3B0aW9ucyB8IG51bGxcbiAgKSB7fVxuXG4gIHRyYW5zZm9ybSh2YWx1ZTogbnVtYmVyIHwgbnVsbCwgb3B0aW9ucz86IHN0cmluZyB8IEludGxQbHVyYWxMb2NhbE9wdGlvbnMsIC4uLmxvY2FsZXM6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBfbG9jYWxlcyA9IHRoaXMuZ2V0TG9jYWxlcyhsb2NhbGVzKTtcbiAgICBjb25zdCBfb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IEludGwuUGx1cmFsUnVsZXMoX2xvY2FsZXMsIF9vcHRpb25zKS5zZWxlY3QodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhbGVzKGxvY2FsZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4ubG9jYWxlcywgdGhpcy5sb2NhbGVdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcHRpb25zKG9wdGlvbnM/OiBzdHJpbmcgfCBJbnRsUGx1cmFsTG9jYWxPcHRpb25zKTogSW50bFBsdXJhbE9wdGlvbnMge1xuICAgIGNvbnN0IHByZXNldFN0ciA9IHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJztcbiAgICBjb25zdCBwcmVzZXRLZXkgPSAhcHJlc2V0U3RyXG4gICAgICA/IG9wdGlvbnM/LnByZXNldCB8fCB0aGlzLm9wdGlvbnM/LmRlZmF1bHRQcmVzZXQgfHwgSW50bFBsdXJhbFBpcGUuREVGQVVMVF9PUFRJT05TLmRlZmF1bHRQcmVzZXRcbiAgICAgIDogb3B0aW9ucztcbiAgICBjb25zdCBwcmVzZXQgPSBwcmVzZXRLZXlcbiAgICAgID8gKHRoaXMub3B0aW9ucz8ucHJlc2V0cz8uW3ByZXNldEtleV0gfHwgSW50bFBsdXJhbFBpcGUuREVGQVVMVF9PUFRJT05TLnByZXNldHM/LltwcmVzZXRLZXldKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsuLi5wcmVzZXQsIC4uLighcHJlc2V0U3RyID8gb3B0aW9ucyA6IHVuZGVmaW5lZCl9O1xuICB9XG59XG4iXX0=