@digitaldefiance/i18n-lib 2.1.40 → 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.
Files changed (68) hide show
  1. package/README.md +280 -0
  2. package/package.json +1 -1
  3. package/src/core/component-store.d.ts +4 -0
  4. package/src/core/component-store.d.ts.map +1 -1
  5. package/src/core/component-store.js +27 -5
  6. package/src/core/component-store.js.map +1 -1
  7. package/src/errors/i18n-error.d.ts +6 -0
  8. package/src/errors/i18n-error.d.ts.map +1 -1
  9. package/src/errors/i18n-error.js +12 -0
  10. package/src/errors/i18n-error.js.map +1 -1
  11. package/src/gender/gender-categories.d.ts +7 -0
  12. package/src/gender/gender-categories.d.ts.map +1 -0
  13. package/src/gender/gender-categories.js +10 -0
  14. package/src/gender/gender-categories.js.map +1 -0
  15. package/src/gender/gender-resolver.d.ts +9 -0
  16. package/src/gender/gender-resolver.d.ts.map +1 -0
  17. package/src/gender/gender-resolver.js +30 -0
  18. package/src/gender/gender-resolver.js.map +1 -0
  19. package/src/gender/index.d.ts +3 -0
  20. package/src/gender/index.d.ts.map +1 -0
  21. package/src/gender/index.js +6 -0
  22. package/src/gender/index.js.map +1 -0
  23. package/src/index.d.ts +4 -0
  24. package/src/index.d.ts.map +1 -1
  25. package/src/index.js +4 -0
  26. package/src/index.js.map +1 -1
  27. package/src/interfaces/component-config.interface.d.ts +2 -1
  28. package/src/interfaces/component-config.interface.d.ts.map +1 -1
  29. package/src/pluralization/index.d.ts +7 -0
  30. package/src/pluralization/index.d.ts.map +1 -0
  31. package/src/pluralization/index.js +10 -0
  32. package/src/pluralization/index.js.map +1 -0
  33. package/src/pluralization/language-plural-map.d.ts +29 -0
  34. package/src/pluralization/language-plural-map.d.ts.map +1 -0
  35. package/src/pluralization/language-plural-map.js +136 -0
  36. package/src/pluralization/language-plural-map.js.map +1 -0
  37. package/src/pluralization/plural-categories.d.ts +22 -0
  38. package/src/pluralization/plural-categories.d.ts.map +1 -0
  39. package/src/pluralization/plural-categories.js +8 -0
  40. package/src/pluralization/plural-categories.js.map +1 -0
  41. package/src/pluralization/plural-rules.d.ts +102 -0
  42. package/src/pluralization/plural-rules.d.ts.map +1 -0
  43. package/src/pluralization/plural-rules.js +263 -0
  44. package/src/pluralization/plural-rules.js.map +1 -0
  45. package/src/types/index.d.ts +5 -0
  46. package/src/types/index.d.ts.map +1 -0
  47. package/src/types/index.js +8 -0
  48. package/src/types/index.js.map +1 -0
  49. package/src/types/plural-types.d.ts +17 -0
  50. package/src/types/plural-types.d.ts.map +1 -0
  51. package/src/types/plural-types.js +33 -0
  52. package/src/types/plural-types.js.map +1 -0
  53. package/src/utils/index.d.ts +1 -6
  54. package/src/utils/index.d.ts.map +1 -1
  55. package/src/utils/index.js +1 -6
  56. package/src/utils/index.js.map +1 -1
  57. package/src/utils/plural-helpers.d.ts +10 -0
  58. package/src/utils/plural-helpers.d.ts.map +1 -0
  59. package/src/utils/plural-helpers.js +19 -0
  60. package/src/utils/plural-helpers.js.map +1 -0
  61. package/src/validation/index.d.ts +2 -0
  62. package/src/validation/index.d.ts.map +1 -0
  63. package/src/validation/index.js +5 -0
  64. package/src/validation/index.js.map +1 -0
  65. package/src/validation/plural-validator.d.ts +23 -0
  66. package/src/validation/plural-validator.d.ts.map +1 -0
  67. package/src/validation/plural-validator.js +105 -0
  68. package/src/validation/plural-validator.js.map +1 -0
