UNPKG

@ngneat/transloco

Version:

The internationalization (i18n) library for Angular

180 lines 14.3 kB
/** * @fileoverview added by tsickle * Generated from: lib/transloco.pipe.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ChangeDetectorRef, Inject, Optional, Pipe } from '@angular/core'; import { TranslocoService } from './transloco.service'; import { switchMap } from 'rxjs/operators'; import { forkJoin } from 'rxjs'; import { TRANSLOCO_SCOPE } from './transloco-scope'; import { TRANSLOCO_LANG } from './transloco-lang'; import { listenOrNotOperator, resolveInlineLoader, shouldListenToLangChanges } from './shared'; import { LangResolver } from './lang-resolver'; import { ScopeResolver } from './scope-resolver'; export class TranslocoPipe { /** * @param {?} translocoService * @param {?} providerScope * @param {?} providerLang * @param {?} cdr */ constructor(translocoService, providerScope, providerLang, cdr) { this.translocoService = translocoService; this.providerScope = providerScope; this.providerLang = providerLang; this.cdr = cdr; this.subscription = null; this.lastValue = ''; this.langResolver = new LangResolver(); this.scopeResolver = new ScopeResolver(this.translocoService); this.listenToLangChange = shouldListenToLangChanges(this.translocoService, this.providerLang); } // null is for handling strict mode + async pipe types https://github.com/ngneat/transloco/issues/311 /** * @param {?} key * @param {?=} params * @param {?=} inlineLang * @return {?} */ transform(key, params, inlineLang) { if (!key) { return key; } /** @type {?} */ const keyName = params ? `${key}${JSON.stringify(params)}` : key; if (keyName === this.lastKey) { return this.lastValue; } this.lastKey = keyName; this.subscription && this.subscription.unsubscribe(); this.subscription = this.translocoService.langChanges$ .pipe(switchMap((/** * @param {?} activeLang * @return {?} */ activeLang => { /** @type {?} */ const lang = this.langResolver.resolve({ inline: inlineLang, provider: this.providerLang, active: activeLang }); return Array.isArray(this.providerScope) ? forkJoin(((/** @type {?} */ (this.providerScope))).map((/** * @param {?} providerScope * @return {?} */ providerScope => this.resolveScope(lang, providerScope)))) : this.resolveScope(lang, this.providerScope); })), listenOrNotOperator(this.listenToLangChange)) .subscribe((/** * @return {?} */ () => this.updateValue(key, params))); return this.lastValue; } /** * @return {?} */ ngOnDestroy() { this.subscription && this.subscription.unsubscribe(); } /** * @private * @param {?} key * @param {?=} params * @return {?} */ updateValue(key, params) { /** @type {?} */ const lang = this.langResolver.resolveLangBasedOnScope(this.path); this.lastValue = this.translocoService.translate(key, params, lang); this.cdr.markForCheck(); } /** * @private * @param {?} lang * @param {?} providerScope * @return {?} */ resolveScope(lang, providerScope) { /** @type {?} */ let resolvedScope = this.scopeResolver.resolve({ inline: undefined, provider: providerScope }); this.path = this.langResolver.resolveLangPath(lang, resolvedScope); /** @type {?} */ const inlineLoader = resolveInlineLoader(providerScope, resolvedScope); return this.translocoService._loadDependencies(this.path, inlineLoader); } } TranslocoPipe.decorators = [ { type: Pipe, args: [{ name: 'transloco', pure: false },] } ]; /** @nocollapse */ TranslocoPipe.ctorParameters = () => [ { type: TranslocoService }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [TRANSLOCO_SCOPE,] }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [TRANSLOCO_LANG,] }] }, { type: ChangeDetectorRef } ]; if (false) { /** * @type {?} * @private */ TranslocoPipe.prototype.subscription; /** * @type {?} * @private */ TranslocoPipe.prototype.lastValue; /** * @type {?} * @private */ TranslocoPipe.prototype.lastKey; /** * @type {?} * @private */ TranslocoPipe.prototype.listenToLangChange; /** * @type {?} * @private */ TranslocoPipe.prototype.path; /** * @type {?} * @private */ TranslocoPipe.prototype.langResolver; /** * @type {?} * @private */ TranslocoPipe.prototype.scopeResolver; /** * @type {?} * @private */ TranslocoPipe.prototype.translocoService; /** * @type {?} * @private */ TranslocoPipe.prototype.providerScope; /** * @type {?} * @private */ TranslocoPipe.prototype.providerLang; /** * @type {?} * @private */ TranslocoPipe.prototype.cdr; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLnBpcGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmduZWF0L3RyYW5zbG9jby8iLCJzb3VyY2VzIjpbImxpYi90cmFuc2xvY28ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQWEsUUFBUSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFNakQsTUFBTSxPQUFPLGFBQWE7Ozs7Ozs7SUFTeEIsWUFDVSxnQkFBa0MsRUFDRyxhQUF5QyxFQUMxQyxZQUEyQixFQUMvRCxHQUFzQjtRQUh0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ0csa0JBQWEsR0FBYixhQUFhLENBQTRCO1FBQzFDLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBQy9ELFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBWnhCLGlCQUFZLEdBQXdCLElBQUksQ0FBQztRQUN6QyxjQUFTLEdBQVcsRUFBRSxDQUFDO1FBSXZCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxrQkFBYSxHQUFHLElBQUksYUFBYSxDQUFD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dEUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMxRSxDQUFDOzs7WUExRUYsSUFBSSxTQUFDO2dCQUNKLElBQUksRUFBRSxXQUFXO2dCQUNqQixJQUFJLEVBQUUsS0FBSzthQUNaOzs7O1lBYlEsZ0JBQWdCOzRDQXlCcEIsUUFBUSxZQUFJLE1BQU0sU0FBQyxlQUFlOzRDQUNsQyxRQUFRLFlBQUksTUFBTSxTQUFDLGNBQWM7WUEzQjdCLGlCQUFpQjs7Ozs7OztJQWdCeEIscUNBQWlEOzs7OztJQUNqRCxrQ0FBK0I7Ozs7O0lBQy9CLGdDQUFvQzs7Ozs7SUFDcEMsMkNBQW9DOzs7OztJQUNwQyw2QkFBcUI7Ozs7O0lBQ3JCLHFDQUEwQzs7Ozs7SUFDMUMsc0NBQWlFOzs7OztJQUcvRCx5Q0FBMEM7Ozs7O0lBQzFDLHNDQUFzRjs7Ozs7SUFDdEYscUNBQXVFOzs7OztJQUN2RSw0QkFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnLi90cmFuc2xvY28uc2VydmljZSc7XG5pbXBvcnQgeyBIYXNoTWFwLCBNYXliZUFycmF5LCBUcmFuc2xhdGlvbiwgVHJhbnNsb2NvU2NvcGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRSQU5TTE9DT19TQ09QRSB9IGZyb20gJy4vdHJhbnNsb2NvLXNjb3BlJztcbmltcG9ydCB7IFRSQU5TTE9DT19MQU5HIH0gZnJvbSAnLi90cmFuc2xvY28tbGFuZyc7XG5pbXBvcnQgeyBsaXN0ZW5Pck5vdE9wZXJhdG9yLCByZXNvbHZlSW5saW5lTG9hZGVyLCBzaG91bGRMaXN0ZW5Ub0xhbmdDaGFuZ2VzIH0gZnJvbSAnLi9zaGFyZWQnO1xuaW1wb3J0IHsgTGFuZ1Jlc29sdmVyIH0gZnJvbSAnLi9sYW5nLXJlc29sdmVyJztcbmltcG9ydCB7IFNjb3BlUmVzb2x2ZXIgfSBmcm9tICcuL3Njb3BlLXJlc29sdmVyJztcblxuQFBpcGUoe1xuICBuYW1lOiAndHJhbnNsb2NvJyxcbiAgcHVyZTogZmFsc2Vcbn0pXG5leHBvcnQgY2xhc3MgVHJhbnNsb2NvUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0VmFsdWU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIGxhc3RLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBsaXN0ZW5Ub0xhbmdDaGFuZ2U6IGJvb2xlYW47XG4gIHByaXZhdGUgcGF0aDogc3RyaW5nO1xuICBwcml2YXRlIGxhbmdSZXNvbHZlciA9IG5ldyBMYW5nUmVzb2x2ZXIoKTtcbiAgcHJpdmF0ZSBzY29wZVJlc29sdmVyID0gbmV3IFNjb3BlUmVzb2x2ZXIodGhpcy50cmFuc2xvY29TZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRyYW5zbG9jb1NlcnZpY2U6IFRyYW5zbG9jb1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChUUkFOU0xPQ09fU0NPUEUpIHByaXZhdGUgcHJvdmlkZXJTY29wZTogTWF5YmVBcnJheTxUcmFuc2xvY29TY29wZT4sXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChUUkFOU0xPQ09fTEFORykgcHJpdmF0ZSBwcm92aWRlckxhbmc6IHN0cmluZyB8IG51bGwsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMubGlzdGVuVG9MYW5nQ2hhbmdlID0gc2hvdWxkTGlzdGVuVG9MYW5nQ2hhbmdlcyh0aGlzLnRyYW5zbG9jb1NlcnZpY2UsIHRoaXMucHJvdmlkZXJMYW5nKTtcbiAgfVxuXG4gIC8vIG51bGwgaXMgZm9yIGhhbmRsaW5nIHN0cmljdCBtb2RlICsgYXN5bmMgcGlwZSB0eXBlcyBodHRwczovL2dpdGh1Yi5jb20vbmduZWF0L3RyYW5zbG9jby9pc3N1ZXMvMzExXG4gIHRyYW5zZm9ybShrZXk6IHN0cmluZyB8IG51bGwsIHBhcmFtcz86IEhhc2hNYXAgfCB1bmRlZmluZWQsIGlubGluZUxhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICgha2V5KSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cblxuICAgIGNvbnN0IGtleU5hbWUgPSBwYXJhbXMgPyBgJHtrZXl9JHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfWAgOiBrZXk7XG5cbiAgICBpZiAoa2V5TmFtZSA9PT0gdGhpcy5sYXN0S2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5sYXN0VmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0S2V5ID0ga2V5TmFtZTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiAmJiB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnRyYW5zbG9jb1NlcnZpY2UubGFuZ0NoYW5nZXMkXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKGFjdGl2ZUxhbmcgPT4ge1xuICAgICAgICAgIGNvbnN0IGxhbmcgPSB0aGlzLmxhbmdSZXNvbHZlci5yZXNvbHZlKHtcbiAgICAgICAgICAgIGlubGluZTogaW5saW5lTGFuZyxcbiAgICAgICAgICAgIHByb3ZpZGVyOiB0aGlzLnByb3ZpZGVyTGFuZyxcbiAgICAgICAgICAgIGFjdGl2ZTogYWN0aXZlTGFuZ1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5wcm92aWRlclNjb3BlKVxuICAgICAgICAgICAgPyBmb3JrSm9pbihcbiAgICAgICAgICAgICAgICAoPFRyYW5zbG9jb1Njb3BlW10+dGhpcy5wcm92aWRlclNjb3BlKS5tYXAocHJvdmlkZXJTY29wZSA9PiB0aGlzLnJlc29sdmVTY29wZShsYW5nLCBwcm92aWRlclNjb3BlKSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB0aGlzLnJlc29sdmVTY29wZShsYW5nLCB0aGlzLnByb3ZpZGVyU2NvcGUpO1xuICAgICAgICB9KSxcbiAgICAgICAgbGlzdGVuT3JOb3RPcGVyYXRvcih0aGlzLmxpc3RlblRvTGFuZ0NoYW5nZSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVWYWx1ZShrZXksIHBhcmFtcykpO1xuXG4gICAgcmV0dXJuIHRoaXMubGFzdFZhbHVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gJiYgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWUoa2V5OiBzdHJpbmcsIHBhcmFtcz86IEhhc2hNYXAgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5sYW5nUmVzb2x2ZXIucmVzb2x2ZUxhbmdCYXNlZE9uU2NvcGUodGhpcy5wYXRoKTtcbiAgICB0aGlzLmxhc3RWYWx1ZSA9IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoa2V5LCBwYXJhbXMsIGxhbmcpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU2NvcGUobGFuZzogc3RyaW5nLCBwcm92aWRlclNjb3BlOiBUcmFuc2xvY29TY29wZSk6IE9ic2VydmFibGU8VHJhbnNsYXRpb24gfCBUcmFuc2xhdGlvbltdPiB7XG4gICAgbGV0IHJlc29sdmVkU2NvcGUgPSB0aGlzLnNjb3BlUmVzb2x2ZXIucmVzb2x2ZSh7IGlubGluZTogdW5kZWZpbmVkLCBwcm92aWRlcjogcHJvdmlkZXJTY29wZSB9KTtcbiAgICB0aGlzLnBhdGggPSB0aGlzLmxhbmdSZXNvbHZlci5yZXNvbHZlTGFuZ1BhdGgobGFuZywgcmVzb2x2ZWRTY29wZSk7XG4gICAgY29uc3QgaW5saW5lTG9hZGVyID0gcmVzb2x2ZUlubGluZUxvYWRlcihwcm92aWRlclNjb3BlLCByZXNvbHZlZFNjb3BlKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xvY29TZXJ2aWNlLl9sb2FkRGVwZW5kZW5jaWVzKHRoaXMucGF0aCwgaW5saW5lTG9hZGVyKTtcbiAgfVxufVxuIl19