Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | 1x 16x 16x 16x 16x 16x 4x 16x 2x 3x 2x 18x 18x 2x 1x 1x 7x 1x 6x 3x 1x 2x 9x 1x 8x 4x 4x | /**
* Copyright (c) Siemens 2016 - 2025
* SPDX-License-Identifier: MIT
*/
import { Injectable } from '@angular/core';
import {
MissingTranslationHandler,
MissingTranslationHandlerParams,
TranslateService
} from '@ngx-translate/core';
import { SiTranslateService, TranslationResult } from '@siemens/element-translate-ng/translate';
import { merge, Observable, of } from 'rxjs';
import { map } from 'rxjs/operators';
/**
* {@link SiTranslateService} wrapper around ngx-translate
*
* @internal
*/
@Injectable()
export class SiTranslateNgxTService extends SiTranslateService {
private ngxTranslateService: TranslateService;
private defaultTranslations: Record<string, string> = {};
private originalMissingHandler: MissingTranslationHandler;
// eslint-disable-next-line @angular-eslint/prefer-inject
constructor(ngxTranslateService: TranslateService) {
super();
this.ngxTranslateService = ngxTranslateService;
this.originalMissingHandler = ngxTranslateService.missingTranslationHandler;
ngxTranslateService.missingTranslationHandler = {
handle: params => this.handleMissingTranslation(params)
};
this.translationChange$ = merge(
this.ngxTranslateService.onTranslationChange,
this.ngxTranslateService.onLangChange
).pipe(map(() => {}));
}
override get currentLanguage(): string {
return this.ngxTranslateService.currentLang;
}
override get availableLanguages(): string[] {
return this.ngxTranslateService.getLangs();
}
override set availableLanguages(languages: string[]) {
this.ngxTranslateService.addLangs(languages);
}
override setCurrentLanguage(lang: string): Observable<void> {
this.setDocumentLanguage(lang);
return this.ngxTranslateService.use(lang).pipe(map(() => {}));
}
override getDefaultLanguage(): string {
return this.ngxTranslateService.getDefaultLang();
}
override setDefaultLanguage(lang: string): void {
this.setDocumentLanguage(lang);
this.ngxTranslateService.setDefaultLang(lang);
}
override translate<T extends string | string[]>(
keys: T,
params?: Record<string, unknown>
): Observable<TranslationResult<T>> | TranslationResult<T> {
if (Array.isArray(keys) && !keys.length) {
return of({} as TranslationResult<T>);
}
return this.ngxTranslateService.stream(keys, params);
}
override translateAsync<T extends string | string[]>(
keys: T,
params?: Record<string, unknown>
): Observable<TranslationResult<T>> {
if (Array.isArray(keys) && !keys.length) {
return of({} as TranslationResult<T>);
}
return this.ngxTranslateService.stream(keys, params);
}
override translateSync<T extends string | string[]>(
keys: T,
params?: Record<string, unknown>
): TranslationResult<T> {
if (Array.isArray(keys) && !keys.length) {
return {} as TranslationResult<T>;
}
return this.ngxTranslateService.instant(keys, params);
}
override setTranslation(key: string, value: string): void {
this.defaultTranslations[key] = value;
}
private handleMissingTranslation(params: MissingTranslationHandlerParams): string {
return (
params.translateService.parser.interpolate(
this.defaultTranslations[params.key],
params.interpolateParams
) ?? this.originalMissingHandler.handle(params)
);
}
}
|