@digitaldefiance/i18n-lib 1.3.11 → 1.3.13

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 (148) hide show
  1. package/README.md +8 -0
  2. package/package.json +12 -27
  3. package/src/active-context.ts +30 -0
  4. package/src/component-definition.ts +11 -0
  5. package/src/component-registration.ts +13 -0
  6. package/src/component-registry.ts +392 -0
  7. package/src/context-error-type.ts +3 -0
  8. package/src/context-error.ts +16 -0
  9. package/src/context-manager.ts +71 -0
  10. package/src/context.ts +90 -0
  11. package/src/core-i18n.ts +609 -0
  12. package/src/core-string-key.ts +49 -0
  13. package/src/create-translation-adapter.ts +47 -0
  14. package/src/currency-code.ts +35 -0
  15. package/{dist/currency-format.d.ts → src/currency-format.ts} +5 -4
  16. package/src/currency.ts +52 -0
  17. package/src/default-config.ts +199 -0
  18. package/src/enum-registry.ts +138 -0
  19. package/src/global-active-context.ts +255 -0
  20. package/src/handleable.ts +79 -0
  21. package/src/i-global-active-context.ts +59 -0
  22. package/src/i-handleable-error-options.ts +6 -0
  23. package/src/i-handleable.ts +5 -0
  24. package/src/i18n-config.ts +29 -0
  25. package/{dist/i18n-context.d.ts → src/i18n-context.ts} +7 -6
  26. package/src/i18n-engine.ts +491 -0
  27. package/{dist/index.d.ts → src/index.ts} +10 -1
  28. package/{dist/language-codes.d.ts → src/language-codes.ts} +23 -11
  29. package/src/language-definition.ts +13 -0
  30. package/src/language-registry.ts +292 -0
  31. package/src/plugin-i18n-engine.ts +520 -0
  32. package/src/plugin-translatable-generic-error.ts +106 -0
  33. package/src/plugin-translatable-handleable-generic.ts +60 -0
  34. package/src/plugin-typed-handleable.ts +77 -0
  35. package/src/registry-config.ts +15 -0
  36. package/src/registry-error-type.ts +12 -0
  37. package/src/registry-error.ts +74 -0
  38. package/src/strict-types.ts +35 -0
  39. package/src/template.ts +63 -0
  40. package/src/timezone.ts +20 -0
  41. package/src/translatable.ts +15 -0
  42. package/src/translation-engine.ts +8 -0
  43. package/src/translation-request.ts +12 -0
  44. package/src/translation-response.ts +8 -0
  45. package/src/typed-error.ts +384 -0
  46. package/src/typed-handleable.ts +70 -0
  47. package/{dist/types.d.ts → src/types.ts} +75 -20
  48. package/src/unified-translator.ts +96 -0
  49. package/src/utils.ts +213 -0
  50. package/src/validation-config.ts +11 -0
  51. package/src/validation-result.ts +12 -0
  52. package/dist/active-context.d.ts +0 -29
  53. package/dist/active-context.js +0 -2
  54. package/dist/component-definition.d.ts +0 -11
  55. package/dist/component-definition.js +0 -2
  56. package/dist/component-registration.d.ts +0 -9
  57. package/dist/component-registration.js +0 -2
  58. package/dist/component-registry.d.ts +0 -68
  59. package/dist/component-registry.js +0 -245
  60. package/dist/context-error-type.d.ts +0 -3
  61. package/dist/context-error-type.js +0 -7
  62. package/dist/context-error.d.ts +0 -6
  63. package/dist/context-error.js +0 -15
  64. package/dist/context-manager.d.ts +0 -33
  65. package/dist/context-manager.js +0 -61
  66. package/dist/context.d.ts +0 -44
  67. package/dist/context.js +0 -69
  68. package/dist/core-i18n.d.ts +0 -62
  69. package/dist/core-i18n.js +0 -477
  70. package/dist/core-string-key.d.ts +0 -42
  71. package/dist/core-string-key.js +0 -50
  72. package/dist/create-translation-adapter.d.ts +0 -20
  73. package/dist/create-translation-adapter.js +0 -36
  74. package/dist/currency-code.d.ts +0 -19
  75. package/dist/currency-code.js +0 -36
  76. package/dist/currency-format.js +0 -2
  77. package/dist/currency.d.ts +0 -11
  78. package/dist/currency.js +0 -48
  79. package/dist/default-config.d.ts +0 -32
  80. package/dist/default-config.js +0 -101
  81. package/dist/enum-registry.d.ts +0 -44
  82. package/dist/enum-registry.js +0 -100
  83. package/dist/global-active-context.d.ts +0 -50
  84. package/dist/global-active-context.js +0 -177
  85. package/dist/handleable.d.ts +0 -13
  86. package/dist/handleable.js +0 -56
  87. package/dist/i-global-active-context.d.ts +0 -22
  88. package/dist/i-global-active-context.js +0 -2
  89. package/dist/i-handleable-error-options.d.ts +0 -6
  90. package/dist/i-handleable-error-options.js +0 -2
  91. package/dist/i-handleable.d.ts +0 -5
  92. package/dist/i-handleable.js +0 -2
  93. package/dist/i18n-config.d.ts +0 -20
  94. package/dist/i18n-config.js +0 -2
  95. package/dist/i18n-context.js +0 -2
  96. package/dist/i18n-engine.d.ts +0 -178
  97. package/dist/i18n-engine.js +0 -338
  98. package/dist/index.js +0 -83
  99. package/dist/language-codes.js +0 -31
  100. package/dist/language-definition.d.ts +0 -13
  101. package/dist/language-definition.js +0 -2
  102. package/dist/language-registry.d.ts +0 -113
  103. package/dist/language-registry.js +0 -216
  104. package/dist/plugin-i18n-engine.d.ts +0 -146
  105. package/dist/plugin-i18n-engine.js +0 -360
  106. package/dist/plugin-translatable-generic-error.d.ts +0 -29
  107. package/dist/plugin-translatable-generic-error.js +0 -66
  108. package/dist/plugin-translatable-handleable-generic.d.ts +0 -28
  109. package/dist/plugin-translatable-handleable-generic.js +0 -40
  110. package/dist/plugin-typed-handleable.d.ts +0 -14
  111. package/dist/plugin-typed-handleable.js +0 -45
  112. package/dist/registry-config.d.ts +0 -14
  113. package/dist/registry-config.js +0 -2
  114. package/dist/registry-error-type.d.ts +0 -12
  115. package/dist/registry-error-type.js +0 -16
  116. package/dist/registry-error.d.ts +0 -18
  117. package/dist/registry-error.js +0 -45
  118. package/dist/strict-types.d.ts +0 -18
  119. package/dist/strict-types.js +0 -17
  120. package/dist/template.d.ts +0 -12
  121. package/dist/template.js +0 -30
  122. package/dist/timezone.d.ts +0 -11
  123. package/dist/timezone.js +0 -22
  124. package/dist/translatable-generic-error.d.ts +0 -29
  125. package/dist/translatable-generic-error.js +0 -66
  126. package/dist/translatable-handleable-generic.d.ts +0 -28
  127. package/dist/translatable-handleable-generic.js +0 -40
  128. package/dist/translatable.d.ts +0 -5
  129. package/dist/translatable.js +0 -11
  130. package/dist/translation-engine.d.ts +0 -8
  131. package/dist/translation-engine.js +0 -2
  132. package/dist/translation-request.d.ts +0 -9
  133. package/dist/translation-request.js +0 -2
  134. package/dist/translation-response.d.ts +0 -8
  135. package/dist/translation-response.js +0 -2
  136. package/dist/typed-error.d.ts +0 -72
  137. package/dist/typed-error.js +0 -251
  138. package/dist/typed-handleable.d.ts +0 -14
  139. package/dist/typed-handleable.js +0 -40
  140. package/dist/types.js +0 -18
  141. package/dist/unified-translator.d.ts +0 -30
  142. package/dist/unified-translator.js +0 -68
  143. package/dist/utils.d.ts +0 -64
  144. package/dist/utils.js +0 -130
  145. package/dist/validation-config.d.ts +0 -11
  146. package/dist/validation-config.js +0 -2
  147. package/dist/validation-result.d.ts +0 -12
  148. package/dist/validation-result.js +0 -2
