ngs-plural
Version:
Angular library for handling pluralization in different languages.
244 lines (232 loc) • 9.78 kB
JavaScript
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