Text Share Online

import { NgModule, Pipe, PipeTransform, Directive, Input, OnDestroy, AfterViewChecked } from ‘@angular/core’;
import {
TranslateService,
TranslateLoader,
TranslateCompiler,
TranslateParser,
MissingTranslationHandler,
MissingTranslationHandlerParams,
TranslationObject,
InterpolatableTranslationObject,
InterpolatableTranslation,
InterpolationParameters,
Translation,
StrictTranslation,
Language,
LangChangeEvent,
FallbackLangChangeEvent,
TranslationChangeEvent,
} from ‘@ngx-translate/core’;
import { Observable, of, Subject } from ‘rxjs’;

// ─────────────────────────────────────────────
// Mock TranslateLoader
// ─────────────────────────────────────────────

export class MockTranslateLoader extends TranslateLoader {
override getTranslation(_lang: string): Observable<TranslationObject> {
return of({});
}
}

// ─────────────────────────────────────────────
// Mock TranslateCompiler
// ─────────────────────────────────────────────

export class MockTranslateCompiler extends TranslateCompiler {
override compile(value: string, _lang: string): string {
return value;
}

override compileTranslations(
translations: TranslationObject,
_lang: string,
): InterpolatableTranslationObject {
return translations as InterpolatableTranslationObject;
}
}

// ─────────────────────────────────────────────
// Mock TranslateParser
// ─────────────────────────────────────────────

export class MockTranslateParser extends TranslateParser {
override interpolate(
expr: string | ((_params?: InterpolationParameters) => string),
_params?: InterpolationParameters,
): string {
return typeof expr === ‘function’ ? expr(_params) : expr;
}
}

// ─────────────────────────────────────────────
// Mock MissingTranslationHandler
// ─────────────────────────────────────────────

export class MockMissingTranslationHandler extends MissingTranslationHandler {
override handle(params: MissingTranslationHandlerParams): string {
return params.key;
}
}

// ─────────────────────────────────────────────
// Mock TranslateService
// ─────────────────────────────────────────────

export class MockTranslateService implements Partial<TranslateService> {
private _onTranslationChange = new Subject<TranslationChangeEvent>();
private _onLangChange = new Subject<LangChangeEvent>();
private _onFallbackLangChange = new Subject<FallbackLangChangeEvent>();

get onTranslationChange(): Observable<TranslationChangeEvent> {
return this._onTranslationChange.asObservable();
}

get onLangChange(): Observable<LangChangeEvent> {
return this._onLangChange.asObservable();
}

get onFallbackLangChange(): Observable<FallbackLangChangeEvent> {
return this._onFallbackLangChange.asObservable();
}

/** @deprecated */
get onDefaultLangChange(): Observable<FallbackLangChangeEvent> {
return this._onFallbackLangChange.asObservable();
}

get currentLang(): Language {
return ‘pt’;
}

get defaultLang(): Language | null {
return ‘pt’;
}

get langs(): readonly Language[] {
return [‘pt’];
}

use(_lang: Language): Observable<InterpolatableTranslationObject> {
return of({});
}

setFallbackLang(_lang: Language): Observable<InterpolatableTranslationObject> {
return of({});
}

/** @deprecated */
setDefaultLang(_lang: Language): Observable<InterpolatableTranslationObject> {
return of({});
}

getFallbackLang(): Language | null {
return ‘pt’;
}

/** @deprecated */
getDefaultLang(): Language | null {
return ‘pt’;
}

getCurrentLang(): Language {
return ‘pt’;
}

addLangs(_languages: Language[]): void {}

getLangs(): readonly Language[] {
return [‘pt’];
}

reloadLang(_lang: Language): Observable<InterpolatableTranslationObject> {
return of({});
}

resetLang(_lang: Language): void {}

instant(
key: string | string[],
_interpolateParams?: InterpolationParameters,
): Translation {
return Array.isArray(key)
? key.reduce((acc, k) => ({ …acc, [k]: k }), {})
: key;
}

get(
key: string | string[],
_interpolateParams?: InterpolationParameters,
): Observable<Translation> {
const result = Array.isArray(key)
? key.reduce((acc, k) => ({ …acc, [k]: k }), {})
: key;
return of(result);
}

stream(
key: string | string[],
_interpolateParams?: InterpolationParameters,
): Observable<Translation> {
return this.get(key, _interpolateParams);
}

getStreamOnTranslationChange(
key: string | string[],
_interpolateParams?: InterpolationParameters,
): Observable<Translation> {
return this.get(key, _interpolateParams);
}

set(
_key: string,
_translation: string | TranslationObject,
_lang?: Language,
): void {}

setTranslation(
_lang: Language,
_translations: TranslationObject,
_shouldMerge?: boolean,
): void {}

getParsedResult(
key: string | string[],
_interpolateParams?: InterpolationParameters,
): StrictTranslation | Observable<StrictTranslation> {
return Array.isArray(key)
? key.reduce((acc, k) => ({ …acc, [k]: k }), {})
: key;
}

getBrowserLang(): Language | undefined {
return ‘pt’;
}

getBrowserCultureLang(): Language | undefined {
return ‘pt-BR’;
}
}

// ─────────────────────────────────────────────
// Mock TranslatePipe
// ─────────────────────────────────────────────

@Pipe({
name: ‘translate’,
standalone: false,
})
export class MockTranslatePipe implements PipeTransform {
transform(value: string, …_args: unknown[]): string {
return value ?? ”;
}
}

// ─────────────────────────────────────────────
// Mock TranslateDirective
// ─────────────────────────────────────────────

@Directive({
selector: ‘[translate],[ngx-translate]’,
standalone: false,
})
export class MockTranslateDirective implements AfterViewChecked, OnDestroy {
@Input() translate: string = ”;
@Input() translateParams: InterpolationParameters = {};

ngAfterViewChecked(): void {}
ngOnDestroy(): void {}
}

// ─────────────────────────────────────────────
// TranslateModuleMock
// ─────────────────────────────────────────────

@NgModule({
declarations: [MockTranslatePipe, MockTranslateDirective],
exports: [MockTranslatePipe, MockTranslateDirective],
providers: [
{ provide: TranslateService, useClass: MockTranslateService },
],
})
export class TranslateModuleMock {}

    Share This: