@digitaldefiance/i18n-lib 1.3.14 → 1.3.17

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 CHANGED
@@ -24,19 +24,19 @@ A comprehensive, production-ready TypeScript internationalization (i18n) library
24
24
  - **Configuration Validation**: Automatic validation ensures all languages have complete string collections
25
25
  - **Localized Error Messages**: Error messages translated using the engine's own translation system
26
26
  - **Enum Translation Registry**: Translate enum values with complete type safety and automatic validation
27
- - **Advanced Template Processing**:
28
- - Component-based patterns: `{{componentId.stringKey}}`
27
+ - **Advanced Template Processing**:
28
+ - Component-based patterns: `{{componentId.stringKey}}` (supports component IDs, registered aliases, or enum-name prefixes such as `{{SuiteCoreStringKey.User_Login}}`)
29
29
  - Legacy enum patterns: `{{EnumName.EnumKey}}`
30
30
  - Variable replacement: `{variableName}`
31
31
  - Nested template support with multiple variable objects
32
- - **Context Management**:
32
+ - **Context Management**:
33
33
  - Admin vs user translation contexts
34
34
  - Automatic language switching based on context
35
35
  - Per-instance context isolation
36
36
  - Global context with named instance support
37
37
  - **Currency Formatting**: Built-in currency formatting utilities with locale-aware symbol positioning
38
38
  - **Timezone Support**: Validated timezone handling with moment-timezone integration
39
- - **Intelligent Fallback System**:
39
+ - **Intelligent Fallback System**:
40
40
  - Graceful degradation when translations are missing
41
41
  - Fallback to default language with tracking
42
42
  - Placeholder generation for missing keys: `[componentId.stringKey]`
@@ -45,17 +45,17 @@ A comprehensive, production-ready TypeScript internationalization (i18n) library
45
45
 
46
46
  ### Plugin System Features
47
47
 
48
- - **Component Registry**:
48
+ - **Component Registry**:
49
49
  - Manage translation components with automatic validation
50
50
  - Component isolation with independent string key namespaces
51
51
  - Dynamic component registration and updates
52
52
  - Comprehensive validation reporting
53
- - **Language Registry**:
53
+ - **Language Registry**:
54
54
  - Dynamic language registration with metadata (name, code, default flag)
55
55
  - BCP 47 language code support
56
56
  - Language lookup by ID or ISO code
57
57
  - Display name mapping for UI rendering
58
- - **Type-Safe Registration**:
58
+ - **Type-Safe Registration**:
59
59
  - Compile-time guarantees for translation completeness
60
60
  - Strict type helpers for enforcing complete translations
61
61
  - Partial registration support with fallback generation
@@ -72,24 +72,24 @@ A comprehensive, production-ready TypeScript internationalization (i18n) library
72
72
 
73
73
  ### Advanced Features
74
74
 
75
- - **Translatable Errors**:
75
+ - **Translatable Errors**:
76
76
  - Generic translatable error class for any component
77
77
  - Automatic translation with fallback support
78
78
  - Error retranslation for dynamic language switching
79
79
  - Metadata attachment for debugging
80
- - **Translation Adapters**:
80
+ - **Translation Adapters**:
81
81
  - Generic adapter creation for PluginI18nEngine
82
82
  - Seamless integration with error classes
83
83
  - Zero-overhead delegation pattern
84
- - **Context Change Monitoring**:
84
+ - **Context Change Monitoring**:
85
85
  - Reactive context proxies with change listeners
86
86
  - Property-level change notifications
87
87
  - Error-safe listener execution
88
- - **Strict Type Enforcement**:
88
+ - **Strict Type Enforcement**:
89
89
  - Compile-time completeness checking
90
90
  - Helper functions for strict translation maps
91
91
  - Type utilities for extracting string keys and languages
92
- - **Testing Utilities**:
92
+ - **Testing Utilities**:
93
93
  - Instance cleanup methods
94
94
  - Component registry reset
95
95
  - Global engine reset for test isolation
@@ -125,58 +125,71 @@ yarn add @digitaldefiance/i18n-lib
125
125
  ## Quick Start
126
126
 
