UNPKG

@igo2/core

Version:
53 lines 8.65 kB
import { HttpClient } from '@angular/common/http'; import { ObjectUtils } from '@igo2/utils'; import { BehaviorSubject, first, forkJoin, map, of, switchMap, tap } from 'rxjs'; export class LanguageLoader { httpClient; _isLoaded$ = new BehaviorSubject(null); isLoaded$ = this._isLoaded$.asObservable(); suffix = '.json'; prefix; options; constructor(handler, options) { this.httpClient = new HttpClient(handler); this.options = options; } getTranslation(lang) { const igoLocale$ = this.httpClient.get(`locale/libs_locale/${lang}.json`); if (!this.prefix) { const prefix = this.options.prefix; this.prefix = !prefix || Array.isArray(prefix) ? prefix : [prefix]; } if (!this.prefix || this.prefix.length === 0) { this._isLoaded$.next(true); return this.options.ignoreLibsLocale ? of(undefined) : igoLocale$; } const appLocale$ = this.prefix.map((prefix) => this.httpClient.get(`${prefix}${lang}${this.suffix}`)); const locale$ = [...appLocale$]; if (!this.options.ignoreLibsLocale) { locale$.unshift(igoLocale$); } return forkJoin(locale$).pipe(map((translations) => { return translations.reduce((acc, current) => ObjectUtils.mergeDeep(acc, current), {}); }), tap(() => { this._isLoaded$.next(true); })); } } export class LanguageLoaderWithAsyncConfig extends LanguageLoader { configService; constructor(handler, configService, prefix, suffix = '.json') { super(handler, undefined); this.configService = configService; this.prefix = prefix; this.suffix = suffix; } getTranslation(lang) { return this.configService.isLoaded$.pipe(first((isLoaded) => isLoaded), switchMap(() => { this.options = this.configService.getConfig('language'); return super.getTranslation(lang); })); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UubG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9sYW5ndWFnZS9zcmMvc2hhcmVkL2xhbmd1YWdlLmxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxQyxPQUFPLEVBQ0wsZUFBZSxFQUVmLEtBQUssRUFDTCxRQUFRLEVBQ1IsR0FBRyxFQUNILEVBQUUsRUFDRixTQUFTLEVBQ1QsR0FBRyxFQUNKLE1BQU0sTUFBTSxDQUFDO0FBSWQsTUFBTSxPQUFPLGNBQWM7SUFDakIsVUFBVSxDQUFhO0lBRXZCLFVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUN4RCxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUzQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQ2pCLE1BQU0sQ0FBcUI7SUFDM0IsT0FBTyxDQUFrQjtJQUV6QixZQUFZLE9BQW9CLEVBQUUsT0FBd0I7UUFDeEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRU0sY0FBYyxDQUFDLElBQVk7UUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLElBQUksT0FBTyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUNwRSxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUksSUFBSSxDQUFDLE1BQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUN0RCxDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDbkMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUMzQixHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUNuQixPQUFPLFlBQVksQ0FBQyxNQUFNLENBQ3hCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQ3JELEVBQUUsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sNkJBQThCLFNBQVEsY0FBYztJQUdyRDtJQUZWLFlBQ0UsT0FBb0IsRUFDWixhQUE0QixFQUNwQyxNQUEwQixFQUMxQixNQUFNLEdBQUcsT0FBTztRQUVoQixLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBSmxCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBS3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxjQUFjLENBQUMsSUFBWTtRQUNoQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFDN0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxPQUFPO2dCQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFrQixVQUFVLENBQUMsQ0FBQztZQUU1RCxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBCYWNrZW5kLCBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgT2JqZWN0VXRpbHMgfSBmcm9tICdAaWdvMi91dGlscyc7XG5cbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbiAgZmlyc3QsXG4gIGZvcmtKb2luLFxuICBtYXAsXG4gIG9mLFxuICBzd2l0Y2hNYXAsXG4gIHRhcFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTGFuZ3VhZ2VMb2FkZXJCYXNlLCBMYW5ndWFnZU9wdGlvbnMgfSBmcm9tICcuL2xhbmd1YWdlLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBMYW5ndWFnZUxvYWRlciBpbXBsZW1lbnRzIExhbmd1YWdlTG9hZGVyQmFzZSB7XG4gIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudDtcblxuICBwcml2YXRlIF9pc0xvYWRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KG51bGwpO1xuICBpc0xvYWRlZCQgPSB0aGlzLl9pc0xvYWRlZCQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgc3VmZml4ID0gJy5qc29uJztcbiAgcHJlZml4Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gIG9wdGlvbnM6IExhbmd1YWdlT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihoYW5kbGVyOiBIdHRwQmFja2VuZCwgb3B0aW9uczogTGFuZ3VhZ2VPcHRpb25zKSB7XG4gICAgdGhpcy5odHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnQoaGFuZGxlcik7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGlvbihsYW5nOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGlnb0xvY2FsZSQgPSB0aGlzLmh0dHBDbGllbnQuZ2V0KGBsb2NhbGUvbGlic19sb2NhbGUvJHtsYW5nfS5qc29uYCk7XG4gICAgaWYgKCF0aGlzLnByZWZpeCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gdGhpcy5vcHRpb25zLnByZWZpeDtcbiAgICAgIHRoaXMucHJlZml4ID0gIXByZWZpeCB8fCBBcnJheS5pc0FycmF5KHByZWZpeCkgPyBwcmVmaXggOiBbcHJlZml4XTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucHJlZml4IHx8IHRoaXMucHJlZml4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5faXNMb2FkZWQkLm5leHQodHJ1ZSk7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmlnbm9yZUxpYnNMb2NhbGUgPyBvZih1bmRlZmluZWQpIDogaWdvTG9jYWxlJDtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBMb2NhbGUkID0gKHRoaXMucHJlZml4IGFzIHN0cmluZ1tdKS5tYXAoKHByZWZpeCkgPT5cbiAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoYCR7cHJlZml4fSR7bGFuZ30ke3RoaXMuc3VmZml4fWApXG4gICAgKTtcblxuICAgIGNvbnN0IGxvY2FsZSQgPSBbLi4uYXBwTG9jYWxlJF07XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVMaWJzTG9jYWxlKSB7XG4gICAgICBsb2NhbGUkLnVuc2hpZnQoaWdvTG9jYWxlJCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcmtKb2luKGxvY2FsZSQpLnBpcGUoXG4gICAgICBtYXAoKHRyYW5zbGF0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gdHJhbnNsYXRpb25zLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBjdXJyZW50KSA9PiBPYmplY3RVdGlscy5tZXJnZURlZXAoYWNjLCBjdXJyZW50KSxcbiAgICAgICAgICB7fVxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICB0aGlzLl9pc0xvYWRlZCQubmV4dCh0cnVlKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFuZ3VhZ2VMb2FkZXJXaXRoQXN5bmNDb25maWcgZXh0ZW5kcyBMYW5ndWFnZUxvYWRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGhhbmRsZXI6IEh0dHBCYWNrZW5kLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcmVmaXg/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICBzdWZmaXggPSAnLmpzb24nXG4gICkge1xuICAgIHN1cGVyKGhhbmRsZXIsIHVuZGVmaW5lZCk7XG4gICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG4gICAgdGhpcy5zdWZmaXggPSBzdWZmaXg7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNsYXRpb24obGFuZzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLmlzTG9hZGVkJC5waXBlKFxuICAgICAgZmlyc3QoKGlzTG9hZGVkKSA9PiBpc0xvYWRlZCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPVxuICAgICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWc8TGFuZ3VhZ2VPcHRpb25zPignbGFuZ3VhZ2UnKTtcblxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0VHJhbnNsYXRpb24obGFuZyk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==