@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 +194 -102
- package/package.json +1 -1
- package/src/component-registration.d.ts +3 -0
- package/src/component-registration.d.ts.map +1 -1
- package/src/plugin-i18n-engine.d.ts +10 -1
- package/src/plugin-i18n-engine.d.ts.map +1 -1
- package/src/plugin-i18n-engine.js +104 -11
- package/src/plugin-i18n-engine.js.map +1 -1
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 {
|
|
128
|
+
import {
|
|
129
|
+
PluginI18nEngine,
|
|
130
|
+
ComponentDefinition,
|
|
131
|
+
ComponentRegistration,
|
|
132
|
+
LanguageDefinition,
|
|
133
|
+
CurrencyCode,
|
|
134
|
+
Timezone,
|
|
135
|
+
} from '@digitaldefiance/i18n-lib';
|
|
129
136
|
|
|
130
|
-
|
|
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
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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
|
-
[
|
|
145
|
-
[
|
|
165
|
+
[MyStringKey.Welcome]: 'Welcome!',
|
|
166
|
+
[MyStringKey.UserGreetingTemplate]: 'Hello, {name}!'
|
|
146
167
|
},
|
|
147
168
|
'es': {
|
|
148
|
-
[
|
|
149
|
-
[
|
|
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
|
-
|
|
165
|
-
const i18n = new I18nEngine(config);
|
|
175
|
+
engine.registerComponent(registration);
|
|
166
176
|
|
|
167
|
-
|
|
168
|
-
const welcome = i18n.translate(MyStrings.Welcome);
|
|
177
|
+
const welcome = engine.translate('my-component', MyStringKey.Welcome);
|
|
169
178
|
// "Welcome!"
|
|
170
179
|
|
|
171
|
-
const greeting =
|
|
180
|
+
const greeting = engine.translate('my-component', MyStringKey.UserGreetingTemplate, { name: 'John' });
|
|
172
181
|
// "Hello, John!"
|
|
173
182
|
|
|
174
|
-
|
|
175
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
|
1222
|
+
const engine = PluginI18nEngine.getInstance<'en-US' | 'es'>();
|
|
1199
1223
|
|
|
1200
|
-
//
|
|
1201
|
-
const message =
|
|
1202
|
-
|
|
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
|
|
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 {
|
|
1254
|
+
import { PluginI18nEngine, CurrencyCode, Timezone } from '@digitaldefiance/i18n-lib';
|
|
1212
1255
|
|
|
1213
|
-
|
|
1214
|
-
const context = createContext(MyLanguages.English, 'user');
|
|
1256
|
+
const engine = PluginI18nEngine.getInstance<'en-US' | 'es'>();
|
|
1215
1257
|
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
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
|
-
|
|
1221
|
-
setContext(context, 'admin'); // Uses admin language
|
|
1222
|
-
setContext(context, 'user'); // Uses user language
|
|
1266
|
+
engine.updateContext({ currentContext: 'admin' });
|
|
1223
1267
|
|
|
1224
|
-
|
|
1225
|
-
|
|
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 =
|
|
1271
|
-
const adminI18n =
|
|
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 =
|
|
1329
|
+
const instance = PluginI18nEngine.getInstance('main');
|
|
1275
1330
|
|
|
1276
1331
|
// Clean up instances (useful for testing)
|
|
1277
|
-
|
|
1278
|
-
|
|
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
|
|
1368
|
-
const
|
|
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 =
|
|
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
|
-
//
|
|
2096
|
+
// Ensure the engine has registered its languages
|
|
2027
2097
|
const engine = PluginI18nEngine.getInstance();
|
|
2028
|
-
const
|
|
2029
|
-
|
|
2030
|
-
|
|
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 {
|
|
2114
|
+
import { LanguageRegistry } from '@digitaldefiance/i18n-lib';
|
|
2047
2115
|
|
|
2048
|
-
const
|
|
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
|
-
|
|
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 `
|
|
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
|
@@ -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;
|
|
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":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAElD;;GAEG;AACH,qBAAa,gBAAgB,CAAC,UAAU,SAAS,MAAM;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAClE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8C;IAC3E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,UAAU,CAAS;
|
|
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 [
|
|
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 =
|
|
83
|
+
const isTemplate = key.toLowerCase().endsWith('template');
|
|
80
84
|
const vars = isTemplate && otherVars.length > 0 ? otherVars[0] : {};
|
|
81
|
-
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
PluginI18nEngine.
|
|
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
|
-
|
|
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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"}
|