{"version":3,"file":"ngx-translate-core.mjs","sources":["../../../projects/ngx-translate/src/lib/extraction-marker.ts","../../../projects/ngx-translate/src/lib/missing-translation-handler.ts","../../../projects/ngx-translate/src/lib/translate.compiler.ts","../../../projects/ngx-translate/src/lib/translate.loader.ts","../../../projects/ngx-translate/src/lib/util.ts","../../../projects/ngx-translate/src/lib/translate.parser.ts","../../../projects/ngx-translate/src/lib/translate.store.ts","../../../projects/ngx-translate/src/lib/translate.service.ts","../../../projects/ngx-translate/src/lib/translate.directive.ts","../../../projects/ngx-translate/src/lib/translate.pipe.ts","../../../projects/ngx-translate/src/lib/translate.providers.ts","../../../projects/ngx-translate/src/lib/translate.module.ts","../../../projects/ngx-translate/src/ngx-translate-core.ts"],"sourcesContent":["export function _(key: T): T {\n return key;\n}\n","import { Injectable } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nimport { TranslateService, StrictTranslation } from \"./translate.service\";\n\nexport interface MissingTranslationHandlerParams {\n /**\n * the key that's missing in translation files\n */\n key: string;\n\n /**\n * an instance of the service that was unable to translate the key.\n */\n translateService: TranslateService;\n\n /**\n * interpolation params that were passed along for translating the given key.\n */\n interpolateParams?: object;\n}\n\nexport abstract class MissingTranslationHandler {\n /**\n * A function that handles missing translations.\n *\n * @param params context for resolving a missing translation\n * @returns a value or an observable\n *\n * If it returns a value, then this value is used.\n * If it returns an observable, the value returned by this observable will be used (except if the method was \"instant\").\n * If it returns undefined, the key will be used as a value\n */\n abstract handle(\n params: MissingTranslationHandlerParams,\n ): StrictTranslation | Observable;\n}\n\n/**\n * This handler is just a placeholder that does nothing; in case you don't need a missing translation handler at all\n */\n@Injectable()\nexport class DefaultMissingTranslationHandler implements MissingTranslationHandler {\n handle(params: MissingTranslationHandlerParams): string {\n return params.key;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { InterpolateFunction } from \"./translate.parser\";\nimport {\n InterpolatableTranslation,\n InterpolatableTranslationObject,\n TranslationObject,\n} from \"./translate.service\";\n\nexport abstract class TranslateCompiler {\n abstract compile(value: string, lang: string): InterpolatableTranslation;\n\n abstract compileTranslations(\n translations: TranslationObject,\n lang: string,\n ): InterpolatableTranslationObject;\n}\n\n/**\n * This compiler is just a placeholder that does nothing; in case you don't need a compiler at all\n */\n@Injectable()\nexport class TranslateNoOpCompiler extends TranslateCompiler {\n compile(value: string, lang: string): string | InterpolateFunction {\n void lang;\n return value;\n }\n\n compileTranslations(\n translations: TranslationObject,\n lang: string,\n ): InterpolatableTranslationObject {\n void lang;\n return translations;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Observable, of } from \"rxjs\";\nimport { TranslationObject } from \"./translate.service\";\n\nexport abstract class TranslateLoader {\n abstract getTranslation(lang: string): Observable;\n}\n\n/**\n * This loader is just a placeholder that does nothing; in case you don't need a loader at all\n */\n@Injectable()\nexport class TranslateNoOpLoader extends TranslateLoader {\n getTranslation(lang: string): Observable {\n void lang;\n return of({});\n }\n}\n","import { InterpolatableTranslationObject } from \"./translate.service\";\n\n/**\n * Determines if two objects or two values are equivalent.\n *\n * Two objects or values are considered equivalent if at least one of the following is true:\n *\n * * Both objects or values pass `===` comparison.\n * * Both objects or values are of the same type and all of their properties are equal by\n * comparing them with `equals`.\n *\n * @param o1 Object or value to compare.\n * @param o2 Object or value to compare.\n * @returns true if arguments are equal.\n */\nexport function equals(o1: unknown, o2: unknown): boolean {\n if (o1 === o2) return true;\n if (o1 === null || o2 === null) return false;\n if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN\n\n const t1 = typeof o1,\n t2 = typeof o2;\n let length: number;\n\n if (t1 == t2 && t1 == \"object\") {\n if (Array.isArray(o1)) {\n if (!Array.isArray(o2)) return false;\n if ((length = o1.length) == o2.length) {\n for (let key = 0; key < length; key++) {\n if (!equals(o1[key], o2[key])) return false;\n }\n return true;\n }\n } else {\n if (Array.isArray(o2)) {\n return false;\n }\n if (isDict(o1) && isDict(o2)) {\n const keySet = Object.create(null);\n for (const key in o1) {\n if (!equals(o1[key], o2[key])) {\n return false;\n }\n keySet[key] = true;\n }\n for (const key in o2) {\n if (!(key in keySet) && typeof o2[key] !== \"undefined\") {\n return false;\n }\n }\n return true;\n }\n }\n }\n return false;\n}\n\nexport function isDefinedAndNotNull(value: T | null | undefined): value is T {\n return typeof value !== \"undefined\" && value !== null;\n}\n\nexport function isDefined(value: T | null | undefined): value is T | null {\n return value !== undefined;\n}\n\nexport function isDict(value: unknown): value is InterpolatableTranslationObject {\n return isObject(value) && !isArray(value) && value !== null;\n}\n\nexport function isObject(value: unknown): value is Record {\n return typeof value === \"object\" && value !== null;\n}\n\nexport function isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\nexport function isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n\nexport function isFunction(value: unknown): boolean {\n return typeof value === \"function\";\n}\n\nfunction cloneDeep(value: unknown): unknown {\n if (isArray(value)) {\n return value.map((item) => cloneDeep(item));\n } else if (isDict(value)) {\n const cloned: Record = {};\n Object.keys(value).forEach((key) => {\n cloned[key] = cloneDeep((value as Record)[key]);\n });\n return cloned;\n } else {\n return value;\n }\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport function mergeDeep(target: Readonly, source: Readonly): any {\n if (!isObject(target)) {\n return cloneDeep(source);\n }\n\n const output = cloneDeep(target);\n\n if (isObject(output) && isObject(source)) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n Object.keys(source).forEach((key: any) => {\n if (isDict(source[key])) {\n if (key in target) {\n output[key] = mergeDeep(target[key] as Readonly, source[key]);\n } else {\n Object.assign(output, { [key]: source[key] });\n }\n } else {\n Object.assign(output, { [key]: source[key] });\n }\n });\n }\n return output;\n}\n\n/**\n * Retrieves a value from a nested object using a dot-separated key path.\n *\n * Example usage:\n * ```ts\n * getValue({ key1: { keyA: 'valueI' }}, 'key1.keyA'); // returns 'valueI'\n * ```\n *\n * @param target The source object from which to retrieve the value.\n * @param key Dot-separated key path specifying the value to retrieve.\n * @returns The value at the specified key path, or `undefined` if not found.\n */\nexport function getValue(target: unknown, key: string): unknown {\n const keys = key.split(\".\");\n\n key = \"\";\n do {\n key += keys.shift();\n const isLastKey = !keys.length;\n\n if (isDefinedAndNotNull(target)) {\n if (\n isDict(target) &&\n isDefined(target[key]) &&\n (isDict(target[key]) || isArray(target[key]) || isLastKey)\n ) {\n target = target[key];\n key = \"\";\n continue;\n }\n\n if (isArray(target)) {\n const index = parseInt(key, 10);\n if (\n isDefined(target[index]) &&\n (isDict(target[index]) || isArray(target[index]) || isLastKey)\n ) {\n target = target[index];\n key = \"\";\n continue;\n }\n }\n }\n\n if (isLastKey) {\n target = undefined;\n continue;\n }\n key += \".\";\n } while (keys.length);\n\n return target;\n}\n\n/**\n * Sets a value on object using a dot separated key.\n * This function modifies the object in place\n * parser.setValue({a:{b:{c: \"test\"}}}, 'a.b.c', \"test2\") ==> {a:{b:{c: \"test2\"}}}\n * @param target an object\n * @param key E.g. \"a.b.c\"\n * @param value to set\n * @deprecated use insertValue() instead\n */\nexport function setValue(target: Record, key: string, value: unknown): void {\n const keys: string[] = key.split(\".\");\n let current: Record = target;\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n if (i === keys.length - 1) {\n current[key] = value;\n } else {\n current = current[key] && isDict(current[key]) ? current[key] : {};\n }\n }\n}\n\n/**\n * Sets a value on object using a dot separated key.\n * Returns a clone of the object without modifying it\n * parser.setValue({a:{b:{c: \"test\"}}}, 'a.b.c', \"test2\") ==> {a:{b:{c: \"test2\"}}}\n * @param target an object\n * @param key E.g. \"a.b.c\"\n * @param value to set\n */\nexport function insertValue(target: Readonly, key: string, value: unknown): T {\n return mergeDeep(target, createNestedObject(key, value) as Readonly);\n}\n\nfunction createNestedObject(\n dotSeparatedKey: string,\n value: unknown,\n): Record | unknown {\n return dotSeparatedKey.split(\".\").reduceRight((acc, key) => ({ [key]: acc }), value);\n}\n","import { Injectable } from \"@angular/core\";\nimport { InterpolationParameters } from \"./translate.service\";\nimport { getValue, isString, isFunction, isArray, isObject } from \"./util\";\n\nexport type InterpolateFunction = (params?: InterpolationParameters) => string;\n\nexport abstract class TranslateParser {\n /**\n * Interpolates a string to replace parameters\n * \"This is a {{ key }}\" ==> \"This is a value\", with params = { key: \"value\" }\n * @param expr\n * @param params\n */\n abstract interpolate(\n expr: InterpolateFunction | string,\n params?: InterpolationParameters,\n ): string | undefined;\n}\n\n@Injectable()\nexport class TranslateDefaultParser extends TranslateParser {\n templateMatcher = /{{\\s?([^{}\\s]*)\\s?}}/g;\n\n public interpolate(\n expr: InterpolateFunction | string,\n params?: InterpolationParameters,\n ): string | undefined {\n if (isString(expr)) {\n return this.interpolateString(expr as string, params);\n } else if (isFunction(expr)) {\n return this.interpolateFunction(expr as InterpolateFunction, params);\n }\n return undefined;\n }\n\n protected interpolateFunction(\n fn: InterpolateFunction,\n params?: InterpolationParameters,\n ): string {\n return fn(params);\n }\n\n protected interpolateString(expr: string, params?: InterpolationParameters): string {\n if (!params) {\n return expr;\n }\n\n return expr.replace(this.templateMatcher, (substring: string, key: string) => {\n const replacement = this.getInterpolationReplacement(params, key);\n return replacement !== undefined ? replacement : substring;\n });\n }\n\n /**\n * Returns the replacement for an interpolation parameter\n * @params:\n */\n protected getInterpolationReplacement(\n params: InterpolationParameters,\n key: string,\n ): string | undefined {\n return this.formatValue(getValue(params, key));\n }\n\n /**\n * Converts a value into a useful string representation.\n * @param value The value to format.\n * @returns A string representation of the value.\n */\n protected formatValue(value: unknown): string | undefined {\n if (isString(value)) {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return value.toString();\n }\n if (value === null) {\n return \"null\";\n }\n if (isArray(value)) {\n return value.join(\", \");\n }\n if (isObject(value)) {\n if (\n typeof value.toString === \"function\" &&\n value.toString !== Object.prototype.toString\n ) {\n return value.toString();\n }\n return JSON.stringify(value); // Pretty-print JSON if no meaningful toString()\n }\n\n return undefined;\n }\n}\n","import {\n InterpolatableTranslationObject,\n FallbackLangChangeEvent,\n LangChangeEvent,\n TranslationChangeEvent,\n Language,\n InterpolatableTranslation,\n} from \"./translate.service\";\nimport { Observable, Subject } from \"rxjs\";\nimport { getValue, mergeDeep } from \"./util\";\nimport { Injectable } from \"@angular/core\";\n\nexport type DeepReadonly = {\n readonly [K in keyof T]: T[K] extends object ? DeepReadonly : T[K];\n};\n\n@Injectable()\nexport class TranslateStore {\n private _onTranslationChange: Subject =\n new Subject();\n private _onLangChange: Subject = new Subject();\n private _onFallbackLangChange: Subject =\n new Subject();\n\n private fallbackLang: Language | null = null;\n private currentLang!: Language;\n\n private translations: Record = {};\n private languages: Language[] = [];\n\n public getTranslations(language: Language): DeepReadonly {\n return this.translations[language];\n }\n\n public setTranslations(\n language: Language,\n translations: InterpolatableTranslationObject,\n extend: boolean,\n ): void {\n this.translations[language] =\n extend && this.hasTranslationFor(language)\n ? mergeDeep(this.translations[language], translations)\n : translations;\n this.addLanguages([language]);\n this._onTranslationChange.next({\n lang: language,\n translations: this.getTranslations(language),\n });\n }\n\n public getLanguages(): readonly Language[] {\n return this.languages;\n }\n\n public getCurrentLang(): Language {\n return this.currentLang;\n }\n\n public getFallbackLang(): Language | null {\n return this.fallbackLang;\n }\n\n /**\n * Changes the fallback lang\n */\n public setFallbackLang(lang: string, emitChange = true): void {\n this.fallbackLang = lang;\n if (emitChange) {\n this._onFallbackLangChange.next({ lang: lang, translations: this.translations[lang] });\n }\n }\n\n public setCurrentLang(lang: string, emitChange = true): void {\n this.currentLang = lang;\n if (emitChange) {\n this._onLangChange.next({ lang: lang, translations: this.translations[lang] });\n }\n }\n\n /**\n * An Observable to listen to translation change events\n * onTranslationChange.subscribe((params: TranslationChangeEvent) => {\n * // do something\n * });\n */\n get onTranslationChange(): Observable {\n return this._onTranslationChange.asObservable();\n }\n\n /**\n * An Observable to listen to lang change events\n * onLangChange.subscribe((params: LangChangeEvent) => {\n * // do something\n * });\n */\n get onLangChange(): Observable {\n return this._onLangChange.asObservable();\n }\n\n /**\n * An Observable to listen to fallback lang change events\n * onFallbackLangChange.subscribe((params: FallbackLangChangeEvent) => {\n * // do something\n * });\n */\n get onFallbackLangChange(): Observable {\n return this._onFallbackLangChange.asObservable();\n }\n\n public addLanguages(languages: Language[]): void {\n this.languages = Array.from(new Set([...this.languages, ...languages]));\n }\n\n public hasTranslationFor(lang: string) {\n return typeof this.translations[lang] !== \"undefined\";\n }\n\n public deleteTranslations(lang: string) {\n delete this.translations[lang];\n }\n\n public getTranslation(key: string): InterpolatableTranslation {\n let text = this.getValue(this.currentLang, key);\n\n if (\n text === undefined &&\n this.fallbackLang != null &&\n this.fallbackLang !== this.currentLang\n ) {\n text = this.getValue(this.fallbackLang, key);\n }\n return text;\n }\n\n protected getValue(language: Language, key: string): InterpolatableTranslation {\n return getValue(this.getTranslations(language), key) as InterpolatableTranslation;\n }\n}\n","import { inject, Injectable, InjectionToken } from \"@angular/core\";\nimport { concat, defer, forkJoin, isObservable, Observable, of } from \"rxjs\";\nimport { concatMap, map, shareReplay, switchMap, take } from \"rxjs/operators\";\nimport { MissingTranslationHandler } from \"./missing-translation-handler\";\nimport { TranslateCompiler } from \"./translate.compiler\";\nimport { TranslateLoader } from \"./translate.loader\";\nimport { InterpolateFunction, TranslateParser } from \"./translate.parser\";\nimport { TranslateStore } from \"./translate.store\";\nimport { insertValue, isArray, isDefinedAndNotNull, isDict, isString } from \"./util\";\n\n/**\n * Configuration object for the translation service.\n *\n * Provides options to customize translation behavior, including setting the primary language,\n * specifying a fallback language, and other deprecated flags for legacy support.\n */\nexport interface TranslateServiceConfig {\n lang?: Language;\n fallbackLang?: Language | null;\n extend: boolean;\n}\n\nexport const TRANSLATE_SERVICE_CONFIG = new InjectionToken(\n \"TRANSLATE_CONFIG\",\n);\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport type InterpolationParameters = Record;\n\nexport type StrictTranslation = string | StrictTranslation[] | TranslationObject | undefined | null;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Translation = StrictTranslation | any;\n\nexport interface TranslationObject {\n [key: string]: StrictTranslation;\n}\n\nexport type InterpolatableTranslation =\n | string\n | InterpolatableTranslation[]\n | InterpolateFunction\n | InterpolatableTranslationObject\n | undefined\n | null;\n\nexport interface InterpolatableTranslationObject {\n [key: string]: InterpolatableTranslation;\n}\n\nexport type Language = string;\n\nexport interface TranslationChangeEvent {\n translations: InterpolatableTranslationObject;\n lang: string;\n}\n\nexport interface LangChangeEvent {\n lang: string;\n translations: InterpolatableTranslationObject;\n}\n\nexport interface FallbackLangChangeEvent {\n lang: string;\n translations: InterpolatableTranslationObject;\n}\n\n/** @deprecated use `FallbackLangChangeEvent` */\nexport type DefaultLangChangeEvent = FallbackLangChangeEvent;\n\ndeclare interface Window {\n navigator: {\n languages?: string[];\n language?: string;\n browserLanguage?: string;\n userLanguage?: string;\n };\n}\n\ndeclare const window: Window;\n\nconst makeObservable = (value: T | Observable): Observable => {\n return isObservable(value) ? value : of(value);\n};\n\nexport abstract class ITranslateService {\n public abstract readonly onTranslationChange: Observable;\n public abstract readonly onLangChange: Observable;\n public abstract readonly onFallbackLangChange: Observable;\n\n public abstract use(lang: Language): Observable;\n\n public abstract setFallbackLang(lang: Language): Observable;\n public abstract getFallbackLang(): Language | null;\n\n public abstract addLangs(languages: Language[]): void;\n public abstract getLangs(): readonly Language[];\n public abstract reloadLang(lang: Language): Observable;\n public abstract resetLang(lang: Language): void;\n\n public abstract instant(\n key: string | string[],\n interpolateParams?: InterpolationParameters,\n ): Translation;\n public abstract stream(\n key: string | string[],\n interpolateParams?: InterpolationParameters,\n ): Observable;\n public abstract getStreamOnTranslationChange(\n key: string | string[],\n interpolateParams?: InterpolationParameters,\n ): Observable;\n\n public abstract set(\n key: string,\n translation: string | TranslationObject,\n lang?: Language,\n ): void;\n public abstract get(\n key: string | string[],\n interpolateParams?: InterpolationParameters,\n ): Observable;\n\n public abstract setTranslation(\n lang: Language,\n translations: TranslationObject,\n shouldMerge?: boolean,\n ): void;\n public abstract getParsedResult(\n key: string | string[],\n interpolateParams?: InterpolationParameters,\n ): StrictTranslation | Observable;\n\n public abstract getBrowserLang(): Language | undefined;\n public abstract getBrowserCultureLang(): Language | undefined;\n\n /**\n * Returns the current language\n * @deprecated use `getCurrentLang()`\n */\n public abstract readonly currentLang: Language;\n\n /**\n * Returns a list of known languages - either loaded\n * or set by using `addLangs()`\n * @deprecated use `getLangs()`\n */\n public abstract readonly langs: readonly Language[];\n\n /**\n * Sets the fallback language\n * @param lang The language to set\n * @deprecated use `setFallbackLang(lang)`\n */\n public abstract setDefaultLang(lang: Language): Observable;\n\n /**\n * Gets the fallback language\n * @deprecated use `getFallbackLang()`\n */\n public abstract getDefaultLang(): Language | null;\n\n /**\n * Returns the fallback language\n * @deprectated use `getFallbackLang()`\n */\n public abstract readonly defaultLang: Language | null;\n\n /**\n * @deprectated use `getFallbackLang()`\n */\n public abstract readonly onDefaultLangChange: Observable;\n}\n\n@Injectable()\nexport class TranslateService implements ITranslateService {\n private loadingTranslations!: Observable;\n private pending = false;\n private _translationRequests: Record> = {};\n private lastUseLanguage: Language | null = null;\n\n public currentLoader = inject(TranslateLoader);\n public compiler = inject(TranslateCompiler);\n private parser = inject(TranslateParser);\n private missingTranslationHandler = inject(MissingTranslationHandler);\n private store: TranslateStore = inject(TranslateStore);\n\n private readonly extend: boolean = false;\n\n /**\n * An Observable to listen to translation change events\n * onTranslationChange.subscribe((params: TranslationChangeEvent) => {\n * // do something\n * });\n */\n public get onTranslationChange(): Observable {\n return this.store.onTranslationChange;\n }\n\n /**\n * An Observable to listen to lang change events\n * onLangChange.subscribe((params: LangChangeEvent) => {\n * // do something\n * });\n */\n get onLangChange(): Observable {\n return this.store.onLangChange;\n }\n\n /**\n * An Observable to listen to fallback lang change events\n * onFallbackLangChange.subscribe((params: FallbackLangChangeEvent) => {\n * // do something\n * });\n */\n get onFallbackLangChange(): Observable {\n return this.store.onFallbackLangChange;\n }\n\n /**\n * @deprecated Use onFallbackLangChange() instead\n */\n get onDefaultLangChange(): Observable {\n return this.store.onFallbackLangChange;\n }\n\n constructor() {\n const config: TranslateServiceConfig = {\n extend: false,\n fallbackLang: null,\n\n ...inject(TRANSLATE_SERVICE_CONFIG, {\n optional: true,\n }),\n };\n\n if (config.lang) {\n this.use(config.lang);\n }\n\n if (config.fallbackLang) {\n this.setFallbackLang(config.fallbackLang);\n }\n\n if (config.extend) {\n this.extend = true;\n }\n }\n\n /**\n * Sets the fallback language to use if a translation is not found in the\n * current language\n */\n public setFallbackLang(lang: Language): Observable {\n if (!this.getFallbackLang()) {\n // on init set the fallbackLang immediately, but do not emit a change yet\n this.store.setFallbackLang(lang, false);\n }\n\n const pending = this.loadOrExtendLanguage(lang);\n if (isObservable(pending)) {\n pending.pipe(take(1)).subscribe({\n next: () => {\n this.store.setFallbackLang(lang);\n },\n error: () => {\n /* ignore here - user can handle it */\n },\n });\n return pending;\n }\n\n this.store.setFallbackLang(lang);\n return of(this.store.getTranslations(lang));\n }\n\n /**\n * Changes the lang currently used\n */\n public use(lang: Language): Observable {\n // remember the language that was called\n // we need this with multiple fast calls to use()\n // where translation loads might complete in random order\n this.lastUseLanguage = lang;\n\n if (!this.getCurrentLang()) {\n // on init set the currentLang immediately, but do not emit a change yet\n this.store.setCurrentLang(lang, false);\n }\n\n const pending = this.loadOrExtendLanguage(lang);\n if (isObservable(pending)) {\n pending.pipe(take(1)).subscribe({\n next: () => {\n this.changeLang(lang);\n },\n error: () => {\n /* ignore here - use can handle it */\n },\n });\n return pending;\n }\n\n this.changeLang(lang);\n return of(this.store.getTranslations(lang));\n }\n\n /**\n * Retrieves the given translations\n */\n private loadOrExtendLanguage(lang: Language): Observable | undefined {\n // if this language is unavailable or extend is true, ask for it\n if (!this.store.hasTranslationFor(lang) || this.extend) {\n this._translationRequests[lang] =\n this._translationRequests[lang] || this.loadAndCompileTranslations(lang);\n return this._translationRequests[lang];\n }\n\n return undefined;\n }\n\n /**\n * Changes the current lang\n */\n private changeLang(lang: Language): void {\n if (lang !== this.lastUseLanguage) {\n // received new language data,\n // but this was not the one requested last\n return;\n }\n\n this.store.setCurrentLang(lang);\n }\n\n public getCurrentLang(): Language {\n return this.store.getCurrentLang();\n }\n\n private loadAndCompileTranslations(\n lang: Language,\n ): Observable {\n this.pending = true;\n\n const loadingTranslations = this.currentLoader\n .getTranslation(lang)\n .pipe(shareReplay(1), take(1));\n\n this.loadingTranslations = loadingTranslations.pipe(\n map((res: TranslationObject) => this.compiler.compileTranslations(res, lang)),\n shareReplay(1),\n take(1),\n );\n\n this.loadingTranslations.subscribe({\n next: (res: InterpolatableTranslationObject) => {\n this.store.setTranslations(lang, res, this.extend);\n this.pending = false;\n },\n error: (err) => {\n void err;\n this.pending = false;\n },\n });\n\n return loadingTranslations;\n }\n\n /**\n * Manually sets an object of translations for a given language\n * after passing it through the compiler\n */\n public setTranslation(\n lang: Language,\n translations: TranslationObject,\n shouldMerge = false,\n ): void {\n const interpolatableTranslations: InterpolatableTranslationObject =\n this.compiler.compileTranslations(translations, lang);\n this.store.setTranslations(lang, interpolatableTranslations, shouldMerge || this.extend);\n }\n\n public getLangs(): readonly Language[] {\n return this.store.getLanguages();\n }\n\n /**\n * Add available languages\n */\n public addLangs(languages: Language[]): void {\n this.store.addLanguages(languages);\n }\n\n private getParsedResultForKey(\n key: string,\n interpolateParams?: InterpolationParameters,\n ): StrictTranslation | Observable {\n const textToInterpolate = this.getTextToInterpolate(key);\n\n if (isDefinedAndNotNull(textToInterpolate)) {\n return this.runInterpolation(textToInterpolate, interpolateParams);\n }\n\n const res = this.missingTranslationHandler.handle({\n key,\n translateService: this,\n ...(interpolateParams !== undefined && { interpolateParams }),\n });\n\n return res !== undefined ? res : key;\n }\n\n /**\n * Gets the fallback language. null if none is defined\n */\n public getFallbackLang(): Language | null {\n return this.store.getFallbackLang();\n }\n\n private getTextToInterpolate(key: string): InterpolatableTranslation | undefined {\n return this.store.getTranslation(key);\n }\n\n private runInterpolation(\n translations: InterpolatableTranslation,\n interpolateParams?: InterpolationParameters,\n ): StrictTranslation {\n if (!isDefinedAndNotNull(translations)) {\n return;\n }\n\n if (isArray(translations)) {\n return this.runInterpolationOnArray(translations, interpolateParams);\n }\n\n if (isDict(translations)) {\n return this.runInterpolationOnDict(translations, interpolateParams);\n }\n\n return this.parser.interpolate(translations, interpolateParams);\n }\n\n private runInterpolationOnArray(\n translations: InterpolatableTranslation,\n interpolateParams: InterpolationParameters | undefined,\n ) {\n return (translations as StrictTranslation[]).map((translation) =>\n this.runInterpolation(translation, interpolateParams),\n );\n }\n\n private runInterpolationOnDict(\n translations: InterpolatableTranslationObject,\n interpolateParams: InterpolationParameters | undefined,\n ) {\n const result: TranslationObject = {};\n for (const key in translations) {\n const res = this.runInterpolation(translations[key], interpolateParams);\n if (res !== undefined) {\n result[key] = res;\n }\n }\n return result;\n }\n\n /**\n * Returns the parsed result of the translations\n */\n public getParsedResult(\n key: string | string[],\n interpolateParams?: InterpolationParameters,\n ): StrictTranslation | Observable {\n return key instanceof Array\n ? this.getParsedResultForArray(key, interpolateParams)\n : this.getParsedResultForKey(key, interpolateParams);\n }\n\n private getParsedResultForArray(\n key: string[],\n interpolateParams: InterpolationParameters | undefined,\n ) {\n const result: Record> = {};\n\n let observables = false;\n for (const k of key) {\n result[k] = this.getParsedResultForKey(k, interpolateParams);\n observables = observables || isObservable(result[k]);\n }\n\n if (!observables) {\n return result as TranslationObject;\n }\n\n const sources: Observable[] = key.map((k) => makeObservable(result[k]));\n return forkJoin(sources).pipe(\n map((arr: StrictTranslation[]) => {\n const obj: TranslationObject = {};\n arr.forEach((value: StrictTranslation, index: number) => {\n obj[key[index]] = value;\n });\n return obj;\n }),\n );\n }\n\n /**\n * Gets the translated value of a key (or an array of keys)\n * @returns the translated key, or an object of translated keys\n */\n public get(\n key: string | string[],\n interpolateParams?: InterpolationParameters,\n ): Observable {\n if (!isDefinedAndNotNull(key) || !key.length) {\n throw new Error(`Parameter \"key\" is required and cannot be empty`);\n }\n // check if we are loading a new translation to use\n if (this.pending) {\n return this.loadingTranslations.pipe(\n concatMap(() => {\n return makeObservable(this.getParsedResult(key, interpolateParams));\n }),\n );\n }\n\n return makeObservable(this.getParsedResult(key, interpolateParams));\n }\n\n /**\n * Returns a stream of translated values of a key (or an array of keys) which updates\n * whenever the translation changes.\n * @returns A stream of the translated key, or an object of translated keys\n */\n public getStreamOnTranslationChange(\n key: string | string[],\n interpolateParams?: InterpolationParameters,\n ): Observable {\n if (!isDefinedAndNotNull(key) || !key.length) {\n throw new Error(`Parameter \"key\" is required and cannot be empty`);\n }\n\n return concat(\n defer(() => this.get(key, interpolateParams)),\n this.onTranslationChange.pipe(\n switchMap(() => {\n const res = this.getParsedResult(key, interpolateParams);\n return makeObservable(res);\n }),\n ),\n );\n }\n\n /**\n * Returns a stream of translated values of a key (or an array of keys) which updates\n * whenever the language changes.\n * @returns A stream of the translated key, or an object of translated keys\n */\n public stream(\n key: string | string[],\n interpolateParams?: InterpolationParameters,\n ): Observable {\n if (!isDefinedAndNotNull(key) || !key.length) {\n throw new Error(`Parameter \"key\" required`);\n }\n\n return concat(\n defer(() => this.get(key, interpolateParams)),\n this.onLangChange.pipe(\n switchMap(() => {\n const res = this.getParsedResult(key, interpolateParams);\n return makeObservable(res);\n }),\n ),\n );\n }\n\n /**\n * Returns a translation instantly from the internal state of loaded translation.\n * All rules regarding the current language, the preferred language of even fallback languages\n * will be used except any promise handling.\n */\n public instant(\n key: string | string[],\n interpolateParams?: InterpolationParameters,\n ): Translation {\n if (!isDefinedAndNotNull(key) || key.length === 0) {\n throw new Error('Parameter \"key\" is required and cannot be empty');\n }\n\n const result = this.getParsedResult(key, interpolateParams);\n\n if (isObservable(result)) {\n if (Array.isArray(key)) {\n return key.reduce((acc: Record, currKey: string) => {\n acc[currKey] = currKey;\n return acc;\n }, {});\n }\n return key;\n }\n\n return result;\n }\n\n /**\n * Sets the translated value of a key, after compiling it\n */\n public set(\n key: string,\n translation: string | TranslationObject,\n lang: Language = this.getCurrentLang(),\n ): void {\n this.store.setTranslations(\n lang,\n insertValue(\n this.store.getTranslations(lang),\n key,\n isString(translation)\n ? this.compiler.compile(translation, lang)\n : this.compiler.compileTranslations(translation, lang),\n ),\n false,\n );\n }\n\n /**\n * Allows reloading the lang file from the file\n */\n public reloadLang(lang: Language): Observable {\n this.resetLang(lang);\n return this.loadAndCompileTranslations(lang);\n }\n\n /**\n * Deletes inner translation\n */\n public resetLang(lang: Language): void {\n delete this._translationRequests[lang];\n this.store.deleteTranslations(lang);\n }\n\n /**\n * Returns the language code name from the browser, e.g. \"de\"\n */\n public static getBrowserLang(): Language | undefined {\n if (typeof window === \"undefined\" || !window.navigator) {\n return undefined;\n }\n\n const browserLang = this.getBrowserCultureLang();\n\n return browserLang ? browserLang.split(/[-_]/)[0] : undefined;\n }\n\n /**\n * Returns the culture language code name from the browser, e.g. \"de-DE\"\n */\n public static getBrowserCultureLang(): Language | undefined {\n if (typeof window === \"undefined\" || typeof window.navigator === \"undefined\") {\n return undefined;\n }\n\n return window.navigator.languages\n ? window.navigator.languages[0]\n : window.navigator.language ||\n window.navigator.browserLanguage ||\n window.navigator.userLanguage;\n }\n\n public getBrowserLang(): Language | undefined {\n return TranslateService.getBrowserLang();\n }\n\n public getBrowserCultureLang(): Language | undefined {\n return TranslateService.getBrowserCultureLang();\n }\n\n /** Deprecations **/\n\n /**\n * @deprecated use `getFallbackLang()`\n */\n get defaultLang(): Language | null {\n return this.getFallbackLang();\n }\n\n /**\n * The lang currently used\n * @deprecated use `getCurrentLang()`\n */\n get currentLang(): Language {\n return this.store.getCurrentLang();\n }\n\n /**\n * @deprecated use `getLangs()`\n */\n get langs(): readonly Language[] {\n return this.store.getLanguages();\n }\n\n /**\n * Sets the language to use as a fallback\n * @deprecated use setFallbackLanguage()\n */\n public setDefaultLang(lang: Language): Observable {\n return this.setFallbackLang(lang);\n }\n\n /**\n * Gets the fallback language used\n * @deprecated use getFallbackLang()\n */\n public getDefaultLang(): Language | null {\n return this.getFallbackLang();\n }\n}\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n inject,\n Input,\n OnDestroy,\n} from \"@angular/core\";\nimport { Subscription, isObservable } from \"rxjs\";\nimport {\n FallbackLangChangeEvent,\n InterpolatableTranslation,\n LangChangeEvent,\n TranslateService,\n TranslationChangeEvent,\n StrictTranslation,\n InterpolationParameters,\n} from \"./translate.service\";\nimport { equals, isDefinedAndNotNull, isString } from \"./util\";\n\ninterface ExtendedNode extends Text {\n originalContent: string;\n currentValue: string;\n lookupKey: string;\n lastKey: string | null;\n data: string;\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[translate],[ngx-translate]\",\n standalone: true,\n})\nexport class TranslateDirective implements AfterViewChecked, OnDestroy {\n private translateService: TranslateService = inject(TranslateService);\n private element: ElementRef = inject(ElementRef);\n private _ref: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n private key!: string;\n private lastParams?: InterpolationParameters;\n private currentParams?: InterpolationParameters;\n private readonly onLangChangeSub!: Subscription;\n private readonly onFallbackLangChangeSub!: Subscription;\n private readonly onTranslationChangeSub!: Subscription;\n\n @Input() set translate(key: string) {\n if (key) {\n this.key = key;\n this.checkNodes();\n }\n }\n\n @Input() set translateParams(params: InterpolationParameters) {\n if (!equals(this.currentParams, params)) {\n this.currentParams = params;\n this.checkNodes(true);\n }\n }\n\n constructor() {\n // subscribe to onTranslationChange event, in case the translations of the current lang change\n if (!this.onTranslationChangeSub) {\n this.onTranslationChangeSub = this.translateService.onTranslationChange.subscribe(\n (event: TranslationChangeEvent) => {\n if (event.lang === this.translateService.currentLang) {\n this.checkNodes(true, event.translations);\n }\n },\n );\n }\n\n // subscribe to onLangChange event, in case the language changes\n if (!this.onLangChangeSub) {\n this.onLangChangeSub = this.translateService.onLangChange.subscribe(\n (event: LangChangeEvent) => {\n this.checkNodes(true, event.translations);\n },\n );\n }\n\n // subscribe to onFallbackLangChange event, in case the fallback language changes\n if (!this.onFallbackLangChangeSub) {\n this.onFallbackLangChangeSub = this.translateService.onFallbackLangChange.subscribe(\n (event: FallbackLangChangeEvent) => {\n void event;\n this.checkNodes(true);\n },\n );\n }\n }\n\n ngAfterViewChecked() {\n this.checkNodes();\n }\n\n checkNodes(forceUpdate = false, translations?: InterpolatableTranslation) {\n let nodes: NodeList = this.element.nativeElement.childNodes;\n // if the element is empty\n if (!nodes.length) {\n // we add the key as content\n this.setContent(this.element.nativeElement, this.key);\n nodes = this.element.nativeElement.childNodes;\n }\n\n nodes.forEach((n) => {\n const node = n as ExtendedNode;\n if (node.nodeType === 3) {\n // node type 3 is a text node\n let key!: string;\n if (forceUpdate) {\n node.lastKey = null;\n }\n if (isDefinedAndNotNull(node.lookupKey)) {\n key = node.lookupKey;\n } else if (this.key) {\n key = this.key;\n } else {\n const content = this.getContent(node);\n const trimmedContent = content.trim();\n if (trimmedContent.length) {\n node.lookupKey = trimmedContent;\n // we want to use the content as a key, not the translation value\n if (content !== node.currentValue) {\n key = trimmedContent;\n // the content was changed from the user, we'll use it as a reference if needed\n node.originalContent = content || node.originalContent;\n } else if (node.originalContent) {\n // the content seems ok, but the lang has changed\n // the current content is the translation, not the key, use the last real content as key\n key = node.originalContent.trim();\n }\n }\n }\n this.updateValue(key, node, translations);\n }\n });\n }\n\n updateValue(key: string, node: ExtendedNode, translations?: InterpolatableTranslation) {\n if (key) {\n if (node.lastKey === key && this.lastParams === this.currentParams) {\n return;\n }\n\n this.lastParams = this.currentParams;\n\n const onTranslation = (res: StrictTranslation) => {\n if (res !== key || !node.lastKey) {\n node.lastKey = key;\n }\n if (!node.originalContent) {\n node.originalContent = this.getContent(node);\n }\n\n if (isString(res)) {\n node.currentValue = res;\n } else if (!isDefinedAndNotNull(res)) {\n node.currentValue = node.originalContent || key;\n } else {\n node.currentValue = JSON.stringify(res);\n }\n\n // we replace in the original content to preserve spaces that we might have trimmed\n this.setContent(\n node,\n this.key\n ? node.currentValue\n : node.originalContent.replace(key, node.currentValue),\n );\n this._ref.markForCheck();\n };\n\n if (isDefinedAndNotNull(translations)) {\n const res = this.translateService.getParsedResult(key, this.currentParams);\n if (isObservable(res)) {\n res.subscribe({ next: onTranslation });\n } else {\n onTranslation(res);\n }\n } else {\n this.translateService.get(key, this.currentParams).subscribe(onTranslation);\n }\n }\n }\n\n getContent(node: ExtendedNode): string {\n return (isDefinedAndNotNull(node.textContent) ? node.textContent : node.data) as string;\n }\n\n setContent(node: ExtendedNode, content: string): void {\n if (isDefinedAndNotNull(node.textContent)) {\n node.textContent = content;\n } else {\n node.data = content;\n }\n }\n\n ngOnDestroy() {\n if (this.onLangChangeSub) {\n this.onLangChangeSub.unsubscribe();\n }\n\n if (this.onFallbackLangChangeSub) {\n this.onFallbackLangChangeSub.unsubscribe();\n }\n\n if (this.onTranslationChangeSub) {\n this.onTranslationChangeSub.unsubscribe();\n }\n }\n}\n","import {\n ChangeDetectorRef,\n inject,\n Injectable,\n OnDestroy,\n Pipe,\n PipeTransform,\n} from \"@angular/core\";\nimport { isObservable, Subscription } from \"rxjs\";\nimport {\n InterpolatableTranslationObject,\n LangChangeEvent,\n TranslateService,\n TranslationChangeEvent,\n StrictTranslation,\n InterpolationParameters,\n} from \"./translate.service\";\nimport { equals, isDefinedAndNotNull, isDict, isString } from \"./util\";\n\n@Injectable()\n@Pipe({\n name: \"translate\",\n standalone: true,\n pure: false, // required to update the value when the promise is resolved\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n private translate: TranslateService = inject(TranslateService);\n private _ref: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n private value: StrictTranslation = \"\";\n lastKey: string | null = null;\n lastParams: InterpolationParameters[] = [];\n onTranslationChange: Subscription | undefined;\n onLangChange: Subscription | undefined;\n onFallbackLangChange: Subscription | undefined;\n\n updateValue(\n key: string,\n interpolateParams?: InterpolationParameters,\n translations?: InterpolatableTranslationObject,\n ): void {\n const onTranslation = (res: StrictTranslation) => {\n this.value = res !== undefined ? res : key;\n this.lastKey = key;\n this._ref.markForCheck();\n };\n if (translations) {\n const res = this.translate.getParsedResult(key, interpolateParams);\n if (isObservable(res)) {\n res.subscribe(onTranslation);\n } else {\n onTranslation(res);\n }\n }\n this.translate.get(key, interpolateParams).subscribe(onTranslation);\n }\n\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n transform(query: string | undefined | null, ...args: any[]): any {\n if (!query || !query.length) {\n return query;\n }\n\n // if we ask another time for the same key, return the last value\n if (equals(query, this.lastKey) && equals(args, this.lastParams)) {\n return this.value;\n }\n\n let interpolateParams: InterpolationParameters | undefined = undefined;\n if (isDefinedAndNotNull(args[0]) && args.length) {\n if (isString(args[0]) && args[0].length) {\n // we accept objects written in the template such as {n:1}, {'n':1}, {n:'v'}\n // this is why we might need to change it to real JSON objects such as {\"n\":1} or {\"n\":\"v\"}\n const validArgs: string = args[0]\n .replace(/(')?([a-zA-Z0-9_]+)(')?(\\s)?:/g, '\"$2\":')\n .replace(/:(\\s)?(')(.*?)(')/g, ':\"$3\"');\n try {\n interpolateParams = JSON.parse(validArgs);\n } catch (e) {\n void e;\n throw new SyntaxError(\n `Wrong parameter in TranslatePipe. Expected a valid Object, received: ${args[0]}`,\n );\n }\n } else if (isDict(args[0])) {\n interpolateParams = args[0];\n }\n }\n\n // store the query in case it changes\n this.lastKey = query;\n\n // store the params in case they change\n this.lastParams = args;\n\n // set the value\n this.updateValue(query, interpolateParams);\n\n // if there is a subscription to onLangChange, clean it\n this._dispose();\n\n // subscribe to onTranslationChange event, in case the translations change\n if (!this.onTranslationChange) {\n this.onTranslationChange = this.translate.onTranslationChange.subscribe(\n (event: TranslationChangeEvent) => {\n if (\n (this.lastKey && event.lang === this.translate.getCurrentLang()) ||\n event.lang === this.translate.getFallbackLang()\n ) {\n this.lastKey = null;\n this.updateValue(query, interpolateParams, event.translations);\n }\n },\n );\n }\n\n // subscribe to onLangChange event, in case the language changes\n if (!this.onLangChange) {\n this.onLangChange = this.translate.onLangChange.subscribe((event: LangChangeEvent) => {\n if (this.lastKey) {\n this.lastKey = null; // we want to make sure it doesn't return the same value until it's been updated\n this.updateValue(query, interpolateParams, event.translations);\n }\n });\n }\n\n // subscribe to onDefaultLangChange event, in case the fallback language changes\n if (!this.onFallbackLangChange) {\n this.onFallbackLangChange = this.translate.onFallbackLangChange.subscribe(() => {\n if (this.lastKey) {\n this.lastKey = null; // we want to make sure it doesn't return the same value until it's been updated\n this.updateValue(query, interpolateParams);\n }\n });\n }\n\n return this.value;\n }\n\n /**\n * Clean any existing subscription to change events\n */\n private _dispose(): void {\n if (typeof this.onTranslationChange !== \"undefined\") {\n this.onTranslationChange.unsubscribe();\n this.onTranslationChange = undefined;\n }\n if (typeof this.onLangChange !== \"undefined\") {\n this.onLangChange.unsubscribe();\n this.onLangChange = undefined;\n }\n if (typeof this.onFallbackLangChange !== \"undefined\") {\n this.onFallbackLangChange.unsubscribe();\n this.onFallbackLangChange = undefined;\n }\n }\n\n ngOnDestroy(): void {\n this._dispose();\n }\n}\n","import {\n Language,\n TRANSLATE_SERVICE_CONFIG,\n TranslateService,\n TranslateServiceConfig,\n} from \"./translate.service\";\nimport { ClassProvider, Provider, Type } from \"@angular/core\";\nimport { TranslateNoOpLoader, TranslateLoader } from \"./translate.loader\";\nimport { TranslateCompiler, TranslateNoOpCompiler } from \"./translate.compiler\";\nimport { TranslateDefaultParser, TranslateParser } from \"./translate.parser\";\nimport {\n DefaultMissingTranslationHandler,\n MissingTranslationHandler,\n} from \"./missing-translation-handler\";\nimport { TranslateStore } from \"./translate.store\";\n\nexport interface TranslateProviders {\n loader?: Provider;\n compiler?: Provider;\n parser?: Provider;\n missingTranslationHandler?: Provider;\n}\n\nexport interface ChildTranslateServiceConfig extends Partial {\n extend?: boolean;\n}\n\nexport interface RootTranslateServiceConfig extends ChildTranslateServiceConfig {\n fallbackLang?: Language;\n lang?: Language;\n\n /* @deprecated use `fallbackLang` */\n useDefaultLang?: boolean;\n /* @deprecated use `fallbackLang` */\n defaultLanguage?: Language;\n}\n\nexport function provideTranslateLoader(loader: Type): ClassProvider {\n return { provide: TranslateLoader, useClass: loader };\n}\n\nexport function provideTranslateCompiler(compiler: Type): ClassProvider {\n return { provide: TranslateCompiler, useClass: compiler };\n}\n\nexport function provideTranslateParser(parser: Type): ClassProvider {\n return { provide: TranslateParser, useClass: parser };\n}\n\nexport function provideMissingTranslationHandler(\n handler: Type,\n): ClassProvider {\n return { provide: MissingTranslationHandler, useClass: handler };\n}\n\nexport function provideTranslateService(config: RootTranslateServiceConfig = {}): Provider[] {\n return defaultProviders(\n {\n compiler: provideTranslateCompiler(TranslateNoOpCompiler),\n parser: provideTranslateParser(TranslateDefaultParser),\n loader: provideTranslateLoader(TranslateNoOpLoader),\n missingTranslationHandler: provideMissingTranslationHandler(\n DefaultMissingTranslationHandler,\n ),\n ...config,\n },\n true,\n );\n}\n\nexport function provideChildTranslateService(config: ChildTranslateServiceConfig = {}): Provider[] {\n return defaultProviders({ extend: true, ...config }, false);\n}\n\nexport function defaultProviders(\n config: RootTranslateServiceConfig = {},\n provideStore: boolean,\n): Provider[] {\n const providers: Provider[] = [];\n\n if (config.loader) {\n providers.push(config.loader);\n }\n if (config.compiler) {\n providers.push(config.compiler);\n }\n if (config.parser) {\n providers.push(config.parser);\n }\n if (config.missingTranslationHandler) {\n providers.push(config.missingTranslationHandler);\n }\n\n if (provideStore) {\n providers.push(TranslateStore);\n }\n\n if (config.useDefaultLang || config.defaultLanguage) {\n console.warn(\n \"The `useDefaultLang` and `defaultLanguage` options are deprecated. Please use `fallbackLang` instead.\",\n );\n\n if (config.useDefaultLang === true && config.defaultLanguage) {\n config.fallbackLang = config.defaultLanguage;\n }\n }\n\n const serviceConfig: TranslateServiceConfig = {\n fallbackLang: config.fallbackLang ?? null,\n lang: config.lang,\n extend: config.extend ?? false,\n };\n\n providers.push({\n provide: TRANSLATE_SERVICE_CONFIG,\n useValue: serviceConfig,\n });\n\n providers.push({\n provide: TranslateService,\n useClass: TranslateService,\n deps: [\n TranslateStore,\n TranslateLoader,\n TranslateCompiler,\n TranslateParser,\n MissingTranslationHandler,\n TRANSLATE_SERVICE_CONFIG,\n ],\n });\n\n return providers;\n}\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { TranslatePipe } from \"./translate.pipe\";\nimport { TranslateDirective } from \"./translate.directive\";\nimport {\n defaultProviders,\n provideTranslateCompiler,\n provideTranslateLoader,\n provideMissingTranslationHandler,\n provideTranslateParser,\n TranslateProviders,\n} from \"./translate.providers\";\nimport { TranslateNoOpCompiler } from \"./translate.compiler\";\nimport { TranslateDefaultParser } from \"./translate.parser\";\nimport { TranslateNoOpLoader } from \"./translate.loader\";\nimport { DefaultMissingTranslationHandler } from \"./missing-translation-handler\";\nimport { Language } from \"./translate.service\";\n\nexport interface TranslateModuleConfig extends TranslateProviders {\n isolate?: boolean;\n extend?: boolean;\n fallbackLang?: Language;\n lang?: Language;\n\n /** @deprecated use fallbackLang */\n defaultLanguage?: string;\n /** @deprecated use fallbackLang */\n useDefaultLang?: boolean;\n}\n\n@NgModule({\n imports: [TranslatePipe, TranslateDirective],\n exports: [TranslatePipe, TranslateDirective],\n})\nexport class TranslateModule {\n /**\n * Use this method in your root module to provide the TranslateService\n */\n static forRoot(config: TranslateModuleConfig = {}): ModuleWithProviders {\n return {\n ngModule: TranslateModule,\n providers: [\n ...defaultProviders(\n {\n compiler: provideTranslateCompiler(TranslateNoOpCompiler),\n parser: provideTranslateParser(TranslateDefaultParser),\n loader: provideTranslateLoader(TranslateNoOpLoader),\n missingTranslationHandler: provideMissingTranslationHandler(\n DefaultMissingTranslationHandler,\n ),\n ...config,\n },\n true,\n ),\n ],\n };\n }\n\n /**\n * Use this method in your other (non-root) modules to import the directive/pipe\n */\n static forChild(config: TranslateModuleConfig = {}): ModuleWithProviders {\n return {\n ngModule: TranslateModule,\n providers: [...defaultProviders(config, config.isolate ?? false)],\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}