@@ -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":";AAAA;;GAEG;;;AAwHH,8CAWC;AAKD,wDAGC;AAKD,8CAGC;AAKD,sCAGC;AAxJD,iDAoBwB;AAExB;;GAEG;AACU,QAAA,qBAAqB,GAAuC;IACvE,IAAI,EAAE,gCAAiB;IACvB,OAAO,EAAE,gCAAiB;IAC1B,OAAO,EAAE,gCAAiB;IAC1B,IAAI,EAAE,gCAAiB;IACvB,IAAI,EAAE,+BAAgB;IACtB,IAAI,EAAE,+BAAgB;IACtB,IAAI,EAAE,+BAAgB;IACtB,IAAI,EAAE,gCAAiB;IACvB,IAAI,EAAE,iCAAkB;IACxB,IAAI,EAAE,kCAAmB;IACzB,IAAI,EAAE,gCAAiB;IACvB,OAAO,EAAE,gCAAiB;IAC1B,IAAI,EAAE,+BAAgB;IACtB,IAAI,EAAE,uCAAwB;IAC9B,IAAI,EAAE,8BAAe;IACrB,IAAI,EAAE,+BAAgB;IACtB,IAAI,EAAE,kCAAmB;IACzB,IAAI,EAAE,8BAAe;IACrB,IAAI,EAAE,mCAAoB;IAC1B,IAAI,EAAE,gCAAiB;IACvB,IAAI,EAAE,8BAAe;IACrB,IAAI,EAAE,iCAAkB;IACxB,0CAA0C;IAC1C,IAAI,EAAE,gCAAiB;IACvB,IAAI,EAAE,gCAAiB;IACvB,OAAO,EAAE,+BAAgB,EAAE,0CAA0C;IACrE,IAAI,EAAE,gCAAiB;IACvB,IAAI,EAAE,gCAAiB;IACvB,IAAI,EAAE,gCAAiB;IACvB,IAAI,EAAE,gCAAiB;IACvB,IAAI,EAAE,gCAAiB;IACvB,IAAI,EAAE,gCAAiB;IACvB,IAAI,EAAE,iCAAkB;IACxB,IAAI,EAAE,iCAAkB;IACxB,IAAI,EAAE,iCAAkB;IACxB,IAAI,EAAE,iCAAkB;IACxB,IAAI,EAAE,iCAAkB;IACxB,IAAI,EAAE,iCAAkB;IACxB,IAAI,EAAE,gCAAiB,EAAE,2CAA2C;IACpE,IAAI,EAAE,+BAAgB;CACvB,CAAC;AAEF;;GAEG;AACU,QAAA,qBAAqB,GAAwC;IACxE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACxD,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC3D,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC3D,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC9D,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAChF,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IACvE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACxD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACxD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3C,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC9D,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3C,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC9C,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACxD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAChE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAChF,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACxE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAChE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACjE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACjE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC1D,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACxE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACzD,mBAAmB;IACnB,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACxD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACxD,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC3D,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACxD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACxD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACxD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACxD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACxD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACxD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3C,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3C,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3C,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3C,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3C,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3C,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACxD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;CACzD,CAAC;AAEF;;GAEG;AACH,SAAgB,iBAAiB,CAAC,QAAgB,EAAE,KAAa;IAC/D,wBAAwB;IACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,uCAAuC;IACvC,MAAM,IAAI,GAAG,6BAAqB,CAAC,QAAQ,CAAC,IAAI,6BAAqB,CAAC,IAAI,CAAC,CAAC;IAE5E,iBAAiB;IACjB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,QAAgB;IACrD,MAAM,KAAK,GAAG,6BAAqB,CAAC,QAAQ,CAAC,IAAI,6BAAqB,CAAC,IAAI,CAAC,CAAC;IAC7E,OAAO,KAAK,CAAC,QAAQ,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,QAAgB;IAChD,MAAM,KAAK,GAAG,6BAAqB,CAAC,QAAQ,CAAC,IAAI,6BAAqB,CAAC,IAAI,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,QAAgB,EAAE,QAAgB;IAC9D,MAAM,KAAK,GAAG,6BAAqB,CAAC,QAAQ,CAAC,IAAI,6BAAqB,CAAC,IAAI,CAAC,CAAC;IAC7E,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAe,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAe,CAAC,CAAC;AAC9F,CAAC"}
@@ -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,5 @@
1
+ /**
2
+ * Type exports
3
+ */
4
+ export * from './plural-types';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,8 @@
1
+ "use strict";
2
+ /**
3
+ * Type exports
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const tslib_1 = require("tslib");
7
+ tslib_1.__exportStar(require("./plural-types"), exports);
8
+ //# sourceMappingURL=index.js.map
@@ -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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Type definitions for pluralization support
3
+ */
4
+ import { PluralCategory } from '../pluralization/plural-categories';
5
+ /**
6
+ * A string value that can be either a simple string or an object with plural forms
7
+ */
8
+ export type PluralString = string | Partial<Record<PluralCategory, string>>;
9
+ /**
10
+ * Check if a value is a plural string object (not a simple string)
11
+ */
12
+ export declare function isPluralString(value: any): value is Record<PluralCategory, string>;
13
+ /**
14
+ * Get the appropriate plural form from a PluralString
15
+ */
16
+ export declare function resolvePluralString(value: PluralString, category: PluralCategory): string | undefined;
17
+ //# sourceMappingURL=plural-types.d.ts.map