All files / ngx-translate si-translate-ngxt.service.ts

100% Statements 28/28
93.75% Branches 15/16
92.3% Functions 12/13
100% Lines 28/28

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              1x 1x                 1x               17x 17x 17x 16x 1x 1x         17x             2x       3x       2x       18x 18x       2x       1x 1x             7x 1x   6x             3x 1x   2x             9x 1x   8x       4x      
/**
 * Copyright (c) Siemens 2016 - 2026
 * SPDX-License-Identifier: MIT
 */
import { isDevMode } from '@angular/core';
import { MissingTranslationHandler, 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';
 
import { SiMissingTranslateService } from './si-missing-translate.service';
 
/**
 * {@link SiTranslateService} wrapper around ngx-translate
 *
 * @internal
 */
export class SiTranslateNgxTService extends SiTranslateService {
  private ngxTranslateService: TranslateService;
  private readonly fallbackTranslations?: SiMissingTranslateService;
 
  constructor(
    ngxTranslateService: TranslateService,
    missingTranslateHandler: MissingTranslationHandler | null
  ) {
    super();
    this.ngxTranslateService = ngxTranslateService;
    if (missingTranslateHandler instanceof SiMissingTranslateService) {
      this.fallbackTranslations = missingTranslateHandler;
    E} else if (isDevMode()) {
      console.warn(
        'SiMissingTranslateService not provided as missingTranslateHandler, default translations will not work.'
      );
    }
 
    this.translationChange$ = merge(
      this.ngxTranslateService.onTranslationChange,
      this.ngxTranslateService.onLangChange
    ).pipe(map(() => {}));
  }
 
  override get currentLanguage(): string | undefined {
    return this.ngxTranslateService.currentLang;
  }
 
  override get availableLanguages(): readonly 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 | null {
    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.fallbackTranslations?.setTranslation(key, value);
  }
}