127
127
  ```typescript
128
- import { I18nEngine, I18nConfig, createContext, CurrencyCode, Timezone } from '@digitaldefiance/i18n-lib';
128
+ import {
129
+ PluginI18nEngine,
130
+ ComponentDefinition,
131
+ ComponentRegistration,
132
+ LanguageDefinition,
133
+ CurrencyCode,
134
+ Timezone,
135
+ } from '@digitaldefiance/i18n-lib';
129
136
 
130
- // Define your string keys
131
- enum MyStrings {
137
+ enum MyStringKey {
132
138
  Welcome = 'welcome',
133
- UserGreetingTemplate = 'userGreetingTemplate'
139
+ UserGreetingTemplate = 'userGreetingTemplate',
134
140
  }
135
141
 
136
- // Define your language codes (or use string literals)
137
142
  type MyLanguages = 'en-US' | 'es';
138
143
 
139
- // Configure the engine
140
- const config: I18nConfig<MyStrings, MyLanguages> = {
141
- stringNames: Object.values(MyStrings),
144
+ const languages: ReadonlyArray<LanguageDefinition> = [
145
+ { id: 'en-US', name: 'English (US)', code: 'en-US', isDefault: true },
146
+ { id: 'es', name: 'Español', code: 'es' },
147
+ ];
148
+
149
+ const engine = new PluginI18nEngine<MyLanguages>(languages, {
150
+ defaultCurrencyCode: new CurrencyCode('USD'),
151
+ timezone: new Timezone('UTC'),
152
+ adminTimezone: new Timezone('UTC'),
153
+ });
154
+
155
+ const MyComponent: ComponentDefinition<MyStringKey> = {
156
+ id: 'my-component',
157
+ name: 'My Component',
158
+ stringKeys: Object.values(MyStringKey),
159
+ };
160
+
161
+ const registration: ComponentRegistration<MyStringKey, MyLanguages> = {
162
+ component: MyComponent,
142
163
  strings: {
143
164
  'en-US': {
144
- [MyStrings.Welcome]: 'Welcome!',
145
- [MyStrings.UserGreetingTemplate]: 'Hello, {name}!'
165
+ [MyStringKey.Welcome]: 'Welcome!',
166
+ [MyStringKey.UserGreetingTemplate]: 'Hello, {name}!'
146
167
  },
147
168
  'es': {
148
- [MyStrings.Welcome]: '¡Bienvenido!',
149
- [MyStrings.UserGreetingTemplate]: '¡Hola, {name}!'
169
+ [MyStringKey.Welcome]: '¡Bienvenido!',
170
+ [MyStringKey.UserGreetingTemplate]: '¡Hola, {name}!'
150
171
  }
151
- },
152
- defaultLanguage: 'en-US',
153
- defaultTranslationContext: 'user',
154
- defaultCurrencyCode: new CurrencyCode('USD'),
155
- languageCodes: {
156
- 'en-US': 'en-US',
157
- 'es': 'es'
158
- },
159
- languages: ['en-US', 'es'],
160
- timezone: new Timezone('UTC'),
161
- adminTimezone: new Timezone('UTC')
172
+ }
162
173
  };
163
174
 
164
- // Create engine
165
- const i18n = new I18nEngine(config);
175
+ engine.registerComponent(registration);
166
176
 
167
- // Translate strings
168
- const welcome = i18n.translate(MyStrings.Welcome);
177
+ const welcome = engine.translate('my-component', MyStringKey.Welcome);
169
178
  // "Welcome!"
170
179
 
171
- const greeting = i18n.translate(MyStrings.UserGreetingTemplate, { name: 'John' });
180
+ const greeting = engine.translate('my-component', MyStringKey.UserGreetingTemplate, { name: 'John' });
172
181
  // "Hello, John!"
173
182
 
174
- // Change language
175
- i18n.context = { language: 'es' };
176
- const spanishGreeting = i18n.translate(MyStrings.UserGreetingTemplate, { name: 'Juan' });
183
+ engine.setLanguage('es');
184
+ const spanishGreeting = engine.translate('my-component', MyStringKey.UserGreetingTemplate, { name: 'Juan' });
177
185
  // "¡Hola, Juan!"
186
+
187
+ const templated = engine.t('User: {name} → {{my-component.UserGreetingTemplate}}', 'es', { name: 'Laura' });
188
+ // "User: Laura → ¡Hola, Laura!"
178
189
  ```
179
190
 
191
+ The constructor automatically registers the provided languages, seeds the global context (language, currency, timezone), and makes the instance discoverable through `PluginI18nEngine.getInstance()`. Prefer `setLanguage` or `updateContext({ language: 'es' })` instead of mutating context objects directly.
192
+
180
193
  ## Core Components
181
194
 
182
195
  The library is built around several key components that work together to provide comprehensive i18n support:
