UNPKG

@rdkmaster/ngx-translate-core

Version:

Translation library (i18n) for Angular

1 lines 80.1 kB
{"version":3,"file":"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/ngx-translate-core.ts"],"sourcesContent":["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<TranslationObject>;\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 TranslateFakeLoader extends TranslateLoader {\n  getTranslation(lang: string): Observable<TranslationObject> {\n    void lang;\n    return of({});\n  }\n}\n","import {Injectable} from \"@angular/core\";\nimport {Observable} from \"rxjs\";\nimport {TranslateService, Translation} 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(params: MissingTranslationHandlerParams): Translation|Observable<Translation>;\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 FakeMissingTranslationHandler implements MissingTranslationHandler {\n  handle(params: MissingTranslationHandlerParams): string {\n    return params.key;\n  }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\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: any, o2: any): 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  const t1 = typeof o1, t2 = typeof o2;\n  let length: number, key: any, keySet: any;\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 (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      keySet = Object.create(null);\n      for (key in o1) {\n        if (!equals(o1[key], o2[key])) {\n          return false;\n        }\n        keySet[key] = true;\n      }\n      for (key in o2) {\n        if (!(key in keySet) && typeof o2[key] !== 'undefined') {\n          return false;\n        }\n      }\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function isDefined(value: any): boolean {\n  return typeof value !== 'undefined' && value !== null;\n}\n\n\nexport function isDict(value: any): boolean {\n  return isObject(value) && !isArray(value);\n}\n\n\nexport function isObject(value: any): boolean {\n  return typeof value === 'object';\n}\n\nexport function isArray(value: any): boolean {\n  return Array.isArray(value);\n}\n\nexport function isString(value: any): boolean {\n  return typeof value === 'string';\n}\n\nexport function isFunction(value: any):boolean {\n  return typeof value === \"function\"\n}\n\n\nexport function mergeDeep(target: any, source: any): any {\n  const output = Object.assign({}, target);\n\n  if (!isObject(target)) {\n    return mergeDeep({}, source);\n  }\n\n  if (isObject(target) && isObject(source)) {\n    Object.keys(source).forEach((key: any) => {\n      if (isDict(source[key])) {\n        if (key in target) {\n          output[key] = mergeDeep(target[key], 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/**\n * Gets a value from an object by composed key\n * getValue({ key1: { keyA: 'valueI' }}, 'key1.keyA') ==> 'valueI'\n * @param target\n * @param key\n */\nexport function getValue(target: any, key: string): any\n{\n  const keys = key.split(\".\");\n\n  key = \"\";\n  do\n  {\n    key += keys.shift();\n    if (isDefined(target) && isDefined(target[key]) && (isDict(target[key]) ||isArray(target[key]) || !keys.length))\n    {\n      target = target[key];\n      key = \"\";\n    }\n    else if (!keys.length)\n    {\n      target = undefined;\n    }\n    else\n    {\n      key += \".\";\n    }\n  } while (keys.length);\n\n  return target;\n}\n\n/**\n * Gets a value from an object by composed key\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 setValue(target: any, key: string, value: any): void {\n  const keys = key.split('.');\n  let current = target;\n\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i];\n\n    // If we're at the last key, set the value\n    if (i === keys.length - 1) {\n      current[key] = value;\n    } else {\n      // If the key doesn't exist or isn't an object, create an empty object\n      if (!current[key] || !isDict(current[key])) {\n        current[key] = {};\n      }\n      current = current[key];\n    }\n  }\n}\n\n\n","import {Injectable} from \"@angular/core\";\nimport {InterpolationParameters} from \"./translate.service\";\nimport {getValue, isDefined, isString, isFunction} from \"./util\";\n\n\nexport type InterpolateFunction = (params?: InterpolationParameters) => string;\n\n\nexport abstract class TranslateParser\n{\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(expr: InterpolateFunction|string, params?: InterpolationParameters): string|undefined;\n}\n\n\n@Injectable()\nexport class TranslateDefaultParser extends TranslateParser\n{\n  templateMatcher = /{{\\s?([^{}\\s]*)\\s?}}/g;\n\n  public interpolate(expr: InterpolateFunction|string, params?: InterpolationParameters): string|undefined\n  {\n    if (isString(expr))\n    {\n      return this.interpolateString(expr as string, params);\n    }\n    else if (isFunction(expr))\n    {\n      return this.interpolateFunction(expr as InterpolateFunction, params);\n    }\n    return undefined;\n  }\n\n  private interpolateFunction(fn: InterpolateFunction, params?: InterpolationParameters): string\n  {\n    return fn(params);\n  }\n\n  private interpolateString(expr: string, params?: InterpolationParameters): string\n  {\n    if (!params)\n    {\n      return expr;\n    }\n\n    return expr.replace(this.templateMatcher, (substring: string, b: string) =>\n    {\n      const r = getValue(params, b);\n      return isDefined(r)\n             ? r\n             : substring;\n    });\n  }\n}\n","import {Injectable} from \"@angular/core\";\nimport {InterpolateFunction} from \"./translate.parser\";\nimport {InterpolatableTranslation, InterpolatableTranslationObject, Translation} from \"./translate.service\";\n\nexport abstract class TranslateCompiler {\n  abstract compile(value: string, lang: string): InterpolatableTranslation;\n\n  abstract compileTranslations(translations: Translation, lang: string): 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 TranslateFakeCompiler extends TranslateCompiler {\n  compile(value: string, lang: string): string | InterpolateFunction {\n    void lang;\n    return value;\n  }\n\n  compileTranslations(translations: InterpolatableTranslationObject, lang: string): InterpolatableTranslationObject {\n    void lang;\n    return translations;\n  }\n}\n","import {EventEmitter} from \"@angular/core\";\nimport {\n  InterpolatableTranslationObject,\n  DefaultLangChangeEvent,\n  LangChangeEvent,\n  TranslationChangeEvent\n} from \"./translate.service\";\n\nexport class TranslateStore {\n  /**\n   * The default lang to fallback when translations are missing on the current lang\n   */\n  public defaultLang!: string;\n\n  /**\n   * The lang currently used\n   */\n  public currentLang: string = this.defaultLang;\n\n  /**\n   * a list of translations per lang\n   */\n  public translations: Record<string, InterpolatableTranslationObject> = {};\n\n  /**\n   * an array of langs\n   */\n  public langs: string[] = [];\n\n  /**\n   * An EventEmitter to listen to translation change events\n   * onTranslationChange.subscribe((params: TranslationChangeEvent) => {\n     *     // do something\n     * });\n   */\n  public onTranslationChange: EventEmitter<TranslationChangeEvent> = new EventEmitter<TranslationChangeEvent>();\n\n  /**\n   * An EventEmitter to listen to lang change events\n   * onLangChange.subscribe((params: LangChangeEvent) => {\n     *     // do something\n     * });\n   */\n  public onLangChange: EventEmitter<LangChangeEvent> = new EventEmitter<LangChangeEvent>();\n\n  /**\n   * An EventEmitter to listen to default lang change events\n   * onDefaultLangChange.subscribe((params: DefaultLangChangeEvent) => {\n     *     // do something\n     * });\n   */\n  public onDefaultLangChange: EventEmitter<DefaultLangChangeEvent> = new EventEmitter<DefaultLangChangeEvent>();\n}\n","import {EventEmitter, Inject, Injectable, InjectionToken} from \"@angular/core\";\nimport {concat, forkJoin, isObservable, Observable, of, defer} from \"rxjs\";\nimport {concatMap, map, shareReplay, switchMap, take} from \"rxjs/operators\";\nimport {MissingTranslationHandler, MissingTranslationHandlerParams} 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 {getValue, isDefined, isArray, isString, mergeDeep, setValue, isDict} from \"./util\";\n\nexport const ISOALTE_TRANSLATE_SERVICE = new InjectionToken<string>('ISOALTE_TRANSLATE_SERVICE');\nexport const USE_DEFAULT_LANG = new InjectionToken<string>('USE_DEFAULT_LANG');\nexport const DEFAULT_LANGUAGE = new InjectionToken<string>('DEFAULT_LANGUAGE');\nexport const USE_EXTEND = new InjectionToken<string>('USE_EXTEND');\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InterpolationParameters = Record<string, any>;\n\nexport type Translation =\n  string |\n  Translation[] |\n  TranslationObject |\n\n  // required to prevent error \"Type instantiation is excessively deep and possibly infinite.\"\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  any\n  ;\n\n\n// using Record<> does not work because TS does not support recursive definitions\n// eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style\nexport interface TranslationObject {\n  [key: string]: Translation\n}\n\n\nexport type InterpolatableTranslation =\n  string |\n  InterpolatableTranslation[] |\n  InterpolateFunction |\n  InterpolatableTranslationObject |\n\n  // required to prevent error \"Type instantiation is excessively deep and possibly infinite.\"\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  any\n  ;\n\n\n// using Record<> does not work because TS does not support recursive definitions\n// eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style\nexport interface InterpolatableTranslationObject {\n  [key: string]: InterpolatableTranslation\n}\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 DefaultLangChangeEvent {\n  lang: string;\n  translations: InterpolatableTranslationObject;\n}\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 = <T>(value: T | Observable<T>): Observable<T> => {\n  return isObservable(value) ? value : of(value);\n};\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TranslateService {\n  private loadingTranslations!: Observable<InterpolatableTranslationObject>;\n  private pending = false;\n  private _onTranslationChange: EventEmitter<TranslationChangeEvent> = new EventEmitter<TranslationChangeEvent>();\n  private _onLangChange: EventEmitter<LangChangeEvent> = new EventEmitter<LangChangeEvent>();\n  private _onDefaultLangChange: EventEmitter<DefaultLangChangeEvent> = new EventEmitter<DefaultLangChangeEvent>();\n  private _defaultLang!: string;\n  private _currentLang!: string;\n  private _langs: string[] = [];\n  private _translations: Record<string, InterpolatableTranslationObject> = {};\n  private _translationRequests: Record<string, Observable<TranslationObject>> = {};\n  private lastUseLanguage: string|null = null;\n\n\n  /**\n   * An EventEmitter to listen to translation change events\n   * onTranslationChange.subscribe((params: TranslationChangeEvent) => {\n     *     // do something\n     * });\n   */\n  get onTranslationChange(): EventEmitter<TranslationChangeEvent> {\n    return this.isolate ? this._onTranslationChange : this.store.onTranslationChange;\n  }\n\n  /**\n   * An EventEmitter to listen to lang change events\n   * onLangChange.subscribe((params: LangChangeEvent) => {\n     *     // do something\n     * });\n   */\n  get onLangChange(): EventEmitter<LangChangeEvent> {\n    return this.isolate ? this._onLangChange : this.store.onLangChange;\n  }\n\n  /**\n   * An EventEmitter to listen to default lang change events\n   * onDefaultLangChange.subscribe((params: DefaultLangChangeEvent) => {\n     *     // do something\n     * });\n   */\n  get onDefaultLangChange() {\n    return this.isolate ? this._onDefaultLangChange : this.store.onDefaultLangChange;\n  }\n\n  /**\n   * The default lang to fallback when translations are missing on the current lang\n   */\n  get defaultLang(): string {\n    return this.isolate ? this._defaultLang : this.store.defaultLang;\n  }\n\n  set defaultLang(defaultLang: string) {\n    if (this.isolate) {\n      this._defaultLang = defaultLang;\n    } else {\n      this.store.defaultLang = defaultLang;\n    }\n  }\n\n  /**\n   * The lang currently used\n   */\n  get currentLang(): string {\n    return this.isolate ? this._currentLang : this.store.currentLang;\n  }\n\n  set currentLang(currentLang: string) {\n    if (this.isolate) {\n      this._currentLang = currentLang;\n    } else {\n      this.store.currentLang = currentLang;\n    }\n  }\n\n  /**\n   * an array of langs\n   */\n  get langs(): string[] {\n    return this.isolate ? this._langs : this.store.langs;\n  }\n\n  set langs(langs: string[]) {\n    if (this.isolate) {\n      this._langs = langs;\n    } else {\n      this.store.langs = langs;\n    }\n  }\n\n  /**\n   * a list of translations per lang\n   */\n  get translations(): Record<string, InterpolatableTranslationObject> {\n    return this.isolate ? this._translations : this.store.translations;\n  }\n\n  set translations(translations: Record<string, InterpolatableTranslationObject>) {\n    if (this.isolate) {\n      this._translations = translations;\n    } else {\n      this.store.translations = translations;\n    }\n  }\n\n  /**\n   *\n   * @param store an instance of the store (that is supposed to be unique)\n   * @param currentLoader An instance of the loader currently used\n   * @param compiler An instance of the compiler currently used\n   * @param parser An instance of the parser currently used\n   * @param missingTranslationHandler A handler for missing translations.\n   * @param useDefaultLang whether we should use default language translation when current language translation is missing.\n   * @param isolate whether this service should use the store or not\n   * @param extend To make a child module extend (and use) translations from parent modules.\n   * @param defaultLanguage Set the default language using configuration\n   */\n  constructor(public store: TranslateStore,\n              public currentLoader: TranslateLoader,\n              public compiler: TranslateCompiler,\n              public parser: TranslateParser,\n              public missingTranslationHandler: MissingTranslationHandler,\n              @Inject(USE_DEFAULT_LANG) private useDefaultLang = true,\n              @Inject(ISOALTE_TRANSLATE_SERVICE) private isolate = false,\n              @Inject(USE_EXTEND) private extend = false,\n              @Inject(DEFAULT_LANGUAGE) defaultLanguage: string) {\n    /** set the default language from configuration */\n    if (defaultLanguage) {\n      this.setDefaultLang(defaultLanguage);\n    }\n  }\n\n  /**\n   * Sets the default language to use as a fallback\n   */\n  public setDefaultLang(lang: string): void {\n    if (lang === this.defaultLang) {\n      return;\n    }\n\n    const pending = this.retrieveTranslations(lang);\n\n    if (typeof pending !== \"undefined\") {\n      // on init set the defaultLang immediately\n      if (this.defaultLang == null) {\n        this.defaultLang = lang;\n      }\n\n      pending.pipe(take(1))\n        .subscribe(() => {\n          this.changeDefaultLang(lang);\n        });\n    } else { // we already have this language\n      this.changeDefaultLang(lang);\n    }\n  }\n\n  /**\n   * Gets the default language used\n   */\n  public getDefaultLang(): string {\n    return this.defaultLang;\n  }\n\n  /**\n   * Changes the lang currently used\n   */\n  public use(lang: string): Observable<InterpolatableTranslationObject> {\n\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    // don't change the language if the language given is already selected\n    if (lang === this.currentLang) {\n      return of(this.translations[lang]);\n    }\n\n    // on init set the currentLang immediately\n    if (!this.currentLang) {\n      this.currentLang = lang;\n    }\n\n    const pending = this.retrieveTranslations(lang);\n\n    if (isObservable(pending)) {\n\n      pending.pipe(take(1))\n        .subscribe(() => {\n          this.changeLang(lang);\n        });\n\n      return pending;\n    }\n    else {\n      // we have this language, return an Observable\n      this.changeLang(lang);\n      return of(this.translations[lang]);\n    }\n  }\n\n\n  /**\n   * Changes the current lang\n   */\n  private changeLang(lang: string): void {\n\n    // received a new language file\n    // but this was not the one requested last\n    if(lang !== this.lastUseLanguage)\n    {\n      return;\n    }\n\n    this.currentLang = lang;\n\n    this.onLangChange.emit({lang: lang, translations: this.translations[lang]});\n\n    // if there is no default lang, use the one that we just set\n    if (this.defaultLang == null) {\n      this.changeDefaultLang(lang);\n    }\n  }\n\n\n  /**\n   * Retrieves the given translations\n   */\n  private retrieveTranslations(lang: string): Observable<TranslationObject> | undefined {\n\n    // if this language is unavailable or extend is true, ask for it\n    if (typeof this.translations[lang] === \"undefined\" || this.extend) {\n      this._translationRequests[lang] = this._translationRequests[lang] || this.loadAndCompileTranslations(lang);\n      return this._translationRequests[lang];\n    }\n\n    return undefined;\n  }\n\n\n\n  /**\n   * Gets an object of translations for a given language with the current loader\n   * and passes it through the compiler\n   *\n   * @deprecated This function is meant for internal use. There should\n   * be no reason to use outside this service. You can plug into this\n   * functionality by using a customer TranslateLoader or TranslateCompiler.\n   * To load a new language use setDefaultLang() and/or use()\n   */\n  public getTranslation(lang: string): Observable<InterpolatableTranslationObject>\n  {\n      return this.loadAndCompileTranslations(lang);\n  }\n\n  private loadAndCompileTranslations(lang: string): Observable<InterpolatableTranslationObject> {\n\n    this.pending = true;\n\n    const loadingTranslations = this.currentLoader.getTranslation(lang).pipe(\n      shareReplay(1),\n      take(1),\n    );\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\n      .subscribe({\n        next: (res: InterpolatableTranslationObject) => {\n          this.translations[lang] = this.extend && this.translations[lang] ? { ...res, ...this.translations[lang] } : res;\n          this.updateLangs();\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(lang: string, translations: InterpolatableTranslationObject, shouldMerge = false): void {\n    const interpolatableTranslations = this.compiler.compileTranslations(translations, lang);\n    if ((shouldMerge || this.extend) && this.translations[lang]) {\n      this.translations[lang] = mergeDeep(this.translations[lang], interpolatableTranslations);\n    } else {\n      this.translations[lang] = interpolatableTranslations;\n    }\n    this.updateLangs();\n    this.onTranslationChange.emit({lang: lang, translations: this.translations[lang]});\n  }\n\n  /**\n   * Returns an array of currently available langs\n   */\n  public getLangs(): string[] {\n    return this.langs;\n  }\n\n  /**\n   * Add available languages\n   */\n  public addLangs(langs: string[]): void {\n    langs.forEach((lang: string) => {\n      if (this.langs.indexOf(lang) === -1) {\n        this.langs.push(lang);\n      }\n    });\n  }\n\n  /**\n   * Update the list of available languages\n   */\n  private updateLangs(): void {\n    this.addLangs(Object.keys(this.translations));\n  }\n\n  private getParsedResultForKey(translations: InterpolatableTranslation, key: string, interpolateParams?: InterpolationParameters): Translation|Observable<Translation>\n  {\n      let res: Translation | Observable<Translation> | undefined;\n\n      if (translations) {\n        res = this.runInterpolation(getValue(translations, key), interpolateParams);\n      }\n\n      if (res === undefined && this.defaultLang != null && this.defaultLang !== this.currentLang && this.useDefaultLang) {\n        res = this.runInterpolation(getValue(this.translations[this.defaultLang], key), interpolateParams);\n      }\n\n      if (res === undefined) {\n        const params: MissingTranslationHandlerParams = {key, translateService: this};\n        if (typeof interpolateParams !== 'undefined') {\n          params.interpolateParams = interpolateParams;\n        }\n        res = this.missingTranslationHandler.handle(params);\n      }\n\n      return res !== undefined ? res : key;\n  }\n\n  private runInterpolation(translations: InterpolatableTranslation, interpolateParams?: InterpolationParameters): Translation\n  {\n    if(isArray(translations))\n    {\n      return (translations as Translation[]).map((translation) => this.runInterpolation(translation, interpolateParams));\n    }\n    else if (isDict(translations))\n    {\n      const result: TranslationObject = {};\n      for (const key in translations) {\n          result[key] = this.runInterpolation(translations[key], interpolateParams);\n      }\n      return result;\n    }\n    else\n    {\n      return this.parser.interpolate(translations, interpolateParams);\n    }\n  }\n\n  /**\n   * Returns the parsed result of the translations\n   */\n  public getParsedResult(translations: InterpolatableTranslation, key: string | string[], interpolateParams?: InterpolationParameters): Translation|TranslationObject|Observable<Translation|TranslationObject> {\n\n    // handle a bunch of keys\n    if (key instanceof Array) {\n      const result: Record<string, Translation|Observable<Translation>> = {};\n\n      let observables = false;\n      for (const k of key) {\n        result[k] = this.getParsedResultForKey(translations, k, interpolateParams);\n        observables = observables || isObservable(result[k]);\n      }\n\n      if (!observables) {\n        return result as TranslationObject;\n      }\n\n      const sources: Observable<Translation>[] = key.map(k => makeObservable(result[k]));\n      return forkJoin(sources).pipe(\n        map((arr: (Translation)[]) => {\n          const obj: TranslationObject = {};\n          arr.forEach((value:Translation, index: number) => {\n            obj[key[index]] = value;\n          });\n          return obj;\n        })\n      );\n    }\n\n    return this.getParsedResultForKey(translations, key, interpolateParams);\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(key: string | string[], interpolateParams?: InterpolationParameters): Observable<Translation|TranslationObject> {\n    if (!isDefined(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((res: InterpolatableTranslation) => {\n          return makeObservable(this.getParsedResult(res, key, interpolateParams));\n        }),\n      );\n    }\n\n    return makeObservable(this.getParsedResult(this.translations[this.currentLang], 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(key: string | string[], interpolateParams?: InterpolationParameters): Observable<Translation|TranslationObject> {\n    if (!isDefined(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((event: TranslationChangeEvent) => {\n          const res = this.getParsedResult(event.translations, 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(key: string | string[], interpolateParams?: InterpolationParameters): Observable<Translation|TranslationObject> {\n    if (!isDefined(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((event: LangChangeEvent) => {\n          const res = this.getParsedResult(event.translations, key, interpolateParams);\n          return makeObservable(res);\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(key: string | string[], interpolateParams?: InterpolationParameters): Translation|TranslationObject\n  {\n    if (!isDefined(key) || key.length === 0) {\n      throw new Error('Parameter \"key\" is required and cannot be empty');\n    }\n\n    const result = this.getParsedResult(this.translations[this.currentLang], key, interpolateParams);\n\n    if (isObservable(result)) {\n      if (Array.isArray(key)) {\n        return key.reduce((acc: Record<string, string>, 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(key: string, translation: Translation, lang: string = this.currentLang): void {\n    setValue(this.translations[lang], key,\n      isString(translation)\n      ? this.compiler.compile(translation, lang)\n      : this.compiler.compileTranslations(translation, lang)\n    );\n    this.updateLangs();\n    this.onTranslationChange.emit({lang: lang, translations: this.translations[lang]});\n  }\n\n  /**\n   * Changes the default lang\n   */\n  private changeDefaultLang(lang: string): void {\n    this.defaultLang = lang;\n    this.onDefaultLangChange.emit({lang: lang, translations: this.translations[lang]});\n  }\n\n  /**\n   * Allows to reload the lang file from the file\n   */\n  public reloadLang(lang: string): Observable<InterpolatableTranslationObject> {\n    this.resetLang(lang);\n    return this.loadAndCompileTranslations(lang);\n  }\n\n  /**\n   * Deletes inner translation\n   */\n  public resetLang(lang: string): void {\n    delete this._translationRequests[lang];\n    delete this.translations[lang];\n  }\n\n  /**\n   * Returns the language code name from the browser, e.g. \"de\"\n   */\n  public getBrowserLang(): string | 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 getBrowserCultureLang(): string | 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 || window.navigator.browserLanguage || window.navigator.userLanguage);\n  }\n}\n","import {AfterViewChecked, ChangeDetectorRef, Directive, ElementRef, Input, OnDestroy} from '@angular/core';\nimport {Subscription, isObservable} from 'rxjs';\nimport {\n  DefaultLangChangeEvent,\n  InterpolatableTranslation,\n  LangChangeEvent,\n  TranslateService,\n  TranslationChangeEvent,\n  Translation,\n  InterpolationParameters\n} from \"./translate.service\";\nimport {equals, isDefined} from './util';\n\ninterface ExtendedNode extends Text {\n  originalContent: string;\n  currentValue: Translation;\n  lookupKey: string;\n  lastKey: string|null;\n  data: string;\n}\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  key!: string;\n  lastParams?: InterpolationParameters;\n  currentParams?: InterpolationParameters;\n  onLangChangeSub!: Subscription;\n  onDefaultLangChangeSub!: Subscription;\n  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(private translateService: TranslateService, private element: ElementRef, private _ref: ChangeDetectorRef) {\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((event: TranslationChangeEvent) => {\n        if (event.lang === this.translateService.currentLang) {\n          this.checkNodes(true, event.translations);\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((event: LangChangeEvent) => {\n        this.checkNodes(true, event.translations);\n      });\n    }\n\n    // subscribe to onDefaultLangChange event, in case the default language changes\n    if (!this.onDefaultLangChangeSub) {\n      this.onDefaultLangChangeSub = this.translateService.onDefaultLangChange.subscribe((event: DefaultLangChangeEvent) => {\n        void event;\n        this.checkNodes(true);\n      });\n    }\n  }\n\n  ngAfterViewChecked() {\n    this.checkNodes();\n  }\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) { // node type 3 is a text node\n        let key!: string;\n        if (forceUpdate) {\n          node.lastKey = null;\n        }\n        if(isDefined(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) { // 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: Translation) => {\n        if (res !== key || !node.lastKey) {\n          node.lastKey = key;\n        }\n        if (!node.originalContent) {\n          node.originalContent = this.getContent(node);\n        }\n        node.currentValue = isDefined(res) ? res : (node.originalContent || key);\n        // we replace in the original content to preserve spaces that we might have trimmed\n        this.setContent(node, this.key ? node.currentValue : node.originalContent.replace(key, node.currentValue));\n        this._ref.markForCheck();\n      };\n\n      if (isDefined(translations)) {\n        const res = this.translateService.getParsedResult(translations as InterpolatableTranslation, 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 (isDefined(node.textContent) ? node.textContent : node.data) as string;\n  }\n\n  setContent(node: ExtendedNode, content: string): void {\n    if (isDefined(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.onDefaultLangChangeSub) {\n      this.onDefaultLangChangeSub.unsubscribe();\n    }\n\n    if (this.onTranslationChangeSub) {\n      this.onTranslationChangeSub.unsubscribe();\n    }\n  }\n}\n","import {ChangeDetectorRef, Injectable, OnDestroy, Pipe, PipeTransform} from '@angular/core';\nimport {isObservable, Subscription} from 'rxjs';\nimport {\n  InterpolatableTranslationObject,\n  LangChangeEvent,\n  TranslateService,\n  TranslationChangeEvent,\n  Translation,\n  InterpolationParameters\n} from \"./translate.service\";\nimport {equals, isDefined, 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  value:Translation = '';\n  lastKey: string | null = null;\n  lastParams: InterpolationParameters[] = [];\n  onTranslationChange: Subscription | undefined;\n  onLangChange: Subscription | undefined;\n  onDefaultLangChange: Subscription | undefined;\n\n  constructor(private translate: TranslateService, private _ref: ChangeDetectorRef) {\n  }\n\n  updateValue(key: string, interpolateParams?: object, translations?: InterpolatableTranslationObject): void {\n    const onTranslation = (res: Translation) => {\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(translations, 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, ...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: object | undefined = undefined;\n    if (isDefined(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        // which 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(`Wrong parameter in TranslatePipe. Expected a valid Object, received: ${args[0]}`);\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((event: TranslationChangeEvent) => {\n        if (this.lastKey && event.lang === this.translate.currentLang) {\n          this.lastKey = null;\n          this.updateValue(query, interpolateParams, event.translations);\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 default language changes\n    if (!this.onDefaultLangChange) {\n      this.onDefaultLangChange = this.translate.onDefaultLangChange.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.onDefaultLangChange !== 'undefined') {\n      this.onDefaultLangChange.unsubscribe();\n      this.onDefaultLangChange = undefined;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this._dispose();\n  }\n}\n","export function _<T extends string | string[]>(key: T): T {\n    return key;\n}\n","import {NgModule, ModuleWithProviders, Provider, EnvironmentProviders, makeEnvironmentProviders} from \"@angular/core\";\nimport {TranslateLoader, TranslateFakeLoader} from \"./lib/translate.loader\";\nimport {MissingTranslationHandler, FakeMissingTranslationHandler} from \"./lib/missing-translation-handler\";\nimport {TranslateParser, TranslateDefaultParser} from \"./lib/translate.parser\";\nimport {TranslateCompiler, TranslateFakeCompiler} from \"./lib/translate.compiler\";\nimport {TranslateDirective} from \"./lib/translate.directive\";\nimport {TranslatePipe} from \"./lib/translate.pipe\";\nimport {TranslateStore} from \"./lib/translate.store\";\nimport {\n  USE_DEFAULT_LANG,\n  DEFAULT_LANGUAGE,\n  USE_EXTEND,\n  ISOALTE_TRANSLATE_SERVICE,\n  TranslateService\n} from \"./lib/translate.service\";\n\nexport * from \"./lib/translate.loader\";\nexport * from \"./lib/translate.service\";\nexport * from \"./lib/missing-translation-handler\";\nexport * from \"./lib/translate.parser\";\nexport * from \"./lib/translate.compiler\";\nexport * from \"./lib/translate.directive\";\nexport * from \"./lib/translate.pipe\";\nexport * from \"./lib/translate.store\";\nexport * from \"./lib/extraction-marker\";\nexport * from \"./lib/util\"\n\nexport interface TranslateModuleConfig {\n  loader?: Provider;\n  compiler?: Provider;\n  parser?: Provider;\n  missingTranslationHandler?: Provider;\n  // isolate the service instance, only works for lazy loaded modules or components with the \"providers\" property\n  isolate?: boolean;\n  // extends translations for a given language instead of ignoring them if present\n  extend?: boolean;\n  useDefaultLang?: boolean;\n  defaultLanguage?: string;\n}\n\nexport const provideTranslateService = (config: TranslateModuleConfig = {}): EnvironmentProviders =>\n{\n  return makeEnvironmentProviders([\n    config.loader || {provide: TranslateLoader, useClass: TranslateFakeLoader},\n    config.compiler || {provide: TranslateCompiler, useClass: TranslateFakeCompiler},\n    config.parser || {provide: TranslateParser, useClass: TranslateDefaultParser},\n    config.missingTranslationHandler || {provide: MissingTranslationHandler, useClass: FakeMissingTranslationHandler},\n    TranslateStore,\n    {provide: ISOALTE_TRANSLATE_SERVICE, useValue: config.isolate},\n    {provide: USE_DEFAULT_LANG, useValue: config.useDefaultLang},\n    {provide: USE_EXTEND, useValue: config.extend},\n    {provide: DEFAULT_LANGUAGE, useValue: config.defaultLanguage},\n    TranslateService\n  ]);\n}\n\n\n@NgModule({\n  imports: [\n    TranslatePipe,\n    TranslateDirective\n  ],\n  exports: [\n    TranslatePipe,\n    TranslateDirective\n  ]\n})\nexport class TranslateModule {\n  /**\n   * Use this method in your root module to provide the TranslateService\n   */\n  static forRoot(config: TranslateModuleConfig = {}): ModuleWithProviders<TranslateModule> {\n    return {\n      ngModule: TranslateModule,\n      providers: [\n        config.loader || {provide: TranslateLoader, useClass: TranslateFakeLoader},\n        config.compiler || {provide: TranslateCompiler, useClass: TranslateFakeCompiler},\n        config.parser || {provide: TranslateParser, useClass: TranslateDefaultParser},\n        config.missingTranslationHandler || {provide: MissingTranslationHandler, useClass: FakeMissingTranslationHandler},\n        TranslateStore,\n        {provide: ISOALTE_TRANSLATE_SERVICE, useValue: config.isolate},\n        {provide: USE_DEFAULT_LANG, useValue: config.useDefaultLang},\n        {provide: USE_EXTEND, useValue: config.extend},\n        {provide: DEFAULT_LANGUAGE, useValue: config.defaultLanguage},\n        TranslateService\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<TranslateModule> {\n    return {\n      ngModule: TranslateModule,\n      providers: [\n        config.loader || {provide: TranslateLoader, useClass: TranslateFakeLoader},\n        config.compiler || {provide: TranslateCompiler, useClass: TranslateFakeCompiler},\n        config.parser || {provide: TranslateParser, useClass: TranslateDefaultParser},\n        config.missingTranslationHandler || {provide: MissingTranslationHandler, useClass: FakeMissingTranslationHandler},\n        {provide: ISOALTE_TRANSLATE_SERVICE, useValue: config.isolate},\n        {provide: USE_DEFAULT_LANG, useValue: config.useDefaultLang},\n        {provide: USE_EXTEND, useValue: config.extend},\n        {provide: DEFAULT_LANGUAGE, useValue: config.defaultLanguage},\n        TranslateService\n      ]\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TranslateService"],"mappings":"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"}