UNPKG

@singleton-i18n/angular-client

Version:

Singleton client code for Angular 10.

63 lines 7.31 kB
/* * Copyright 2019-2021 VMware, Inc. * SPDX-License-Identifier: EPL-2.0 */ import { Directive, ElementRef, Input } from '@angular/core'; import { L10nService } from './services/l10n.service'; import { isDefined } from './util'; import { invalidParamater } from './exceptions'; export class L10nDirective { constructor(el, l10nService) { this.el = el; this.l10nService = l10nService; } ngAfterViewInit() { this.getMessage(); } updateValue(key, source, args, locale) { const onTranslation = (currentLocale) => { const translation = this.l10nService.translate(key, source, args, currentLocale); this.el.nativeElement.textContent = translation; }; if (locale) { onTranslation(locale); } else { this.l10nService.current.subscribe(onTranslation); } } getMessage() { if (!isDefined(this.l10n)) { throw invalidParamater('key in L10nDirective.'); } const source = isDefined(this.source) ? this.source : this.l10nService.getSourceString(this.l10n); if (!this.onTranslationChange) { this.onTranslationChange = this.l10nService.onLocaleChange.subscribe((locale) => { this.updateValue(this.l10n, source, this.params, locale); }); } this.updateValue(this.l10n, source, this.params); } ngOnDestroy() { if (typeof this.onTranslationChange !== 'undefined') { this.onTranslationChange.unsubscribe(); this.onTranslationChange = undefined; } } } L10nDirective.decorators = [ { type: Directive, args: [{ selector: '[l10n]' },] } ]; L10nDirective.ctorParameters = () => [ { type: ElementRef }, { type: L10nService } ]; L10nDirective.propDecorators = { l10n: [{ type: Input, args: ['l10n',] }], source: [{ type: Input }], comment: [{ type: Input }], params: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDEwbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcmxpZ2VuZy9Qcm9qZWN0cy9EZXZvcHMvQ2xpZW50X0FuZ3VsYXJfR2l0SHViX05wbWpzL3ZpcC9jaS9wdWIyb3JnL0NsaWVudF9Bbmd1bGFyX0dpdEh1Yl9OcG1qcy9zaW5nbGV0b24vcHJvamVjdHMvYW5ndWxhci1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvbDEwbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNuQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFNaEQsTUFBTSxPQUFPLGFBQWE7SUFRdEIsWUFBb0IsRUFBYyxFQUN0QixXQUF3QjtRQURoQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUksQ0FBQztJQUV6QyxlQUFlO1FBQ1gsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBRSxJQUFjLEVBQUUsTUFBZTtRQUNwRSxNQUFNLGFBQWEsR0FBRyxDQUFDLGFBQXFCLEVBQUUsRUFBRTtZQUM1QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ3BELENBQUMsQ0FBQztRQUNGLElBQUksTUFBTSxFQUFFO1lBQ1IsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3pCO2FBQU07WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDckQ7SUFDTCxDQUFDO0lBRUQsVUFBVTtRQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUNuRDtRQUNELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzNCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQ2hFLENBQUMsTUFBYyxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzdELENBQUMsQ0FDSixDQUFDO1NBQ0w7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksT0FBTyxJQUFJLENBQUMsbUJBQW1CLEtBQUssV0FBVyxFQUFFO1lBQ2pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO1NBQ3hDO0lBQ0wsQ0FBQzs7O1lBbERKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsUUFBUTthQUNyQjs7O1lBUm1CLFVBQVU7WUFDckIsV0FBVzs7O21CQVVmLEtBQUssU0FBQyxNQUFNO3FCQUNaLEtBQUs7c0JBQ0wsS0FBSztxQkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE5LTIwMjEgVk13YXJlLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTDEwblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2wxMG4uc2VydmljZSc7XG5pbXBvcnQgeyBpc0RlZmluZWQgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgaW52YWxpZFBhcmFtYXRlciB9IGZyb20gJy4vZXhjZXB0aW9ucyc7XG5cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbbDEwbl0nXG59KVxuZXhwb3J0IGNsYXNzIEwxMG5EaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCdsMTBuJykgbDEwbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHNvdXJjZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbW1lbnQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwYXJhbXM6IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgb25UcmFuc2xhdGlvbkNoYW5nZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBsMTBuU2VydmljZTogTDEwblNlcnZpY2UpIHsgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLmdldE1lc3NhZ2UoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVWYWx1ZShrZXk6IHN0cmluZywgc291cmNlOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdLCBsb2NhbGU/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgb25UcmFuc2xhdGlvbiA9IChjdXJyZW50TG9jYWxlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy5sMTBuU2VydmljZS50cmFuc2xhdGUoa2V5LCBzb3VyY2UsIGFyZ3MsIGN1cnJlbnRMb2NhbGUpO1xuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50ID0gdHJhbnNsYXRpb247XG4gICAgICAgIH07XG4gICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgIG9uVHJhbnNsYXRpb24obG9jYWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubDEwblNlcnZpY2UuY3VycmVudC5zdWJzY3JpYmUob25UcmFuc2xhdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRNZXNzYWdlKCkge1xuICAgICAgICBpZiAoIWlzRGVmaW5lZCh0aGlzLmwxMG4pKSB7XG4gICAgICAgICAgICB0aHJvdyBpbnZhbGlkUGFyYW1hdGVyKCdrZXkgaW4gTDEwbkRpcmVjdGl2ZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3VyY2UgPSBpc0RlZmluZWQodGhpcy5zb3VyY2UpID8gdGhpcy5zb3VyY2UgOiB0aGlzLmwxMG5TZXJ2aWNlLmdldFNvdXJjZVN0cmluZyh0aGlzLmwxMG4pO1xuICAgICAgICBpZiAoIXRoaXMub25UcmFuc2xhdGlvbkNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5vblRyYW5zbGF0aW9uQ2hhbmdlID0gdGhpcy5sMTBuU2VydmljZS5vbkxvY2FsZUNoYW5nZS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKGxvY2FsZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy5sMTBuLCBzb3VyY2UsIHRoaXMucGFyYW1zLCBsb2NhbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh0aGlzLmwxMG4sIHNvdXJjZSwgdGhpcy5wYXJhbXMpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMub25UcmFuc2xhdGlvbkNoYW5nZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMub25UcmFuc2xhdGlvbkNoYW5nZS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5vblRyYW5zbGF0aW9uQ2hhbmdlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19