@siemens/element-translate-ng 47.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/LICENSE.md +20 -0
- package/README.md +68 -0
- package/angular-localize/index.d.ts +6 -0
- package/angular-localize/package.json +3 -0
- package/angular-localize/si-translate-ng-localize-service-builder.service.d.ts +12 -0
- package/angular-localize/si-translate-ng-localize.module.d.ts +11 -0
- package/angular-localize/si-translate-ng-localize.provider.d.ts +10 -0
- package/angular-localize/si-translate-ng-localize.service.d.ts +7 -0
- package/bin/update-translatable-keys.js +120 -0
- package/fesm2022/siemens-element-translate-ng-angular-localize.mjs +89 -0
- package/fesm2022/siemens-element-translate-ng-angular-localize.mjs.map +1 -0
- package/fesm2022/siemens-element-translate-ng-localize-types.mjs +4 -0
- package/fesm2022/siemens-element-translate-ng-localize-types.mjs.map +1 -0
- package/fesm2022/siemens-element-translate-ng-ngx-translate.mjs +157 -0
- package/fesm2022/siemens-element-translate-ng-ngx-translate.mjs.map +1 -0
- package/fesm2022/siemens-element-translate-ng-translate-types.mjs +9 -0
- package/fesm2022/siemens-element-translate-ng-translate-types.mjs.map +1 -0
- package/fesm2022/siemens-element-translate-ng-translate.mjs +346 -0
- package/fesm2022/siemens-element-translate-ng-translate.mjs.map +1 -0
- package/fesm2022/siemens-element-translate-ng.mjs +14 -0
- package/fesm2022/siemens-element-translate-ng.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/localize-types/index.d.ts +11 -0
- package/localize-types/package.json +3 -0
- package/ngx-translate/index.d.ts +6 -0
- package/ngx-translate/package.json +3 -0
- package/ngx-translate/si-translate-ngxt.module.d.ts +11 -0
- package/ngx-translate/si-translate-ngxt.provider.d.ts +10 -0
- package/ngx-translate/si-translate-ngxt.service-builder.d.ts +19 -0
- package/ngx-translate/si-translate-ngxt.service.d.ts +28 -0
- package/package.json +72 -0
- package/public-api.d.ts +8 -0
- package/translate/global.scope.d.ts +8 -0
- package/translate/index.d.ts +14 -0
- package/translate/package.json +3 -0
- package/translate/si-localize.d.ts +4 -0
- package/translate/si-no-translate.service-builder.d.ts +14 -0
- package/translate/si-no-translate.service.d.ts +21 -0
- package/translate/si-translatable.model.d.ts +6 -0
- package/translate/si-translatable.service.d.ts +11 -0
- package/translate/si-translate.module.d.ts +14 -0
- package/translate/si-translate.pipe.d.ts +30 -0
- package/translate/si-translate.service-builder.d.ts +21 -0
- package/translate/si-translate.service.d.ts +96 -0
- package/translate/testing/si-translate.mock-service-builder.factory.d.ts +7 -0
- package/translate-types/README.md +6 -0
- package/translate-types/global.types.d.ts +19 -0
- package/translate-types/index.d.ts +5 -0
- package/translate-types/package.json +3 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, Injectable, ChangeDetectorRef, Pipe, Injector, NgModule } from '@angular/core';
|
|
3
|
+
import { NEVER, of } from 'rxjs';
|
|
4
|
+
import { DOCUMENT } from '@angular/common';
|
|
5
|
+
export * from '@siemens/element-translate-ng/translate-types';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Copyright Siemens 2016 - 2025.
|
|
9
|
+
* SPDX-License-Identifier: MIT
|
|
10
|
+
*/
|
|
11
|
+
const SI_TRANSLATABLE_VALUES = new InjectionToken('si-element-translatable-values');
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* This var provides access to the global scope object based on the current runtime.
|
|
15
|
+
* On Browser its is the window, on Node.js it is global.
|
|
16
|
+
*
|
|
17
|
+
* Whenever possible, inject(DOCUMENT) is preferred over this approach.
|
|
18
|
+
*/
|
|
19
|
+
let globalScope;
|
|
20
|
+
// we are either running Browser or on NodeJS
|
|
21
|
+
if (typeof window !== 'undefined') {
|
|
22
|
+
globalScope = window;
|
|
23
|
+
}
|
|
24
|
+
else if (typeof global !== 'undefined') {
|
|
25
|
+
globalScope = global;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Copyright Siemens 2016 - 2025.
|
|
30
|
+
* SPDX-License-Identifier: MIT
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* @returns The culture language code of the browser, e.g. "en-US".
|
|
34
|
+
*/
|
|
35
|
+
const getBrowserCultureLanguage = () => window?.navigator?.languages?.[0] ?? window?.navigator?.language;
|
|
36
|
+
/**
|
|
37
|
+
* @returns The language code of the browser, e.g. "en".
|
|
38
|
+
*/
|
|
39
|
+
const getBrowserLanguage = () => getBrowserCultureLanguage()?.split(/-|_/)[0];
|
|
40
|
+
/**
|
|
41
|
+
* Wrapper around an actual translation framework which is meant to be used internally by Element.
|
|
42
|
+
* Applications must not use this service.
|
|
43
|
+
*
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
class SiTranslateService {
|
|
47
|
+
translationChange$ = NEVER;
|
|
48
|
+
documentRef = inject(DOCUMENT);
|
|
49
|
+
prevent$LocalizeInit;
|
|
50
|
+
/**
|
|
51
|
+
* If the underlying translation library supports switching the language
|
|
52
|
+
* and/or updating the translation texts, this observable will emit.
|
|
53
|
+
* There is no initial emit.
|
|
54
|
+
*/
|
|
55
|
+
get translationChange() {
|
|
56
|
+
return this.translationChange$;
|
|
57
|
+
}
|
|
58
|
+
setDocumentLanguage(lang) {
|
|
59
|
+
this.documentRef?.documentElement?.setAttribute('lang', lang);
|
|
60
|
+
}
|
|
61
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTranslateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
62
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTranslateService });
|
|
63
|
+
}
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTranslateService, decorators: [{
|
|
65
|
+
type: Injectable
|
|
66
|
+
}] });
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Copyright Siemens 2016 - 2025.
|
|
70
|
+
* SPDX-License-Identifier: MIT
|
|
71
|
+
*/
|
|
72
|
+
const arrayToRecord = (keys) => keys.reduce((acc, cur) => {
|
|
73
|
+
acc[cur] = cur;
|
|
74
|
+
return acc;
|
|
75
|
+
}, {});
|
|
76
|
+
const replacePlaceholders = (str, params) => {
|
|
77
|
+
return str.replace(/{{\s*([^}]+)\s*}}/g, (match, p1) => {
|
|
78
|
+
return params[p1] !== undefined ? String(params[p1]) : match;
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Pass through implementation of the {@link SiTranslateService} which is used as a default.
|
|
83
|
+
*
|
|
84
|
+
* @internal
|
|
85
|
+
*/
|
|
86
|
+
class SiNoTranslateService extends SiTranslateService {
|
|
87
|
+
get currentLanguage() {
|
|
88
|
+
return 'en';
|
|
89
|
+
}
|
|
90
|
+
get availableLanguages() {
|
|
91
|
+
return ['en'];
|
|
92
|
+
}
|
|
93
|
+
set availableLanguages(lang) { }
|
|
94
|
+
setCurrentLanguage(lang) {
|
|
95
|
+
return of();
|
|
96
|
+
}
|
|
97
|
+
getDefaultLanguage() {
|
|
98
|
+
return 'en';
|
|
99
|
+
}
|
|
100
|
+
setDefaultLanguage(lang) { }
|
|
101
|
+
translate(keys, _params) {
|
|
102
|
+
const translateKey = (key) => {
|
|
103
|
+
return _params ? replacePlaceholders(key, _params) : key;
|
|
104
|
+
};
|
|
105
|
+
if (typeof keys === 'string') {
|
|
106
|
+
return translateKey(keys);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
const translatedKeys = keys.map(translateKey);
|
|
110
|
+
return arrayToRecord(translatedKeys);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
translateSync(keys, params) {
|
|
114
|
+
return this.translate(keys, params);
|
|
115
|
+
}
|
|
116
|
+
translateAsync(keys, params) {
|
|
117
|
+
return of(this.translate(keys, params));
|
|
118
|
+
}
|
|
119
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiNoTranslateService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
120
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiNoTranslateService, providedIn: 'root' });
|
|
121
|
+
}
|
|
122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiNoTranslateService, decorators: [{
|
|
123
|
+
type: Injectable,
|
|
124
|
+
args: [{ providedIn: 'root' }]
|
|
125
|
+
}] });
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Copyright Siemens 2016 - 2025.
|
|
129
|
+
* SPDX-License-Identifier: MIT
|
|
130
|
+
*/
|
|
131
|
+
class SiTranslatableService {
|
|
132
|
+
translatableValues;
|
|
133
|
+
isNoTranslate;
|
|
134
|
+
siTranslateService;
|
|
135
|
+
constructor() {
|
|
136
|
+
this.siTranslateService =
|
|
137
|
+
inject(SiTranslateService, { optional: true }) ?? inject(SiNoTranslateService);
|
|
138
|
+
const translateValues = inject(SI_TRANSLATABLE_VALUES, { optional: true });
|
|
139
|
+
this.translatableValues = translateValues?.reduce((a, b) => ({ ...a, ...b })) ?? {};
|
|
140
|
+
this.isNoTranslate = this.siTranslateService instanceof SiNoTranslateService;
|
|
141
|
+
}
|
|
142
|
+
resolveText(key, originalText) {
|
|
143
|
+
if (this.siTranslateService.setTranslation) {
|
|
144
|
+
this.siTranslateService.setTranslation(key, originalText);
|
|
145
|
+
}
|
|
146
|
+
return this.translatableValues[key] ?? (this.isNoTranslate ? originalText : key);
|
|
147
|
+
}
|
|
148
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTranslatableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
149
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTranslatableService, providedIn: 'root' });
|
|
150
|
+
}
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTranslatableService, decorators: [{
|
|
152
|
+
type: Injectable,
|
|
153
|
+
args: [{
|
|
154
|
+
providedIn: 'root'
|
|
155
|
+
}]
|
|
156
|
+
}], ctorParameters: () => [] });
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Copyright Siemens 2016 - 2025.
|
|
160
|
+
* SPDX-License-Identifier: MIT
|
|
161
|
+
*/
|
|
162
|
+
// an alternative implementation for $localize meant to be used for translation frameworks other than @angular/localize
|
|
163
|
+
const $localize = (strings, ...expressions) => {
|
|
164
|
+
if (strings.length !== 1) {
|
|
165
|
+
throw new Error('$localize calls using @siemens/element-translate-ng do not support parameter interpolation');
|
|
166
|
+
}
|
|
167
|
+
const firstPart = strings[0];
|
|
168
|
+
const [, key, value] = /:.*?@@(.*?):(.*)/.exec(firstPart);
|
|
169
|
+
return Zone.current.get('siResolveLocalize')(key, value);
|
|
170
|
+
};
|
|
171
|
+
const siResolveLocalize = (key, value) => inject(SiTranslatableService).resolveText(key, value);
|
|
172
|
+
/**
|
|
173
|
+
* Initializes the Element version of $localize. Can be called multiple times.
|
|
174
|
+
*/
|
|
175
|
+
const initSiLocalize = () => {
|
|
176
|
+
Zone.current._properties.siResolveLocalize = siResolveLocalize;
|
|
177
|
+
globalScope.$localize = $localize;
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Copyright Siemens 2016 - 2025.
|
|
182
|
+
* SPDX-License-Identifier: MIT
|
|
183
|
+
*/
|
|
184
|
+
/**
|
|
185
|
+
* Provide this class to build a custom translation service.
|
|
186
|
+
*
|
|
187
|
+
* @internal
|
|
188
|
+
*/
|
|
189
|
+
class SiTranslateServiceBuilder {
|
|
190
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTranslateServiceBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
191
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTranslateServiceBuilder });
|
|
192
|
+
}
|
|
193
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTranslateServiceBuilder, decorators: [{
|
|
194
|
+
type: Injectable
|
|
195
|
+
}] });
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Copyright Siemens 2016 - 2025.
|
|
199
|
+
* SPDX-License-Identifier: MIT
|
|
200
|
+
*/
|
|
201
|
+
/**
|
|
202
|
+
* Always returns the same instance of {@link SiNoTranslateService}
|
|
203
|
+
*
|
|
204
|
+
* @internal
|
|
205
|
+
*/
|
|
206
|
+
class SiNoTranslateServiceBuilder extends SiTranslateServiceBuilder {
|
|
207
|
+
siNoTranslateService = inject(SiNoTranslateService);
|
|
208
|
+
buildService() {
|
|
209
|
+
return this.siNoTranslateService;
|
|
210
|
+
}
|
|
211
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiNoTranslateServiceBuilder, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
212
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiNoTranslateServiceBuilder, providedIn: 'root' });
|
|
213
|
+
}
|
|
214
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiNoTranslateServiceBuilder, decorators: [{
|
|
215
|
+
type: Injectable,
|
|
216
|
+
args: [{ providedIn: 'root' }]
|
|
217
|
+
}] });
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Copyright Siemens 2016 - 2025.
|
|
221
|
+
* SPDX-License-Identifier: MIT
|
|
222
|
+
*/
|
|
223
|
+
/**
|
|
224
|
+
* Translates keys by using the {@link SiTranslateService}.
|
|
225
|
+
* Within Element this pipe should be used instead of ngx-translates `translate` pipe.
|
|
226
|
+
* Outside Element, this pipe should NOT be used.
|
|
227
|
+
*
|
|
228
|
+
* @internal
|
|
229
|
+
*/
|
|
230
|
+
class SiTranslatePipe {
|
|
231
|
+
lastKeyParams;
|
|
232
|
+
value = '';
|
|
233
|
+
subscription;
|
|
234
|
+
siTranslateService = inject(SiTranslateService);
|
|
235
|
+
cdRef = inject(ChangeDetectorRef);
|
|
236
|
+
transform(key, params) {
|
|
237
|
+
if (!key) {
|
|
238
|
+
return key;
|
|
239
|
+
}
|
|
240
|
+
const currentKeyParams = params ? `${key}-${JSON.stringify(params)}` : key;
|
|
241
|
+
if (this.lastKeyParams === currentKeyParams) {
|
|
242
|
+
return this.value;
|
|
243
|
+
}
|
|
244
|
+
this.subscription?.unsubscribe();
|
|
245
|
+
const translate = this.siTranslateService.translate(key, params);
|
|
246
|
+
if (typeof translate === 'string') {
|
|
247
|
+
this.updateValue(currentKeyParams, translate);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
this.subscription = translate.subscribe(value => this.updateValue(currentKeyParams, value));
|
|
251
|
+
}
|
|
252
|
+
return this.value;
|
|
253
|
+
}
|
|
254
|
+
ngOnDestroy() {
|
|
255
|
+
this.subscription?.unsubscribe();
|
|
256
|
+
this.subscription = undefined;
|
|
257
|
+
}
|
|
258
|
+
updateValue(currentKeyParams, value) {
|
|
259
|
+
this.lastKeyParams = currentKeyParams;
|
|
260
|
+
this.value = value;
|
|
261
|
+
this.cdRef.markForCheck();
|
|
262
|
+
}
|
|
263
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTranslatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
264
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiTranslatePipe, isStandalone: false, name: "translate", pure: false });
|
|
265
|
+
}
|
|
266
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTranslatePipe, decorators: [{
|
|
267
|
+
type: Pipe,
|
|
268
|
+
args: [{
|
|
269
|
+
name: 'translate',
|
|
270
|
+
// eslint-disable-next-line @angular-eslint/no-pipe-impure
|
|
271
|
+
pure: false,
|
|
272
|
+
// eslint-disable-next-line @angular-eslint/prefer-standalone
|
|
273
|
+
standalone: false
|
|
274
|
+
}]
|
|
275
|
+
}] });
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Copyright Siemens 2016 - 2025.
|
|
279
|
+
* SPDX-License-Identifier: MIT
|
|
280
|
+
*/
|
|
281
|
+
/**
|
|
282
|
+
* This provides declares SiTranslatePipe and provides a respective SiTranslateService.
|
|
283
|
+
* It should be used internally of Element but NOT by any application
|
|
284
|
+
*
|
|
285
|
+
* @internal
|
|
286
|
+
*/
|
|
287
|
+
class SiTranslateModule {
|
|
288
|
+
constructor() {
|
|
289
|
+
const translateService = inject(SiTranslateService);
|
|
290
|
+
if (!translateService.prevent$LocalizeInit) {
|
|
291
|
+
initSiLocalize();
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTranslateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
295
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiTranslateModule, declarations: [SiTranslatePipe], exports: [SiTranslatePipe] });
|
|
296
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTranslateModule, providers: [
|
|
297
|
+
/* This is needed for ngx-translate when using the isolated mode for lazy child routes.
|
|
298
|
+
* In that case, a new TranslateService is created by ngx-translate which also needs to be used
|
|
299
|
+
* by Element components within that route.
|
|
300
|
+
* The Builder can be used to check if a new service is available
|
|
301
|
+
* and then provide a corresponding SiTranslateService.
|
|
302
|
+
*/
|
|
303
|
+
{
|
|
304
|
+
provide: SiTranslateService,
|
|
305
|
+
useFactory: (injector, noTranslateBuilder) => injector.get(SiTranslateServiceBuilder, noTranslateBuilder).buildService(injector),
|
|
306
|
+
deps: [Injector, SiNoTranslateServiceBuilder]
|
|
307
|
+
}
|
|
308
|
+
] });
|
|
309
|
+
}
|
|
310
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiTranslateModule, decorators: [{
|
|
311
|
+
type: NgModule,
|
|
312
|
+
args: [{
|
|
313
|
+
declarations: [SiTranslatePipe],
|
|
314
|
+
exports: [SiTranslatePipe],
|
|
315
|
+
providers: [
|
|
316
|
+
/* This is needed for ngx-translate when using the isolated mode for lazy child routes.
|
|
317
|
+
* In that case, a new TranslateService is created by ngx-translate which also needs to be used
|
|
318
|
+
* by Element components within that route.
|
|
319
|
+
* The Builder can be used to check if a new service is available
|
|
320
|
+
* and then provide a corresponding SiTranslateService.
|
|
321
|
+
*/
|
|
322
|
+
{
|
|
323
|
+
provide: SiTranslateService,
|
|
324
|
+
useFactory: (injector, noTranslateBuilder) => injector.get(SiTranslateServiceBuilder, noTranslateBuilder).buildService(injector),
|
|
325
|
+
deps: [Injector, SiNoTranslateServiceBuilder]
|
|
326
|
+
}
|
|
327
|
+
]
|
|
328
|
+
}]
|
|
329
|
+
}], ctorParameters: () => [] });
|
|
330
|
+
|
|
331
|
+
const provideMockTranslateServiceBuilder = (buildService) => ({
|
|
332
|
+
provide: SiTranslateServiceBuilder,
|
|
333
|
+
useValue: { buildService }
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* Copyright Siemens 2016 - 2025.
|
|
338
|
+
* SPDX-License-Identifier: MIT
|
|
339
|
+
*/
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Generated bundle index. Do not edit.
|
|
343
|
+
*/
|
|
344
|
+
|
|
345
|
+
export { SI_TRANSLATABLE_VALUES, SiNoTranslateService, SiTranslateModule, SiTranslatePipe, SiTranslateService, SiTranslateServiceBuilder, getBrowserCultureLanguage, getBrowserLanguage, initSiLocalize, provideMockTranslateServiceBuilder };
|
|
346
|
+
//# sourceMappingURL=siemens-element-translate-ng-translate.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siemens-element-translate-ng-translate.mjs","sources":["../../../../projects/element-translate-ng/translate/si-translatable.model.ts","../../../../projects/element-translate-ng/translate/global.scope.ts","../../../../projects/element-translate-ng/translate/si-translate.service.ts","../../../../projects/element-translate-ng/translate/si-no-translate.service.ts","../../../../projects/element-translate-ng/translate/si-translatable.service.ts","../../../../projects/element-translate-ng/translate/si-localize.ts","../../../../projects/element-translate-ng/translate/si-translate.service-builder.ts","../../../../projects/element-translate-ng/translate/si-no-translate.service-builder.ts","../../../../projects/element-translate-ng/translate/si-translate.pipe.ts","../../../../projects/element-translate-ng/translate/si-translate.module.ts","../../../../projects/element-translate-ng/translate/testing/si-translate.mock-service-builder.factory.ts","../../../../projects/element-translate-ng/translate/index.ts","../../../../projects/element-translate-ng/translate/siemens-element-translate-ng-translate.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { InjectionToken } from '@angular/core';\n\nexport const SI_TRANSLATABLE_VALUES = new InjectionToken<Record<string, string>[]>(\n 'si-element-translatable-values'\n);\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\n// global Object in a NodeJS context, which we have when building types for web-components or building with angular SSR\ndeclare const global: any;\n\n/**\n * This var provides access to the global scope object based on the current runtime.\n * On Browser its is the window, on Node.js it is global.\n *\n * Whenever possible, inject(DOCUMENT) is preferred over this approach.\n */\nlet globalScope: any;\n\n// we are either running Browser or on NodeJS\nif (typeof window !== 'undefined') {\n globalScope = window;\n} else if (typeof global !== 'undefined') {\n globalScope = global;\n}\n\nexport { globalScope };\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport { NEVER, Observable } from 'rxjs';\n\nexport type TranslationResult<T> = T extends string ? string : Record<string, string>;\n\n/**\n * @returns The culture language code of the browser, e.g. \"en-US\".\n */\nexport const getBrowserCultureLanguage = (): string | undefined =>\n window?.navigator?.languages?.[0] ?? window?.navigator?.language;\n\n/**\n * @returns The language code of the browser, e.g. \"en\".\n */\nexport const getBrowserLanguage = (): string | undefined =>\n getBrowserCultureLanguage()?.split(/-|_/)[0];\n\n/**\n * Wrapper around an actual translation framework which is meant to be used internally by Element.\n * Applications must not use this service.\n *\n * @internal\n */\n@Injectable()\nexport abstract class SiTranslateService {\n protected translationChange$: Observable<void> = NEVER;\n private documentRef: Document = inject(DOCUMENT);\n\n prevent$LocalizeInit?: boolean;\n\n /**\n * The currently used language.\n */\n abstract get currentLanguage(): string;\n\n /**\n * Sets a new language to be used. If needed, loads the language file.\n * @param lang - The language to be used.\n * @returns An observable that emits when the new language is loaded and activated.\n */\n abstract setCurrentLanguage(lang: string): Observable<void>;\n\n /**\n * The language to be used as default.\n * @param lang - The language code.\n */\n abstract setDefaultLanguage(lang: string): void;\n\n /**\n * The language to be used as default.\n * @returns The code of the default language.\n */\n abstract getDefaultLanguage(): string;\n\n /**\n * The available languages.\n */\n abstract get availableLanguages(): string[];\n abstract set availableLanguages(languages: string[]);\n\n /**\n * If the underlying translation library supports switching the language\n * and/or updating the translation texts, this observable will emit.\n * There is no initial emit.\n */\n get translationChange(): Observable<void> {\n return this.translationChange$;\n }\n\n /**\n * Translates the key(s) by using the underlying translation library.\n *\n * @param keys - A single translation key or an array of keys.\n * @param params - Parameters to be replaced within the translation text.\n *\n * @returns Returns the translated key or an object with the translated keys.\n * Depending on the underlying translation library (sync/async) the result will\n * be wrapped in an Observable.\n */\n abstract translate<T extends string | string[]>(\n keys: T,\n params?: Record<string, unknown>\n ): Observable<TranslationResult<T>> | TranslationResult<T>;\n\n /**\n * Translates the key(s) by using the underlying translation library in an asynchronous manner.\n * It will emit each time the active language is changed.\n *\n * @param keys - A single translation key or an array of keys.\n * @param params - Parameters to be replaced within the translation text.\n *\n * @returns Returns the translated key or an object with the translated keys wrapped in an Observable.\n */\n abstract translateAsync<T extends string | string[]>(\n keys: T,\n params?: Record<string, unknown>\n ): Observable<TranslationResult<T>>;\n\n /**\n * Translates the key(s) by using the underlying translation library in a synchronous manner.\n *\n * Warning: The caller of this function needs to make sure the translation file(s) are already loaded.\n * It is generally not recommended to use this function unless you know exactly what you are doing.\n *\n * @param keys - A single translation key or an array of keys.\n * @param params - Parameters to be replaced within the translation text.\n *\n * @returns Returns the translated key or an object with the translated keys.\n */\n abstract translateSync<T extends string | string[]>(\n keys: T,\n params?: Record<string, unknown>\n ): TranslationResult<T>;\n\n /**\n * If supported by the underlying translation library, this method can be used to add a translation for a specific key.\n * It is intended to be used for adding the english default value.\n * It will be called whenever a key within element is resolved.\n * An implementation of this method must check that it does not override an existing translation.\n */\n setTranslation?(key: string, value: string): void;\n\n setDocumentLanguage(lang: string): void {\n this.documentRef?.documentElement?.setAttribute('lang', lang);\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\nimport { SiTranslateService, TranslationResult } from './si-translate.service';\n\nconst arrayToRecord = (keys: string[]): Record<string, string> =>\n keys.reduce(\n (acc, cur) => {\n acc[cur] = cur;\n return acc;\n },\n {} as Record<string, string>\n );\n\nconst replacePlaceholders = (str: string, params: Record<string, unknown>): string => {\n return str.replace(/{{\\s*([^}]+)\\s*}}/g, (match, p1) => {\n return params[p1] !== undefined ? String(params[p1]) : match;\n });\n};\n\n/**\n * Pass through implementation of the {@link SiTranslateService} which is used as a default.\n *\n * @internal\n */\n@Injectable({ providedIn: 'root' })\nexport class SiNoTranslateService extends SiTranslateService {\n override get currentLanguage(): string {\n return 'en';\n }\n\n override get availableLanguages(): string[] {\n return ['en'];\n }\n\n override set availableLanguages(lang: string[]) {}\n\n override setCurrentLanguage(lang: string): Observable<void> {\n return of();\n }\n\n override getDefaultLanguage(): string {\n return 'en';\n }\n\n override setDefaultLanguage(lang: string): void {}\n\n override translate<T extends string | string[]>(\n keys: T,\n _params?: Record<string, unknown>\n ): TranslationResult<T> {\n const translateKey = (key: string): string => {\n return _params ? replacePlaceholders(key, _params) : key;\n };\n\n if (typeof keys === 'string') {\n return translateKey(keys) as TranslationResult<T>;\n } else {\n const translatedKeys = keys.map(translateKey);\n return arrayToRecord(translatedKeys) as TranslationResult<T>;\n }\n }\n\n override translateSync<T extends string | string[]>(\n keys: T,\n params?: Record<string, unknown>\n ): TranslationResult<T> {\n return this.translate(keys, params);\n }\n\n override translateAsync<T extends string | string[]>(\n keys: T,\n params?: Record<string, unknown>\n ): Observable<TranslationResult<T>> {\n return of(this.translate(keys, params));\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { inject, Injectable } from '@angular/core';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate-types';\n\nimport { SiNoTranslateService } from './si-no-translate.service';\nimport { SI_TRANSLATABLE_VALUES } from './si-translatable.model';\nimport { SiTranslateService } from './si-translate.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SiTranslatableService {\n private readonly translatableValues: Record<string, string>;\n private readonly isNoTranslate: boolean;\n private readonly siTranslateService: SiTranslateService;\n\n constructor() {\n this.siTranslateService =\n inject(SiTranslateService, { optional: true }) ?? inject(SiNoTranslateService);\n const translateValues = inject(SI_TRANSLATABLE_VALUES, { optional: true });\n\n this.translatableValues = translateValues?.reduce((a, b) => ({ ...a, ...b })) ?? {};\n this.isNoTranslate = this.siTranslateService instanceof SiNoTranslateService;\n }\n\n resolveText(key: string, originalText: string): TranslatableString {\n if (this.siTranslateService.setTranslation) {\n this.siTranslateService.setTranslation(key, originalText);\n }\n\n return this.translatableValues[key] ?? (this.isNoTranslate ? originalText : key);\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { inject } from '@angular/core';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate-types';\n\nimport { globalScope } from './global.scope';\nimport { SiTranslatableService } from './si-translatable.service';\n\n// an alternative implementation for $localize meant to be used for translation frameworks other than @angular/localize\nconst $localize = (strings: TemplateStringsArray, ...expressions: string[]): TranslatableString => {\n if (strings.length !== 1) {\n throw new Error(\n '$localize calls using @siemens/element-translate-ng do not support parameter interpolation'\n );\n }\n\n const firstPart = strings[0];\n const [, key, value] = /:.*?@@(.*?):(.*)/.exec(firstPart)!;\n\n return Zone.current.get('siResolveLocalize')(key, value);\n};\n\nconst siResolveLocalize = (key: string, value: string): TranslatableString =>\n inject(SiTranslatableService).resolveText(key, value);\n\n/**\n * Initializes the Element version of $localize. Can be called multiple times.\n */\nexport const initSiLocalize = (): void => {\n (Zone.current as any)._properties.siResolveLocalize = siResolveLocalize;\n globalScope.$localize = $localize;\n};\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable, Injector } from '@angular/core';\n\nimport { SiTranslateService } from './si-translate.service';\n\n/**\n * Provide this class to build a custom translation service.\n *\n * @internal\n */\n@Injectable()\nexport abstract class SiTranslateServiceBuilder {\n /**\n * Returns a translation service instance.\n * @param injector - Is used to retrieve dependencies needed to create the translation service.\n */\n abstract buildService(injector: Injector): SiTranslateService;\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { inject, Injectable } from '@angular/core';\n\nimport { SiNoTranslateService } from './si-no-translate.service';\nimport { SiTranslateService } from './si-translate.service';\nimport { SiTranslateServiceBuilder } from './si-translate.service-builder';\n\n/**\n * Always returns the same instance of {@link SiNoTranslateService}\n *\n * @internal\n */\n@Injectable({ providedIn: 'root' })\nexport class SiNoTranslateServiceBuilder extends SiTranslateServiceBuilder {\n private siNoTranslateService = inject(SiNoTranslateService);\n\n override buildService(): SiTranslateService {\n return this.siNoTranslateService;\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectorRef, inject, OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { SiTranslateService } from './si-translate.service';\n\n/**\n * Translates keys by using the {@link SiTranslateService}.\n * Within Element this pipe should be used instead of ngx-translates `translate` pipe.\n * Outside Element, this pipe should NOT be used.\n *\n * @internal\n */\n\n@Pipe({\n name: 'translate',\n // eslint-disable-next-line @angular-eslint/no-pipe-impure\n pure: false,\n // eslint-disable-next-line @angular-eslint/prefer-standalone\n standalone: false\n})\nexport class SiTranslatePipe implements PipeTransform, OnDestroy {\n private lastKeyParams?: string;\n private value = '';\n private subscription?: Subscription;\n private siTranslateService = inject(SiTranslateService);\n private cdRef = inject(ChangeDetectorRef);\n\n /**\n * Method which is called on any data passed to the pipe.\n * Called by Angular, should not be called directly.\n */\n // The first type is for cases when there is definitely defined string, so that we can use the pipe to assign values to a required variable.\n // The second type is for everything else, so that we can use the pipe for optional inputs\n transform(key: string, params?: any): string;\n transform(key: string | null | undefined, params?: any): string | null | undefined;\n transform(key: string | null | undefined, params?: any): string | null | undefined {\n if (!key) {\n return key;\n }\n\n const currentKeyParams = params ? `${key}-${JSON.stringify(params)}` : key;\n\n if (this.lastKeyParams === currentKeyParams) {\n return this.value;\n }\n\n this.subscription?.unsubscribe();\n\n const translate = this.siTranslateService.translate(key, params);\n if (typeof translate === 'string') {\n this.updateValue(currentKeyParams, translate);\n } else {\n this.subscription = translate.subscribe(value => this.updateValue(currentKeyParams, value));\n }\n\n return this.value;\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n this.subscription = undefined;\n }\n\n private updateValue(currentKeyParams: string, value: string): void {\n this.lastKeyParams = currentKeyParams;\n this.value = value;\n this.cdRef.markForCheck();\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { inject, Injector, NgModule } from '@angular/core';\n\nimport { initSiLocalize } from './si-localize';\nimport { SiNoTranslateServiceBuilder } from './si-no-translate.service-builder';\nimport { SiTranslatePipe } from './si-translate.pipe';\nimport { SiTranslateService } from './si-translate.service';\nimport { SiTranslateServiceBuilder } from './si-translate.service-builder';\n\n/**\n * This provides declares SiTranslatePipe and provides a respective SiTranslateService.\n * It should be used internally of Element but NOT by any application\n *\n * @internal\n */\n@NgModule({\n declarations: [SiTranslatePipe],\n exports: [SiTranslatePipe],\n providers: [\n /* This is needed for ngx-translate when using the isolated mode for lazy child routes.\n * In that case, a new TranslateService is created by ngx-translate which also needs to be used\n * by Element components within that route.\n * The Builder can be used to check if a new service is available\n * and then provide a corresponding SiTranslateService.\n */\n {\n provide: SiTranslateService,\n useFactory: (injector: Injector, noTranslateBuilder: SiNoTranslateServiceBuilder) =>\n injector.get(SiTranslateServiceBuilder, noTranslateBuilder).buildService(injector),\n deps: [Injector, SiNoTranslateServiceBuilder]\n }\n ]\n})\nexport class SiTranslateModule {\n constructor() {\n const translateService = inject(SiTranslateService);\n if (!translateService.prevent$LocalizeInit) {\n initSiLocalize();\n }\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { Injector, Provider } from '@angular/core';\n\nimport { SiTranslateService } from '../si-translate.service';\nimport { SiTranslateServiceBuilder } from '../si-translate.service-builder';\n\nexport const provideMockTranslateServiceBuilder = (\n buildService: (injector: Injector) => SiTranslateService\n): Provider => ({\n provide: SiTranslateServiceBuilder,\n useValue: { buildService } as SiTranslateServiceBuilder\n});\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-translatable.model';\nexport * from './si-translate.module';\nexport * from './si-translate.service';\nexport * from './si-translate.service-builder';\nexport * from './si-no-translate.service';\nexport * from './si-translate.pipe';\nexport * from './si-localize';\nexport * from './si-translate.service';\nexport * from './testing/si-translate.mock-service-builder.factory';\nexport * from '@siemens/element-translate-ng/translate-types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from '@siemens/element-translate-ng/angular-localize';
|
|
2
|
+
export * from '@siemens/element-translate-ng/ngx-translate';
|
|
3
|
+
export * from '@siemens/element-translate-ng/translate';
|
|
4
|
+
export * from '@siemens/element-translate-ng/translate-types';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Copyright Siemens 2016 - 2025.
|
|
8
|
+
* SPDX-License-Identifier: MIT
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Generated bundle index. Do not edit.
|
|
13
|
+
*/
|
|
14
|
+
//# sourceMappingURL=siemens-element-translate-ng.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siemens-element-translate-ng.mjs","sources":["../../../../projects/element-translate-ng/public-api.ts","../../../../projects/element-translate-ng/siemens-element-translate-ng.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from '@siemens/element-translate-ng/angular-localize';\nexport * from '@siemens/element-translate-ng/ngx-translate';\nexport * from '@siemens/element-translate-ng/translate';\nexport * from '@siemens/element-translate-ng/translate-types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAAA;;;AAGG;;ACHH;;AAEG"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Siemens 2016 - 2025.
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*/
|
|
5
|
+
import { TranslatableString } from '@siemens/element-translate-ng/translate-types';
|
|
6
|
+
declare global {
|
|
7
|
+
let $localize: (strings: TemplateStringsArray, ...expressions: string[]) => TranslatableString;
|
|
8
|
+
interface Window {
|
|
9
|
+
$localize: (strings: TemplateStringsArray, ...expressions: string[]) => TranslatableString;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "@siemens/element-translate-ng/translate";
|
|
3
|
+
/**
|
|
4
|
+
* This module configures Element to use ngx-translate for translating {@link TranslatableString}
|
|
5
|
+
* It should only be imported once in an applications root module (typically `app.module.ts`)
|
|
6
|
+
*/
|
|
7
|
+
export declare class SiTranslateNgxTModule {
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SiTranslateNgxTModule, never>;
|
|
9
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<SiTranslateNgxTModule, never, [typeof i1.SiTranslateModule], never>;
|
|
10
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<SiTranslateNgxTModule>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Siemens 2016 - 2025.
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*/
|
|
5
|
+
import { EnvironmentProviders, Provider } from '@angular/core';
|
|
6
|
+
/**
|
|
7
|
+
* This provider configures Element to use ngx-translate for translating {@link TranslatableString}
|
|
8
|
+
* It should only be imported once in an application's configuration (typically `app.config.ts`)
|
|
9
|
+
*/
|
|
10
|
+
export declare const provideNgxTranslateForElement: () => (EnvironmentProviders | Provider)[];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Siemens 2016 - 2025.
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*/
|
|
5
|
+
import { Injector } from '@angular/core';
|
|
6
|
+
import { SiTranslateService, SiTranslateServiceBuilder } from '@siemens/element-translate-ng/translate';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
/**
|
|
9
|
+
* Builds {@link SiTranslateNgxTService} for each {@link TranslateService}.
|
|
10
|
+
* The builder will create a new Service if a new {@link TranslateService} is found to support the isolated mode.
|
|
11
|
+
*
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare class SiTranslateNgxTServiceBuilder extends SiTranslateServiceBuilder {
|
|
15
|
+
private serviceCache;
|
|
16
|
+
buildService(injector: Injector): SiTranslateService;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SiTranslateNgxTServiceBuilder, never>;
|
|
18
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<SiTranslateNgxTServiceBuilder>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
2
|
+
import { SiTranslateService, TranslationResult } from '@siemens/element-translate-ng/translate';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* {@link SiTranslateService} wrapper around ngx-translate
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare class SiTranslateNgxTService extends SiTranslateService {
|
|
11
|
+
private ngxTranslateService;
|
|
12
|
+
private defaultTranslations;
|
|
13
|
+
private originalMissingHandler;
|
|
14
|
+
constructor(ngxTranslateService: TranslateService);
|
|
15
|
+
get currentLanguage(): string;
|
|
16
|
+
get availableLanguages(): string[];
|
|
17
|
+
set availableLanguages(languages: string[]);
|
|
18
|
+
setCurrentLanguage(lang: string): Observable<void>;
|
|
19
|
+
getDefaultLanguage(): string;
|
|
20
|
+
setDefaultLanguage(lang: string): void;
|
|
21
|
+
translate<T extends string | string[]>(keys: T, params?: Record<string, unknown>): Observable<TranslationResult<T>> | TranslationResult<T>;
|
|
22
|
+
translateAsync<T extends string | string[]>(keys: T, params?: Record<string, unknown>): Observable<TranslationResult<T>>;
|
|
23
|
+
translateSync<T extends string | string[]>(keys: T, params?: Record<string, unknown>): TranslationResult<T>;
|
|
24
|
+
setTranslation(key: string, value: string): void;
|
|
25
|
+
private handleMissingTranslation;
|
|
26
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SiTranslateNgxTService, never>;
|
|
27
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<SiTranslateNgxTService>;
|
|
28
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@siemens/element-translate-ng",
|
|
3
|
+
"description": "Element translation abstraction layer.",
|
|
4
|
+
"version": "47.0.0",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git@github.com:siemens/element.git"
|
|
10
|
+
},
|
|
11
|
+
"author": {
|
|
12
|
+
"name": "Siemens AG",
|
|
13
|
+
"email": "info@siemens.com"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://github.com/siemens/element",
|
|
16
|
+
"bugs": "https://github.com/siemens/element/issues/new",
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public"
|
|
19
|
+
},
|
|
20
|
+
"bin": {
|
|
21
|
+
"update-translatable-keys": "bin/update-translatable-keys.js"
|
|
22
|
+
},
|
|
23
|
+
"peerDependencies": {
|
|
24
|
+
"@angular/common": "19",
|
|
25
|
+
"@angular/core": "19",
|
|
26
|
+
"@ngx-translate/core": "15 - 16"
|
|
27
|
+
},
|
|
28
|
+
"peerDependenciesMeta": {
|
|
29
|
+
"@ngx-translate/core": {
|
|
30
|
+
"optional": true
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"fast-xml-parser": "^4.5.0",
|
|
35
|
+
"tslib": "^2.3.0"
|
|
36
|
+
},
|
|
37
|
+
"exports": {
|
|
38
|
+
"./docs.json": {
|
|
39
|
+
"default": "./docs.json"
|
|
40
|
+
},
|
|
41
|
+
"./package.json": {
|
|
42
|
+
"default": "./package.json"
|
|
43
|
+
},
|
|
44
|
+
".": {
|
|
45
|
+
"types": "./index.d.ts",
|
|
46
|
+
"default": "./fesm2022/siemens-element-translate-ng.mjs"
|
|
47
|
+
},
|
|
48
|
+
"./angular-localize": {
|
|
49
|
+
"types": "./angular-localize/index.d.ts",
|
|
50
|
+
"default": "./fesm2022/siemens-element-translate-ng-angular-localize.mjs"
|
|
51
|
+
},
|
|
52
|
+
"./localize-types": {
|
|
53
|
+
"types": "./localize-types/index.d.ts",
|
|
54
|
+
"default": "./fesm2022/siemens-element-translate-ng-localize-types.mjs"
|
|
55
|
+
},
|
|
56
|
+
"./ngx-translate": {
|
|
57
|
+
"types": "./ngx-translate/index.d.ts",
|
|
58
|
+
"default": "./fesm2022/siemens-element-translate-ng-ngx-translate.mjs"
|
|
59
|
+
},
|
|
60
|
+
"./translate": {
|
|
61
|
+
"types": "./translate/index.d.ts",
|
|
62
|
+
"default": "./fesm2022/siemens-element-translate-ng-translate.mjs"
|
|
63
|
+
},
|
|
64
|
+
"./translate-types": {
|
|
65
|
+
"types": "./translate-types/index.d.ts",
|
|
66
|
+
"default": "./fesm2022/siemens-element-translate-ng-translate-types.mjs"
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"module": "fesm2022/siemens-element-translate-ng.mjs",
|
|
70
|
+
"typings": "index.d.ts",
|
|
71
|
+
"sideEffects": false
|
|
72
|
+
}
|
package/public-api.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Siemens 2016 - 2025.
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*/
|
|
5
|
+
export * from '@siemens/element-translate-ng/angular-localize';
|
|
6
|
+
export * from '@siemens/element-translate-ng/ngx-translate';
|
|
7
|
+
export * from '@siemens/element-translate-ng/translate';
|
|
8
|
+
export * from '@siemens/element-translate-ng/translate-types';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This var provides access to the global scope object based on the current runtime.
|
|
3
|
+
* On Browser its is the window, on Node.js it is global.
|
|
4
|
+
*
|
|
5
|
+
* Whenever possible, inject(DOCUMENT) is preferred over this approach.
|
|
6
|
+
*/
|
|
7
|
+
declare let globalScope: any;
|
|
8
|
+
export { globalScope };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Siemens 2016 - 2025.
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*/
|
|
5
|
+
export * from './si-translatable.model';
|
|
6
|
+
export * from './si-translate.module';
|
|
7
|
+
export * from './si-translate.service';
|
|
8
|
+
export * from './si-translate.service-builder';
|
|
9
|
+
export * from './si-no-translate.service';
|
|
10
|
+
export * from './si-translate.pipe';
|
|
11
|
+
export * from './si-localize';
|
|
12
|
+
export * from './si-translate.service';
|
|
13
|
+
export * from './testing/si-translate.mock-service-builder.factory';
|
|
14
|
+
export * from '@siemens/element-translate-ng/translate-types';
|