@siemens/element-translate-ng 49.13.0 → 51.0.0-rc.1
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 +6 -38
- package/fesm2022/siemens-element-translate-ng-angular-localize.mjs +10 -10
- package/fesm2022/siemens-element-translate-ng-ngx-translate.mjs +17 -14
- package/fesm2022/siemens-element-translate-ng-ngx-translate.mjs.map +1 -1
- package/fesm2022/siemens-element-translate-ng-translate.mjs +26 -25
- package/fesm2022/siemens-element-translate-ng-translate.mjs.map +1 -1
- package/package.json +9 -7
- package/types/siemens-element-translate-ng-translate.d.ts +2 -1
package/README.md
CHANGED
|
@@ -17,47 +17,15 @@ Install the library as follows:
|
|
|
17
17
|
npm install --save @siemens/element-translate-ng
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
An important part of the
|
|
21
|
-
as well as extracting a JSON messages file with default translations.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
npx update-translatable-keys
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
By default, this will pick of the configuration from a file `element-translate.conf.json`. To
|
|
29
|
-
use a different config file, pass as the only argument to the command.
|
|
30
|
-
|
|
31
|
-
The config file looks like this
|
|
32
|
-
|
|
33
|
-
```json
|
|
34
|
-
{
|
|
35
|
-
"files": "dist/@simpl/**/fesm2022/**/*.mjs",
|
|
36
|
-
"configs": [
|
|
37
|
-
{
|
|
38
|
-
"name": "element",
|
|
39
|
-
"locationPrefix": "projects/element-ng",
|
|
40
|
-
"keysFile": "projects/element-ng/translate/si-translatable-keys.interface.ts",
|
|
41
|
-
"keysInterfaceName": "SiTranslatableKeys",
|
|
42
|
-
"messagesFile": "dist/@siemens/element-ng/template-i18n.json"
|
|
43
|
-
}
|
|
44
|
-
]
|
|
45
|
-
}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
- `files` is a glob pattern for defining the files to scan
|
|
49
|
-
- `configs` is an array of configs. For mono-repos building multiple libraries, they can be
|
|
50
|
-
separated into different configs. All keys are required:
|
|
51
|
-
- `name` is a unique name
|
|
52
|
-
- `locationsPrefix` defines the path prefix of the source files, important to distinguish
|
|
53
|
-
between different libraries in a mono-repo
|
|
54
|
-
- `keysFile` defines the path of the generated TypeScript interfaces file
|
|
55
|
-
- `keysInterfaceName` defines the name of the TypeScript `interface`
|
|
56
|
-
- `messagesFile` defines the path of the generated messages JSON file
|
|
20
|
+
An important part of the translation tooling is the extraction of translatable keys as a TypeScript
|
|
21
|
+
interface as well as extracting a JSON messages file with default translations. This is provided by
|
|
22
|
+
the separate `@siemens/element-translate-cli` package via the `update-translatable-keys` CLI. See
|
|
23
|
+
[Extracting translatable keys](https://element.siemens.io/fundamentals/localization/#extracting-translatable-keys)
|
|
24
|
+
for details on how to run it and how to configure it.
|
|
57
25
|
|
|
58
26
|
## Testing
|
|
59
27
|
|
|
60
|
-
Run `
|
|
28
|
+
Run `pnpm run translate:test` to perform the unit tests via [Vitest](https://vitest.dev/).
|
|
61
29
|
|
|
62
30
|
## License
|
|
63
31
|
|
|
@@ -8,10 +8,10 @@ import { SiNoTranslateService, SiTranslateServiceBuilder } from '@siemens/elemen
|
|
|
8
8
|
*/
|
|
9
9
|
class SiTranslateNgLocalizeService extends SiNoTranslateService {
|
|
10
10
|
prevent$LocalizeInit = true;
|
|
11
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
12
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
11
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgLocalizeService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
12
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgLocalizeService, providedIn: 'root' });
|
|
13
13
|
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgLocalizeService, decorators: [{
|
|
15
15
|
type: Injectable,
|
|
16
16
|
args: [{ providedIn: 'root' }]
|
|
17
17
|
}] });
|
|
@@ -29,10 +29,10 @@ class SiTranslateNgLocalizeServiceBuilder extends SiTranslateServiceBuilder {
|
|
|
29
29
|
buildService() {
|
|
30
30
|
return this.siTranslateNgService;
|
|
31
31
|
}
|
|
32
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
33
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
32
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgLocalizeServiceBuilder, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
33
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgLocalizeServiceBuilder });
|
|
34
34
|
}
|
|
35
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgLocalizeServiceBuilder, decorators: [{
|
|
36
36
|
type: Injectable
|
|
37
37
|
}] });
|
|
38
38
|
|
|
@@ -45,11 +45,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
|
|
|
45
45
|
* It should only be imported once in an application's root module (typically `app.module.ts`)
|
|
46
46
|
*/
|
|
47
47
|
class SiTranslateNgLocalizeModule {
|
|
48
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
49
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
50
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
48
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgLocalizeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
49
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgLocalizeModule });
|
|
50
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgLocalizeModule, providers: [{ provide: SiTranslateServiceBuilder, useClass: SiTranslateNgLocalizeServiceBuilder }] });
|
|
51
51
|
}
|
|
52
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgLocalizeModule, decorators: [{
|
|
53
53
|
type: NgModule,
|
|
54
54
|
args: [{
|
|
55
55
|
providers: [{ provide: SiTranslateServiceBuilder, useClass: SiTranslateNgLocalizeServiceBuilder }]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, isDevMode, NgModule, Injector, inject } from '@angular/core';
|
|
2
|
+
import { Injectable, isDevMode, isSignal, NgModule, Injector, inject } from '@angular/core';
|
|
3
3
|
import { SiTranslateService, SiTranslateServiceBuilder } from '@siemens/element-translate-ng/translate';
|
|
4
4
|
import * as i1 from '@ngx-translate/core';
|
|
5
5
|
import { TranslateDefaultParser, TranslateService, MissingTranslationHandler } from '@ngx-translate/core';
|
|
@@ -37,10 +37,10 @@ class SiMissingTranslateService {
|
|
|
37
37
|
}
|
|
38
38
|
return this.appHandler?.handle(params) ?? params.key;
|
|
39
39
|
}
|
|
40
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
41
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
40
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiMissingTranslateService, deps: [{ token: i1.MissingTranslationHandler }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
41
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiMissingTranslateService });
|
|
42
42
|
}
|
|
43
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiMissingTranslateService, decorators: [{
|
|
44
44
|
type: Injectable
|
|
45
45
|
}], ctorParameters: () => [{ type: i1.MissingTranslationHandler }] });
|
|
46
46
|
|
|
@@ -68,7 +68,10 @@ class SiTranslateNgxTService extends SiTranslateService {
|
|
|
68
68
|
this.translationChange$ = merge(this.ngxTranslateService.onTranslationChange, this.ngxTranslateService.onLangChange).pipe(map(() => { }));
|
|
69
69
|
}
|
|
70
70
|
get currentLanguage() {
|
|
71
|
-
|
|
71
|
+
// Ensure that @ngx-translate/core@17 is still supported
|
|
72
|
+
return isSignal(this.ngxTranslateService.currentLang)
|
|
73
|
+
? this.ngxTranslateService.currentLang()
|
|
74
|
+
: this.ngxTranslateService.currentLang;
|
|
72
75
|
}
|
|
73
76
|
get availableLanguages() {
|
|
74
77
|
return this.ngxTranslateService.getLangs();
|
|
@@ -81,11 +84,11 @@ class SiTranslateNgxTService extends SiTranslateService {
|
|
|
81
84
|
return this.ngxTranslateService.use(lang).pipe(map(() => { }));
|
|
82
85
|
}
|
|
83
86
|
getDefaultLanguage() {
|
|
84
|
-
return this.ngxTranslateService.
|
|
87
|
+
return this.ngxTranslateService.getFallbackLang();
|
|
85
88
|
}
|
|
86
89
|
setDefaultLanguage(lang) {
|
|
87
90
|
this.setDocumentLanguage(lang);
|
|
88
|
-
this.ngxTranslateService.
|
|
91
|
+
this.ngxTranslateService.setFallbackLang(lang);
|
|
89
92
|
}
|
|
90
93
|
translate(keys, params) {
|
|
91
94
|
if (Array.isArray(keys) && !keys.length) {
|
|
@@ -133,10 +136,10 @@ class SiTranslateNgxTServiceBuilder extends SiTranslateServiceBuilder {
|
|
|
133
136
|
}
|
|
134
137
|
return ngxTServiceWrapper;
|
|
135
138
|
}
|
|
136
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
137
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
139
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgxTServiceBuilder, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
140
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgxTServiceBuilder });
|
|
138
141
|
}
|
|
139
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
142
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgxTServiceBuilder, decorators: [{
|
|
140
143
|
type: Injectable
|
|
141
144
|
}] });
|
|
142
145
|
|
|
@@ -149,11 +152,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
|
|
|
149
152
|
* It should only be imported once in an applications root module (typically `app.module.ts`)
|
|
150
153
|
*/
|
|
151
154
|
class SiTranslateNgxTModule {
|
|
152
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
153
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
154
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
155
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgxTModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
156
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgxTModule });
|
|
157
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgxTModule, providers: [{ provide: SiTranslateServiceBuilder, useClass: SiTranslateNgxTServiceBuilder }] });
|
|
155
158
|
}
|
|
156
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
159
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateNgxTModule, decorators: [{
|
|
157
160
|
type: NgModule,
|
|
158
161
|
args: [{
|
|
159
162
|
providers: [{ provide: SiTranslateServiceBuilder, useClass: SiTranslateNgxTServiceBuilder }]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-translate-ng-ngx-translate.mjs","sources":["../../../../projects/element-translate-ng/ngx-translate/si-missing-translate.service.ts","../../../../projects/element-translate-ng/ngx-translate/si-translate-ngxt.service.ts","../../../../projects/element-translate-ng/ngx-translate/si-translate-ngxt.service-builder.ts","../../../../projects/element-translate-ng/ngx-translate/si-translate-ngxt.module.ts","../../../../projects/element-translate-ng/ngx-translate/si-translate-ngxt.provider.ts","../../../../projects/element-translate-ng/ngx-translate/index.ts","../../../../projects/element-translate-ng/ngx-translate/siemens-element-translate-ng-ngx-translate.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable } from '@angular/core';\nimport {\n MissingTranslationHandler,\n MissingTranslationHandlerParams,\n TranslateDefaultParser,\n Translation\n} from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Handles missing translations by returning the default value if available.\n */\n@Injectable()\nexport class SiMissingTranslateService implements MissingTranslationHandler {\n private readonly parser = new TranslateDefaultParser();\n private readonly defaultTranslations: Record<string, string> = {};\n\n // eslint-disable-next-line @angular-eslint/prefer-inject\n constructor(private readonly appHandler?: MissingTranslationHandler) {}\n\n /** Sets a default translation for a given key. */\n setTranslation(key: string, value: string): void {\n this.defaultTranslations[key] = value;\n }\n /** Gets the default translation for a given key. */\n getDefault(key: string): string | undefined {\n return this.defaultTranslations[key];\n }\n /** {@inheritDoc} */\n handle(params: MissingTranslationHandlerParams): Translation | Observable<Translation> {\n const translated = this.getDefault(params.key);\n if (translated !== undefined) {\n return this.parser.interpolate(translated, params.interpolateParams);\n }\n return this.appHandler?.handle(params) ?? params.key;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { isDevMode } from '@angular/core';\nimport { MissingTranslationHandler, TranslateService } from '@ngx-translate/core';\nimport { SiTranslateService, TranslationResult } from '@siemens/element-translate-ng/translate';\nimport { merge, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { SiMissingTranslateService } from './si-missing-translate.service';\n\n/**\n * {@link SiTranslateService} wrapper around ngx-translate\n *\n * @internal\n */\nexport class SiTranslateNgxTService extends SiTranslateService {\n private ngxTranslateService: TranslateService;\n private readonly fallbackTranslations?: SiMissingTranslateService;\n\n constructor(\n ngxTranslateService: TranslateService,\n missingTranslateHandler: MissingTranslationHandler | null\n ) {\n super();\n this.ngxTranslateService = ngxTranslateService;\n if (missingTranslateHandler instanceof SiMissingTranslateService) {\n this.fallbackTranslations = missingTranslateHandler;\n } else if (isDevMode()) {\n console.warn(\n 'SiMissingTranslateService not provided as missingTranslateHandler, default translations will not work.'\n );\n }\n\n this.translationChange$ = merge(\n this.ngxTranslateService.onTranslationChange,\n this.ngxTranslateService.onLangChange\n ).pipe(map(() => {}));\n }\n\n override get currentLanguage(): string | undefined {\n return this.ngxTranslateService.currentLang;\n }\n\n override get availableLanguages(): readonly string[] {\n return this.ngxTranslateService.getLangs();\n }\n\n override set availableLanguages(languages: string[]) {\n this.ngxTranslateService.addLangs(languages);\n }\n\n override setCurrentLanguage(lang: string): Observable<void> {\n this.setDocumentLanguage(lang);\n return this.ngxTranslateService.use(lang).pipe(map(() => {}));\n }\n\n override getDefaultLanguage(): string | null {\n return this.ngxTranslateService.getDefaultLang();\n }\n\n override setDefaultLanguage(lang: string): void {\n this.setDocumentLanguage(lang);\n this.ngxTranslateService.setDefaultLang(lang);\n }\n\n override translate<T extends string | string[]>(\n keys: T,\n params?: Record<string, unknown>\n ): Observable<TranslationResult<T>> | TranslationResult<T> {\n if (Array.isArray(keys) && !keys.length) {\n return of({} as TranslationResult<T>);\n }\n return this.ngxTranslateService.stream(keys, params);\n }\n\n override translateAsync<T extends string | string[]>(\n keys: T,\n params?: Record<string, unknown>\n ): Observable<TranslationResult<T>> {\n if (Array.isArray(keys) && !keys.length) {\n return of({} as TranslationResult<T>);\n }\n return this.ngxTranslateService.stream(keys, params);\n }\n\n override translateSync<T extends string | string[]>(\n keys: T,\n params?: Record<string, unknown>\n ): TranslationResult<T> {\n if (Array.isArray(keys) && !keys.length) {\n return {} as TranslationResult<T>;\n }\n return this.ngxTranslateService.instant(keys, params);\n }\n\n override setTranslation(key: string, value: string): void {\n this.fallbackTranslations?.setTranslation(key, value);\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable, Injector } from '@angular/core';\nimport { MissingTranslationHandler, TranslateService } from '@ngx-translate/core';\nimport {\n SiTranslateService,\n SiTranslateServiceBuilder\n} from '@siemens/element-translate-ng/translate';\n\nimport { SiTranslateNgxTService } from './si-translate-ngxt.service';\n\n/**\n * Builds {@link SiTranslateNgxTService} for each {@link TranslateService}.\n * The builder will create a new Service if a new {@link TranslateService} is found to support the isolated mode.\n *\n * @internal\n */\n@Injectable()\nexport class SiTranslateNgxTServiceBuilder extends SiTranslateServiceBuilder {\n private serviceCache = new Map<TranslateService, SiTranslateNgxTService>();\n\n buildService(injector: Injector): SiTranslateService {\n // Get instance of NGX Translate via injector instance of the current scope (see isolated mode)\n const ngxTranslateService = injector.get(TranslateService);\n const missingTranslateHandler = injector.get(MissingTranslationHandler, null);\n\n let ngxTServiceWrapper = this.serviceCache.get(ngxTranslateService);\n if (!ngxTServiceWrapper) {\n ngxTServiceWrapper = new SiTranslateNgxTService(ngxTranslateService, missingTranslateHandler);\n this.serviceCache.set(ngxTranslateService, ngxTServiceWrapper);\n }\n\n return ngxTServiceWrapper;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\nimport { SiTranslateServiceBuilder } from '@siemens/element-translate-ng/translate';\n\nimport { SiTranslateNgxTServiceBuilder } from './si-translate-ngxt.service-builder';\n\n/**\n * This module configures Element to use ngx-translate for translating {@link TranslatableString}\n * It should only be imported once in an applications root module (typically `app.module.ts`)\n */\n@NgModule({\n providers: [{ provide: SiTranslateServiceBuilder, useClass: SiTranslateNgxTServiceBuilder }]\n})\nexport class SiTranslateNgxTModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { EnvironmentProviders, inject, Injector, Provider } from '@angular/core';\nimport { MissingTranslationHandler } from '@ngx-translate/core';\nimport { SiTranslateServiceBuilder } from '@siemens/element-translate-ng/translate';\n\nimport { SiMissingTranslateService } from './si-missing-translate.service';\nimport { SiTranslateNgxTServiceBuilder } from './si-translate-ngxt.service-builder';\n\n/**\n * This provider configures Element to use ngx-translate for translating {@link TranslatableString}\n * It should only be imported once in an application's configuration (typically `app.config.ts`)\n */\nexport const provideNgxTranslateForElement = (): (EnvironmentProviders | Provider)[] => {\n return [{ provide: SiTranslateServiceBuilder, useClass: SiTranslateNgxTServiceBuilder }];\n};\n\n/**\n * This provider configures default translations for ngx-translate, applying Element's built-in translations.\n *\n * @example\n * ```ts\n * providers: [\n * provideTranslateService({\n * ...,\n * missingTranslationHandler: provideMissingTranslationHandlerForElement(),\n * }),\n * provideNgxTranslateForElement(),\n * ...\n * ]\n * ```\n */\nexport const provideMissingTranslationHandlerForElement = (\n missingTranslationHandlerProvider?: Provider\n): Provider => {\n return {\n provide: MissingTranslationHandler,\n useFactory: () => {\n if (!missingTranslationHandlerProvider) {\n return new SiMissingTranslateService();\n }\n const injector = Injector.create({\n providers: [missingTranslationHandlerProvider],\n parent: inject(Injector)\n });\n return new SiMissingTranslateService(injector.get(MissingTranslationHandler));\n }\n };\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-translate-ngxt.module';\nexport * from './si-translate-ngxt.provider';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"siemens-element-translate-ng-ngx-translate.mjs","sources":["../../../../projects/element-translate-ng/ngx-translate/si-missing-translate.service.ts","../../../../projects/element-translate-ng/ngx-translate/si-translate-ngxt.service.ts","../../../../projects/element-translate-ng/ngx-translate/si-translate-ngxt.service-builder.ts","../../../../projects/element-translate-ng/ngx-translate/si-translate-ngxt.module.ts","../../../../projects/element-translate-ng/ngx-translate/si-translate-ngxt.provider.ts","../../../../projects/element-translate-ng/ngx-translate/index.ts","../../../../projects/element-translate-ng/ngx-translate/siemens-element-translate-ng-ngx-translate.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable } from '@angular/core';\nimport {\n MissingTranslationHandler,\n MissingTranslationHandlerParams,\n TranslateDefaultParser,\n Translation\n} from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Handles missing translations by returning the default value if available.\n */\n@Injectable()\nexport class SiMissingTranslateService implements MissingTranslationHandler {\n private readonly parser = new TranslateDefaultParser();\n private readonly defaultTranslations: Record<string, string> = {};\n\n // eslint-disable-next-line @angular-eslint/prefer-inject\n constructor(private readonly appHandler?: MissingTranslationHandler) {}\n\n /** Sets a default translation for a given key. */\n setTranslation(key: string, value: string): void {\n this.defaultTranslations[key] = value;\n }\n /** Gets the default translation for a given key. */\n getDefault(key: string): string | undefined {\n return this.defaultTranslations[key];\n }\n /** {@inheritDoc} */\n handle(params: MissingTranslationHandlerParams): Translation | Observable<Translation> {\n const translated = this.getDefault(params.key);\n if (translated !== undefined) {\n return this.parser.interpolate(translated, params.interpolateParams);\n }\n return this.appHandler?.handle(params) ?? params.key;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { isDevMode, isSignal } from '@angular/core';\nimport { MissingTranslationHandler, TranslateService } from '@ngx-translate/core';\nimport { SiTranslateService, TranslationResult } from '@siemens/element-translate-ng/translate';\nimport { merge, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { SiMissingTranslateService } from './si-missing-translate.service';\n\n/**\n * {@link SiTranslateService} wrapper around ngx-translate\n *\n * @internal\n */\nexport class SiTranslateNgxTService extends SiTranslateService {\n private ngxTranslateService: TranslateService;\n private readonly fallbackTranslations?: SiMissingTranslateService;\n\n constructor(\n ngxTranslateService: TranslateService,\n missingTranslateHandler: MissingTranslationHandler | null\n ) {\n super();\n this.ngxTranslateService = ngxTranslateService;\n if (missingTranslateHandler instanceof SiMissingTranslateService) {\n this.fallbackTranslations = missingTranslateHandler;\n } else if (isDevMode()) {\n console.warn(\n 'SiMissingTranslateService not provided as missingTranslateHandler, default translations will not work.'\n );\n }\n\n this.translationChange$ = merge(\n this.ngxTranslateService.onTranslationChange,\n this.ngxTranslateService.onLangChange\n ).pipe(map(() => {}));\n }\n\n override get currentLanguage(): string | null {\n // Ensure that @ngx-translate/core@17 is still supported\n return isSignal(this.ngxTranslateService.currentLang)\n ? this.ngxTranslateService.currentLang()\n : this.ngxTranslateService.currentLang;\n }\n\n override get availableLanguages(): readonly string[] {\n return this.ngxTranslateService.getLangs();\n }\n\n override set availableLanguages(languages: string[]) {\n this.ngxTranslateService.addLangs(languages);\n }\n\n override setCurrentLanguage(lang: string): Observable<void> {\n this.setDocumentLanguage(lang);\n return this.ngxTranslateService.use(lang).pipe(map(() => {}));\n }\n\n override getDefaultLanguage(): string | null {\n return this.ngxTranslateService.getFallbackLang();\n }\n\n override setDefaultLanguage(lang: string): void {\n this.setDocumentLanguage(lang);\n this.ngxTranslateService.setFallbackLang(lang);\n }\n\n override translate<T extends string | string[]>(\n keys: T,\n params?: Record<string, unknown>\n ): Observable<TranslationResult<T>> | TranslationResult<T> {\n if (Array.isArray(keys) && !keys.length) {\n return of({} as TranslationResult<T>);\n }\n return this.ngxTranslateService.stream(keys, params);\n }\n\n override translateAsync<T extends string | string[]>(\n keys: T,\n params?: Record<string, unknown>\n ): Observable<TranslationResult<T>> {\n if (Array.isArray(keys) && !keys.length) {\n return of({} as TranslationResult<T>);\n }\n return this.ngxTranslateService.stream(keys, params);\n }\n\n override translateSync<T extends string | string[]>(\n keys: T,\n params?: Record<string, unknown>\n ): TranslationResult<T> {\n if (Array.isArray(keys) && !keys.length) {\n return {} as TranslationResult<T>;\n }\n return this.ngxTranslateService.instant(keys, params);\n }\n\n override setTranslation(key: string, value: string): void {\n this.fallbackTranslations?.setTranslation(key, value);\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Injectable, Injector } from '@angular/core';\nimport { MissingTranslationHandler, TranslateService } from '@ngx-translate/core';\nimport {\n SiTranslateService,\n SiTranslateServiceBuilder\n} from '@siemens/element-translate-ng/translate';\n\nimport { SiTranslateNgxTService } from './si-translate-ngxt.service';\n\n/**\n * Builds {@link SiTranslateNgxTService} for each {@link TranslateService}.\n * The builder will create a new Service if a new {@link TranslateService} is found to support the isolated mode.\n *\n * @internal\n */\n@Injectable()\nexport class SiTranslateNgxTServiceBuilder extends SiTranslateServiceBuilder {\n private serviceCache = new Map<TranslateService, SiTranslateNgxTService>();\n\n buildService(injector: Injector): SiTranslateService {\n // Get instance of NGX Translate via injector instance of the current scope (see isolated mode)\n const ngxTranslateService = injector.get(TranslateService);\n const missingTranslateHandler = injector.get(MissingTranslationHandler, null);\n\n let ngxTServiceWrapper = this.serviceCache.get(ngxTranslateService);\n if (!ngxTServiceWrapper) {\n ngxTServiceWrapper = new SiTranslateNgxTService(ngxTranslateService, missingTranslateHandler);\n this.serviceCache.set(ngxTranslateService, ngxTServiceWrapper);\n }\n\n return ngxTServiceWrapper;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\nimport { SiTranslateServiceBuilder } from '@siemens/element-translate-ng/translate';\n\nimport { SiTranslateNgxTServiceBuilder } from './si-translate-ngxt.service-builder';\n\n/**\n * This module configures Element to use ngx-translate for translating {@link TranslatableString}\n * It should only be imported once in an applications root module (typically `app.module.ts`)\n */\n@NgModule({\n providers: [{ provide: SiTranslateServiceBuilder, useClass: SiTranslateNgxTServiceBuilder }]\n})\nexport class SiTranslateNgxTModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { EnvironmentProviders, inject, Injector, Provider } from '@angular/core';\nimport { MissingTranslationHandler } from '@ngx-translate/core';\nimport { SiTranslateServiceBuilder } from '@siemens/element-translate-ng/translate';\n\nimport { SiMissingTranslateService } from './si-missing-translate.service';\nimport { SiTranslateNgxTServiceBuilder } from './si-translate-ngxt.service-builder';\n\n/**\n * This provider configures Element to use ngx-translate for translating {@link TranslatableString}\n * It should only be imported once in an application's configuration (typically `app.config.ts`)\n */\nexport const provideNgxTranslateForElement = (): (EnvironmentProviders | Provider)[] => {\n return [{ provide: SiTranslateServiceBuilder, useClass: SiTranslateNgxTServiceBuilder }];\n};\n\n/**\n * This provider configures default translations for ngx-translate, applying Element's built-in translations.\n *\n * @example\n * ```ts\n * providers: [\n * provideTranslateService({\n * ...,\n * missingTranslationHandler: provideMissingTranslationHandlerForElement(),\n * }),\n * provideNgxTranslateForElement(),\n * ...\n * ]\n * ```\n */\nexport const provideMissingTranslationHandlerForElement = (\n missingTranslationHandlerProvider?: Provider\n): Provider => {\n return {\n provide: MissingTranslationHandler,\n useFactory: () => {\n if (!missingTranslationHandlerProvider) {\n return new SiMissingTranslateService();\n }\n const injector = Injector.create({\n providers: [missingTranslationHandlerProvider],\n parent: inject(Injector)\n });\n return new SiMissingTranslateService(injector.get(MissingTranslationHandler));\n }\n };\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-translate-ngxt.module';\nexport * from './si-translate-ngxt.provider';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -44,10 +44,10 @@ class SiTranslateService {
|
|
|
44
44
|
setDocumentLanguage(lang) {
|
|
45
45
|
this.documentRef?.documentElement?.setAttribute('lang', lang);
|
|
46
46
|
}
|
|
47
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
48
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
47
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
48
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateService });
|
|
49
49
|
}
|
|
50
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateService, decorators: [{
|
|
51
51
|
type: Injectable
|
|
52
52
|
}] });
|
|
53
53
|
|
|
@@ -70,18 +70,19 @@ const replacePlaceholders = (str, params) => {
|
|
|
70
70
|
* @internal
|
|
71
71
|
*/
|
|
72
72
|
class SiNoTranslateService extends SiTranslateService {
|
|
73
|
+
lang = 'en';
|
|
73
74
|
get currentLanguage() {
|
|
74
|
-
return
|
|
75
|
+
return this.lang;
|
|
75
76
|
}
|
|
76
77
|
get availableLanguages() {
|
|
77
|
-
return [
|
|
78
|
+
return [this.lang];
|
|
78
79
|
}
|
|
79
80
|
set availableLanguages(lang) { }
|
|
80
81
|
setCurrentLanguage(lang) {
|
|
81
82
|
return of();
|
|
82
83
|
}
|
|
83
84
|
getDefaultLanguage() {
|
|
84
|
-
return
|
|
85
|
+
return this.lang;
|
|
85
86
|
}
|
|
86
87
|
setDefaultLanguage(lang) { }
|
|
87
88
|
translate(keys, _params) {
|
|
@@ -102,10 +103,10 @@ class SiNoTranslateService extends SiTranslateService {
|
|
|
102
103
|
translateAsync(keys, params) {
|
|
103
104
|
return of(this.translate(keys, params));
|
|
104
105
|
}
|
|
105
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
106
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
106
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiNoTranslateService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
107
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiNoTranslateService, providedIn: 'root' });
|
|
107
108
|
}
|
|
108
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
109
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiNoTranslateService, decorators: [{
|
|
109
110
|
type: Injectable,
|
|
110
111
|
args: [{ providedIn: 'root' }]
|
|
111
112
|
}] });
|
|
@@ -120,10 +121,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
|
|
|
120
121
|
* @internal
|
|
121
122
|
*/
|
|
122
123
|
class SiTranslateServiceBuilder {
|
|
123
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
124
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
124
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateServiceBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
125
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateServiceBuilder });
|
|
125
126
|
}
|
|
126
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
127
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateServiceBuilder, decorators: [{
|
|
127
128
|
type: Injectable
|
|
128
129
|
}] });
|
|
129
130
|
|
|
@@ -141,10 +142,10 @@ class SiNoTranslateServiceBuilder extends SiTranslateServiceBuilder {
|
|
|
141
142
|
buildService() {
|
|
142
143
|
return this.siNoTranslateService;
|
|
143
144
|
}
|
|
144
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
145
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
145
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiNoTranslateServiceBuilder, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
146
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiNoTranslateServiceBuilder, providedIn: 'root' });
|
|
146
147
|
}
|
|
147
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiNoTranslateServiceBuilder, decorators: [{
|
|
148
149
|
type: Injectable,
|
|
149
150
|
args: [{ providedIn: 'root' }]
|
|
150
151
|
}] });
|
|
@@ -206,10 +207,10 @@ class SiTranslatePipe {
|
|
|
206
207
|
this.value = value;
|
|
207
208
|
this.cdRef.markForCheck();
|
|
208
209
|
}
|
|
209
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
210
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
210
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
211
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: SiTranslatePipe, isStandalone: true, name: "translate", pure: false });
|
|
211
212
|
}
|
|
212
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
213
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslatePipe, decorators: [{
|
|
213
214
|
type: Pipe,
|
|
214
215
|
args: [{
|
|
215
216
|
name: 'translate',
|
|
@@ -232,9 +233,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
|
|
|
232
233
|
* @internal
|
|
233
234
|
*/
|
|
234
235
|
class SiTranslateModule {
|
|
235
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
236
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
237
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
236
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
237
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateModule, imports: [SiTranslatePipe], exports: [SiTranslatePipe] });
|
|
238
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateModule, providers: [
|
|
238
239
|
/* This is needed for ngx-translate when using the isolated mode for lazy child routes.
|
|
239
240
|
* In that case, a new TranslateService is created by ngx-translate which also needs to be used
|
|
240
241
|
* by Element components within that route.
|
|
@@ -247,7 +248,7 @@ class SiTranslateModule {
|
|
|
247
248
|
}
|
|
248
249
|
] });
|
|
249
250
|
}
|
|
250
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
251
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslateModule, decorators: [{
|
|
251
252
|
type: NgModule,
|
|
252
253
|
args: [{
|
|
253
254
|
imports: [SiTranslatePipe],
|
|
@@ -307,10 +308,10 @@ class SiTranslatableService {
|
|
|
307
308
|
}
|
|
308
309
|
return this.translatableValues[key] ?? (this.isNoTranslate ? originalText : key);
|
|
309
310
|
}
|
|
310
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
311
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
311
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslatableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
312
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslatableService, providedIn: 'root' });
|
|
312
313
|
}
|
|
313
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
314
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiTranslatableService, decorators: [{
|
|
314
315
|
type: Injectable,
|
|
315
316
|
args: [{
|
|
316
317
|
providedIn: 'root'
|
|
@@ -1 +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/si-translate.service.ts","../../../../projects/element-translate-ng/translate/si-no-translate.service.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.inject.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/global.scope.ts","../../../../projects/element-translate-ng/translate/si-translatable.service.ts","../../../../projects/element-translate-ng/translate/t.ts","../../../../projects/element-translate-ng/translate/index.ts","../../../../projects/element-translate-ng/translate/siemens-element-translate-ng-translate.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { inject, Injectable, DOCUMENT } 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 * Use {@link injectSiTranslateService} to get an instance of the translation 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 | undefined;\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 | null;\n\n /**\n * The available languages.\n */\n abstract get availableLanguages(): readonly 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 (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { inject, Injector } from '@angular/core';\n\nimport { SiNoTranslateServiceBuilder } from './si-no-translate.service-builder';\nimport { SiTranslateService } from './si-translate.service';\nimport { SiTranslateServiceBuilder } from './si-translate.service-builder';\n\nexport const injectSiTranslateService = (): SiTranslateService =>\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 inject(SiTranslateServiceBuilder, { optional: true }) ?? inject(SiNoTranslateServiceBuilder)\n ).buildService(inject(Injector));\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectorRef, inject, OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { injectSiTranslateService } from './si-translate.inject';\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})\nexport class SiTranslatePipe implements PipeTransform, OnDestroy {\n private lastKeyParams?: string;\n private value = '';\n private subscription?: Subscription;\n private siTranslateService = injectSiTranslateService();\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 (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { injectSiTranslateService } from './si-translate.inject';\nimport { SiTranslatePipe } from './si-translate.pipe';\nimport { SiTranslateService } from './si-translate.service';\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 * @deprecated This module is no longer needed.\n * Replace it with the {@link SiTranslatePipe} if needed, otherwise drop it without replacement.\n *\n * @internal\n */\n@NgModule({\n imports: [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: () => injectSiTranslateService()\n }\n ],\n exports: [SiTranslatePipe]\n})\nexport class SiTranslateModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\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 { injectSiTranslateService } from './si-translate.inject';\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 = injectSiTranslateService();\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 (c) Siemens 2016 - 2026\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';\nimport { injectSiTranslateService } from './si-translate.inject';\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 return strings[0];\n};\n\n/**\n * Always wrap `$localize` calls in this function within element components.\n * It may patch the global $localize based on the current translation framework.\n *\n * This function requires an `InjectionContext.`\n *\n * @internal\n *\n * @example\n * ```ts\n * class MyComponent {\n * readonly myText = t(() => $localize`:@@my-text:This is a default text`);\n * }\n * ```\n */\nexport const t = (localizeWrapperFunction: () => string): TranslatableString => {\n let localizeString: string;\n if (injectSiTranslateService().prevent$LocalizeInit) {\n localizeString = localizeWrapperFunction();\n } else {\n const $localizeBackup = globalScope.$localize;\n globalScope.$localize = $localize;\n localizeString = localizeWrapperFunction();\n globalScope.$localize = $localizeBackup;\n }\n\n const [, key, value] = /:.*?@@(.*?):(.*)/.exec(localizeString)!;\n return inject(SiTranslatableService).resolveText(key, value);\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\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-translate.service';\nexport * from './testing/si-translate.mock-service-builder.factory';\nexport * from '@siemens/element-translate-ng/translate-types';\nexport * from './si-translate.inject';\nexport * from './t';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
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/si-translate.service.ts","../../../../projects/element-translate-ng/translate/si-no-translate.service.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.inject.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/global.scope.ts","../../../../projects/element-translate-ng/translate/si-translatable.service.ts","../../../../projects/element-translate-ng/translate/t.ts","../../../../projects/element-translate-ng/translate/index.ts","../../../../projects/element-translate-ng/translate/siemens-element-translate-ng-translate.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { inject, Injectable, DOCUMENT } 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 * Use {@link injectSiTranslateService} to get an instance of the translation 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 currentLanguage: string | null;\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 | null;\n\n /**\n * The available languages.\n */\n abstract get availableLanguages(): readonly 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 (c) Siemens 2016 - 2026\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 private readonly lang = 'en';\n\n override get currentLanguage(): string {\n return this.lang;\n }\n\n override get availableLanguages(): string[] {\n return [this.lang];\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 this.lang;\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 (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { inject, Injector } from '@angular/core';\n\nimport { SiNoTranslateServiceBuilder } from './si-no-translate.service-builder';\nimport { SiTranslateService } from './si-translate.service';\nimport { SiTranslateServiceBuilder } from './si-translate.service-builder';\n\nexport const injectSiTranslateService = (): SiTranslateService =>\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 inject(SiTranslateServiceBuilder, { optional: true }) ?? inject(SiNoTranslateServiceBuilder)\n ).buildService(inject(Injector));\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectorRef, inject, OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { injectSiTranslateService } from './si-translate.inject';\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})\nexport class SiTranslatePipe implements PipeTransform, OnDestroy {\n private lastKeyParams?: string;\n private value = '';\n private subscription?: Subscription;\n private siTranslateService = injectSiTranslateService();\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 (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { injectSiTranslateService } from './si-translate.inject';\nimport { SiTranslatePipe } from './si-translate.pipe';\nimport { SiTranslateService } from './si-translate.service';\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 * @deprecated This module is no longer needed.\n * Replace it with the {@link SiTranslatePipe} if needed, otherwise drop it without replacement.\n *\n * @internal\n */\n@NgModule({\n imports: [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: () => injectSiTranslateService()\n }\n ],\n exports: [SiTranslatePipe]\n})\nexport class SiTranslateModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\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 { injectSiTranslateService } from './si-translate.inject';\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 = injectSiTranslateService();\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 (c) Siemens 2016 - 2026\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';\nimport { injectSiTranslateService } from './si-translate.inject';\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 return strings[0];\n};\n\n/**\n * Always wrap `$localize` calls in this function within element components.\n * It may patch the global $localize based on the current translation framework.\n *\n * This function requires an `InjectionContext.`\n *\n * @internal\n *\n * @example\n * ```ts\n * class MyComponent {\n * readonly myText = t(() => $localize`:@@my-text:This is a default text`);\n * }\n * ```\n */\nexport const t = (localizeWrapperFunction: () => string): TranslatableString => {\n let localizeString: string;\n if (injectSiTranslateService().prevent$LocalizeInit) {\n localizeString = localizeWrapperFunction();\n } else {\n const $localizeBackup = globalScope.$localize;\n globalScope.$localize = $localize;\n localizeString = localizeWrapperFunction();\n globalScope.$localize = $localizeBackup;\n }\n\n const [, key, value] = /:.*?@@(.*?):(.*)/.exec(localizeString)!;\n return inject(SiTranslatableService).resolveText(key, value);\n};\n","/**\n * Copyright (c) Siemens 2016 - 2026\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-translate.service';\nexport * from './testing/si-translate.mock-service-builder.factory';\nexport * from '@siemens/element-translate-ng/translate-types';\nexport * from './si-translate.inject';\nexport * from './t';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@siemens/element-translate-ng",
|
|
3
3
|
"description": "Element translation abstraction layer.",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "51.0.0-rc.1",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"repository": {
|
|
@@ -15,12 +15,13 @@
|
|
|
15
15
|
"homepage": "https://github.com/siemens/element",
|
|
16
16
|
"bugs": "https://github.com/siemens/element/issues/new",
|
|
17
17
|
"publishConfig": {
|
|
18
|
-
"access": "public"
|
|
18
|
+
"access": "public",
|
|
19
|
+
"directory": "../../dist/@siemens/element-translate-ng"
|
|
19
20
|
},
|
|
20
21
|
"peerDependencies": {
|
|
21
|
-
"@angular/common": "
|
|
22
|
-
"@angular/core": "
|
|
23
|
-
"@ngx-translate/core": "
|
|
22
|
+
"@angular/common": "22",
|
|
23
|
+
"@angular/core": "22",
|
|
24
|
+
"@ngx-translate/core": "17 - 18"
|
|
24
25
|
},
|
|
25
26
|
"peerDependenciesMeta": {
|
|
26
27
|
"@ngx-translate/core": {
|
|
@@ -63,5 +64,6 @@
|
|
|
63
64
|
"sideEffects": false,
|
|
64
65
|
"dependencies": {
|
|
65
66
|
"tslib": "^2.3.0"
|
|
66
|
-
}
|
|
67
|
-
|
|
67
|
+
},
|
|
68
|
+
"readme": "# Element Translate\n\n`element-translate-ng` is a translation abstraction layer. It can be used with\n\n- `ngx-translate`\n- Angular localize\n- Other frameworks in the future\n\nSee [here](https://element.siemens.io/fundamentals/localization/#translation-in-element)\nfor details how it works and how to use it.\n\n## Usage\n\nInstall the library as follows:\n\n```sh\nnpm install --save @siemens/element-translate-ng\n```\n\nAn important part of the translation tooling is the extraction of translatable keys as a TypeScript\ninterface as well as extracting a JSON messages file with default translations. This is provided by\nthe separate `@siemens/element-translate-cli` package via the `update-translatable-keys` CLI. See\n[Extracting translatable keys](https://element.siemens.io/fundamentals/localization/#extracting-translatable-keys)\nfor details on how to run it and how to configure it.\n\n## Testing\n\nRun `pnpm run translate:test` to perform the unit tests via [Vitest](https://vitest.dev/).\n\n## License\n\nThe following applies for code and documentation of the git repository,\nunless explicitly mentioned.\n\nCopyright (c) Siemens 2016 - 2026\n\nMIT, see [LICENSE.md](LICENSE.md).\n"
|
|
69
|
+
}
|
|
@@ -80,7 +80,7 @@ declare abstract class SiTranslateService {
|
|
|
80
80
|
/**
|
|
81
81
|
* The currently used language.
|
|
82
82
|
*/
|
|
83
|
-
abstract
|
|
83
|
+
abstract currentLanguage: string | null;
|
|
84
84
|
/**
|
|
85
85
|
* Sets a new language to be used. If needed, loads the language file.
|
|
86
86
|
* @param lang - The language to be used.
|
|
@@ -179,6 +179,7 @@ declare abstract class SiTranslateServiceBuilder {
|
|
|
179
179
|
* @internal
|
|
180
180
|
*/
|
|
181
181
|
declare class SiNoTranslateService extends SiTranslateService {
|
|
182
|
+
private readonly lang;
|
|
182
183
|
get currentLanguage(): string;
|
|
183
184
|
get availableLanguages(): string[];
|
|
184
185
|
set availableLanguages(lang: string[]);
|