@singleton-i18n/angular-client
Version:
Singleton client code for Angular 10.
124 lines • 14.5 kB
JavaScript
/*
* Copyright 2019-2021 VMware, Inc.
* SPDX-License-Identifier: EPL-2.0
*/
import { Pipe } from '@angular/core';
import { invalidParamater } from './exceptions';
import { L10nService } from './services/l10n.service';
import { isDefined, equals } from './util';
export class L10nPipe {
constructor(l10nService) {
this.l10nService = l10nService;
this.value = '';
}
onTranslation(key, source, args, locale) {
this.value = this.l10nService.translate(key, source, args, locale);
this.lastKey = key;
}
updateValue(key, source, args, locale) {
if (locale) {
this.onTranslation(key, source, args, locale);
}
else {
this.l10nService.current.subscribe((currentLocale) => {
this.onTranslation(key, source, args, currentLocale);
});
}
}
transform(key, source, ...args) {
if (!isDefined(key)) {
throw invalidParamater('key in L10nPipe');
}
if (equals(key, this.lastKey) && equals(args, this.lastParams)) {
return this.value;
}
this.lastKey = key;
this.lastParams = args;
this.updateValue(key, source, args);
this._dispose();
if (!this.onTranslationChange) {
this.onTranslationChange = this.l10nService.onLocaleChange.subscribe((locale) => {
this.lastKey = null;
this.updateValue(key, source, args, locale);
});
}
return this.value;
}
_dispose() {
if (typeof this.onTranslationChange !== 'undefined') {
this.onTranslationChange.unsubscribe();
this.onTranslationChange = undefined;
}
}
ngOnDestroy() {
this._dispose();
}
}
L10nPipe.decorators = [
{ type: Pipe, args: [{
name: 'translate',
pure: false
},] }
];
L10nPipe.ctorParameters = () => [
{ type: L10nService }
];
export class L10nPipePlus {
constructor(l10nService) {
this.l10nService = l10nService;
this.value = '';
}
onTranslation(key, args, locale) {
const longKey = this.l10nService.getLongKey(this.config, key);
this.value = this.l10nService.getMessage(longKey, args, locale);
this.lastKey = key;
}
updateValue(key, args, locale) {
if (locale) {
this.onTranslation(key, args, locale);
}
else {
this.l10nService.current.subscribe((currentLocale) => {
this.onTranslation(key, args, currentLocale);
});
}
}
transform(key, ...args) {
if (!isDefined(key)) {
throw invalidParamater('key in L10nPipePlus');
}
if (equals(key, this.lastKey) && equals(args, this.lastParams)) {
return this.value;
}
this.lastKey = key;
this.lastParams = args;
this.updateValue(key, args);
this._dispose();
if (!this.onTranslationChange) {
this.onTranslationChange = this.l10nService.onLocaleChange.subscribe((locale) => {
this.lastKey = null;
this.updateValue(key, args, locale);
});
}
return this.value;
}
_dispose() {
if (typeof this.onTranslationChange !== 'undefined') {
this.onTranslationChange.unsubscribe();
this.onTranslationChange = undefined;
}
}
ngOnDestroy() {
this._dispose();
}
}
L10nPipePlus.decorators = [
{ type: Pipe, args: [{
name: 'vtranslate',
pure: false
},] }
];
L10nPipePlus.ctorParameters = () => [
{ type: L10nService }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDEwbi5waXBlLmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3JsaWdlbmcvUHJvamVjdHMvRGV2b3BzL0NsaWVudF9Bbmd1bGFyX0dpdEh1Yl9OcG1qcy92aXAvY2kvcHViMm9yZy9DbGllbnRfQW5ndWxhcl9HaXRIdWJfTnBtanMvc2luZ2xldG9uL3Byb2plY3RzL2FuZ3VsYXItY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL2wxMG4ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsSUFBSSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBUTNDLE1BQU0sT0FBTyxRQUFRO0lBS2pCLFlBQ1ksV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFMNUIsVUFBSyxHQUFHLEVBQUUsQ0FBQztJQU1mLENBQUM7SUFHTCxhQUFhLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBRSxJQUFXLEVBQUUsTUFBYztRQUNsRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBRSxJQUFjLEVBQUUsTUFBZTtRQUNwRSxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDakQ7YUFBTTtZQUNILElBQUksQ0FBQyxXQUFX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V0FBVztRQUNQLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQixDQUFDOzs7WUFsRUosSUFBSSxTQUFDO2dCQUNGLElBQUksRUFBRSxZQUFZO2dCQUNsQixJQUFJLEVBQUUsS0FBSzthQUNkOzs7WUE5RVEsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxOS0yMDIxIFZNd2FyZSwgSW5jLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGludmFsaWRQYXJhbWF0ZXIgfSBmcm9tICcuL2V4Y2VwdGlvbnMnO1xuaW1wb3J0IHsgTDEwblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2wxMG4uc2VydmljZSc7XG5pbXBvcnQgeyBpc0RlZmluZWQsIGVxdWFscyB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBWSVBDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAndHJhbnNsYXRlJyxcbiAgICBwdXJlOiBmYWxzZVxufSlcblxuZXhwb3J0IGNsYXNzIEwxMG5QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHZhbHVlID0gJyc7XG4gICAgcHJpdmF0ZSBvblRyYW5zbGF0aW9uQ2hhbmdlOiBhbnk7XG4gICAgbGFzdEtleTogc3RyaW5nO1xuICAgIGxhc3RQYXJhbXM6IGFueTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBsMTBuU2VydmljZTogTDEwblNlcnZpY2VcbiAgICApIHsgfVxuXG5cbiAgICBvblRyYW5zbGF0aW9uKGtleTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZywgYXJnczogYW55W10sIGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmwxMG5TZXJ2aWNlLnRyYW5zbGF0ZShrZXksIHNvdXJjZSwgYXJncywgbG9jYWxlKTtcbiAgICAgICAgdGhpcy5sYXN0S2V5ID0ga2V5O1xuICAgIH1cblxuICAgIHVwZGF0ZVZhbHVlKGtleTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZywgYXJnczogc3RyaW5nW10sIGxvY2FsZT86IHN0cmluZykge1xuICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICB0aGlzLm9uVHJhbnNsYXRpb24oa2V5LCBzb3VyY2UsIGFyZ3MsIGxvY2FsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmwxMG5TZXJ2aWNlLmN1cnJlbnQuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChjdXJyZW50TG9jYWxlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblRyYW5zbGF0aW9uKGtleSwgc291cmNlLCBhcmdzLCBjdXJyZW50TG9jYWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICB0cmFuc2Zvcm0oa2V5OiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nLCAuLi5hcmdzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghaXNEZWZpbmVkKGtleSkpIHtcbiAgICAgICAgICAgIHRocm93IGludmFsaWRQYXJhbWF0ZXIoJ2tleSBpbiBMMTBuUGlwZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVxdWFscyhrZXksIHRoaXMubGFzdEtleSkgJiYgZXF1YWxzKGFyZ3MsIHRoaXMubGFzdFBhcmFtcykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXN0S2V5ID0ga2V5O1xuICAgICAgICB0aGlzLmxhc3RQYXJhbXMgPSBhcmdzO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUoa2V5LCBzb3VyY2UsIGFyZ3MpO1xuICAgICAgICB0aGlzLl9kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLm9uVHJhbnNsYXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMub25UcmFuc2xhdGlvbkNoYW5nZSA9IHRoaXMubDEwblNlcnZpY2Uub25Mb2NhbGVDaGFuZ2Uuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChsb2NhbGU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RLZXkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKGtleSwgc291cmNlLCBhcmdzLCBsb2NhbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uVHJhbnNsYXRpb25DaGFuZ2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVHJhbnNsYXRpb25DaGFuZ2UudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMub25UcmFuc2xhdGlvbkNoYW5nZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9kaXNwb3NlKCk7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgbmFtZTogJ3Z0cmFuc2xhdGUnLFxuICAgIHB1cmU6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIEwxMG5QaXBlUGx1cyBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSB2YWx1ZSA9ICcnO1xuICAgIHByaXZhdGUgb25UcmFuc2xhdGlvbkNoYW5nZTogYW55O1xuICAgIGNvbmZpZzogVklQQ29uZmlnO1xuICAgIGxhc3RLZXk6IHN0cmluZztcbiAgICBsYXN0UGFyYW1zOiBhbnk7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgbDEwblNlcnZpY2U6IEwxMG5TZXJ2aWNlLFxuICAgICkgeyB9XG5cbiAgICBvblRyYW5zbGF0aW9uKGtleTogc3RyaW5nLCBhcmdzOiBhbnlbXSwgbG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbG9uZ0tleSA9IHRoaXMubDEwblNlcnZpY2UuZ2V0TG9uZ0tleSh0aGlzLmNvbmZpZywga2V5KTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubDEwblNlcnZpY2UuZ2V0TWVzc2FnZShsb25nS2V5LCBhcmdzLCBsb2NhbGUpO1xuICAgICAgICB0aGlzLmxhc3RLZXkgPSBrZXk7XG4gICAgfVxuXG4gICAgdXBkYXRlVmFsdWUoa2V5OiBzdHJpbmcsIGFyZ3M6IGFueVtdLCBsb2NhbGU/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgdGhpcy5vblRyYW5zbGF0aW9uKGtleSwgYXJncywgbG9jYWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubDEwblNlcnZpY2UuY3VycmVudC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRMb2NhbGU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uVHJhbnNsYXRpb24oa2V5LCBhcmdzLCBjdXJyZW50TG9jYWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtKGtleTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghaXNEZWZpbmVkKGtleSkpIHtcbiAgICAgICAgICAgIHRocm93IGludmFsaWRQYXJhbWF0ZXIoJ2tleSBpbiBMMTBuUGlwZVBsdXMnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXF1YWxzKGtleSwgdGhpcy5sYXN0S2V5KSAmJiBlcXVhbHMoYXJncywgdGhpcy5sYXN0UGFyYW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhc3RLZXkgPSBrZXk7XG4gICAgICAgIHRoaXMubGFzdFBhcmFtcyA9IGFyZ3M7XG5cbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShrZXksIGFyZ3MpO1xuICAgICAgICB0aGlzLl9kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLm9uVHJhbnNsYXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMub25UcmFuc2xhdGlvbkNoYW5nZSA9IHRoaXMubDEwblNlcnZpY2Uub25Mb2NhbGVDaGFuZ2Uuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChsb2NhbGU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RLZXkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKGtleSwgYXJncywgbG9jYWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Rpc3Bvc2UoKTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vblRyYW5zbGF0aW9uQ2hhbmdlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5vblRyYW5zbGF0aW9uQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLm9uVHJhbnNsYXRpb25DaGFuZ2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fZGlzcG9zZSgpO1xuICAgIH1cbn1cbiJdfQ==