UNPKG

68.6 kBSource Map (JSON)View Raw
1{"version":3,"file":"ngx-translate-core.mjs","sources":["../../../../projects/ngx-translate/core/src/lib/translate.loader.ts","../../../../projects/ngx-translate/core/src/lib/missing-translation-handler.ts","../../../../projects/ngx-translate/core/src/lib/util.ts","../../../../projects/ngx-translate/core/src/lib/translate.parser.ts","../../../../projects/ngx-translate/core/src/lib/translate.compiler.ts","../../../../projects/ngx-translate/core/src/lib/translate.store.ts","../../../../projects/ngx-translate/core/src/lib/translate.service.ts","../../../../projects/ngx-translate/core/src/lib/translate.directive.ts","../../../../projects/ngx-translate/core/src/lib/translate.pipe.ts","../../../../projects/ngx-translate/core/src/public_api.ts","../../../../projects/ngx-translate/core/src/ngx-translate-core.ts"],"sourcesContent":["import {Injectable} from \"@angular/core\";\r\nimport {Observable, of} from \"rxjs\";\r\n\r\nexport abstract class TranslateLoader {\r\n abstract getTranslation(lang: string): Observable<any>;\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<any> {\r\n return of({});\r\n }\r\n}\r\n","import {Injectable} from \"@angular/core\";\r\nimport {TranslateService} 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 * If it returns a value, then this value is used.\r\n * If it return an observable, the value returned by this observable will be used (except if the method was \"instant\").\r\n * If it doesn't return then the key will be used as a value\r\n */\r\n abstract handle(params: MissingTranslationHandlerParams): any;\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","/* tslint:disable */\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 let t1 = typeof o1, t2 = typeof o2, 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/* tslint:enable */\r\n\r\nexport function isDefined(value: any): boolean {\r\n return typeof value !== 'undefined' && value !== null;\r\n}\r\n\r\nexport function isObject(item: any): boolean {\r\n return (item && typeof item === 'object' && !Array.isArray(item));\r\n}\r\n\r\nexport function mergeDeep(target: any, source: any): any {\r\n let output = Object.assign({}, target);\r\n if (isObject(target) && isObject(source)) {\r\n Object.keys(source).forEach((key: any) => {\r\n if (isObject(source[key])) {\r\n if (!(key in target)) {\r\n Object.assign(output, {[key]: source[key]});\r\n } else {\r\n output[key] = mergeDeep(target[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","import {Injectable} from \"@angular/core\";\r\nimport {isDefined} from \"./util\";\r\n\r\nexport abstract class TranslateParser {\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: string | Function, params?: any): string | undefined;\r\n\r\n /**\r\n * Gets a value from an object by composed key\r\n * parser.getValue({ key1: { keyA: 'valueI' }}, 'key1.keyA') ==> 'valueI'\r\n * @param target\r\n * @param key\r\n */\r\n abstract getValue(target: any, key: string): any\r\n}\r\n\r\n@Injectable()\r\nexport class TranslateDefaultParser extends TranslateParser {\r\n templateMatcher: RegExp = /{{\\s?([^{}\\s]*)\\s?}}/g;\r\n\r\n public interpolate(expr: string | Function, params?: any): string {\r\n let result: string;\r\n\r\n if (typeof expr === 'string') {\r\n result = this.interpolateString(expr, params);\r\n } else if (typeof expr === 'function') {\r\n result = this.interpolateFunction(expr, params);\r\n } else {\r\n // this should not happen, but an unrelated TranslateService test depends on it\r\n result = expr as string;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getValue(target: any, key: string): any {\r\n let keys = typeof key === 'string' ? key.split('.') : [key];\r\n key = '';\r\n do {\r\n key += keys.shift();\r\n if (isDefined(target) && isDefined(target[key]) && (typeof target[key] === 'object' || !keys.length)) {\r\n target = target[key];\r\n key = '';\r\n } else if (!keys.length) {\r\n target = undefined;\r\n } else {\r\n key += '.';\r\n }\r\n } while (keys.length);\r\n\r\n return target;\r\n }\r\n\r\n private interpolateFunction(fn: Function, params?: any) {\r\n return fn(params);\r\n }\r\n\r\n private interpolateString(expr: string, params?: any) {\r\n if (!params) {\r\n return expr;\r\n }\r\n\r\n return expr.replace(this.templateMatcher, (substring: string, b: string) => {\r\n let r = this.getValue(params, b);\r\n return isDefined(r) ? r : substring;\r\n });\r\n }\r\n}\r\n","import {Injectable} from \"@angular/core\";\r\n\r\nexport abstract class TranslateCompiler {\r\n abstract compile(value: string, lang: string): string | Function;\r\n\r\n abstract compileTranslations(translations: any, lang: string): any;\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 | Function {\r\n return value;\r\n }\r\n\r\n compileTranslations(translations: any, lang: string): any {\r\n return translations;\r\n }\r\n}\r\n","import {EventEmitter} from \"@angular/core\";\r\nimport {DefaultLangChangeEvent, LangChangeEvent, TranslationChangeEvent} from \"./translate.service\";\r\n\r\nexport class TranslateStore {\r\n /**\r\n * The default lang to fallback when translations are missing on the current lang\r\n */\r\n public defaultLang!: string;\r\n\r\n /**\r\n * The lang currently used\r\n */\r\n public currentLang: string = this.defaultLang;\r\n\r\n /**\r\n * a list of translations per lang\r\n */\r\n public translations: any = {};\r\n\r\n /**\r\n * an array of langs\r\n */\r\n public langs: Array<string> = [];\r\n\r\n /**\r\n * An EventEmitter to listen to translation change events\r\n * onTranslationChange.subscribe((params: TranslationChangeEvent) => {\r\n * // do something\r\n * });\r\n */\r\n public onTranslationChange: EventEmitter<TranslationChangeEvent> = new EventEmitter<TranslationChangeEvent>();\r\n\r\n /**\r\n * An EventEmitter to listen to lang change events\r\n * onLangChange.subscribe((params: LangChangeEvent) => {\r\n * // do something\r\n * });\r\n */\r\n public onLangChange: EventEmitter<LangChangeEvent> = new EventEmitter<LangChangeEvent>();\r\n\r\n /**\r\n * An EventEmitter to listen to default lang change events\r\n * onDefaultLangChange.subscribe((params: DefaultLangChangeEvent) => {\r\n * // do something\r\n * });\r\n */\r\n public onDefaultLangChange: EventEmitter<DefaultLangChangeEvent> = new EventEmitter<DefaultLangChangeEvent>();\r\n}\r\n","import {EventEmitter, 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, MissingTranslationHandlerParams} from \"./missing-translation-handler\";\r\nimport {TranslateCompiler} from \"./translate.compiler\";\r\nimport {TranslateLoader} from \"./translate.loader\";\r\nimport {TranslateParser} from \"./translate.parser\";\r\n\r\nimport {TranslateStore} from \"./translate.store\";\r\nimport {isDefined, mergeDeep} from \"./util\";\r\n\r\nexport const USE_STORE = new InjectionToken<string>('USE_STORE');\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\nexport interface TranslationChangeEvent {\r\n translations: any;\r\n lang: string;\r\n}\r\n\r\nexport interface LangChangeEvent {\r\n lang: string;\r\n translations: any;\r\n}\r\n\r\nexport interface DefaultLangChangeEvent {\r\n lang: string;\r\n translations: any;\r\n}\r\n\r\ndeclare interface Window {\r\n navigator: any;\r\n}\r\n\r\ndeclare const window: Window;\r\n\r\n@Injectable()\r\nexport class TranslateService {\r\n private loadingTranslations!: Observable<any>;\r\n private pending: boolean = false;\r\n private _onTranslationChange: EventEmitter<TranslationChangeEvent> = new EventEmitter<TranslationChangeEvent>();\r\n private _onLangChange: EventEmitter<LangChangeEvent> = new EventEmitter<LangChangeEvent>();\r\n private _onDefaultLangChange: EventEmitter<DefaultLangChangeEvent> = new EventEmitter<DefaultLangChangeEvent>();\r\n private _defaultLang!: string;\r\n private _currentLang!: string;\r\n private _langs: Array<string> = [];\r\n private _translations: any = {};\r\n private _translationRequests: any = {};\r\n\r\n /**\r\n * An EventEmitter to listen to translation change events\r\n * onTranslationChange.subscribe((params: TranslationChangeEvent) => {\r\n * // do something\r\n * });\r\n */\r\n get onTranslationChange(): EventEmitter<TranslationChangeEvent> {\r\n return this.isolate ? this._onTranslationChange : this.store.onTranslationChange;\r\n }\r\n\r\n /**\r\n * An EventEmitter to listen to lang change events\r\n * onLangChange.subscribe((params: LangChangeEvent) => {\r\n * // do something\r\n * });\r\n */\r\n get onLangChange(): EventEmitter<LangChangeEvent> {\r\n return this.isolate ? this._onLangChange : this.store.onLangChange;\r\n }\r\n\r\n /**\r\n * An EventEmitter 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() {\r\n return this.isolate ? this._onDefaultLangChange : 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(): string {\r\n return this.isolate ? this._defaultLang : this.store.defaultLang;\r\n }\r\n\r\n set defaultLang(defaultLang: string) {\r\n if (this.isolate) {\r\n this._defaultLang = defaultLang;\r\n } else {\r\n this.store.defaultLang = defaultLang;\r\n }\r\n }\r\n\r\n /**\r\n * The lang currently used\r\n */\r\n get currentLang(): string {\r\n return this.isolate ? this._currentLang : this.store.currentLang;\r\n }\r\n\r\n set currentLang(currentLang: string) {\r\n if (this.isolate) {\r\n this._currentLang = currentLang;\r\n } else {\r\n this.store.currentLang = currentLang;\r\n }\r\n }\r\n\r\n /**\r\n * an array of langs\r\n */\r\n get langs(): string[] {\r\n return this.isolate ? this._langs : this.store.langs;\r\n }\r\n\r\n set langs(langs: string[]) {\r\n if (this.isolate) {\r\n this._langs = langs;\r\n } else {\r\n this.store.langs = langs;\r\n }\r\n }\r\n\r\n /**\r\n * a list of translations per lang\r\n */\r\n get translations(): any {\r\n return this.isolate ? this._translations : this.store.translations;\r\n }\r\n\r\n set translations(translations: any) {\r\n if (this.isolate) {\r\n this._translations = translations;\r\n } else {\r\n this.store.translations = translations;\r\n }\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: boolean = true,\r\n @Inject(USE_STORE) private isolate: boolean = false,\r\n @Inject(USE_EXTEND) private extend: boolean = false,\r\n @Inject(DEFAULT_LANGUAGE) defaultLanguage: string) {\r\n /** set the default language from configuration */\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): void {\r\n if (lang === this.defaultLang) {\r\n return;\r\n }\r\n\r\n let pending = this.retrieveTranslations(lang);\r\n\r\n if (typeof pending !== \"undefined\") {\r\n // on init set the defaultLang immediately\r\n if (this.defaultLang == null) {\r\n this.defaultLang = lang;\r\n }\r\n\r\n pending.pipe(take(1))\r\n .subscribe((res: any) => {\r\n this.changeDefaultLang(lang);\r\n });\r\n } else { // we already have this language\r\n this.changeDefaultLang(lang);\r\n }\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<any> {\r\n // don't change the language if the language given is already selected\r\n if (lang === this.currentLang) {\r\n return of(this.translations[lang]);\r\n }\r\n\r\n let pending = this.retrieveTranslations(lang);\r\n\r\n if (typeof pending !== \"undefined\") {\r\n // on init set the currentLang immediately\r\n if (!this.currentLang) {\r\n this.currentLang = lang;\r\n }\r\n\r\n pending.pipe(take(1))\r\n .subscribe((res: any) => {\r\n this.changeLang(lang);\r\n });\r\n\r\n return pending;\r\n } else { // we have this language, return an Observable\r\n this.changeLang(lang);\r\n\r\n return of(this.translations[lang]);\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves the given translations\r\n */\r\n private retrieveTranslations(lang: string): Observable<any> | undefined {\r\n let pending: Observable<any> | undefined;\r\n\r\n // if this language is unavailable or extend is true, ask for it\r\n if (typeof this.translations[lang] === \"undefined\" || this.extend) {\r\n this._translationRequests[lang] = this._translationRequests[lang] || this.getTranslation(lang);\r\n pending = this._translationRequests[lang];\r\n }\r\n\r\n return pending;\r\n }\r\n\r\n /**\r\n * Gets an object of translations for a given language with the current loader\r\n * and passes it through the compiler\r\n */\r\n public getTranslation(lang: string): Observable<any> {\r\n this.pending = true;\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: Object) => 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: Object) => {\r\n this.translations[lang] = this.extend && this.translations[lang] ? { ...res, ...this.translations[lang] } : res;\r\n this.updateLangs();\r\n this.pending = false;\r\n },\r\n error: (err: any) => {\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: string, translations: Object, shouldMerge: boolean = false): void {\r\n translations = this.compiler.compileTranslations(translations, lang);\r\n if ((shouldMerge || this.extend) && this.translations[lang]) {\r\n this.translations[lang] = mergeDeep(this.translations[lang], translations);\r\n } else {\r\n this.translations[lang] = translations;\r\n }\r\n this.updateLangs();\r\n this.onTranslationChange.emit({lang: lang, translations: this.translations[lang]});\r\n }\r\n\r\n /**\r\n * Returns an array of currently available langs\r\n */\r\n public getLangs(): Array<string> {\r\n return this.langs;\r\n }\r\n\r\n /**\r\n * Add available langs\r\n */\r\n public addLangs(langs: Array<string>): void {\r\n langs.forEach((lang: string) => {\r\n if (this.langs.indexOf(lang) === -1) {\r\n this.langs.push(lang);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update the list of available langs\r\n */\r\n private updateLangs(): void {\r\n this.addLangs(Object.keys(this.translations));\r\n }\r\n\r\n /**\r\n * Returns the parsed result of the translations\r\n */\r\n public getParsedResult(translations: any, key: any, interpolateParams?: Object): any {\r\n let res: string | Observable<string> | undefined;\r\n\r\n if (key instanceof Array) {\r\n let result: any = {},\r\n observables: boolean = false;\r\n for (let k of key) {\r\n result[k] = this.getParsedResult(translations, k, interpolateParams);\r\n if (isObservable(result[k])) {\r\n observables = true;\r\n }\r\n }\r\n if (observables) {\r\n const sources = key.map(k => isObservable(result[k]) ? result[k] : of(result[k] as string));\r\n return forkJoin(sources).pipe(\r\n map((arr: Array<string>) => {\r\n let obj: any = {};\r\n arr.forEach((value: string, index: number) => {\r\n obj[key[index]] = value;\r\n });\r\n return obj;\r\n })\r\n );\r\n }\r\n return result;\r\n }\r\n\r\n if (translations) {\r\n res = this.parser.interpolate(this.parser.getValue(translations, key), interpolateParams);\r\n }\r\n\r\n if (typeof res === \"undefined\" && this.defaultLang != null && this.defaultLang !== this.currentLang && this.useDefaultLang) {\r\n res = this.parser.interpolate(this.parser.getValue(this.translations[this.defaultLang], key), interpolateParams);\r\n }\r\n\r\n if (typeof res === \"undefined\") {\r\n let params: MissingTranslationHandlerParams = {key, translateService: this};\r\n if (typeof interpolateParams !== 'undefined') {\r\n params.interpolateParams = interpolateParams;\r\n }\r\n res = this.missingTranslationHandler.handle(params);\r\n }\r\n\r\n return typeof res !== \"undefined\" ? res : key;\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 | Array<string>, interpolateParams?: Object): Observable<string | any> {\r\n if (!isDefined(key) || !key.length) {\r\n throw new Error(`Parameter \"key\" required`);\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((res: any) => {\r\n res = this.getParsedResult(res, key, interpolateParams);\r\n return isObservable(res) ? res : of(res);\r\n }),\r\n );\r\n } else {\r\n let res = this.getParsedResult(this.translations[this.currentLang], key, interpolateParams);\r\n return isObservable(res) ? res : of(res);\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 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 | Array<string>, interpolateParams?: Object): Observable<string | any> {\r\n if (!isDefined(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.onTranslationChange.pipe(\r\n switchMap((event: TranslationChangeEvent) => {\r\n const res = this.getParsedResult(event.translations, key, interpolateParams);\r\n if (typeof res.subscribe === 'function') {\r\n return res;\r\n } else {\r\n return of(res);\r\n }\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 | Array<string>, interpolateParams?: Object): Observable<string | any> {\r\n if (!isDefined(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((event: LangChangeEvent) => {\r\n const res = this.getParsedResult(event.translations, key, interpolateParams);\r\n return isObservable(res) ? res : of(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 will be used except any promise handling.\r\n */\r\n public instant(key: string | Array<string>, interpolateParams?: Object): string | any {\r\n if (!isDefined(key) || !key.length) {\r\n throw new Error(`Parameter \"key\" required`);\r\n }\r\n\r\n let res = this.getParsedResult(this.translations[this.currentLang], key, interpolateParams);\r\n if (isObservable(res)) {\r\n if (key instanceof Array) {\r\n let obj: any = {};\r\n key.forEach((value: string, index: number) => {\r\n obj[key[index]] = key[index];\r\n });\r\n return obj;\r\n }\r\n return key;\r\n } else {\r\n return res;\r\n }\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, value: string, lang: string = this.currentLang): void {\r\n this.translations[lang][key] = this.compiler.compile(value, lang);\r\n this.updateLangs();\r\n this.onTranslationChange.emit({lang: lang, translations: this.translations[lang]});\r\n }\r\n\r\n /**\r\n * Changes the current lang\r\n */\r\n private changeLang(lang: string): void {\r\n this.currentLang = lang;\r\n this.onLangChange.emit({lang: lang, translations: this.translations[lang]});\r\n\r\n // if there is no default lang, use the one that we just set\r\n if (this.defaultLang == null) {\r\n this.changeDefaultLang(lang);\r\n }\r\n }\r\n\r\n /**\r\n * Changes the default lang\r\n */\r\n private changeDefaultLang(lang: string): void {\r\n this.defaultLang = lang;\r\n this.onDefaultLangChange.emit({lang: lang, translations: this.translations[lang]});\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<any> {\r\n this.resetLang(lang);\r\n return this.getTranslation(lang);\r\n }\r\n\r\n /**\r\n * Deletes inner translation\r\n */\r\n public resetLang(lang: string): void {\r\n this._translationRequests[lang] = undefined;\r\n this.translations[lang] = undefined;\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' || typeof window.navigator === 'undefined') {\r\n return undefined;\r\n }\r\n\r\n let browserLang: any = window.navigator.languages ? window.navigator.languages[0] : null;\r\n browserLang = browserLang || window.navigator.language || window.navigator.browserLanguage || window.navigator.userLanguage;\r\n\r\n if (typeof browserLang === 'undefined') {\r\n return undefined\r\n }\r\n\r\n if (browserLang.indexOf('-') !== -1) {\r\n browserLang = browserLang.split('-')[0];\r\n }\r\n\r\n if (browserLang.indexOf('_') !== -1) {\r\n browserLang = browserLang.split('_')[0];\r\n }\r\n\r\n return browserLang;\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 let browserCultureLang: any = window.navigator.languages ? window.navigator.languages[0] : null;\r\n browserCultureLang = browserCultureLang || window.navigator.language || window.navigator.browserLanguage || window.navigator.userLanguage;\r\n\r\n return browserCultureLang;\r\n }\r\n}\r\n","import {AfterViewChecked, ChangeDetectorRef, Directive, ElementRef, Input, OnDestroy} from '@angular/core';\r\nimport {Subscription, isObservable} from 'rxjs';\r\nimport {DefaultLangChangeEvent, LangChangeEvent, TranslateService, TranslationChangeEvent} from './translate.service';\r\nimport {equals, isDefined} from './util';\r\n\r\n@Directive({\r\n selector: '[translate],[ngx-translate]'\r\n})\r\nexport class TranslateDirective implements AfterViewChecked, OnDestroy {\r\n key!: string;\r\n lastParams: any;\r\n currentParams: any;\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: any) {\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 this.checkNodes(true);\r\n });\r\n }\r\n }\r\n\r\n ngAfterViewChecked() {\r\n this.checkNodes();\r\n }\r\n\r\n checkNodes(forceUpdate = false, translations?: any) {\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 for (let i = 0; i < nodes.length; ++i) {\r\n let node: any = nodes[i];\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(isDefined(node.lookupKey)) {\r\n key = node.lookupKey;\r\n } else if (this.key) {\r\n key = this.key;\r\n } else {\r\n let content = this.getContent(node);\r\n let 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 } else if (content !== node.currentValue) {\r\n // we want to use the content as a key, not the translation value\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 }\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: any, translations: any) {\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 let onTranslation = (res: unknown) => {\r\n if (res !== key) {\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 = isDefined(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 (isDefined(translations)) {\r\n let res = this.translateService.getParsedResult(translations, 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: any): string {\r\n return isDefined(node.textContent) ? node.textContent : node.data;\r\n }\r\n\r\n setContent(node: any, content: string): void {\r\n if (isDefined(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, EventEmitter, Injectable, OnDestroy, Pipe, PipeTransform} from '@angular/core';\r\nimport {isObservable} from 'rxjs';\r\nimport {DefaultLangChangeEvent, LangChangeEvent, TranslateService, TranslationChangeEvent} from './translate.service';\r\nimport {equals, isDefined} from './util';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'translate',\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: string = '';\r\n lastKey: string | null = null;\r\n lastParams: any[] = [];\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?: any): void {\r\n let onTranslation = (res: string) => {\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 let res = this.translate.getParsedResult(translations, key, interpolateParams);\r\n if (isObservable(res.subscribe)) {\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 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 (isDefined(args[0]) && args.length) {\r\n if (typeof args[0] === 'string' && 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 let 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 throw new SyntaxError(`Wrong parameter in TranslatePipe. Expected a valid Object, received: ${args[0]}`);\r\n }\r\n } else if (typeof args[0] === 'object' && !Array.isArray(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","import {NgModule, ModuleWithProviders, Provider} 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 {USE_DEFAULT_LANG, DEFAULT_LANGUAGE, USE_STORE, TranslateService, USE_EXTEND} 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\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\n@NgModule({\r\n declarations: [\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: USE_STORE, 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: USE_STORE, 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":[],"mappings":"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"}
\No newline at end of file