@@ -206,6 +219,7 @@ const registration: ComponentRegistration<MyStringKeys, Languages> = {
206
219
  ```
207
220
 
208
221
  **Key Features:**
222
+
209
223
  - Component isolation with independent string key namespaces
210
224
  - Automatic validation of translation completeness
211
225
  - Dynamic component registration and updates
@@ -248,6 +262,7 @@ const defaultCode = registry.getMatchingLanguageCode();
248
262
  ```
249
263
 
250
264
  **Key Features:**
265
+
251
266
  - BCP 47 language code support
252
267
  - Language lookup by ID or ISO code
253
268
  - Display name mapping for UI rendering
@@ -286,12 +301,14 @@ registry.getMatchingLanguageCode('', ''); // Returns: 'en-US' (empty st
286
301
  ```
287
302
 
288
303
  **Use Cases:**
304
+
289
305
  - HTTP Accept-Language header processing
290
306
  - User preference resolution
291
307
  - Browser language detection with fallback
292
308
  - Multi-tenant applications with per-user defaults
293
309
 
294
310
  **Error Handling:**
311
+
295
312
  ```typescript
296
313
  try {
297
314
  const emptyRegistry = new LanguageRegistry();
@@ -334,6 +351,7 @@ const translated = enumRegistry.translate(Status, Status.Active, 'fr'); // 'Acti
334
351
  ```
335
352
 
336
353
  **Key Features:**
354
+
337
355
  - Complete enum coverage validation
338
356
  - Numeric and string enum support
339
357
  - Automatic key resolution for numeric enums
@@ -364,6 +382,7 @@ console.log(context.adminLanguage); // 'en-US'
364
382
  ```
365
383
 
366
384
  **Key Features:**
385
+
367
386
  - Per-instance context isolation
368
387
  - User and admin language separation
369
388
  - Currency code management
@@ -398,6 +417,7 @@ reactiveContext.language = 'fr'; // Logs: "language changed from en to fr"
398
417
  ```
399
418
 
400
419
  **Key Features:**
420
+
401
421
  - Property-level change notifications
402
422
  - Multiple listener support
403
423
  - Error-safe listener execution
@@ -427,7 +447,7 @@ const i18n = createCoreI18nEngine('myapp');
427
447
  const lang: CoreLanguageCode = LanguageCodes.FR; // Type-checked!
428
448
 
429
449
  // Get supported language codes from registry (runtime)
430
- const supportedLanguages = i18n.getLanguageRegistry().getLanguageIds();
450
+ const supportedLanguages = i18n.getLanguages().map((lang) => lang.id);
431
451
  // ['en-US', 'en-GB', 'fr', 'es', 'de', 'zh-CN', 'ja', 'uk']
432
452
 
433
453
  // Use core translations with type safety
@@ -511,6 +531,7 @@ Provides essential system strings in 8 languages:
511
531
  - English (US/UK), French, Spanish, German, Chinese (Simplified), Japanese, Ukrainian
512
532
 
513
533
  **Language Codes**: Use `LanguageCodes` constants or define your own:
534
+
514
535
  ```typescript
515
536
  import { LanguageCodes } from '@digitaldefiance/i18n-lib';
516
537
 
@@ -604,6 +625,7 @@ const error = new MyError(ErrorType.NotFound, adapter);
604
625
  ```
605
626
 
606
627
  **Key Features:**
628
+
607
629
  - Zero-overhead delegation to PluginI18nEngine
608
630
  - Maintains full type safety
609
631
  - Graceful error handling with fallback to key strings
@@ -653,6 +675,7 @@ try {
653
675
  ```
654
676
 
655
677
  **Key Features:**
678
+
656
679
  - Works with any registered component
657
680
  - Uses safeTranslate for consistent fallback behavior
658
681
  - Stores error context for retranslation
@@ -701,6 +724,7 @@ class DatabaseError extends BaseTypedError<typeof DatabaseErrorType, DatabaseErr
701
724
  ```
702
725
 
703
726
  **Key Features:**
727
+
704
728
  - Complete enum coverage enforcement
705
729
  - Translation engine integration
706
730
  - Simple and translated error creation
@@ -741,6 +765,7 @@ const message3 = engine.t(
741
765
  ```
742
766
 
743
767
  **Pattern Types:**
768
+
744
769
  - `{{componentId.stringKey}}`: Component-based translation
745
770
  - `{variableName}`: Variable replacement
746
771
  - Template strings automatically use first variable object
@@ -779,6 +804,7 @@ console.log(CurrencyCode.values); // Array of all valid ISO 4217 codes
779
804
  ```
780
805
 
781
806
  **Key Features:**
807
+
782
808
  - ISO 4217 currency code validation
783
809
  - Locale-aware symbol positioning
784
810
  - Group and decimal separator detection
@@ -809,6 +835,7 @@ try {
809
835
  ```
810
836
 
811
837
  **Key Features:**
838
+
812
839
  - Moment-timezone validation
813
840
  - Immutable timezone values
814
841
  - Validation utilities
@@ -1040,6 +1067,13 @@ const strictEngine = new PluginI18nEngine(languages, {
1040
1067
  fallbackLanguageId: 'en-US'
1041
1068
  }
1042
1069
  });
1070
+
1071
+ // Optional instance registration overrides (third constructor argument)
1072
+ const reportingEngine = new PluginI18nEngine(languages, {}, {
1073
+ instanceKey: 'reporting',
1074
+ registerInstance: false,
1075
+ setAsDefault: false
1076
+ });
1043
1077
  ```
1044
1078
 
1045
1079
  #### Multi-Instance Support
@@ -1052,6 +1086,10 @@ const userI18n = PluginI18nEngine.createInstance('user', languages);
1052
1086
  // Register different components for each
1053
1087
  adminI18n.registerComponent(adminComponentRegistration);
1054
1088
  userI18n.registerComponent(userComponentRegistration);
1089
+
1090
+ // Create an isolated instance without touching the global registry (handy for tests)
1091
+ const detachedI18n = new PluginI18nEngine(languages, {}, { registerInstance: false });
1092
+ detachedI18n.registerComponent(myTestRegistration);
1055
1093
  ```
1056
1094
 
1057
1095
  For complete documentation on the plugin architecture, see [PLUGIN_ARCHITECTURE.md](./PLUGIN_ARCHITECTURE.md).
@@ -1138,6 +1176,7 @@ throw new TranslatableGenericError(
1138
1176
  ```
1139
1177
 
1140
1178
  **Key Features:**
1179
+
1141
1180
  - Works with any registered component and string keys
1142
1181
  - Uses `safeTranslate` for consistent fallback behavior (`[componentId.stringKey]`)
1143
1182
  - Stores error context: stringKey, componentId, language, variables, metadata
@@ -1178,51 +1217,60 @@ const statusText = i18n.translateEnum(Status, Status.Active, MyLanguages.Spanish
1178
1217
  ### Template Processing
1179
1218
 
1180
1219
  ```typescript
1181
- enum AppStrings {
1182
- WelcomeMessage = 'welcomeMessage',
1183
- UserGreetingTemplate = 'userGreetingTemplate'
1184
- }
1185
-
1186
- const config: I18nConfig<AppStrings, MyLanguages> = {
1187
- // ... other config
1188
- enumName: 'AppStrings',
1189
- enumObj: AppStrings,
1190
- strings: {
1191
- [MyLanguages.English]: {
1192
- [AppStrings.WelcomeMessage]: 'Welcome to our app!',
1193
- [AppStrings.UserGreetingTemplate]: 'Hello, {name}!'
1194
- }
1195
- }
1196
- };
1220
+ import { PluginI18nEngine } from '@digitaldefiance/i18n-lib';
1197
1221
 
1198
- const i18n = new I18nEngine(config);
1222
+ const engine = PluginI18nEngine.getInstance<'en-US' | 'es'>();
1199
1223
 
1200
- // Use template processor
1201
- const message = i18n.t('{{AppStrings.WelcomeMessage}} {{AppStrings.UserGreetingTemplate}}',
1202
- MyLanguages.English,
1224
+ // Component placeholders are resolved before variable replacement
1225
+ const message = engine.t(
1226
+ '{{core.System_Welcome}} {name}! {{core.System_PleaseWait}}',
1227
+ 'en-US',
1203
1228
  { name: 'John' }
1204
1229
  );
1205
- // "Welcome to our app! Hello, John!"
1230
+ // "Welcome John! Please wait..."
1231
+
1232
+ // Templates ending with "Template" automatically receive the first var map
1233
+ const greeting = engine.t(
1234
+ '{{my-component.UserGreetingTemplate}}',
1235
+ 'es',
1236
+ { name: 'Laura' },
1237
+ { fallbackName: 'Usuario' }
1238
+ );
1239
+ // "¡Hola, Laura!"
1240
+
1241
+ // Additional variable objects are merged left→right
1242
+ const merged = engine.t(
1243
+ 'User {username} has {count} notifications',
1244
+ 'en-US',
1245
+ { username: 'alice' },
1246
+ { count: 5 }
1247
+ );
1248
+ // "User alice has 5 notifications"
1206
1249
  ```
1207
1250
 
1208
1251
  ### Context Management
1209
1252
 
1210
1253
  ```typescript
1211
- import { createContext, setLanguage, setAdminLanguage, setContext } from '@digitaldefiance/i18n-lib';
1254
+ import { PluginI18nEngine, CurrencyCode, Timezone } from '@digitaldefiance/i18n-lib';
1212
1255
 
1213
- // Create and manage context
1214
- const context = createContext(MyLanguages.English, 'user');
1256
+ const engine = PluginI18nEngine.getInstance<'en-US' | 'es'>();
1215
1257
 
1216
- // Set different languages for user and admin contexts
1217
- setLanguage(context, MyLanguages.Spanish);
1218
- setAdminLanguage(context, MyLanguages.English);
1258
+ engine.updateContext({
1259
+ language: 'es',
1260
+ adminLanguage: 'en-US',
1261
+ currencyCode: new CurrencyCode('EUR'),
1262
+ timezone: new Timezone('Europe/Madrid'),
1263
+ adminTimezone: new Timezone('UTC'),
1264
+ });
1219
1265
 
1220
- // Switch between contexts
1221
- setContext(context, 'admin'); // Uses admin language
1222
- setContext(context, 'user'); // Uses user language
1266
+ engine.updateContext({ currentContext: 'admin' });
1223
1267
 
1224
- // Apply context to engine
1225
- i18n.context = context;
1268
+ const context = engine.getContext();
1269
+ console.log(context.currentContext); // 'admin'
1270
+ console.log(context.language); // 'es'
1271
+
1272
+ engine.updateContext({ currentContext: 'user' });
1273
+ engine.setLanguage('en-US');
1226
1274
  ```
1227
1275
 
1228
1276
  ### Context Change Monitoring
@@ -1266,16 +1314,23 @@ const eurFormat = getCurrencyFormat('de-DE', 'EUR');
1266
1314
  ### Instance Management
1267
1315
 
1268
1316
  ```typescript
1317
+ import { PluginI18nEngine, LanguageDefinition } from '@digitaldefiance/i18n-lib';
1318
+
1319
+ const languages: ReadonlyArray<LanguageDefinition> = [
1320
+ { id: 'en-US', name: 'English (US)', code: 'en-US', isDefault: true },
1321
+ { id: 'fr', name: 'Français', code: 'fr' },
1322
+ ];
1323
+
1269
1324
  // Create named instances
1270
- const mainI18n = new I18nEngine(config, 'main');
1271
- const adminI18n = new I18nEngine(adminConfig, 'admin');
1325
+ const mainI18n = PluginI18nEngine.createInstance('main', languages);
1326
+ const adminI18n = PluginI18nEngine.createInstance('admin', languages);
1272
1327
 
1273
1328
  // Get instances by key
1274
- const instance = I18nEngine.getInstance('main');
1329
+ const instance = PluginI18nEngine.getInstance('main');
1275
1330
 
1276
1331
  // Clean up instances (useful for testing)
1277
- I18nEngine.clearInstances();
1278
- I18nEngine.removeInstance('main');
1332
+ PluginI18nEngine.removeInstance('main');
1333
+ PluginI18nEngine.resetAll();
1279
1334
  ```
1280
1335
 
1281
1336
  ## Supported Languages
@@ -1355,7 +1410,7 @@ const lang3: MyLanguageCode = 'invalid'; // ✗ Type error!
1355
1410
  Extract language codes from the registry (single source of truth):
1356
1411
 
1357
1412
  ```typescript
1358
- import { PluginI18nEngine, getCoreLanguageCodes, LanguageCodes } from '@digitaldefiance/i18n-lib';
1413
+ import { PluginI18nEngine, LanguageRegistry, getCoreLanguageCodes, LanguageCodes } from '@digitaldefiance/i18n-lib';
1359
1414
  import { Schema } from 'mongoose';
1360
1415
 
1361
1416
  // Static approach: Get core language codes as array
@@ -1364,8 +1419,9 @@ const coreLanguageCodes = getCoreLanguageCodes();
1364
1419
 
1365
1420
  // Dynamic approach: Get from engine instance (includes custom languages)
1366
1421
  const engine = PluginI18nEngine.getInstance<string>();
1367
- const languageIds = engine.getLanguageRegistry().getLanguageIds();
1368
- const isoCodes = engine.getLanguageRegistry().getLanguageCodes();
1422
+ const languageDefinitions = engine.getLanguages();
1423
+ const languageIds = languageDefinitions.map((lang) => lang.id);
1424
+ const isoCodes = languageDefinitions.map((lang) => lang.code);
1369
1425
 
1370
1426
  // Use in Mongoose schema
1371
1427
  const userSchema = new Schema({
@@ -1382,7 +1438,7 @@ const userSchema = new Schema({
1382
1438
  });
1383
1439
 
1384
1440
  // Get display names for validation messages
1385
- const displayNames = engine.getLanguageRegistry().getLanguageDisplayNames();
1441
+ const displayNames = LanguageRegistry.getLanguageDisplayNames();
1386
1442
  // { 'en-US': 'English (US)', 'fr': 'Français', ... }
1387
1443
  ```
1388
1444
 
@@ -1391,18 +1447,21 @@ const displayNames = engine.getLanguageRegistry().getLanguageDisplayNames();
1391
1447
  The core component provides 40+ system strings organized by category:
1392
1448
 
1393
1449
  ### Common Strings
1450
+
1394
1451
  - `Common_Yes`, `Common_No`, `Common_Cancel`, `Common_OK`
1395
1452
  - `Common_Save`, `Common_Delete`, `Common_Edit`, `Common_Create`, `Common_Update`
1396
1453
  - `Common_Loading`, `Common_Error`, `Common_Success`, `Common_Warning`, `Common_Info`
1397
1454
  - `Common_Disposed`
1398
1455
 
1399
1456
  ### Error Messages
1457
+
1400
1458
  - `Error_InvalidInput`, `Error_NetworkError`, `Error_NotFound`
1401
1459
  - `Error_AccessDenied`, `Error_InternalServer`, `Error_ValidationFailed`
1402
1460
  - `Error_RequiredField`, `Error_InvalidContextTemplate`
1403
1461
  - `Error_MissingTranslationKeyTemplate`
1404
1462
 
1405
1463
  ### Registry Error Templates
1464
+
1406
1465
  - `Error_ComponentNotFoundTemplate`
1407
1466
  - `Error_LanguageNotFoundTemplate`
1408
1467
  - `Error_StringKeyNotFoundTemplate`
@@ -1412,6 +1471,7 @@ The core component provides 40+ system strings organized by category:
1412
1471
  - `Error_ValidationFailedTemplate`
1413
1472
 
1414
1473
  ### System Messages
1474
+
1415
1475
  - `System_Welcome`, `System_Goodbye`, `System_PleaseWait`
1416
1476
  - `System_ProcessingRequest`, `System_OperationComplete`
1417
1477
  - `System_NoDataAvailable`
@@ -1424,10 +1484,16 @@ The core component provides 40+ system strings organized by category:
1424
1484
 
1425
1485
  **Constructor**
1426
1486
 
1427
- - `new PluginI18nEngine<TLanguages>(languages, config?)` - Create new plugin engine
1487
+ - `new PluginI18nEngine<TLanguages>(languages, config?, options?)` - Create new plugin engine
1428
1488
  - `PluginI18nEngine.createInstance<TLanguages>(key, languages, config?)` - Create named instance
1429
1489
  - `PluginI18nEngine.getInstance<TLanguages>(key?)` - Get existing instance (throws error if not found)
1430
1490
 
1491
+ `options` enables fine-grained control over how the engine participates in the static registry:
1492
+
1493
+ - `instanceKey` – Override the implicit registry key when instantiating directly (defaults to `'default'`).
1494
+ - `registerInstance` – Set to `false` to keep the engine out of the shared instance map (useful for tests or short-lived contexts).
1495
+ - `setAsDefault` – Force this instance to become the default lookup target even if another default exists.
1496
+
1431
1497
  **Component Management**
1432
1498
 
1433
1499
  - `registerComponent<TStringKeys>(registration)` - Register component with translations
@@ -1451,11 +1517,14 @@ The core component provides 40+ system strings organized by category:
1451
1517
  - `getLanguageByCode(code)` - Get language by ISO code
1452
1518
  - `getMatchingLanguageCode(requestedCode?, userDefaultCode?)` - Get matching language code with fallback logic
1453
1519
 
1454
- **Validation**
1520
+ **Context & Validation**
1455
1521
 
1522
+ - `getContext()` - Read the active context (language, adminLanguage, currency, timezone)
1523
+ - `updateContext(updates)` - Apply partial context updates
1456
1524
  - `validateAllComponents()` - Validate all registered components
1457
- - `getLanguageRegistry()` - Access language registry directly
1458
1525
  - `getComponentRegistry()` - Access component registry directly
1526
+ - `getEnumRegistry()` - Access enum registry directly
1527
+ - Use `LanguageRegistry` statics (e.g. `LanguageRegistry.getLanguageIds()`) for low-level language metadata
1459
1528
 
1460
1529
  #### Core I18n Functions
1461
1530
 
@@ -1781,6 +1850,7 @@ try {
1781
1850
  ```
1782
1851
 
1783
1852
  **Error Types:**
1853
+
1784
1854
  - `ComponentNotFound`: Component ID not registered
1785
1855
  - `LanguageNotFound`: Language not registered
1786
1856
  - `StringKeyNotFound`: Translation key not found
@@ -2021,15 +2091,13 @@ export const User = model('User', userSchema);
2021
2091
  ### Dynamic Language Enum from Engine
2022
2092
 
2023
2093
  ```typescript
2024
- import { PluginI18nEngine } from '@digitaldefiance/i18n-lib';
2094
+ import { PluginI18nEngine, LanguageRegistry } from '@digitaldefiance/i18n-lib';
2025
2095
 
2026
- // Get languages from engine instance
2096
+ // Ensure the engine has registered its languages
2027
2097
  const engine = PluginI18nEngine.getInstance();
2028
- const registry = engine.getLanguageRegistry();
2029
-
2030
- // Extract for Mongoose
2031
- const languageEnum = registry.getLanguageIds();
2032
- const defaultLanguage = registry.getDefaultLanguageId();
2098
+ const languageEnum = LanguageRegistry.getLanguageIds();
2099
+ const defaultLanguage =
2100
+ LanguageRegistry.getDefaultLanguageId() ?? engine.getContext().language;
2033
2101
 
2034
2102
  const contentSchema = new Schema({
2035
2103
  language: {
@@ -2043,10 +2111,9 @@ const contentSchema = new Schema({
2043
2111
  ### Validation with Display Names
2044
2112
 
2045
2113
  ```typescript
2046
- import { PluginI18nEngine } from '@digitaldefiance/i18n-lib';
2114
+ import { LanguageRegistry } from '@digitaldefiance/i18n-lib';
2047
2115
 
2048
- const engine = PluginI18nEngine.getInstance();
2049
- const displayNames = engine.getLanguageRegistry().getLanguageDisplayNames();
2116
+ const displayNames = LanguageRegistry.getLanguageDisplayNames();
2050
2117
 
2051
2118
  const settingsSchema = new Schema({
2052
2119
  language: {
@@ -2185,6 +2252,7 @@ export default i18nPlugin;
2185
2252
  ### Common Issues
2186
2253
 
2187
2254
  **Issue: "Instance with key 'X' not found"**
2255
+
2188
2256
  ```typescript
2189
2257
  // Solution: Create instance before using
2190
2258
  const engine = PluginI18nEngine.createInstance('myapp', languages);
@@ -2193,6 +2261,7 @@ const engine = PluginI18nEngine.getInstance(); // Uses 'default' key
2193
2261
  ```
2194
2262
 
2195
2263
  **Issue: "Component 'X' not found"**
2264
+
2196
2265
  ```typescript
2197
2266
  // Solution: Register component before translating
2198
2267
  engine.registerComponent(myComponentRegistration);
@@ -2200,6 +2269,7 @@ const text = engine.translate('my-component', 'key');
2200
2269
  ```
2201
2270
 
2202
2271
  **Issue: "Language 'X' not found"**
2272
+
2203
2273
  ```typescript
2204
2274
  // Solution: Register language before using
2205
2275
  engine.registerLanguage(createLanguageDefinition('fr', 'Français', 'fr'));
@@ -2207,6 +2277,7 @@ engine.setLanguage('fr');
2207
2277
  ```
2208
2278
 
2209
2279
  **Issue: Missing translations in production**
2280
+
2210
2281
  ```typescript
2211
2282
  // Solution: Use validation to catch missing translations
2212
2283
  const validation = engine.validateAllComponents();
@@ -2217,6 +2288,7 @@ if (!validation.isValid) {
2217
2288
  ```
2218
2289
 
2219
2290
  **Issue: Type errors with string keys**
2291
+
2220
2292
  ```typescript
2221
2293
  // Solution: Use enum values, not strings
2222
2294
  enum MyKeys {
@@ -2268,12 +2340,24 @@ yarn build
2268
2340
  ## Support
2269
2341
 
2270
2342
  For issues, questions, or contributions:
2271
- - GitHub Issues: https://github.com/Digital-Defiance/DigitalBurnbag/issues
2343
+
2344
+ - GitHub Issues: <https://github.com/Digital-Defiance/DigitalBurnbag/issues>
2272
2345
  - Documentation: See README.md and inline code documentation
2273
2346
  - Examples: See `examples/` directory in repository
2274
2347
 
2275
2348
  ## ChangeLog
2276
2349
 
2350
+ ### Version 1.3.17
2351
+
2352
+ - Skip 1.3.16 for homogenization
2353
+ - Add component registration aliases for t() func
2354
+ - Update readme
2355
+
2356
+ ### Version 1.3.15
2357
+
2358
+ - Improve constructor for default instances
2359
+ - Update README
2360
+
2277
2361
  ### Version 1.3.14
2278
2362
 
2279
2363
  - Re-export with js again
@@ -2331,7 +2415,7 @@ For issues, questions, or contributions:
2331
2415
  ### Version 1.3.1
2332
2416
 
2333
2417
  - **Changed**: `CoreLanguageCode` is now `string` - Language Registry is single source of truth
2334
- - Use `engine.getLanguageRegistry().getLanguageIds()` for runtime validation
2418
+ - Use `LanguageRegistry.getLanguageIds()` for runtime validation
2335
2419
  - Use `getCoreLanguageCodes()` for static arrays (Mongoose schemas, etc.)
2336
2420
  - Runtime validation via registry, not compile-time types
2337
2421
  - **Added**: `getCoreLanguageCodes()` - Get core language codes as runtime array
@@ -2344,6 +2428,7 @@ For issues, questions, or contributions:
2344
2428
  - Sat Oct 25 2025 15:0100 GMT-0700 (Pacific Daylight Time)
2345
2429
 
2346
2430
  #### Added
2431
+
2347
2432
  - **`createTranslationAdapter`** - Generic utility function to adapt `PluginI18nEngine` instances to the `TranslationEngine` interface, enabling seamless integration with error classes and other components expecting the simpler interface
2348
2433
  - Maintains full type safety with generic string key and language types
2349
2434
  - Provides graceful error handling with fallback to key strings
@@ -2351,12 +2436,15 @@ For issues, questions, or contributions:
2351
2436
  - Comprehensive test coverage (19 tests)
2352
2437
 
2353
2438
  #### Benefits
2439
+
2354
2440
  - Eliminates need for custom adapter implementations in consuming packages
2355
2441
  - Standardizes translation engine integration across the monorepo
2356
2442
  - Simplifies error class constructors that require translation engines
2357
2443
 
2358
2444
  #### Migration
2445
+
2359
2446
  Packages using custom translation adapters can now replace them with:
2447
+
2360
2448
  ```typescript
2361
2449
  import { createTranslationAdapter } from '@digitaldefiance/i18n-lib';
2362
2450
  const adapter = createTranslationAdapter(pluginEngine, 'component-id');
@@ -2451,10 +2539,12 @@ const myEngine = PluginI18nEngine.createInstance<MyLanguageCodes>('custom', lang
2451
2539
 
2452
2540
  - Wed Oct 15 2025 16:13:00 GMT-0700 (Pacific Daylight Time)
2453
2541
  **Fixed:**
2454
- - Corrected safeCoreTranslation fallback format to use
2542
+ - Corrected safeCoreTranslation fallback format to use
2543
+
2455
2544
  ```plaintext
2456
2545
  [CoreStringKey.${stringKey}]
2457
2546
  ```
2547
+
2458
2548
  - Fixed import issues with DefaultInstanceKey
2459
2549
  **Added:**
2460
2550
  - New TranslatableGenericError class for generic translatable errors across any component
@@ -2462,10 +2552,12 @@ const myEngine = PluginI18nEngine.createInstance<MyLanguageCodes>('custom', lang
2462
2552
  - 130+ new tests for comprehensive coverage
2463
2553
  - Complete usage documentation
2464
2554
  **Changed:**
2465
- - Standardized all fallback formats to use square brackets
2555
+ - Standardized all fallback formats to use square brackets
2556
+
2466
2557
  ```plaintext
2467
2558
  [componentId.stringKey]
2468
2559
  ```
2560
+
2469
2561
  - Refactored to use CoreI18nComponentId constant
2470
2562
  All tests pass and backward compatibility is maintained.
2471
2563
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitaldefiance/i18n-lib",
3
- "version": "1.3.14",
3
+ "version": "1.3.17",
4
4
  "description": "i18n library with enum translation support",
5
5
  "main": "src/index.js",
6
6
  "types": "src/index.d.ts",
@@ -6,5 +6,8 @@ import { PartialComponentLanguageStrings } from './types';
6
6
  export interface ComponentRegistration<TStringKeys extends string, TLanguages extends string> {
7
7
  readonly component: ComponentDefinition<TStringKeys>;
8
8
  readonly strings: PartialComponentLanguageStrings<TStringKeys, TLanguages>;
9
+ readonly enumName?: string;
10
+ readonly enumObject?: Record<string, TStringKeys>;
11
+ readonly aliases?: readonly string[];
9
12
  }
10
13
  //# sourceMappingURL=component-registration.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"component-registration.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/component-registration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,qBAAqB,CACpC,WAAW,SAAS,MAAM,EAC1B,UAAU,SAAS,MAAM;IAEzB,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,+BAA+B,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;CAC5E"}
1
+ {"version":3,"file":"component-registration.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/component-registration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,qBAAqB,CACpC,WAAW,SAAS,MAAM,EAC1B,UAAU,SAAS,MAAM;IAEzB,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,+BAA+B,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC"}
@@ -18,6 +18,8 @@ export declare class PluginI18nEngine<TLanguages extends string> {
18
18
  private readonly enumRegistry;
19
19
  private readonly config;
20
20
  private contextKey;
21
+ private readonly aliasToComponent;
22
+ private readonly componentKeyLookup;
21
23
  /**
22
24
  * Default template processor instance
23
25
  */
@@ -28,7 +30,14 @@ export declare class PluginI18nEngine<TLanguages extends string> {
28
30
  private static _instances;
29
31
  private static _defaultKey;
30
32
  protected static readonly DefaultInstanceKey = "default";
31
- constructor(initialLanguages: readonly LanguageDefinition[], config?: Partial<RegistryConfig<TLanguages>>);
33
+ constructor(initialLanguages: readonly LanguageDefinition[], config?: Partial<RegistryConfig<TLanguages>>, options?: {
34
+ instanceKey?: string;
35
+ registerInstance?: boolean;
36
+ setAsDefault?: boolean;
37
+ });
38
+ private resolveComponentAndKey;
39
+ private registerComponentMetadata;
40
+ private normalizeLegacyKey;
32
41
  /**
33
42
  * Create a new instance with a specific key
34
43
  */
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-i18n-engine.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/plugin-i18n-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-i18n-engine.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/plugin-i18n-engine.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,8 @@ class PluginI18nEngine {
20
20
  enumRegistry;
21
21
  config;
22
22
  contextKey;
23
+ aliasToComponent = new Map();
24
+ componentKeyLookup = new Map();
23
25
  /**
24
26
  * Default template processor instance
25
27
  */
@@ -30,7 +32,7 @@ class PluginI18nEngine {
30
32
  static _instances = new Map();
31
33
  static _defaultKey = null;
32
34
  static DefaultInstanceKey = 'default';
33
- constructor(initialLanguages, config = {}) {
35
+ constructor(initialLanguages, config = {}, options) {
34
36
  // Find default language from initialLanguages or use the first one
35
37
  const defaultLang = initialLanguages.find((l) => l.isDefault) || initialLanguages[0];
36
38
  if (!defaultLang) {
@@ -60,7 +62,7 @@ class PluginI18nEngine {
60
62
  this.componentRegistry = new component_registry_1.ComponentRegistry(initialLanguages.map((l) => l.id), this.config.validation);
61
63
  this.enumRegistry = new enum_registry_1.EnumTranslationRegistry(initialLanguages.map((l) => l.id), (key, vars) => this.safeTranslate('core', key, vars));
62
64
  // Initialize context key for this engine instance
63
- this.contextKey = PluginI18nEngine.DefaultInstanceKey;
65
+ this.contextKey = options?.instanceKey ?? PluginI18nEngine.DefaultInstanceKey;
64
66
  // Create or get the global context for this engine
65
67
  const globalContext = global_active_context_1.GlobalActiveContext.getInstance();
66
68
  // Always create/update the context for this engine
@@ -74,11 +76,14 @@ class PluginI18nEngine {
74
76
  let result = str.replace(/\{\{([^}]+)\}\}/g, (match, pattern) => {
75
77
  const parts = pattern.split('.');
76
78
  if (parts.length === 2) {
77
- const [componentId, stringKey] = parts;
79
+ const [rawPrefix, rawKey] = parts;
80
+ const prefix = rawPrefix.trim();
81
+ const key = rawKey.trim();
78
82
  // For template strings, use the first variable object if available
79
- const isTemplate = stringKey.toLowerCase().endsWith('template');
83
+ const isTemplate = key.toLowerCase().endsWith('template');
80
84
  const vars = isTemplate && otherVars.length > 0 ? otherVars[0] : {};
81
- return this.safeTranslate(componentId.trim(), stringKey.trim(), vars, language);
85
+ const { componentId, stringKey } = this.resolveComponentAndKey(prefix, key);
86
+ return this.safeTranslate(componentId, stringKey, vars, language);
82
87
  }
83
88
  return match; // Return original if pattern doesn't match expected format
84
89
  });
@@ -90,10 +95,90 @@ class PluginI18nEngine {
90
95
  return result;
91
96
  };
92
97
  // Auto-register as default instance if none exists
93
- if (!PluginI18nEngine._defaultKey) {
94
- PluginI18nEngine._instances.set(PluginI18nEngine.DefaultInstanceKey, this);
95
- PluginI18nEngine._defaultKey = PluginI18nEngine.DefaultInstanceKey;
98
+ const shouldRegisterInstance = options?.registerInstance ?? true;
99
+ if (shouldRegisterInstance) {
100
+ if (!PluginI18nEngine._instances.has(this.contextKey)) {
101
+ PluginI18nEngine._instances.set(this.contextKey, this);
102
+ }
103
+ const shouldSetDefault = options?.setAsDefault ??
104
+ (!PluginI18nEngine._defaultKey || this.contextKey === PluginI18nEngine.DefaultInstanceKey);
105
+ if (shouldSetDefault) {
106
+ PluginI18nEngine._defaultKey = this.contextKey;
107
+ }
108
+ }
109
+ }
110
+ resolveComponentAndKey(prefix, rawKey) {
111
+ const componentId = this.aliasToComponent.get(prefix) ?? prefix;
112
+ const keyLookup = this.componentKeyLookup.get(componentId);
113
+ if (!keyLookup) {
114
+ return { componentId, stringKey: rawKey };
115
+ }
116
+ const directMatch = keyLookup.get(rawKey);
117
+ if (directMatch) {
118
+ return { componentId, stringKey: directMatch };
119
+ }
120
+ const normalized = this.normalizeLegacyKey(rawKey);
121
+ if (normalized) {
122
+ const normalizedMatch = keyLookup.get(normalized);
123
+ if (normalizedMatch) {
124
+ return { componentId, stringKey: normalizedMatch };
125
+ }
126
+ }
127
+ return { componentId, stringKey: rawKey };
128
+ }
129
+ registerComponentMetadata(registration) {
130
+ const { component, enumName, enumObject, aliases } = registration;
131
+ const componentId = component.id;
132
+ const aliasSet = new Set();
133
+ if (componentId) {
134
+ aliasSet.add(componentId);
96
135
  }
136
+ if (enumName) {
137
+ aliasSet.add(enumName);
138
+ }
139
+ aliases?.forEach((alias) => {
140
+ if (alias)
141
+ aliasSet.add(alias);
142
+ });
143
+ aliasSet.forEach((alias) => {
144
+ const trimmed = alias.trim();
145
+ if (trimmed.length > 0) {
146
+ this.aliasToComponent.set(trimmed, componentId);
147
+ }
148
+ });
149
+ if (!this.componentKeyLookup.has(componentId)) {
150
+ this.componentKeyLookup.set(componentId, new Map());
151
+ }
152
+ const keyMap = this.componentKeyLookup.get(componentId);
153
+ const addKeyVariant = (aliasKey, canonicalKey) => {
154
+ if (!aliasKey || !canonicalKey)
155
+ return;
156
+ keyMap.set(aliasKey, canonicalKey);
157
+ const normalized = this.normalizeLegacyKey(aliasKey);
158
+ if (normalized && normalized !== aliasKey) {
159
+ keyMap.set(normalized, canonicalKey);
160
+ }
161
+ };
162
+ component.stringKeys.forEach((key) => {
163
+ addKeyVariant(key, key);
164
+ });
165
+ if (enumObject) {
166
+ Object.entries(enumObject).forEach(([enumKey, enumValue]) => {
167
+ if (typeof enumValue === 'string') {
168
+ addKeyVariant(enumKey, enumValue);
169
+ }
170
+ });
171
+ }
172
+ }
173
+ normalizeLegacyKey(rawKey) {
174
+ if (!rawKey)
175
+ return null;
176
+ const normalized = rawKey
177
+ .replace(/[-\s]+/g, '_')
178
+ .replace(/([a-z0-9])([A-Z])/g, '$1_$2')
179
+ .replace(/__+/g, '_')
180
+ .toLowerCase();
181
+ return normalized.length > 0 ? normalized : null;
97
182
  }
98
183
  /**
99
184
  * Create a new instance with a specific key
@@ -102,9 +187,13 @@ class PluginI18nEngine {
102
187
  if (PluginI18nEngine._instances.has(key)) {
103
188
  throw registry_error_1.RegistryError.createSimple(registry_error_type_1.RegistryErrorType.DuplicateComponent, `I18n instance with key '${key}' already exists`, { key });
104
189
  }
105
- const instance = new PluginI18nEngine(initialLanguages, config);
190
+ const instance = new PluginI18nEngine(initialLanguages, config, {
191
+ instanceKey: key,
192
+ registerInstance: false,
193
+ });
106
194
  instance.contextKey = key;
107
- // Create context for this specific instance
195
+ // Create context for this specific instance (constructor already did this,
196
+ // but we ensure the latest configuration is applied for explicit instances)
108
197
  const globalContext = global_active_context_1.GlobalActiveContext.getInstance();
109
198
  globalContext.createContext(instance.config.defaultLanguage, instance.config.defaultLanguage, key);
110
199
  globalContext.setCurrencyCode(instance.config.defaultCurrencyCode, key);
@@ -150,7 +239,9 @@ class PluginI18nEngine {
150
239
  * Register a component with its translations
151
240
  */
152
241
  registerComponent(registration) {
153
- return this.componentRegistry.registerComponent(registration);
242
+ const validationResult = this.componentRegistry.registerComponent(registration);
243
+ this.registerComponentMetadata(registration);
244
+ return validationResult;
154
245
  }
155
246
  /**
156
247
  * Update strings for an existing component
@@ -330,6 +421,8 @@ class PluginI18nEngine {
330
421
  */
331
422
  clearAllComponents() {
332
423
  this.componentRegistry.clearAllComponents();
424
+ this.aliasToComponent.clear();
425
+ this.componentKeyLookup.clear();
333
426
  }
334
427
  /**
335
428
  * Remove a specific named instance
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-i18n-engine.js","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/plugin-i18n-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-i18n-engine.js","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/plugin-i18n-engine.ts"],"names":[],"mappings":"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"}