@digitaldefiance/i18n-lib 2.1.32 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +286 -0
- package/package.json +1 -1
- package/src/core/component-store.d.ts +4 -0
- package/src/core/component-store.d.ts.map +1 -1
- package/src/core/component-store.js +27 -5
- package/src/core/component-store.js.map +1 -1
- package/src/errors/i18n-error.d.ts +6 -0
- package/src/errors/i18n-error.d.ts.map +1 -1
- package/src/errors/i18n-error.js +12 -0
- package/src/errors/i18n-error.js.map +1 -1
- package/src/gender/gender-categories.d.ts +7 -0
- package/src/gender/gender-categories.d.ts.map +1 -0
- package/src/gender/gender-categories.js +10 -0
- package/src/gender/gender-categories.js.map +1 -0
- package/src/gender/gender-resolver.d.ts +9 -0
- package/src/gender/gender-resolver.d.ts.map +1 -0
- package/src/gender/gender-resolver.js +30 -0
- package/src/gender/gender-resolver.js.map +1 -0
- package/src/gender/index.d.ts +3 -0
- package/src/gender/index.d.ts.map +1 -0
- package/src/gender/index.js +6 -0
- package/src/gender/index.js.map +1 -0
- package/src/index.d.ts +4 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +4 -0
- package/src/index.js.map +1 -1
- package/src/interfaces/component-config.interface.d.ts +2 -1
- package/src/interfaces/component-config.interface.d.ts.map +1 -1
- package/src/pluralization/index.d.ts +7 -0
- package/src/pluralization/index.d.ts.map +1 -0
- package/src/pluralization/index.js +10 -0
- package/src/pluralization/index.js.map +1 -0
- package/src/pluralization/language-plural-map.d.ts +29 -0
- package/src/pluralization/language-plural-map.d.ts.map +1 -0
- package/src/pluralization/language-plural-map.js +136 -0
- package/src/pluralization/language-plural-map.js.map +1 -0
- package/src/pluralization/plural-categories.d.ts +22 -0
- package/src/pluralization/plural-categories.d.ts.map +1 -0
- package/src/pluralization/plural-categories.js +8 -0
- package/src/pluralization/plural-categories.js.map +1 -0
- package/src/pluralization/plural-rules.d.ts +102 -0
- package/src/pluralization/plural-rules.d.ts.map +1 -0
- package/src/pluralization/plural-rules.js +263 -0
- package/src/pluralization/plural-rules.js.map +1 -0
- package/src/types/index.d.ts +5 -0
- package/src/types/index.d.ts.map +1 -0
- package/src/types/index.js +8 -0
- package/src/types/index.js.map +1 -0
- package/src/types/plural-types.d.ts +17 -0
- package/src/types/plural-types.d.ts.map +1 -0
- package/src/types/plural-types.js +33 -0
- package/src/types/plural-types.js.map +1 -0
- package/src/utils/index.d.ts +1 -6
- package/src/utils/index.d.ts.map +1 -1
- package/src/utils/index.js +1 -6
- package/src/utils/index.js.map +1 -1
- package/src/utils/plural-helpers.d.ts +10 -0
- package/src/utils/plural-helpers.d.ts.map +1 -0
- package/src/utils/plural-helpers.js +19 -0
- package/src/utils/plural-helpers.js.map +1 -0
- package/src/validation/index.d.ts +2 -0
- package/src/validation/index.d.ts.map +1 -0
- package/src/validation/index.js +5 -0
- package/src/validation/index.js.map +1 -0
- package/src/validation/plural-validator.d.ts +23 -0
- package/src/validation/plural-validator.d.ts.map +1 -0
- package/src/validation/plural-validator.js +105 -0
- package/src/validation/plural-validator.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/pluralization/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pluralization module exports
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const tslib_1 = require("tslib");
|
|
7
|
+
tslib_1.__exportStar(require("./plural-categories"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./plural-rules"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./language-plural-map"), exports);
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/pluralization/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,8DAAoC;AACpC,yDAA+B;AAC/B,gEAAsC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language to Plural Rule Mapping
|
|
3
|
+
*/
|
|
4
|
+
import { LanguagePluralForms, PluralRuleFunction } from './plural-categories';
|
|
5
|
+
/**
|
|
6
|
+
* Map of language codes to plural rule functions
|
|
7
|
+
*/
|
|
8
|
+
export declare const LANGUAGE_PLURAL_RULES: Record<string, PluralRuleFunction>;
|
|
9
|
+
/**
|
|
10
|
+
* Map of language codes to required/optional plural forms
|
|
11
|
+
*/
|
|
12
|
+
export declare const LANGUAGE_PLURAL_FORMS: Record<string, LanguagePluralForms>;
|
|
13
|
+
/**
|
|
14
|
+
* Get plural category for a number in a specific language
|
|
15
|
+
*/
|
|
16
|
+
export declare function getPluralCategory(language: string, count: number): string;
|
|
17
|
+
/**
|
|
18
|
+
* Get required plural forms for a language
|
|
19
|
+
*/
|
|
20
|
+
export declare function getRequiredPluralForms(language: string): string[];
|
|
21
|
+
/**
|
|
22
|
+
* Get all plural forms (required + optional) for a language
|
|
23
|
+
*/
|
|
24
|
+
export declare function getAllPluralForms(language: string): string[];
|
|
25
|
+
/**
|
|
26
|
+
* Check if a language has a specific plural form
|
|
27
|
+
*/
|
|
28
|
+
export declare function hasPluralForm(language: string, category: string): boolean;
|
|
29
|
+
//# sourceMappingURL=language-plural-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-plural-map.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/pluralization/language-plural-map.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAuB9E;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAyCpE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAyCrE,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAWzE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAGjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAG5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGzE"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Language to Plural Rule Mapping
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.LANGUAGE_PLURAL_FORMS = exports.LANGUAGE_PLURAL_RULES = void 0;
|
|
7
|
+
exports.getPluralCategory = getPluralCategory;
|
|
8
|
+
exports.getRequiredPluralForms = getRequiredPluralForms;
|
|
9
|
+
exports.getAllPluralForms = getAllPluralForms;
|
|
10
|
+
exports.hasPluralForm = hasPluralForm;
|
|
11
|
+
const plural_rules_1 = require("./plural-rules");
|
|
12
|
+
/**
|
|
13
|
+
* Map of language codes to plural rule functions
|
|
14
|
+
*/
|
|
15
|
+
exports.LANGUAGE_PLURAL_RULES = {
|
|
16
|
+
'en': plural_rules_1.pluralRuleEnglish,
|
|
17
|
+
'en-US': plural_rules_1.pluralRuleEnglish,
|
|
18
|
+
'en-GB': plural_rules_1.pluralRuleEnglish,
|
|
19
|
+
'ru': plural_rules_1.pluralRuleRussian,
|
|
20
|
+
'ar': plural_rules_1.pluralRuleArabic,
|
|
21
|
+
'pl': plural_rules_1.pluralRulePolish,
|
|
22
|
+
'fr': plural_rules_1.pluralRuleFrench,
|
|
23
|
+
'es': plural_rules_1.pluralRuleSpanish,
|
|
24
|
+
'ja': plural_rules_1.pluralRuleJapanese,
|
|
25
|
+
'uk': plural_rules_1.pluralRuleUkrainian,
|
|
26
|
+
'zh': plural_rules_1.pluralRuleChinese,
|
|
27
|
+
'zh-CN': plural_rules_1.pluralRuleChinese,
|
|
28
|
+
'de': plural_rules_1.pluralRuleGerman,
|
|
29
|
+
'gd': plural_rules_1.pluralRuleScottishGaelic,
|
|
30
|
+
'cy': plural_rules_1.pluralRuleWelsh,
|
|
31
|
+
'br': plural_rules_1.pluralRuleBreton,
|
|
32
|
+
'sl': plural_rules_1.pluralRuleSlovenian,
|
|
33
|
+
'cs': plural_rules_1.pluralRuleCzech,
|
|
34
|
+
'lt': plural_rules_1.pluralRuleLithuanian,
|
|
35
|
+
'lv': plural_rules_1.pluralRuleLatvian,
|
|
36
|
+
'ga': plural_rules_1.pluralRuleIrish,
|
|
37
|
+
'ro': plural_rules_1.pluralRuleRomanian,
|
|
38
|
+
// Common languages reusing existing rules
|
|
39
|
+
'it': plural_rules_1.pluralRuleEnglish,
|
|
40
|
+
'pt': plural_rules_1.pluralRuleEnglish,
|
|
41
|
+
'pt-BR': plural_rules_1.pluralRuleFrench, // Brazilian Portuguese: 0 and 1 use 'one'
|
|
42
|
+
'nl': plural_rules_1.pluralRuleEnglish,
|
|
43
|
+
'sv': plural_rules_1.pluralRuleEnglish,
|
|
44
|
+
'no': plural_rules_1.pluralRuleEnglish,
|
|
45
|
+
'da': plural_rules_1.pluralRuleEnglish,
|
|
46
|
+
'fi': plural_rules_1.pluralRuleEnglish,
|
|
47
|
+
'el': plural_rules_1.pluralRuleEnglish,
|
|
48
|
+
'tr': plural_rules_1.pluralRuleJapanese,
|
|
49
|
+
'ko': plural_rules_1.pluralRuleJapanese,
|
|
50
|
+
'vi': plural_rules_1.pluralRuleJapanese,
|
|
51
|
+
'th': plural_rules_1.pluralRuleJapanese,
|
|
52
|
+
'id': plural_rules_1.pluralRuleJapanese,
|
|
53
|
+
'ms': plural_rules_1.pluralRuleJapanese,
|
|
54
|
+
'he': plural_rules_1.pluralRuleEnglish, // Simplified - full Hebrew is more complex
|
|
55
|
+
'hi': plural_rules_1.pluralRuleFrench,
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Map of language codes to required/optional plural forms
|
|
59
|
+
*/
|
|
60
|
+
exports.LANGUAGE_PLURAL_FORMS = {
|
|
61
|
+
'en': { required: ['one', 'other'], optional: ['zero'] },
|
|
62
|
+
'en-US': { required: ['one', 'other'], optional: ['zero'] },
|
|
63
|
+
'en-GB': { required: ['one', 'other'], optional: ['zero'] },
|
|
64
|
+
'ru': { required: ['one', 'few', 'many'], optional: ['zero'] },
|
|
65
|
+
'ar': { required: ['zero', 'one', 'two', 'few', 'many', 'other'], optional: [] },
|
|
66
|
+
'pl': { required: ['one', 'few', 'many'], optional: ['zero', 'other'] },
|
|
67
|
+
'fr': { required: ['one', 'other'], optional: ['zero'] },
|
|
68
|
+
'es': { required: ['one', 'other'], optional: ['zero'] },
|
|
69
|
+
'ja': { required: ['other'], optional: [] },
|
|
70
|
+
'uk': { required: ['one', 'few', 'many'], optional: ['zero'] },
|
|
71
|
+
'zh': { required: ['other'], optional: [] },
|
|
72
|
+
'zh-CN': { required: ['other'], optional: [] },
|
|
73
|
+
'de': { required: ['one', 'other'], optional: ['zero'] },
|
|
74
|
+
'gd': { required: ['one', 'two', 'few', 'other'], optional: [] },
|
|
75
|
+
'cy': { required: ['zero', 'one', 'two', 'few', 'many', 'other'], optional: [] },
|
|
76
|
+
'br': { required: ['one', 'two', 'few', 'many', 'other'], optional: [] },
|
|
77
|
+
'sl': { required: ['one', 'two', 'few', 'other'], optional: [] },
|
|
78
|
+
'cs': { required: ['one', 'few', 'many', 'other'], optional: [] },
|
|
79
|
+
'lt': { required: ['one', 'few', 'many', 'other'], optional: [] },
|
|
80
|
+
'lv': { required: ['zero', 'one', 'other'], optional: [] },
|
|
81
|
+
'ga': { required: ['one', 'two', 'few', 'many', 'other'], optional: [] },
|
|
82
|
+
'ro': { required: ['one', 'few', 'other'], optional: [] },
|
|
83
|
+
// Common languages
|
|
84
|
+
'it': { required: ['one', 'other'], optional: ['zero'] },
|
|
85
|
+
'pt': { required: ['one', 'other'], optional: ['zero'] },
|
|
86
|
+
'pt-BR': { required: ['one', 'other'], optional: ['zero'] },
|
|
87
|
+
'nl': { required: ['one', 'other'], optional: ['zero'] },
|
|
88
|
+
'sv': { required: ['one', 'other'], optional: ['zero'] },
|
|
89
|
+
'no': { required: ['one', 'other'], optional: ['zero'] },
|
|
90
|
+
'da': { required: ['one', 'other'], optional: ['zero'] },
|
|
91
|
+
'fi': { required: ['one', 'other'], optional: ['zero'] },
|
|
92
|
+
'el': { required: ['one', 'other'], optional: ['zero'] },
|
|
93
|
+
'tr': { required: ['other'], optional: [] },
|
|
94
|
+
'ko': { required: ['other'], optional: [] },
|
|
95
|
+
'vi': { required: ['other'], optional: [] },
|
|
96
|
+
'th': { required: ['other'], optional: [] },
|
|
97
|
+
'id': { required: ['other'], optional: [] },
|
|
98
|
+
'ms': { required: ['other'], optional: [] },
|
|
99
|
+
'he': { required: ['one', 'other'], optional: ['zero'] },
|
|
100
|
+
'hi': { required: ['one', 'other'], optional: ['zero'] },
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Get plural category for a number in a specific language
|
|
104
|
+
*/
|
|
105
|
+
function getPluralCategory(language, count) {
|
|
106
|
+
// Handle invalid inputs
|
|
107
|
+
if (typeof count !== 'number' || !isFinite(count)) {
|
|
108
|
+
return 'other';
|
|
109
|
+
}
|
|
110
|
+
// Get the plural rule for the language
|
|
111
|
+
const rule = exports.LANGUAGE_PLURAL_RULES[language] || exports.LANGUAGE_PLURAL_RULES['en'];
|
|
112
|
+
// Apply the rule
|
|
113
|
+
return rule(Math.abs(count));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get required plural forms for a language
|
|
117
|
+
*/
|
|
118
|
+
function getRequiredPluralForms(language) {
|
|
119
|
+
const forms = exports.LANGUAGE_PLURAL_FORMS[language] || exports.LANGUAGE_PLURAL_FORMS['en'];
|
|
120
|
+
return forms.required;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get all plural forms (required + optional) for a language
|
|
124
|
+
*/
|
|
125
|
+
function getAllPluralForms(language) {
|
|
126
|
+
const forms = exports.LANGUAGE_PLURAL_FORMS[language] || exports.LANGUAGE_PLURAL_FORMS['en'];
|
|
127
|
+
return [...forms.required, ...forms.optional];
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Check if a language has a specific plural form
|
|
131
|
+
*/
|
|
132
|
+
function hasPluralForm(language, category) {
|
|
133
|
+
const forms = exports.LANGUAGE_PLURAL_FORMS[language] || exports.LANGUAGE_PLURAL_FORMS['en'];
|
|
134
|
+
return forms.required.includes(category) || forms.optional.includes(category);
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=language-plural-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-plural-map.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/pluralization/language-plural-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLDR Plural Categories
|
|
3
|
+
* Based on Unicode CLDR plural rules
|
|
4
|
+
* @see https://cldr.unicode.org/index/cldr-spec/plural-rules
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Standard CLDR plural categories
|
|
8
|
+
*/
|
|
9
|
+
export type PluralCategory = 'zero' | 'one' | 'two' | 'few' | 'many' | 'other';
|
|
10
|
+
/**
|
|
11
|
+
* Plural rule function type
|
|
12
|
+
* Takes a number and returns the appropriate plural category
|
|
13
|
+
*/
|
|
14
|
+
export type PluralRuleFunction = (n: number) => PluralCategory;
|
|
15
|
+
/**
|
|
16
|
+
* Language-specific plural forms required
|
|
17
|
+
*/
|
|
18
|
+
export interface LanguagePluralForms {
|
|
19
|
+
required: PluralCategory[];
|
|
20
|
+
optional: PluralCategory[];
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=plural-categories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plural-categories.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/pluralization/plural-categories.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAE/E;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,cAAc,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLDR Plural Categories
|
|
4
|
+
* Based on Unicode CLDR plural rules
|
|
5
|
+
* @see https://cldr.unicode.org/index/cldr-spec/plural-rules
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
//# sourceMappingURL=plural-categories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plural-categories.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/pluralization/plural-categories.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLDR Plural Rules Implementation
|
|
3
|
+
* Based on Unicode CLDR plural rules for cardinal numbers
|
|
4
|
+
*/
|
|
5
|
+
import { PluralRuleFunction } from './plural-categories';
|
|
6
|
+
/**
|
|
7
|
+
* English plural rule (en-US, en-GB)
|
|
8
|
+
* Forms: one, other
|
|
9
|
+
*/
|
|
10
|
+
export declare const pluralRuleEnglish: PluralRuleFunction;
|
|
11
|
+
/**
|
|
12
|
+
* Russian plural rule (ru)
|
|
13
|
+
* Forms: one, few, many
|
|
14
|
+
*/
|
|
15
|
+
export declare const pluralRuleRussian: PluralRuleFunction;
|
|
16
|
+
/**
|
|
17
|
+
* Arabic plural rule (ar)
|
|
18
|
+
* Forms: zero, one, two, few, many, other
|
|
19
|
+
*/
|
|
20
|
+
export declare const pluralRuleArabic: PluralRuleFunction;
|
|
21
|
+
/**
|
|
22
|
+
* Polish plural rule (pl)
|
|
23
|
+
* Forms: one, few, many, other
|
|
24
|
+
*/
|
|
25
|
+
export declare const pluralRulePolish: PluralRuleFunction;
|
|
26
|
+
/**
|
|
27
|
+
* French plural rule (fr)
|
|
28
|
+
* Forms: one, other
|
|
29
|
+
*/
|
|
30
|
+
export declare const pluralRuleFrench: PluralRuleFunction;
|
|
31
|
+
/**
|
|
32
|
+
* Spanish plural rule (es)
|
|
33
|
+
* Forms: one, other
|
|
34
|
+
*/
|
|
35
|
+
export declare const pluralRuleSpanish: PluralRuleFunction;
|
|
36
|
+
/**
|
|
37
|
+
* Japanese plural rule (ja)
|
|
38
|
+
* Forms: other (no plural distinction)
|
|
39
|
+
*/
|
|
40
|
+
export declare const pluralRuleJapanese: PluralRuleFunction;
|
|
41
|
+
/**
|
|
42
|
+
* Ukrainian plural rule (uk)
|
|
43
|
+
* Forms: one, few, many (same as Russian)
|
|
44
|
+
*/
|
|
45
|
+
export declare const pluralRuleUkrainian: PluralRuleFunction;
|
|
46
|
+
/**
|
|
47
|
+
* Chinese plural rule (zh-CN)
|
|
48
|
+
* Forms: other (no plural distinction)
|
|
49
|
+
*/
|
|
50
|
+
export declare const pluralRuleChinese: PluralRuleFunction;
|
|
51
|
+
/**
|
|
52
|
+
* German plural rule (de)
|
|
53
|
+
* Forms: one, other
|
|
54
|
+
*/
|
|
55
|
+
export declare const pluralRuleGerman: PluralRuleFunction;
|
|
56
|
+
/**
|
|
57
|
+
* Scottish Gaelic plural rule (gd)
|
|
58
|
+
* Forms: one, two, few, other
|
|
59
|
+
* One of the most complex plural systems
|
|
60
|
+
*/
|
|
61
|
+
export declare const pluralRuleScottishGaelic: PluralRuleFunction;
|
|
62
|
+
/**
|
|
63
|
+
* Welsh plural rule (cy)
|
|
64
|
+
* Forms: zero, one, two, few, many, other
|
|
65
|
+
*/
|
|
66
|
+
export declare const pluralRuleWelsh: PluralRuleFunction;
|
|
67
|
+
/**
|
|
68
|
+
* Breton plural rule (br)
|
|
69
|
+
* Forms: one, two, few, many, other
|
|
70
|
+
*/
|
|
71
|
+
export declare const pluralRuleBreton: PluralRuleFunction;
|
|
72
|
+
/**
|
|
73
|
+
* Slovenian plural rule (sl)
|
|
74
|
+
* Forms: one, two, few, other
|
|
75
|
+
*/
|
|
76
|
+
export declare const pluralRuleSlovenian: PluralRuleFunction;
|
|
77
|
+
/**
|
|
78
|
+
* Czech plural rule (cs)
|
|
79
|
+
* Forms: one, few, many, other
|
|
80
|
+
*/
|
|
81
|
+
export declare const pluralRuleCzech: PluralRuleFunction;
|
|
82
|
+
/**
|
|
83
|
+
* Lithuanian plural rule (lt)
|
|
84
|
+
* Forms: one, few, many, other
|
|
85
|
+
*/
|
|
86
|
+
export declare const pluralRuleLithuanian: PluralRuleFunction;
|
|
87
|
+
/**
|
|
88
|
+
* Latvian plural rule (lv)
|
|
89
|
+
* Forms: zero, one, other
|
|
90
|
+
*/
|
|
91
|
+
export declare const pluralRuleLatvian: PluralRuleFunction;
|
|
92
|
+
/**
|
|
93
|
+
* Irish plural rule (ga)
|
|
94
|
+
* Forms: one, two, few, many, other
|
|
95
|
+
*/
|
|
96
|
+
export declare const pluralRuleIrish: PluralRuleFunction;
|
|
97
|
+
/**
|
|
98
|
+
* Romanian plural rule (ro)
|
|
99
|
+
* Forms: one, few, other
|
|
100
|
+
*/
|
|
101
|
+
export declare const pluralRuleRomanian: PluralRuleFunction;
|
|
102
|
+
//# sourceMappingURL=plural-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plural-rules.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/pluralization/plural-rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAkB,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,kBAG/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,kBAO/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,kBAS9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,kBAY9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,kBAG9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,kBAG/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,kBAEhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,kBAAsC,CAAC;AAEzE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,kBAE/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,kBAG9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,kBAKtC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,kBAO7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,kBAY9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,kBAOjC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,kBAK7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,kBAQlC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,kBAO/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,kBAM7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,kBAMhC,CAAA"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLDR Plural Rules Implementation
|
|
4
|
+
* Based on Unicode CLDR plural rules for cardinal numbers
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.pluralRuleRomanian = exports.pluralRuleIrish = exports.pluralRuleLatvian = exports.pluralRuleLithuanian = exports.pluralRuleCzech = exports.pluralRuleSlovenian = exports.pluralRuleBreton = exports.pluralRuleWelsh = exports.pluralRuleScottishGaelic = exports.pluralRuleGerman = exports.pluralRuleChinese = exports.pluralRuleUkrainian = exports.pluralRuleJapanese = exports.pluralRuleSpanish = exports.pluralRuleFrench = exports.pluralRulePolish = exports.pluralRuleArabic = exports.pluralRuleRussian = exports.pluralRuleEnglish = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* English plural rule (en-US, en-GB)
|
|
10
|
+
* Forms: one, other
|
|
11
|
+
*/
|
|
12
|
+
const pluralRuleEnglish = (n) => {
|
|
13
|
+
if (n === 1)
|
|
14
|
+
return 'one';
|
|
15
|
+
return 'other';
|
|
16
|
+
};
|
|
17
|
+
exports.pluralRuleEnglish = pluralRuleEnglish;
|
|
18
|
+
/**
|
|
19
|
+
* Russian plural rule (ru)
|
|
20
|
+
* Forms: one, few, many
|
|
21
|
+
*/
|
|
22
|
+
const pluralRuleRussian = (n) => {
|
|
23
|
+
const mod10 = n % 10;
|
|
24
|
+
const mod100 = n % 100;
|
|
25
|
+
if (mod10 === 1 && mod100 !== 11)
|
|
26
|
+
return 'one';
|
|
27
|
+
if (mod10 >= 2 && mod10 <= 4 && (mod100 < 12 || mod100 > 14))
|
|
28
|
+
return 'few';
|
|
29
|
+
return 'many';
|
|
30
|
+
};
|
|
31
|
+
exports.pluralRuleRussian = pluralRuleRussian;
|
|
32
|
+
/**
|
|
33
|
+
* Arabic plural rule (ar)
|
|
34
|
+
* Forms: zero, one, two, few, many, other
|
|
35
|
+
*/
|
|
36
|
+
const pluralRuleArabic = (n) => {
|
|
37
|
+
if (n === 0)
|
|
38
|
+
return 'zero';
|
|
39
|
+
if (n === 1)
|
|
40
|
+
return 'one';
|
|
41
|
+
if (n === 2)
|
|
42
|
+
return 'two';
|
|
43
|
+
const mod100 = n % 100;
|
|
44
|
+
if (mod100 >= 3 && mod100 <= 10)
|
|
45
|
+
return 'few';
|
|
46
|
+
if (mod100 >= 11)
|
|
47
|
+
return 'many';
|
|
48
|
+
return 'other';
|
|
49
|
+
};
|
|
50
|
+
exports.pluralRuleArabic = pluralRuleArabic;
|
|
51
|
+
/**
|
|
52
|
+
* Polish plural rule (pl)
|
|
53
|
+
* Forms: one, few, many, other
|
|
54
|
+
*/
|
|
55
|
+
const pluralRulePolish = (n) => {
|
|
56
|
+
// Fractional numbers use "other"
|
|
57
|
+
if (n !== Math.floor(n))
|
|
58
|
+
return 'other';
|
|
59
|
+
if (n === 1)
|
|
60
|
+
return 'one';
|
|
61
|
+
const mod10 = n % 10;
|
|
62
|
+
const mod100 = n % 100;
|
|
63
|
+
if (mod10 >= 2 && mod10 <= 4 && (mod100 < 12 || mod100 > 14))
|
|
64
|
+
return 'few';
|
|
65
|
+
if (n !== 1 && (mod10 === 0 || mod10 === 1 || (mod10 >= 5 && mod10 <= 9) || (mod100 >= 12 && mod100 <= 14)))
|
|
66
|
+
return 'many';
|
|
67
|
+
return 'other';
|
|
68
|
+
};
|
|
69
|
+
exports.pluralRulePolish = pluralRulePolish;
|
|
70
|
+
/**
|
|
71
|
+
* French plural rule (fr)
|
|
72
|
+
* Forms: one, other
|
|
73
|
+
*/
|
|
74
|
+
const pluralRuleFrench = (n) => {
|
|
75
|
+
if (n === 0 || n === 1)
|
|
76
|
+
return 'one';
|
|
77
|
+
return 'other';
|
|
78
|
+
};
|
|
79
|
+
exports.pluralRuleFrench = pluralRuleFrench;
|
|
80
|
+
/**
|
|
81
|
+
* Spanish plural rule (es)
|
|
82
|
+
* Forms: one, other
|
|
83
|
+
*/
|
|
84
|
+
const pluralRuleSpanish = (n) => {
|
|
85
|
+
if (n === 1)
|
|
86
|
+
return 'one';
|
|
87
|
+
return 'other';
|
|
88
|
+
};
|
|
89
|
+
exports.pluralRuleSpanish = pluralRuleSpanish;
|
|
90
|
+
/**
|
|
91
|
+
* Japanese plural rule (ja)
|
|
92
|
+
* Forms: other (no plural distinction)
|
|
93
|
+
*/
|
|
94
|
+
const pluralRuleJapanese = (n) => {
|
|
95
|
+
return 'other';
|
|
96
|
+
};
|
|
97
|
+
exports.pluralRuleJapanese = pluralRuleJapanese;
|
|
98
|
+
/**
|
|
99
|
+
* Ukrainian plural rule (uk)
|
|
100
|
+
* Forms: one, few, many (same as Russian)
|
|
101
|
+
*/
|
|
102
|
+
exports.pluralRuleUkrainian = exports.pluralRuleRussian;
|
|
103
|
+
/**
|
|
104
|
+
* Chinese plural rule (zh-CN)
|
|
105
|
+
* Forms: other (no plural distinction)
|
|
106
|
+
*/
|
|
107
|
+
const pluralRuleChinese = (n) => {
|
|
108
|
+
return 'other';
|
|
109
|
+
};
|
|
110
|
+
exports.pluralRuleChinese = pluralRuleChinese;
|
|
111
|
+
/**
|
|
112
|
+
* German plural rule (de)
|
|
113
|
+
* Forms: one, other
|
|
114
|
+
*/
|
|
115
|
+
const pluralRuleGerman = (n) => {
|
|
116
|
+
if (n === 1)
|
|
117
|
+
return 'one';
|
|
118
|
+
return 'other';
|
|
119
|
+
};
|
|
120
|
+
exports.pluralRuleGerman = pluralRuleGerman;
|
|
121
|
+
/**
|
|
122
|
+
* Scottish Gaelic plural rule (gd)
|
|
123
|
+
* Forms: one, two, few, other
|
|
124
|
+
* One of the most complex plural systems
|
|
125
|
+
*/
|
|
126
|
+
const pluralRuleScottishGaelic = (n) => {
|
|
127
|
+
if (n === 1 || n === 11)
|
|
128
|
+
return 'one';
|
|
129
|
+
if (n === 2 || n === 12)
|
|
130
|
+
return 'two';
|
|
131
|
+
if ((n >= 3 && n <= 10) || (n >= 13 && n <= 19))
|
|
132
|
+
return 'few';
|
|
133
|
+
return 'other';
|
|
134
|
+
};
|
|
135
|
+
exports.pluralRuleScottishGaelic = pluralRuleScottishGaelic;
|
|
136
|
+
/**
|
|
137
|
+
* Welsh plural rule (cy)
|
|
138
|
+
* Forms: zero, one, two, few, many, other
|
|
139
|
+
*/
|
|
140
|
+
const pluralRuleWelsh = (n) => {
|
|
141
|
+
if (n === 0)
|
|
142
|
+
return 'zero';
|
|
143
|
+
if (n === 1)
|
|
144
|
+
return 'one';
|
|
145
|
+
if (n === 2)
|
|
146
|
+
return 'two';
|
|
147
|
+
if (n === 3)
|
|
148
|
+
return 'few';
|
|
149
|
+
if (n === 6)
|
|
150
|
+
return 'many';
|
|
151
|
+
return 'other';
|
|
152
|
+
};
|
|
153
|
+
exports.pluralRuleWelsh = pluralRuleWelsh;
|
|
154
|
+
/**
|
|
155
|
+
* Breton plural rule (br)
|
|
156
|
+
* Forms: one, two, few, many, other
|
|
157
|
+
*/
|
|
158
|
+
const pluralRuleBreton = (n) => {
|
|
159
|
+
const mod10 = n % 10;
|
|
160
|
+
const mod100 = n % 100;
|
|
161
|
+
if (mod10 === 1 && mod100 !== 11 && mod100 !== 71 && mod100 !== 91)
|
|
162
|
+
return 'one';
|
|
163
|
+
if (mod10 === 2 && mod100 !== 12 && mod100 !== 72 && mod100 !== 92)
|
|
164
|
+
return 'two';
|
|
165
|
+
if ((mod10 === 3 || mod10 === 4 || mod10 === 9) &&
|
|
166
|
+
(mod100 < 10 || mod100 > 19) &&
|
|
167
|
+
(mod100 < 70 || mod100 > 79) &&
|
|
168
|
+
(mod100 < 90 || mod100 > 99))
|
|
169
|
+
return 'few';
|
|
170
|
+
if (n !== 0 && n % 1000000 === 0)
|
|
171
|
+
return 'many';
|
|
172
|
+
return 'other';
|
|
173
|
+
};
|
|
174
|
+
exports.pluralRuleBreton = pluralRuleBreton;
|
|
175
|
+
/**
|
|
176
|
+
* Slovenian plural rule (sl)
|
|
177
|
+
* Forms: one, two, few, other
|
|
178
|
+
*/
|
|
179
|
+
const pluralRuleSlovenian = (n) => {
|
|
180
|
+
const mod100 = n % 100;
|
|
181
|
+
if (mod100 === 1)
|
|
182
|
+
return 'one';
|
|
183
|
+
if (mod100 === 2)
|
|
184
|
+
return 'two';
|
|
185
|
+
if (mod100 === 3 || mod100 === 4)
|
|
186
|
+
return 'few';
|
|
187
|
+
return 'other';
|
|
188
|
+
};
|
|
189
|
+
exports.pluralRuleSlovenian = pluralRuleSlovenian;
|
|
190
|
+
/**
|
|
191
|
+
* Czech plural rule (cs)
|
|
192
|
+
* Forms: one, few, many, other
|
|
193
|
+
*/
|
|
194
|
+
const pluralRuleCzech = (n) => {
|
|
195
|
+
if (n === 1)
|
|
196
|
+
return 'one';
|
|
197
|
+
if (n >= 2 && n <= 4)
|
|
198
|
+
return 'few';
|
|
199
|
+
if (n !== Math.floor(n))
|
|
200
|
+
return 'many';
|
|
201
|
+
return 'other';
|
|
202
|
+
};
|
|
203
|
+
exports.pluralRuleCzech = pluralRuleCzech;
|
|
204
|
+
/**
|
|
205
|
+
* Lithuanian plural rule (lt)
|
|
206
|
+
* Forms: one, few, many, other
|
|
207
|
+
*/
|
|
208
|
+
const pluralRuleLithuanian = (n) => {
|
|
209
|
+
const mod10 = n % 10;
|
|
210
|
+
const mod100 = n % 100;
|
|
211
|
+
if (mod10 === 1 && (mod100 < 11 || mod100 > 19))
|
|
212
|
+
return 'one';
|
|
213
|
+
if (mod10 >= 2 && mod10 <= 9 && (mod100 < 11 || mod100 > 19))
|
|
214
|
+
return 'few';
|
|
215
|
+
if (n !== Math.floor(n))
|
|
216
|
+
return 'many';
|
|
217
|
+
return 'other';
|
|
218
|
+
};
|
|
219
|
+
exports.pluralRuleLithuanian = pluralRuleLithuanian;
|
|
220
|
+
/**
|
|
221
|
+
* Latvian plural rule (lv)
|
|
222
|
+
* Forms: zero, one, other
|
|
223
|
+
*/
|
|
224
|
+
const pluralRuleLatvian = (n) => {
|
|
225
|
+
const mod10 = n % 10;
|
|
226
|
+
const mod100 = n % 100;
|
|
227
|
+
if (n === 0)
|
|
228
|
+
return 'zero';
|
|
229
|
+
if (mod10 === 1 && mod100 !== 11)
|
|
230
|
+
return 'one';
|
|
231
|
+
return 'other';
|
|
232
|
+
};
|
|
233
|
+
exports.pluralRuleLatvian = pluralRuleLatvian;
|
|
234
|
+
/**
|
|
235
|
+
* Irish plural rule (ga)
|
|
236
|
+
* Forms: one, two, few, many, other
|
|
237
|
+
*/
|
|
238
|
+
const pluralRuleIrish = (n) => {
|
|
239
|
+
if (n === 1)
|
|
240
|
+
return 'one';
|
|
241
|
+
if (n === 2)
|
|
242
|
+
return 'two';
|
|
243
|
+
if (n >= 3 && n <= 6)
|
|
244
|
+
return 'few';
|
|
245
|
+
if (n >= 7 && n <= 10)
|
|
246
|
+
return 'many';
|
|
247
|
+
return 'other';
|
|
248
|
+
};
|
|
249
|
+
exports.pluralRuleIrish = pluralRuleIrish;
|
|
250
|
+
/**
|
|
251
|
+
* Romanian plural rule (ro)
|
|
252
|
+
* Forms: one, few, other
|
|
253
|
+
*/
|
|
254
|
+
const pluralRuleRomanian = (n) => {
|
|
255
|
+
const mod100 = n % 100;
|
|
256
|
+
if (n === 1)
|
|
257
|
+
return 'one';
|
|
258
|
+
if (n === 0 || (mod100 >= 1 && mod100 <= 19))
|
|
259
|
+
return 'few';
|
|
260
|
+
return 'other';
|
|
261
|
+
};
|
|
262
|
+
exports.pluralRuleRomanian = pluralRuleRomanian;
|
|
263
|
+
//# sourceMappingURL=plural-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plural-rules.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/pluralization/plural-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/types/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,yDAA+B"}
|