UNPKG

ngs-plural

Version:

Angular library for handling pluralization in different languages.

244 lines (232 loc) 9.78 kB
import * as i0 from '@angular/core'; import { Injectable, Pipe, Optional } from '@angular/core'; import * as i2 from '@ngx-translate/core'; var LanguageISO6391Enum; (function (LanguageISO6391Enum) { LanguageISO6391Enum["Russian"] = "ru"; LanguageISO6391Enum["English"] = "en"; LanguageISO6391Enum["Spanish"] = "es"; LanguageISO6391Enum["French"] = "fr"; LanguageISO6391Enum["Italian"] = "it"; LanguageISO6391Enum["German"] = "de"; LanguageISO6391Enum["Portuguese"] = "pt"; LanguageISO6391Enum["Dutch"] = "nl"; LanguageISO6391Enum["Swedish"] = "sv"; LanguageISO6391Enum["Norwegian"] = "no"; LanguageISO6391Enum["Danish"] = "da"; LanguageISO6391Enum["Romanian"] = "ro"; LanguageISO6391Enum["Catalan"] = "ca"; LanguageISO6391Enum["Hungarian"] = "hu"; LanguageISO6391Enum["Finnish"] = "fi"; LanguageISO6391Enum["Turkish"] = "tr"; LanguageISO6391Enum["Ukrainian"] = "uk"; LanguageISO6391Enum["Belarusian"] = "be"; LanguageISO6391Enum["Serbian"] = "sr"; LanguageISO6391Enum["Croatian"] = "hr"; LanguageISO6391Enum["Bulgarian"] = "bg"; LanguageISO6391Enum["Czech"] = "cs"; LanguageISO6391Enum["Slovak"] = "sk"; LanguageISO6391Enum["Slovene"] = "sl"; LanguageISO6391Enum["Macedonian"] = "mk"; })(LanguageISO6391Enum || (LanguageISO6391Enum = {})); class RuleSlavicService { applyRule(count, forms) { if (count % 10 === 1 && count % 100 !== 11) { return forms[0]; } else if (count % 10 >= 2 && count % 10 <= 4 && (count % 100 < 10 || count % 100 >= 20)) { return forms[1]; } else { return forms[2]; } } } class RuleDefaultService { applyRule(count, forms) { return count === 1 ? forms[0] : forms[1]; } } // SLAVIC class LangRuRuleService extends RuleSlavicService { } // DEFAULT class LangEnRuleService extends RuleDefaultService { } class LangItRuleService extends RuleDefaultService { } class LangEsRuleService extends RuleDefaultService { } class LangDeRuleService extends RuleDefaultService { } class LangFrRuleService extends RuleDefaultService { } class LangPtRuleService extends RuleDefaultService { } class LangNlRuleService extends RuleDefaultService { } class LangSvRuleService extends RuleDefaultService { } class LangNoRuleService extends RuleDefaultService { } class LangDaRuleService extends RuleDefaultService { } class LangRoRuleService extends RuleDefaultService { } class LangCaRuleService extends RuleDefaultService { } class LangHuRuleService extends RuleDefaultService { } class LangFiRuleService extends RuleDefaultService { } class LangTrRuleService extends RuleDefaultService { } class LangUkRuleService extends RuleSlavicService { } class LangBeRuleService extends RuleSlavicService { } class LangSrRuleService extends RuleSlavicService { } class LangHrRuleService extends RuleSlavicService { } class LangBgRuleService extends RuleSlavicService { } class LangCsRuleService extends RuleSlavicService { } class LangSkRuleService extends RuleSlavicService { } class LangSlRuleService extends RuleSlavicService { } class LangMkRuleService extends RuleSlavicService { } const LANG_RULES_MAP = { [LanguageISO6391Enum.Russian]: new LangRuRuleService(), [LanguageISO6391Enum.English]: new LangEnRuleService(), [LanguageISO6391Enum.Spanish]: new LangEsRuleService(), [LanguageISO6391Enum.French]: new LangFrRuleService(), [LanguageISO6391Enum.German]: new LangDeRuleService(), [LanguageISO6391Enum.Italian]: new LangItRuleService(), [LanguageISO6391Enum.Portuguese]: new LangPtRuleService(), [LanguageISO6391Enum.Dutch]: new LangNlRuleService(), [LanguageISO6391Enum.Swedish]: new LangSvRuleService(), [LanguageISO6391Enum.Norwegian]: new LangNoRuleService(), [LanguageISO6391Enum.Danish]: new LangDaRuleService(), [LanguageISO6391Enum.Romanian]: new LangRoRuleService(), [LanguageISO6391Enum.Catalan]: new LangCaRuleService(), [LanguageISO6391Enum.Hungarian]: new LangHuRuleService(), [LanguageISO6391Enum.Finnish]: new LangFiRuleService(), [LanguageISO6391Enum.Turkish]: new LangTrRuleService(), [LanguageISO6391Enum.Ukrainian]: new LangUkRuleService(), [LanguageISO6391Enum.Belarusian]: new LangBeRuleService(), [LanguageISO6391Enum.Serbian]: new LangSrRuleService(), [LanguageISO6391Enum.Croatian]: new LangHrRuleService(), [LanguageISO6391Enum.Bulgarian]: new LangBgRuleService(), [LanguageISO6391Enum.Czech]: new LangCsRuleService(), [LanguageISO6391Enum.Slovak]: new LangSkRuleService(), [LanguageISO6391Enum.Slovene]: new LangSlRuleService(), [LanguageISO6391Enum.Macedonian]: new LangMkRuleService(), }; class PluralizationService { getPluralFormLocal(count, pluralOptions, needReturnCount = true) { if (!pluralOptions.forms) return ''; if (!pluralOptions.lang) pluralOptions.lang = LanguageISO6391Enum.English; const ruleService = LANG_RULES_MAP[pluralOptions.lang] || LANG_RULES_MAP[LanguageISO6391Enum.English]; let form; if (Array.isArray(pluralOptions.forms)) { if (!pluralOptions.forms.length) return ''; form = ruleService.applyRule(Math.abs(count), Array.isArray(pluralOptions.forms) ? pluralOptions.forms : pluralOptions.forms[pluralOptions.lang]); } else { if (!pluralOptions.forms[pluralOptions.lang]) return ''; form = ruleService.applyRule(Math.abs(count), pluralOptions.forms[pluralOptions.lang]); } return needReturnCount ? `${count} ${form}` : `${form}`; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PluralizationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PluralizationService, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PluralizationService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }] }); class PluralPipe { pluralizationService; constructor(pluralizationService) { this.pluralizationService = pluralizationService; } transform(count, pluralOptions, needReturnCount = true) { return this.pluralizationService.getPluralFormLocal(count, pluralOptions, needReturnCount); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PluralPipe, deps: [{ token: PluralizationService }], target: i0.ɵɵFactoryTarget.Pipe }); static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.0.5", ngImport: i0, type: PluralPipe, isStandalone: true, name: "plural", pure: false }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PluralPipe, decorators: [{ type: Pipe, args: [{ name: 'plural', standalone: true, pure: false, }] }], ctorParameters: () => [{ type: PluralizationService }] }); class TranslatePluralPipe { pluralizationService; translateService; constructor(pluralizationService, translateService) { this.pluralizationService = pluralizationService; this.translateService = translateService; if (!this.translateService) console.error('Error in TranslatePluralPipe: TranslateService is not provided, some features may not work as expected.'); } transform(count, instant, needReturnCount = true) { if (!this.translateService) return count.toString(); const actualLang = (this.translateService.currentLang || this.translateService.getDefaultLang()); const translationsForLang = this.translateService.store.translations[actualLang]; if (!translationsForLang) return instant; const forms = this.getNestedValue(translationsForLang, instant); if (!forms) return instant; return this.pluralizationService.getPluralFormLocal(count, { lang: actualLang, forms: forms, }, needReturnCount); } getNestedValue(obj, path) { return path.split('.').reduce((acc, key) => { return acc?.[key]; }, obj); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TranslatePluralPipe, deps: [{ token: PluralizationService }, { token: i2.TranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Pipe }); static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.0.5", ngImport: i0, type: TranslatePluralPipe, isStandalone: true, name: "translatePlural", pure: false }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TranslatePluralPipe, decorators: [{ type: Pipe, args: [{ name: 'translatePlural', standalone: true, pure: false, }] }], ctorParameters: () => [{ type: PluralizationService }, { type: i2.TranslateService, decorators: [{ type: Optional }] }] }); /* * Public API Surface of ngs-plural */ /** * Generated bundle index. Do not edit. */ export { LanguageISO6391Enum, PluralPipe, PluralizationService, TranslatePluralPipe }; //# sourceMappingURL=ngs-plural.mjs.map