@igo2/core
Version:
53 lines • 8.65 kB
JavaScript
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==