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