@digitaldefiance/i18n-lib 1.3.20 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +399 -2218
- package/package.json +4 -1
- package/src/active-context.d.ts +2 -2
- package/src/active-context.d.ts.map +1 -1
- package/src/builders/i18n-builder.d.ts +24 -0
- package/src/builders/i18n-builder.d.ts.map +1 -0
- package/src/builders/i18n-builder.js +62 -0
- package/src/builders/i18n-builder.js.map +1 -0
- package/src/builders/index.d.ts +5 -0
- package/src/builders/index.d.ts.map +1 -0
- package/src/builders/index.js +8 -0
- package/src/builders/index.js.map +1 -0
- package/src/component-registry.d.ts +2 -1
- package/src/component-registry.d.ts.map +1 -1
- package/src/component-registry.js +5 -3
- package/src/component-registry.js.map +1 -1
- package/src/core/component-store.d.ts +20 -0
- package/src/core/component-store.d.ts.map +1 -0
- package/src/core/component-store.js +105 -0
- package/src/core/component-store.js.map +1 -0
- package/src/core/context-manager.d.ts +20 -0
- package/src/core/context-manager.d.ts.map +1 -0
- package/src/core/context-manager.js +50 -0
- package/src/core/context-manager.js.map +1 -0
- package/src/core/enum-registry.d.ts +14 -0
- package/src/core/enum-registry.d.ts.map +1 -0
- package/src/core/enum-registry.js +48 -0
- package/src/core/enum-registry.js.map +1 -0
- package/src/core/i18n-engine.d.ts +44 -0
- package/src/core/i18n-engine.d.ts.map +1 -0
- package/src/core/i18n-engine.js +192 -0
- package/src/core/i18n-engine.js.map +1 -0
- package/src/core/index.d.ts +9 -0
- package/src/core/index.d.ts.map +1 -0
- package/src/core/index.js +12 -0
- package/src/core/index.js.map +1 -0
- package/src/core/language-registry.d.ts +41 -0
- package/src/core/language-registry.d.ts.map +1 -0
- package/src/core/language-registry.js +157 -0
- package/src/core/language-registry.js.map +1 -0
- package/src/core-i18n.d.ts +4 -0
- package/src/core-i18n.d.ts.map +1 -1
- package/src/core-i18n.js +109 -4
- package/src/core-i18n.js.map +1 -1
- package/src/core-string-key.d.ts +10 -1
- package/src/core-string-key.d.ts.map +1 -1
- package/src/core-string-key.js +10 -0
- package/src/core-string-key.js.map +1 -1
- package/src/create-translation-adapter.d.ts +15 -3
- package/src/create-translation-adapter.d.ts.map +1 -1
- package/src/create-translation-adapter.js +44 -9
- package/src/create-translation-adapter.js.map +1 -1
- package/src/{context-error.d.ts → errors/context-error.d.ts} +1 -1
- package/src/errors/context-error.d.ts.map +1 -0
- package/src/errors/context-error.js +21 -0
- package/src/errors/context-error.js.map +1 -0
- package/src/{handleable.d.ts → errors/handleable.d.ts} +2 -2
- package/src/errors/handleable.d.ts.map +1 -0
- package/src/errors/handleable.js.map +1 -0
- package/src/errors/i18n-error.d.ts +32 -0
- package/src/errors/i18n-error.d.ts.map +1 -0
- package/src/errors/i18n-error.js +61 -0
- package/src/errors/i18n-error.js.map +1 -0
- package/src/errors/index.d.ts +5 -0
- package/src/errors/index.d.ts.map +1 -0
- package/src/errors/index.js +8 -0
- package/src/errors/index.js.map +1 -0
- package/src/{plugin-translatable-generic-error.d.ts → errors/plugin-translatable-generic.d.ts} +7 -7
- package/src/errors/plugin-translatable-generic.d.ts.map +1 -0
- package/src/{plugin-translatable-generic-error.js → errors/plugin-translatable-generic.js} +2 -3
- package/src/errors/plugin-translatable-generic.js.map +1 -0
- package/src/{plugin-translatable-handleable-generic.d.ts → errors/plugin-translatable-handleable-generic.d.ts} +4 -4
- package/src/errors/plugin-translatable-handleable-generic.d.ts.map +1 -0
- package/src/{plugin-translatable-handleable-generic.js → errors/plugin-translatable-handleable-generic.js} +2 -2
- package/src/errors/plugin-translatable-handleable-generic.js.map +1 -0
- package/src/errors/plugin-typed-handleable.d.ts +14 -0
- package/src/errors/plugin-typed-handleable.d.ts.map +1 -0
- package/src/{plugin-typed-handleable.js → errors/plugin-typed-handleable.js} +4 -4
- package/src/errors/plugin-typed-handleable.js.map +1 -0
- package/src/errors/translatable.d.ts +4 -0
- package/src/errors/translatable.d.ts.map +1 -0
- package/src/{translatable.js → errors/translatable.js} +4 -2
- package/src/errors/translatable.js.map +1 -0
- package/src/errors/typed-handleable.d.ts +13 -0
- package/src/errors/typed-handleable.d.ts.map +1 -0
- package/src/{typed-handleable.js → errors/typed-handleable.js} +8 -7
- package/src/errors/typed-handleable.js.map +1 -0
- package/src/{typed-error.d.ts → errors/typed.d.ts} +13 -15
- package/src/errors/typed.d.ts.map +1 -0
- package/src/{typed-error.js → errors/typed.js} +27 -23
- package/src/errors/typed.js.map +1 -0
- package/src/global-active-context.d.ts +4 -5
- package/src/global-active-context.d.ts.map +1 -1
- package/src/global-active-context.js +4 -4
- package/src/global-active-context.js.map +1 -1
- package/src/index.d.ts +15 -32
- package/src/index.d.ts.map +1 -1
- package/src/index.js +29 -37
- package/src/index.js.map +1 -1
- package/src/interfaces/component-config.interface.d.ts +9 -0
- package/src/interfaces/component-config.interface.d.ts.map +1 -0
- package/src/interfaces/component-config.interface.js +6 -0
- package/src/interfaces/component-config.interface.js.map +1 -0
- package/src/interfaces/engine-config.interface.d.ts +13 -0
- package/src/interfaces/engine-config.interface.d.ts.map +1 -0
- package/src/interfaces/engine-config.interface.js +6 -0
- package/src/interfaces/engine-config.interface.js.map +1 -0
- package/src/{i-global-active-context.d.ts → interfaces/global-active-context.d.ts} +5 -5
- package/src/interfaces/global-active-context.d.ts.map +1 -0
- package/src/{currency-format.js → interfaces/global-active-context.js} +1 -1
- package/src/interfaces/global-active-context.js.map +1 -0
- package/src/{i-handleable-error-options.d.ts → interfaces/handleable-error-options.d.ts} +1 -1
- package/src/interfaces/handleable-error-options.d.ts.map +1 -0
- package/src/{i-global-active-context.js → interfaces/handleable-error-options.js} +1 -1
- package/src/interfaces/handleable-error-options.js.map +1 -0
- package/src/{i-handleable.d.ts → interfaces/handleable.d.ts} +1 -1
- package/src/interfaces/handleable.d.ts.map +1 -0
- package/src/{i18n-config.js → interfaces/handleable.js} +1 -1
- package/src/interfaces/handleable.js.map +1 -0
- package/src/interfaces/i18n-engine.interface.d.ts +25 -0
- package/src/interfaces/i18n-engine.interface.d.ts.map +1 -0
- package/src/interfaces/i18n-engine.interface.js +6 -0
- package/src/interfaces/i18n-engine.interface.js.map +1 -0
- package/src/interfaces/index.d.ts +10 -0
- package/src/interfaces/index.d.ts.map +1 -0
- package/src/interfaces/index.js +13 -0
- package/src/interfaces/index.js.map +1 -0
- package/src/interfaces/language-definition.interface.d.ts +10 -0
- package/src/interfaces/language-definition.interface.d.ts.map +1 -0
- package/src/interfaces/language-definition.interface.js +6 -0
- package/src/interfaces/language-definition.interface.js.map +1 -0
- package/src/interfaces/translation-options.interface.d.ts +9 -0
- package/src/interfaces/translation-options.interface.d.ts.map +1 -0
- package/src/interfaces/translation-options.interface.js +6 -0
- package/src/interfaces/translation-options.interface.js.map +1 -0
- package/src/interfaces/validation-result.interface.d.ts +14 -0
- package/src/interfaces/validation-result.interface.d.ts.map +1 -0
- package/src/interfaces/validation-result.interface.js +6 -0
- package/src/interfaces/validation-result.interface.js.map +1 -0
- package/src/plugin-i18n-engine.d.ts.map +1 -1
- package/src/plugin-i18n-engine.js +20 -8
- package/src/plugin-i18n-engine.js.map +1 -1
- package/src/registry-config.d.ts +3 -2
- package/src/registry-config.d.ts.map +1 -1
- package/src/registry-error.d.ts +1 -1
- package/src/registry-error.d.ts.map +1 -1
- package/src/registry-error.js +3 -2
- package/src/registry-error.js.map +1 -1
- package/src/translation-engine.d.ts +2 -2
- package/src/translation-engine.d.ts.map +1 -1
- package/src/utils/currency.d.ts +19 -0
- package/src/utils/currency.d.ts.map +1 -0
- package/src/{currency.js → utils/currency.js} +25 -14
- package/src/utils/currency.js.map +1 -0
- package/src/utils/index.d.ts +7 -0
- package/src/utils/index.d.ts.map +1 -0
- package/src/utils/index.js +10 -0
- package/src/utils/index.js.map +1 -0
- package/src/utils/string-utils.d.ts +6 -0
- package/src/utils/string-utils.d.ts.map +1 -0
- package/src/utils/string-utils.js +34 -0
- package/src/utils/string-utils.js.map +1 -0
- package/src/utils/timezone.d.ts +13 -0
- package/src/utils/timezone.d.ts.map +1 -0
- package/src/utils/timezone.js +35 -0
- package/src/utils/timezone.js.map +1 -0
- package/src/context-error.d.ts.map +0 -1
- package/src/context-error.js +0 -18
- package/src/context-error.js.map +0 -1
- package/src/context-manager.d.ts +0 -34
- package/src/context-manager.d.ts.map +0 -1
- package/src/context-manager.js +0 -60
- package/src/context-manager.js.map +0 -1
- package/src/context.d.ts +0 -45
- package/src/context.d.ts.map +0 -1
- package/src/context.js +0 -70
- package/src/context.js.map +0 -1
- package/src/currency-code.d.ts +0 -20
- package/src/currency-code.d.ts.map +0 -1
- package/src/currency-code.js +0 -37
- package/src/currency-code.js.map +0 -1
- package/src/currency-format.d.ts +0 -11
- package/src/currency-format.d.ts.map +0 -1
- package/src/currency-format.js.map +0 -1
- package/src/currency.d.ts +0 -12
- package/src/currency.d.ts.map +0 -1
- package/src/currency.js.map +0 -1
- package/src/default-config.d.ts +0 -33
- package/src/default-config.d.ts.map +0 -1
- package/src/default-config.js +0 -102
- package/src/default-config.js.map +0 -1
- package/src/handleable.d.ts.map +0 -1
- package/src/handleable.js.map +0 -1
- package/src/i-global-active-context.d.ts.map +0 -1
- package/src/i-global-active-context.js.map +0 -1
- package/src/i-handleable-error-options.d.ts.map +0 -1
- package/src/i-handleable-error-options.js +0 -3
- package/src/i-handleable-error-options.js.map +0 -1
- package/src/i-handleable.d.ts.map +0 -1
- package/src/i-handleable.js +0 -3
- package/src/i-handleable.js.map +0 -1
- package/src/i18n-config.d.ts +0 -21
- package/src/i18n-config.d.ts.map +0 -1
- package/src/i18n-config.js.map +0 -1
- package/src/i18n-context.d.ts +0 -15
- package/src/i18n-context.d.ts.map +0 -1
- package/src/i18n-context.js +0 -3
- package/src/i18n-context.js.map +0 -1
- package/src/i18n-engine.d.ts +0 -179
- package/src/i18n-engine.d.ts.map +0 -1
- package/src/i18n-engine.js +0 -355
- package/src/i18n-engine.js.map +0 -1
- package/src/language-registry.d.ts +0 -114
- package/src/language-registry.d.ts.map +0 -1
- package/src/language-registry.js +0 -218
- package/src/language-registry.js.map +0 -1
- package/src/plugin-translatable-generic-error.d.ts.map +0 -1
- package/src/plugin-translatable-generic-error.js.map +0 -1
- package/src/plugin-translatable-handleable-generic.d.ts.map +0 -1
- package/src/plugin-translatable-handleable-generic.js.map +0 -1
- package/src/plugin-typed-handleable.d.ts +0 -15
- package/src/plugin-typed-handleable.d.ts.map +0 -1
- package/src/plugin-typed-handleable.js.map +0 -1
- package/src/timezone.d.ts +0 -12
- package/src/timezone.d.ts.map +0 -1
- package/src/timezone.js +0 -24
- package/src/timezone.js.map +0 -1
- package/src/translatable.d.ts +0 -6
- package/src/translatable.d.ts.map +0 -1
- package/src/translatable.js.map +0 -1
- package/src/typed-error.d.ts.map +0 -1
- package/src/typed-error.js.map +0 -1
- package/src/typed-handleable.d.ts +0 -15
- package/src/typed-handleable.d.ts.map +0 -1
- package/src/typed-handleable.js.map +0 -1
- package/src/unified-translator.d.ts +0 -31
- package/src/unified-translator.d.ts.map +0 -1
- package/src/unified-translator.js +0 -71
- package/src/unified-translator.js.map +0 -1
- /package/src/{handleable.js → errors/handleable.js} +0 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Main I18n Engine (no generics)
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.I18nEngine = void 0;
|
|
7
|
+
const core_i18n_1 = require("../core-i18n");
|
|
8
|
+
const errors_1 = require("../errors");
|
|
9
|
+
const component_store_1 = require("./component-store");
|
|
10
|
+
const context_manager_1 = require("./context-manager");
|
|
11
|
+
const enum_registry_1 = require("./enum-registry");
|
|
12
|
+
const language_registry_1 = require("./language-registry");
|
|
13
|
+
class I18nEngine {
|
|
14
|
+
static instances = new Map();
|
|
15
|
+
static defaultKey = null;
|
|
16
|
+
static DEFAULT_KEY = 'default';
|
|
17
|
+
static contextManager = new context_manager_1.ContextManager();
|
|
18
|
+
componentStore;
|
|
19
|
+
enumRegistry;
|
|
20
|
+
instanceKey;
|
|
21
|
+
config;
|
|
22
|
+
constructor(languages, config = {}, options) {
|
|
23
|
+
// Register languages
|
|
24
|
+
for (const lang of languages) {
|
|
25
|
+
if (!language_registry_1.LanguageRegistry.has(lang.id)) {
|
|
26
|
+
language_registry_1.LanguageRegistry.register(lang);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Set defaults
|
|
30
|
+
const defaultLang = languages.find((l) => l.isDefault) || languages[0];
|
|
31
|
+
this.config = {
|
|
32
|
+
defaultLanguage: config.defaultLanguage || defaultLang.id,
|
|
33
|
+
fallbackLanguage: config.fallbackLanguage || defaultLang.id,
|
|
34
|
+
constants: config.constants || {},
|
|
35
|
+
validation: {
|
|
36
|
+
requireCompleteStrings: false,
|
|
37
|
+
allowPartialRegistration: true,
|
|
38
|
+
...config.validation,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
this.componentStore = new component_store_1.ComponentStore(this.config.constants);
|
|
42
|
+
this.enumRegistry = new enum_registry_1.EnumRegistry((key, vars) => this.safeTranslate(core_i18n_1.CoreI18nComponentId, key, vars));
|
|
43
|
+
this.instanceKey = options?.instanceKey || I18nEngine.DEFAULT_KEY;
|
|
44
|
+
// Create context
|
|
45
|
+
I18nEngine.contextManager.create(this.instanceKey, this.config.defaultLanguage);
|
|
46
|
+
// Register instance
|
|
47
|
+
if (options?.registerInstance !== false) {
|
|
48
|
+
if (I18nEngine.instances.has(this.instanceKey)) {
|
|
49
|
+
throw errors_1.I18nError.instanceExists(this.instanceKey);
|
|
50
|
+
}
|
|
51
|
+
I18nEngine.instances.set(this.instanceKey, this);
|
|
52
|
+
if (options?.setAsDefault !== false || !I18nEngine.defaultKey) {
|
|
53
|
+
I18nEngine.defaultKey = this.instanceKey;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Component management
|
|
58
|
+
register(config) {
|
|
59
|
+
return this.componentStore.register(config);
|
|
60
|
+
}
|
|
61
|
+
updateStrings(componentId, strings) {
|
|
62
|
+
return this.componentStore.update(componentId, strings);
|
|
63
|
+
}
|
|
64
|
+
hasComponent(componentId) {
|
|
65
|
+
return this.componentStore.has(componentId);
|
|
66
|
+
}
|
|
67
|
+
getComponents() {
|
|
68
|
+
return this.componentStore.getAll();
|
|
69
|
+
}
|
|
70
|
+
// Translation
|
|
71
|
+
translate(componentId, key, variables, language) {
|
|
72
|
+
const lang = language || I18nEngine.contextManager.getCurrentLanguage(this.instanceKey);
|
|
73
|
+
return this.componentStore.translate(componentId, key, variables, lang);
|
|
74
|
+
}
|
|
75
|
+
safeTranslate(componentId, key, variables, language) {
|
|
76
|
+
const lang = language || I18nEngine.contextManager.getCurrentLanguage(this.instanceKey);
|
|
77
|
+
return this.componentStore.safeTranslate(componentId, key, variables, lang);
|
|
78
|
+
}
|
|
79
|
+
t(template, variables, language) {
|
|
80
|
+
const lang = language || I18nEngine.contextManager.getCurrentLanguage(this.instanceKey);
|
|
81
|
+
// Replace {{component.key}} patterns
|
|
82
|
+
let result = template.replace(/\{\{([^}]+)\}\}/g, (match, pattern) => {
|
|
83
|
+
const parts = pattern.split('.');
|
|
84
|
+
if (parts.length === 2) {
|
|
85
|
+
const [componentId, key] = parts.map((p) => p.trim());
|
|
86
|
+
return this.safeTranslate(componentId, key, variables, lang);
|
|
87
|
+
}
|
|
88
|
+
return match;
|
|
89
|
+
});
|
|
90
|
+
// Replace {variable} patterns
|
|
91
|
+
if (variables) {
|
|
92
|
+
result = result.replace(/\{(\w+)\}/g, (match, varName) => {
|
|
93
|
+
return variables[varName] !== undefined ? String(variables[varName]) : match;
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
// Language management
|
|
99
|
+
registerLanguage(language) {
|
|
100
|
+
language_registry_1.LanguageRegistry.register(language);
|
|
101
|
+
}
|
|
102
|
+
setLanguage(language) {
|
|
103
|
+
if (!language_registry_1.LanguageRegistry.has(language)) {
|
|
104
|
+
throw errors_1.I18nError.languageNotFound(language);
|
|
105
|
+
}
|
|
106
|
+
I18nEngine.contextManager.setLanguage(this.instanceKey, language);
|
|
107
|
+
}
|
|
108
|
+
setAdminLanguage(language) {
|
|
109
|
+
if (!language_registry_1.LanguageRegistry.has(language)) {
|
|
110
|
+
throw errors_1.I18nError.languageNotFound(language);
|
|
111
|
+
}
|
|
112
|
+
I18nEngine.contextManager.setAdminLanguage(this.instanceKey, language);
|
|
113
|
+
}
|
|
114
|
+
getLanguages() {
|
|
115
|
+
return language_registry_1.LanguageRegistry.getAll();
|
|
116
|
+
}
|
|
117
|
+
hasLanguage(language) {
|
|
118
|
+
return language_registry_1.LanguageRegistry.has(language);
|
|
119
|
+
}
|
|
120
|
+
// Context management
|
|
121
|
+
switchToAdmin() {
|
|
122
|
+
I18nEngine.contextManager.switchToAdmin(this.instanceKey);
|
|
123
|
+
}
|
|
124
|
+
switchToUser() {
|
|
125
|
+
I18nEngine.contextManager.switchToUser(this.instanceKey);
|
|
126
|
+
}
|
|
127
|
+
getCurrentLanguage() {
|
|
128
|
+
return I18nEngine.contextManager.getCurrentLanguage(this.instanceKey);
|
|
129
|
+
}
|
|
130
|
+
// Enum translation
|
|
131
|
+
registerEnum(enumObj, translations, enumName) {
|
|
132
|
+
this.enumRegistry.register(enumObj, translations, enumName);
|
|
133
|
+
}
|
|
134
|
+
translateEnum(enumObj, value, language) {
|
|
135
|
+
const lang = language || this.getCurrentLanguage();
|
|
136
|
+
return this.enumRegistry.translate(enumObj, value, lang);
|
|
137
|
+
}
|
|
138
|
+
hasEnum(enumObj) {
|
|
139
|
+
return this.enumRegistry.has(enumObj);
|
|
140
|
+
}
|
|
141
|
+
// Validation
|
|
142
|
+
validate() {
|
|
143
|
+
const errors = [];
|
|
144
|
+
const warnings = [];
|
|
145
|
+
for (const component of this.componentStore.getAll()) {
|
|
146
|
+
const result = this.componentStore.register(component);
|
|
147
|
+
errors.push(...result.errors);
|
|
148
|
+
warnings.push(...result.warnings);
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
isValid: errors.length === 0,
|
|
152
|
+
errors,
|
|
153
|
+
warnings,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
// Static methods
|
|
157
|
+
static createInstance(key, languages, config) {
|
|
158
|
+
return new I18nEngine(languages, config, {
|
|
159
|
+
instanceKey: key,
|
|
160
|
+
registerInstance: true,
|
|
161
|
+
setAsDefault: false,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
static getInstance(key) {
|
|
165
|
+
const instanceKey = key || I18nEngine.defaultKey || I18nEngine.DEFAULT_KEY;
|
|
166
|
+
const instance = I18nEngine.instances.get(instanceKey);
|
|
167
|
+
if (!instance) {
|
|
168
|
+
throw errors_1.I18nError.instanceNotFound(instanceKey);
|
|
169
|
+
}
|
|
170
|
+
return instance;
|
|
171
|
+
}
|
|
172
|
+
static hasInstance(key) {
|
|
173
|
+
const instanceKey = key || I18nEngine.DEFAULT_KEY;
|
|
174
|
+
return I18nEngine.instances.has(instanceKey);
|
|
175
|
+
}
|
|
176
|
+
static removeInstance(key) {
|
|
177
|
+
const instanceKey = key || I18nEngine.DEFAULT_KEY;
|
|
178
|
+
const removed = I18nEngine.instances.delete(instanceKey);
|
|
179
|
+
if (removed && I18nEngine.defaultKey === instanceKey) {
|
|
180
|
+
I18nEngine.defaultKey = null;
|
|
181
|
+
}
|
|
182
|
+
return removed;
|
|
183
|
+
}
|
|
184
|
+
static resetAll() {
|
|
185
|
+
I18nEngine.instances.clear();
|
|
186
|
+
I18nEngine.defaultKey = null;
|
|
187
|
+
I18nEngine.contextManager.clear();
|
|
188
|
+
language_registry_1.LanguageRegistry.clear();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
exports.I18nEngine = I18nEngine;
|
|
192
|
+
//# sourceMappingURL=i18n-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n-engine.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/core/i18n-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Core exports
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const tslib_1 = require("tslib");
|
|
7
|
+
tslib_1.__exportStar(require("./component-store"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./context-manager"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./enum-registry"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./i18n-engine"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./language-registry"), exports);
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/core/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,4DAAkC;AAClC,4DAAkC;AAClC,0DAAgC;AAChC,wDAA8B;AAC9B,8DAAoC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static language registry (no generics)
|
|
3
|
+
*/
|
|
4
|
+
import { LanguageDefinition } from '../interfaces';
|
|
5
|
+
export declare class LanguageRegistry {
|
|
6
|
+
private static languages;
|
|
7
|
+
private static defaultLanguageId;
|
|
8
|
+
static register(language: LanguageDefinition): void;
|
|
9
|
+
static has(languageId: string): boolean;
|
|
10
|
+
static get(languageId: string): LanguageDefinition;
|
|
11
|
+
static getAll(): readonly LanguageDefinition[];
|
|
12
|
+
static getIds(): readonly string[];
|
|
13
|
+
static getCodes(): readonly string[];
|
|
14
|
+
static getDefault(): LanguageDefinition | null;
|
|
15
|
+
static getByCode(code: string): LanguageDefinition | undefined;
|
|
16
|
+
static getMatchingCode(requestedCode?: string, userDefaultCode?: string): string;
|
|
17
|
+
static clear(): void;
|
|
18
|
+
static hasLanguage(languageId: string): boolean;
|
|
19
|
+
static registerLanguage(language: LanguageDefinition): void;
|
|
20
|
+
static registerLanguages(languages: readonly LanguageDefinition[]): void;
|
|
21
|
+
static getLanguageIds(): readonly string[];
|
|
22
|
+
static getAllLanguages(): readonly LanguageDefinition[];
|
|
23
|
+
static getLanguageByCode(code: string): LanguageDefinition | undefined;
|
|
24
|
+
static getLanguage(languageId: string): LanguageDefinition | undefined;
|
|
25
|
+
static hasLanguageCode(code: string): boolean;
|
|
26
|
+
static getDefaultLanguageId(): string | null;
|
|
27
|
+
static getLanguageCount(): number;
|
|
28
|
+
static getDefaultLanguage(): LanguageDefinition | null;
|
|
29
|
+
static setDefaultLanguage(languageId: string): void;
|
|
30
|
+
static validateRequiredLanguages(requiredLanguages: readonly string[]): {
|
|
31
|
+
isValid: boolean;
|
|
32
|
+
missingLanguages: readonly string[];
|
|
33
|
+
errors: readonly string[];
|
|
34
|
+
};
|
|
35
|
+
static getLanguageDisplayNames(): Record<string, string>;
|
|
36
|
+
static getLanguageCodeMapping(): Record<string, string>;
|
|
37
|
+
static findLanguagesByName(partialName: string): readonly LanguageDefinition[];
|
|
38
|
+
static getLanguageCodes(): readonly string[];
|
|
39
|
+
static getMatchingLanguageCode(requestedCode?: string, userDefaultCode?: string): string;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=language-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-registry.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/core/language-registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAyC;IACjE,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAuB;IAEvD,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAiBnD,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIvC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB;IAQlD,MAAM,CAAC,MAAM,IAAI,SAAS,kBAAkB,EAAE;IAI9C,MAAM,CAAC,MAAM,IAAI,SAAS,MAAM,EAAE;IAIlC,MAAM,CAAC,QAAQ,IAAI,SAAS,MAAM,EAAE;IAIpC,MAAM,CAAC,UAAU,IAAI,kBAAkB,GAAG,IAAI;IAO9C,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI9D,MAAM,CAAC,eAAe,CACpB,aAAa,CAAC,EAAE,MAAM,EACtB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM;IAiBT,MAAM,CAAC,KAAK,IAAI,IAAI;IAMpB,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI/C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAI3D,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,GAAG,IAAI;IAIxE,MAAM,CAAC,cAAc,IAAI,SAAS,MAAM,EAAE;IAI1C,MAAM,CAAC,eAAe,IAAI,SAAS,kBAAkB,EAAE;IAIvD,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAItE,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAQtE,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7C,MAAM,CAAC,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAI5C,MAAM,CAAC,gBAAgB,IAAI,MAAM;IAIjC,MAAM,CAAC,kBAAkB,IAAI,kBAAkB,GAAG,IAAI;IAItD,MAAM,CAAC,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAOnD,MAAM,CAAC,yBAAyB,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,GAAG;QACtE,OAAO,EAAE,OAAO,CAAC;QACjB,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;QACpC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;KAC3B;IAkBD,MAAM,CAAC,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQxD,MAAM,CAAC,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQvD,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,kBAAkB,EAAE;IAO9E,MAAM,CAAC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAI5C,MAAM,CAAC,uBAAuB,CAC5B,aAAa,CAAC,EAAE,MAAM,EACtB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM;CAGV"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Static language registry (no generics)
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.LanguageRegistry = void 0;
|
|
7
|
+
const errors_1 = require("../errors");
|
|
8
|
+
class LanguageRegistry {
|
|
9
|
+
static languages = new Map();
|
|
10
|
+
static defaultLanguageId = null;
|
|
11
|
+
static register(language) {
|
|
12
|
+
if (this.languages.has(language.id)) {
|
|
13
|
+
throw errors_1.I18nError.duplicateLanguage(language.id);
|
|
14
|
+
}
|
|
15
|
+
const existing = this.getByCode(language.code);
|
|
16
|
+
if (existing) {
|
|
17
|
+
throw errors_1.I18nError.duplicateLanguage(language.id);
|
|
18
|
+
}
|
|
19
|
+
this.languages.set(language.id, language);
|
|
20
|
+
if (language.isDefault || !this.defaultLanguageId) {
|
|
21
|
+
this.defaultLanguageId = language.id;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
static has(languageId) {
|
|
25
|
+
return this.languages.has(languageId);
|
|
26
|
+
}
|
|
27
|
+
static get(languageId) {
|
|
28
|
+
const lang = this.languages.get(languageId);
|
|
29
|
+
if (!lang) {
|
|
30
|
+
throw errors_1.I18nError.languageNotFound(languageId);
|
|
31
|
+
}
|
|
32
|
+
return lang;
|
|
33
|
+
}
|
|
34
|
+
static getAll() {
|
|
35
|
+
return Array.from(this.languages.values());
|
|
36
|
+
}
|
|
37
|
+
static getIds() {
|
|
38
|
+
return Array.from(this.languages.keys());
|
|
39
|
+
}
|
|
40
|
+
static getCodes() {
|
|
41
|
+
return Array.from(this.languages.values()).map((l) => l.code);
|
|
42
|
+
}
|
|
43
|
+
static getDefault() {
|
|
44
|
+
if (!this.defaultLanguageId) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return this.get(this.defaultLanguageId);
|
|
48
|
+
}
|
|
49
|
+
static getByCode(code) {
|
|
50
|
+
return Array.from(this.languages.values()).find((l) => l.code === code);
|
|
51
|
+
}
|
|
52
|
+
static getMatchingCode(requestedCode, userDefaultCode) {
|
|
53
|
+
const trimmedRequested = requestedCode?.trim();
|
|
54
|
+
const trimmedUserDefault = userDefaultCode?.trim();
|
|
55
|
+
if (trimmedRequested && this.getByCode(trimmedRequested)) {
|
|
56
|
+
return trimmedRequested;
|
|
57
|
+
}
|
|
58
|
+
if (trimmedUserDefault && this.getByCode(trimmedUserDefault)) {
|
|
59
|
+
return trimmedUserDefault;
|
|
60
|
+
}
|
|
61
|
+
const defaultLang = this.getDefault();
|
|
62
|
+
if (!defaultLang) {
|
|
63
|
+
throw errors_1.I18nError.invalidConfig('No default language configured');
|
|
64
|
+
}
|
|
65
|
+
return defaultLang.code;
|
|
66
|
+
}
|
|
67
|
+
static clear() {
|
|
68
|
+
this.languages.clear();
|
|
69
|
+
this.defaultLanguageId = null;
|
|
70
|
+
}
|
|
71
|
+
// V1 compatibility methods
|
|
72
|
+
static hasLanguage(languageId) {
|
|
73
|
+
return this.has(languageId);
|
|
74
|
+
}
|
|
75
|
+
static registerLanguage(language) {
|
|
76
|
+
this.register(language);
|
|
77
|
+
}
|
|
78
|
+
static registerLanguages(languages) {
|
|
79
|
+
languages.forEach(lang => this.register(lang));
|
|
80
|
+
}
|
|
81
|
+
static getLanguageIds() {
|
|
82
|
+
return this.getIds();
|
|
83
|
+
}
|
|
84
|
+
static getAllLanguages() {
|
|
85
|
+
return this.getAll();
|
|
86
|
+
}
|
|
87
|
+
static getLanguageByCode(code) {
|
|
88
|
+
return this.getByCode(code);
|
|
89
|
+
}
|
|
90
|
+
static getLanguage(languageId) {
|
|
91
|
+
try {
|
|
92
|
+
return this.get(languageId);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
static hasLanguageCode(code) {
|
|
99
|
+
return this.getByCode(code) !== undefined;
|
|
100
|
+
}
|
|
101
|
+
static getDefaultLanguageId() {
|
|
102
|
+
return this.defaultLanguageId;
|
|
103
|
+
}
|
|
104
|
+
static getLanguageCount() {
|
|
105
|
+
return this.languages.size;
|
|
106
|
+
}
|
|
107
|
+
static getDefaultLanguage() {
|
|
108
|
+
return this.getDefault();
|
|
109
|
+
}
|
|
110
|
+
static setDefaultLanguage(languageId) {
|
|
111
|
+
if (!this.has(languageId)) {
|
|
112
|
+
throw errors_1.I18nError.languageNotFound(languageId);
|
|
113
|
+
}
|
|
114
|
+
this.defaultLanguageId = languageId;
|
|
115
|
+
}
|
|
116
|
+
static validateRequiredLanguages(requiredLanguages) {
|
|
117
|
+
const missingLanguages = [];
|
|
118
|
+
const errors = [];
|
|
119
|
+
for (const languageId of requiredLanguages) {
|
|
120
|
+
if (!this.has(languageId)) {
|
|
121
|
+
missingLanguages.push(languageId);
|
|
122
|
+
errors.push(`Required language '${languageId}' is not registered`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
isValid: missingLanguages.length === 0,
|
|
127
|
+
missingLanguages,
|
|
128
|
+
errors,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
static getLanguageDisplayNames() {
|
|
132
|
+
const result = {};
|
|
133
|
+
for (const [languageId, language] of this.languages) {
|
|
134
|
+
result[languageId] = language.name;
|
|
135
|
+
}
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
static getLanguageCodeMapping() {
|
|
139
|
+
const result = {};
|
|
140
|
+
for (const [languageId, language] of this.languages) {
|
|
141
|
+
result[languageId] = language.code;
|
|
142
|
+
}
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
static findLanguagesByName(partialName) {
|
|
146
|
+
const searchTerm = partialName.toLowerCase();
|
|
147
|
+
return Array.from(this.languages.values()).filter((language) => language.name.toLowerCase().includes(searchTerm));
|
|
148
|
+
}
|
|
149
|
+
static getLanguageCodes() {
|
|
150
|
+
return this.getCodes();
|
|
151
|
+
}
|
|
152
|
+
static getMatchingLanguageCode(requestedCode, userDefaultCode) {
|
|
153
|
+
return this.getMatchingCode(requestedCode, userDefaultCode);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.LanguageRegistry = LanguageRegistry;
|
|
157
|
+
//# sourceMappingURL=language-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-registry.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-i18n-lib/src/core/language-registry.ts"],"names":[],"mappings":"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"}
|
package/src/core-i18n.d.ts
CHANGED
|
@@ -48,12 +48,16 @@ export declare function getCoreLanguageDefinitions(): LanguageDefinition[];
|
|
|
48
48
|
* Returns engine with string type - use registry for language validation
|
|
49
49
|
*/
|
|
50
50
|
export declare function createCoreI18nEngine(instanceKey?: string): PluginI18nEngine<string>;
|
|
51
|
+
export declare function getCoreI18nEngine(): PluginI18nEngine<string>;
|
|
52
|
+
export declare const coreI18nEngine: PluginI18nEngine<string>;
|
|
53
|
+
export declare function resetCoreI18nEngine(): void;
|
|
51
54
|
/**
|
|
52
55
|
* Type alias for easier usage
|
|
53
56
|
*/
|
|
54
57
|
export type CoreI18nEngine = PluginI18nEngine<string>;
|
|
55
58
|
/**
|
|
56
59
|
* Helper function to get core translation
|
|
60
|
+
* Uses the core engine instance to ensure core strings are available
|
|
57
61
|
*/
|
|
58
62
|
export declare function getCoreTranslation(stringKey: CoreStringKey, variables?: Record<string, string | number>, language?: string, instanceKey?: string): string;
|
|
59
63
|
/**
|
package/src/core-i18n.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-i18n.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/core-i18n.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"core-i18n.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/core-i18n.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAsBxD;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAC1B,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAErD;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAI1C;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,kBAAkB,EAAE,CA4C7D;AAED,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,mBAAmB,CAAC,aAAa,CAItE,CAAC;AAEF;;GAEG;AACH,wBAAgB,0BAA0B,qFAwkBzC;AAED;;GAEG;AACH,wBAAgB,+BAA+B,IAAI,qBAAqB,CACtE,aAAa,EACb,MAAM,CACP,CAKA;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,kBAAkB,EAAE,CAEjE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,GAAE,MAA2B,GACvC,gBAAgB,CAAC,MAAM,CAAC,CAQ1B;AAMD,wBAAgB,iBAAiB,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAK5D;AAGD,eAAO,MAAM,cAAc,0BAIzB,CAAC;AAGH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,aAAa,EACxB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAC3C,QAAQ,CAAC,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,aAAa,EACxB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAC3C,QAAQ,CAAC,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAMR"}
|