package/dist/index.js DELETED
@@ -1,83 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.PluginI18n = exports.I18n = exports.createCoreI18n = void 0;
18
- exports.resetAllI18nEngines = resetAllI18nEngines;
19
- // Legacy exports (for backwards compatibility)
20
- __exportStar(require("./active-context"), exports);
21
- __exportStar(require("./component-definition"), exports);
22
- __exportStar(require("./component-registration"), exports);
23
- __exportStar(require("./component-registry"), exports);
24
- __exportStar(require("./context"), exports);
25
- __exportStar(require("./context-error"), exports);
26
- __exportStar(require("./context-error-type"), exports);
27
- __exportStar(require("./context-manager"), exports);
28
- __exportStar(require("./currency"), exports);
29
- __exportStar(require("./currency-code"), exports);
30
- __exportStar(require("./currency-format"), exports);
31
- __exportStar(require("./default-config"), exports);
32
- __exportStar(require("./enum-registry"), exports);
33
- __exportStar(require("./global-active-context"), exports);
34
- __exportStar(require("./handleable"), exports);
35
- __exportStar(require("./i-handleable"), exports);
36
- __exportStar(require("./i-handleable-error-options"), exports);
37
- __exportStar(require("./i-global-active-context"), exports);
38
- __exportStar(require("./i18n-config"), exports);
39
- __exportStar(require("./i18n-context"), exports);
40
- __exportStar(require("./i18n-engine"), exports);
41
- __exportStar(require("./language-definition"), exports);
42
- __exportStar(require("./template"), exports);
43
- __exportStar(require("./timezone"), exports);
44
- __exportStar(require("./plugin-translatable-generic-error"), exports);
45
- __exportStar(require("./typed-error"), exports);
46
- __exportStar(require("./typed-handleable"), exports);
47
- __exportStar(require("./types"), exports);
48
- __exportStar(require("./utils"), exports);
49
- __exportStar(require("./validation-config"), exports);
50
- __exportStar(require("./validation-result"), exports);
51
- __exportStar(require("./core-i18n"), exports);
52
- __exportStar(require("./core-string-key"), exports);
53
- __exportStar(require("./language-codes"), exports);
54
- __exportStar(require("./language-registry"), exports);
55
- __exportStar(require("./plugin-i18n-engine"), exports);
56
- __exportStar(require("./plugin-translatable-generic-error"), exports);
57
- __exportStar(require("./plugin-translatable-handleable-generic"), exports);
58
- __exportStar(require("./plugin-typed-handleable"), exports);
59
- __exportStar(require("./registry-config"), exports);
60
- __exportStar(require("./registry-error"), exports);
61
- __exportStar(require("./registry-error-type"), exports);
62
- __exportStar(require("./translation-engine"), exports);
63
- __exportStar(require("./translation-request"), exports);
64
- __exportStar(require("./translation-response"), exports);
65
- __exportStar(require("./translatable"), exports);
66
- __exportStar(require("./create-translation-adapter"), exports);
67
- __exportStar(require("./unified-translator"), exports);
68
- // Re-export for convenience
69
- var core_i18n_1 = require("./core-i18n");
70
- Object.defineProperty(exports, "createCoreI18n", { enumerable: true, get: function () { return core_i18n_1.createCoreI18nEngine; } });
71
- var i18n_engine_1 = require("./i18n-engine");
72
- Object.defineProperty(exports, "I18n", { enumerable: true, get: function () { return i18n_engine_1.I18nEngine; } });
73
- var plugin_i18n_engine_1 = require("./plugin-i18n-engine");
74
- Object.defineProperty(exports, "PluginI18n", { enumerable: true, get: function () { return plugin_i18n_engine_1.PluginI18nEngine; } });
75
- // Testing utilities
76
- const plugin_i18n_engine_2 = require("./plugin-i18n-engine");
77
- /**
78
- * Reset all I18n engines and clear component registrations
79
- * Useful for test cleanup
80
- */
81
- function resetAllI18nEngines() {
82
- plugin_i18n_engine_2.PluginI18nEngine.resetAll();
83
- }
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LanguageDisplayNames = exports.LanguageCodes = void 0;
4
- /**
5
- * Common language codes following BCP 47 standard.
6
- * These are provided as constants for convenience, but any string can be used as a language code.
7
- * Site builders can use these or define their own custom language codes.
8
- */
9
- exports.LanguageCodes = {
10
- EN_US: 'en-US',
11
- EN_GB: 'en-GB',
12
- FR: 'fr',
13
- ES: 'es',
14
- DE: 'de',
15
- ZH_CN: 'zh-CN',
16
- JA: 'ja',
17
- UK: 'uk',
18
- };
19
- /**
20
- * Helper to get display names for common language codes
21
- */
22
- exports.LanguageDisplayNames = {
23
- [exports.LanguageCodes.EN_US]: 'English (US)',
24
- [exports.LanguageCodes.EN_GB]: 'English (UK)',
25
- [exports.LanguageCodes.FR]: 'Français',
26
- [exports.LanguageCodes.ES]: 'Español',
27
- [exports.LanguageCodes.DE]: 'Deutsch',
28
- [exports.LanguageCodes.ZH_CN]: '中文',
29
- [exports.LanguageCodes.JA]: '日本語',
30
- [exports.LanguageCodes.UK]: 'Українська',
31
- };
@@ -1,13 +0,0 @@
1
- /**
2
- * Language definition with its properties
3
- */
4
- export interface LanguageDefinition {
5
- /** Unique identifier for the language */
6
- readonly id: string;
7
- /** Display name in the native language */
8
- readonly name: string;
9
- /** ISO language code (e.g., 'en', 'fr', 'zh-CN') */
10
- readonly code: string;
11
- /** Whether this is the fallback/default language */
12
- readonly isDefault?: boolean;
13
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,113 +0,0 @@
1
- /**
2
- * Language registry for managing supported languages and their properties
3
- */
4
- import { LanguageDefinition } from './language-definition';
5
- /**
6
- * Static singleton registry for managing supported languages globally
7
- */
8
- export declare class LanguageRegistry {
9
- private static languages;
10
- private static languagesByCodes;
11
- private static defaultLanguageId;
12
- private constructor();
13
- /**
14
- * Register a new language
15
- */
16
- static registerLanguage(language: LanguageDefinition): void;
17
- /**
18
- * Register multiple languages at once
19
- */
20
- static registerLanguages(languages: readonly LanguageDefinition[]): void;
21
- /**
22
- * Get a language by its ID
23
- */
24
- static getLanguage(languageId: string): LanguageDefinition | undefined;
25
- /**
26
- * Get a language by its code
27
- */
28
- static getLanguageByCode(code: string): LanguageDefinition | undefined;
29
- /**
30
- * Get all registered languages
31
- */
32
- static getAllLanguages(): ReadonlyArray<LanguageDefinition>;
33
- /**
34
- * Get all language IDs
35
- */
36
- static getLanguageIds(): readonly string[];
37
- /**
38
- * Get all language codes
39
- */
40
- static getLanguageCodes(): readonly string[];
41
- /**
42
- * Check if a language is registered
43
- */
44
- static hasLanguage(languageId: string): boolean;
45
- /**
46
- * Check if a language code is registered
47
- */
48
- static hasLanguageCode(code: string): boolean;
49
- /**
50
- * Get the default language
51
- */
52
- static getDefaultLanguage(): LanguageDefinition | null;
53
- /**
54
- * Get the default language ID
55
- */
56
- static getDefaultLanguageId(): string | null;
57
- /**
58
- * Get matching language code with fallback logic:
59
- * 1. Try requested code
60
- * 2. Fall back to user default
61
- * 3. Fall back to site default
62
- */
63
- static getMatchingLanguageCode(requestedCode?: string, userDefaultCode?: string): string;
64
- /**
65
- * Set the default language
66
- */
67
- static setDefaultLanguage(languageId: string): void;
68
- /**
69
- * Get the number of registered languages
70
- */
71
- static getLanguageCount(): number;
72
- /**
73
- * Validate that all required languages are present
74
- */
75
- static validateRequiredLanguages(requiredLanguages: readonly string[]): LanguageValidationResult;
76
- /**
77
- * Create a mapping of language IDs to their display names
78
- */
79
- static getLanguageDisplayNames(): Record<string, string>;
80
- /**
81
- * Create a mapping of language IDs to their codes
82
- */
83
- static getLanguageCodeMapping(): Record<string, string>;
84
- /**
85
- * Find languages by partial name match (case-insensitive)
86
- */
87
- static findLanguagesByName(partialName: string): readonly LanguageDefinition[];
88
- /**
89
- * Clear all registered languages (useful for testing)
90
- */
91
- static clear(): void;
92
- }
93
- /**
94
- * Validation result for language operations
95
- */
96
- export interface LanguageValidationResult {
97
- readonly isValid: boolean;
98
- readonly missingLanguages: readonly string[];
99
- readonly errors: readonly string[];
100
- }
101
- /**
102
- * Helper function to create language definitions with type safety
103
- */
104
- export declare function createLanguageDefinition(id: string, name: string, code: string, isDefault?: boolean): LanguageDefinition;
105
- /**
106
- * Helper function to create multiple language definitions
107
- */
108
- export declare function createLanguageDefinitions(languages: Array<{
109
- id: string;
110
- name: string;
111
- code: string;
112
- isDefault?: boolean;
113
- }>): LanguageDefinition[];
@@ -1,216 +0,0 @@
1
- "use strict";
2
- /**
3
- * Language registry for managing supported languages and their properties
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.LanguageRegistry = void 0;
7
- exports.createLanguageDefinition = createLanguageDefinition;
8
- exports.createLanguageDefinitions = createLanguageDefinitions;
9
- const registry_error_1 = require("./registry-error");
10
- const registry_error_type_1 = require("./registry-error-type");
11
- /**
12
- * Static singleton registry for managing supported languages globally
13
- */
14
- class LanguageRegistry {
15
- constructor() {
16
- // Private constructor - use static methods
17
- }
18
- /**
19
- * Register a new language
20
- */
21
- static registerLanguage(language) {
22
- const languageId = language.id;
23
- // Check for duplicate language ID
24
- if (LanguageRegistry.languages.has(languageId)) {
25
- throw registry_error_1.RegistryError.createSimple(registry_error_type_1.RegistryErrorType.DuplicateLanguage, `Language '${languageId}' is already registered`, { languageId });
26
- }
27
- // Check for duplicate language code
28
- if (LanguageRegistry.languagesByCodes.has(language.code)) {
29
- const existingLanguageId = LanguageRegistry.languagesByCodes.get(language.code);
30
- throw registry_error_1.RegistryError.createSimple(registry_error_type_1.RegistryErrorType.DuplicateLanguage, `Language code '${language.code}' is already used by language '${existingLanguageId}'`, { languageId, code: language.code, existingLanguageId });
31
- }
32
- // Register the language
33
- LanguageRegistry.languages.set(languageId, language);
34
- LanguageRegistry.languagesByCodes.set(language.code, languageId);
35
- // Set as default if specified or if it's the first language
36
- if (language.isDefault || LanguageRegistry.defaultLanguageId === null) {
37
- LanguageRegistry.defaultLanguageId = languageId;
38
- }
39
- }
40
- /**
41
- * Register multiple languages at once
42
- */
43
- static registerLanguages(languages) {
44
- for (const language of languages) {
45
- LanguageRegistry.registerLanguage(language);
46
- }
47
- }
48
- /**
49
- * Get a language by its ID
50
- */
51
- static getLanguage(languageId) {
52
- return LanguageRegistry.languages.get(languageId);
53
- }
54
- /**
55
- * Get a language by its code
56
- */
57
- static getLanguageByCode(code) {
58
- const languageId = LanguageRegistry.languagesByCodes.get(code);
59
- return languageId ? LanguageRegistry.languages.get(languageId) : undefined;
60
- }
61
- /**
62
- * Get all registered languages
63
- */
64
- static getAllLanguages() {
65
- return Array.from(LanguageRegistry.languages.values());
66
- }
67
- /**
68
- * Get all language IDs
69
- */
70
- static getLanguageIds() {
71
- return Array.from(LanguageRegistry.languages.keys());
72
- }
73
- /**
74
- * Get all language codes
75
- */
76
- static getLanguageCodes() {
77
- return Array.from(LanguageRegistry.languagesByCodes.keys());
78
- }
79
- /**
80
- * Check if a language is registered
81
- */
82
- static hasLanguage(languageId) {
83
- return LanguageRegistry.languages.has(languageId);
84
- }
85
- /**
86
- * Check if a language code is registered
87
- */
88
- static hasLanguageCode(code) {
89
- return LanguageRegistry.languagesByCodes.has(code);
90
- }
91
- /**
92
- * Get the default language
93
- */
94
- static getDefaultLanguage() {
95
- return LanguageRegistry.defaultLanguageId
96
- ? LanguageRegistry.languages.get(LanguageRegistry.defaultLanguageId) || null
97
- : null;
98
- }
99
- /**
100
- * Get the default language ID
101
- */
102
- static getDefaultLanguageId() {
103
- return LanguageRegistry.defaultLanguageId;
104
- }
105
- /**
106
- * Get matching language code with fallback logic:
107
- * 1. Try requested code
108
- * 2. Fall back to user default
109
- * 3. Fall back to site default
110
- */
111
- static getMatchingLanguageCode(requestedCode, userDefaultCode) {
112
- // Try requested code first
113
- if (requestedCode && LanguageRegistry.hasLanguageCode(requestedCode)) {
114
- return requestedCode;
115
- }
116
- // Try user default
117
- if (userDefaultCode && LanguageRegistry.hasLanguageCode(userDefaultCode)) {
118
- return userDefaultCode;
119
- }
120
- // Fall back to site default
121
- const defaultLanguage = LanguageRegistry.getDefaultLanguage();
122
- if (!defaultLanguage) {
123
- throw registry_error_1.RegistryError.createSimple(registry_error_type_1.RegistryErrorType.LanguageNotFound, 'No default language configured', {});
124
- }
125
- return defaultLanguage.code;
126
- }
127
- /**
128
- * Set the default language
129
- */
130
- static setDefaultLanguage(languageId) {
131
- if (!LanguageRegistry.languages.has(languageId)) {
132
- throw registry_error_1.RegistryError.createSimple(registry_error_type_1.RegistryErrorType.LanguageNotFound, `Language '${languageId}' not found`, { languageId });
133
- }
134
- LanguageRegistry.defaultLanguageId = languageId;
135
- }
136
- /**
137
- * Get the number of registered languages
138
- */
139
- static getLanguageCount() {
140
- return LanguageRegistry.languages.size;
141
- }
142
- /**
143
- * Validate that all required languages are present
144
- */
145
- static validateRequiredLanguages(requiredLanguages) {
146
- const missingLanguages = [];
147
- const errors = [];
148
- for (const languageId of requiredLanguages) {
149
- if (!LanguageRegistry.languages.has(languageId)) {
150
- missingLanguages.push(languageId);
151
- errors.push(`Required language '${languageId}' is not registered`);
152
- }
153
- }
154
- return {
155
- isValid: missingLanguages.length === 0,
156
- missingLanguages,
157
- errors,
158
- };
159
- }
160
- /**
161
- * Create a mapping of language IDs to their display names
162
- */
163
- static getLanguageDisplayNames() {
164
- const result = {};
165
- for (const [languageId, language] of LanguageRegistry.languages) {
166
- result[languageId] = language.name;
167
- }
168
- return result;
169
- }
170
- /**
171
- * Create a mapping of language IDs to their codes
172
- */
173
- static getLanguageCodeMapping() {
174
- const result = {};
175
- for (const [languageId, language] of LanguageRegistry.languages) {
176
- result[languageId] = language.code;
177
- }
178
- return result;
179
- }
180
- /**
181
- * Find languages by partial name match (case-insensitive)
182
- */
183
- static findLanguagesByName(partialName) {
184
- const searchTerm = partialName.toLowerCase();
185
- return Array.from(LanguageRegistry.languages.values()).filter((language) => language.name.toLowerCase().includes(searchTerm));
186
- }
187
- /**
188
- * Clear all registered languages (useful for testing)
189
- */
190
- static clear() {
191
- LanguageRegistry.languages.clear();
192
- LanguageRegistry.languagesByCodes.clear();
193
- LanguageRegistry.defaultLanguageId = null;
194
- }
195
- }
196
- exports.LanguageRegistry = LanguageRegistry;
197
- LanguageRegistry.languages = new Map();
198
- LanguageRegistry.languagesByCodes = new Map();
199
- LanguageRegistry.defaultLanguageId = null;
200
- /**
201
- * Helper function to create language definitions with type safety
202
- */
203
- function createLanguageDefinition(id, name, code, isDefault) {
204
- return {
205
- id,
206
- name,
207
- code,
208
- isDefault: isDefault || false,
209
- };
210
- }
211
- /**
212
- * Helper function to create multiple language definitions
213
- */
214
- function createLanguageDefinitions(languages) {
215
- return languages.map((lang) => createLanguageDefinition(lang.id, lang.name, lang.code, lang.isDefault));
216
- }
@@ -1,146 +0,0 @@
1
- /**
2
- * Plugin-based internationalization engine with component and language registration
3
- */
4
- import { ComponentDefinition } from './component-definition';
5
- import { ComponentRegistration } from './component-registration';
6
- import { ComponentRegistry } from './component-registry';
7
- import { EnumTranslationRegistry } from './enum-registry';
8
- import { IActiveContext } from './active-context';
9
- import { LanguageDefinition } from './language-definition';
10
- import { RegistryConfig } from './registry-config';
11
- import { TranslationResponse } from './translation-response';
12
- import { EnumLanguageTranslation } from './types';
13
- /**
14
- * Plugin-based I18n Engine with registration capabilities
15
- */
16
- export declare class PluginI18nEngine<TLanguages extends string> {
17
- private readonly componentRegistry;
18
- private readonly enumRegistry;
19
- private readonly config;
20
- private contextKey;
21
- /**
22
- * Default template processor instance
23
- */
24
- readonly t: (str: string, language?: TLanguages, ...otherVars: Record<string, string | number>[]) => string;
25
- /**
26
- * Static instances for semi-singleton pattern
27
- */
28
- private static _instances;
29
- private static _defaultKey;
30
- protected static readonly DefaultInstanceKey = "default";
31
- constructor(initialLanguages: readonly LanguageDefinition[], config?: Partial<RegistryConfig<TLanguages>>);
32
- /**
33
- * Create a new instance with a specific key
34
- */
35
- static createInstance<TLangs extends string>(key: string, initialLanguages: readonly LanguageDefinition[], config?: Partial<RegistryConfig<TLangs>>): PluginI18nEngine<TLangs>;
36
- /**
37
- * Get an existing instance by key
38
- */
39
- static getInstance<TLangs extends string>(key?: string): PluginI18nEngine<TLangs>;
40
- /**
41
- * Register a new language (updates static registry)
42
- */
43
- registerLanguage(language: LanguageDefinition): void;
44
- /**
45
- * Register multiple languages (updates static registry)
46
- */
47
- registerLanguages(languages: readonly LanguageDefinition[]): void;
48
- /**
49
- * Register a component with its translations
50
- */
51
- registerComponent<TStringKeys extends string>(registration: ComponentRegistration<TStringKeys, TLanguages>): import("./validation-result").ValidationResult;
52
- /**
53
- * Update strings for an existing component
54
- */
55
- updateComponentStrings<TStringKeys extends string>(componentId: string, strings: Parameters<ComponentRegistry<TLanguages>['updateComponentStrings']>[1]): import("./validation-result").ValidationResult;
56
- /**
57
- * Register an enum with translations
58
- */
59
- registerEnum<TEnum extends string | number>(enumObj: Record<string, TEnum>, translations: EnumLanguageTranslation<TEnum, TLanguages>, enumName: string): void;
60
- /**
61
- * Translate a string for a component
62
- */
63
- translate<TStringKeys extends string>(componentId: string, stringKey: TStringKeys, variables?: Record<string, string | number>, language?: TLanguages): string;
64
- /**
65
- * Safe translate that returns a placeholder if translation fails
66
- */
67
- safeTranslate(componentId: string, stringKey: string, variables?: Record<string, string | number>, language?: TLanguages): string;
68
- /**
69
- * Translate an enum value
70
- */
71
- translateEnum<TEnum extends string | number>(enumObj: Record<string, TEnum>, value: TEnum, language?: TLanguages): string;
72
- /**
73
- * Get detailed translation response
74
- */
75
- getTranslationDetails<TStringKeys extends string>(componentId: string, stringKey: TStringKeys, variables?: Record<string, string | number>, language?: TLanguages): TranslationResponse;
76
- /**
77
- * Get current context
78
- */
79
- getContext(): IActiveContext<TLanguages>;
80
- /**
81
- * Update context
82
- */
83
- updateContext(updates: Partial<IActiveContext<TLanguages>>): void;
84
- /**
85
- * Get current language from global context
86
- * Respects language context space (admin vs user)
87
- */
88
- private getCurrentLanguage;
89
- /**
90
- * Set current language
91
- */
92
- setLanguage(language: TLanguages): void;
93
- /**
94
- * Get available languages from static registry
95
- */
96
- getLanguages(): readonly LanguageDefinition[];
97
- /**
98
- * Get registered components
99
- */
100
- getComponents(): ReadonlyArray<ComponentDefinition<any>>;
101
- /**
102
- * Check if a component is registered
103
- */
104
- hasComponent(componentId: string): boolean;
105
- /**
106
- * Check if a language is registered in static registry
107
- */
108
- hasLanguage(language: TLanguages): boolean;
109
- /**
110
- * Get language by code from static registry
111
- */
112
- getLanguageByCode(code: string): LanguageDefinition | undefined;
113
- /**
114
- * Get component registry for direct access
115
- */
116
- getComponentRegistry(): ComponentRegistry<TLanguages>;
117
- /**
118
- * Get enum registry for direct access
119
- */
120
- getEnumRegistry(): EnumTranslationRegistry<string, TLanguages>;
121
- /**
122
- * Validate that all components have complete translations
123
- */
124
- validateAllComponents(): {
125
- isValid: boolean;
126
- errors: string[];
127
- warnings: string[];
128
- };
129
- /**
130
- * Clear all component registrations for this instance (useful for testing)
131
- */
132
- clearAllComponents(): void;
133
- /**
134
- * Remove a specific named instance
135
- */
136
- static removeInstance(key?: string): boolean;
137
- /**
138
- * Check if an instance exists
139
- */
140
- static hasInstance(key?: string): boolean;
141
- /**
142
- * Reset all plugin engines and clear component registrations
143
- * Useful for test cleanup
144
- */
145
- static resetAll(): void;
146
- }