UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

100 lines 14.6 kB
import { Injectable, Inject } from '@angular/core'; import { mapValues, each } from 'lodash-es'; import { HOOK_PATTERN_MESSAGES } from './patterns-message.hook'; import { formatDate } from '@angular/common'; import * as i0 from "@angular/core"; /** * A service to translate messages by using regexp patterns. */ export class PatternMessagesService { constructor(patterns) { this.patterns = {}; this.pipes = { absoluteDate: (date) => formatDate(date, 'medium', this.translateService.currentLang), translate: key => this.translateService.instant(key) }; each(patterns, pattern => { Object.assign(this.patterns, pattern); }); } translate(message) { const translation = this.translateWithPatterns(message); return translation !== message ? translation : ''; } translateWithPatterns(message, patterns = this.patterns) { let translatedMessage = message; each(patterns, (patternCfg, pattern) => { const globalRegExp = new RegExp(pattern, 'g'); let globalMatch; if (!globalRegExp.test(translatedMessage)) { return; } globalRegExp.test(''); // reset the regexp globalMatch = globalRegExp.exec(translatedMessage); while (globalMatch !== null) { const [localMatch] = globalMatch; const placeholderValues = mapValues(patternCfg.placeholders, placeholder => { const expr = placeholder.capture || placeholder; let replacement = localMatch.replace(new RegExp(pattern, 'g'), expr); if (placeholder.translate) { replacement = this.translateWithPatterns(replacement, placeholder.translate); } return replacement; }); translatedMessage = translatedMessage.replace(localMatch, this.translateWithParams(patternCfg, placeholderValues)); globalMatch = globalRegExp.exec(translatedMessage); } }); return translatedMessage; } translateWithParams(patternCfg, params = {}) { const { defaultLang, currentLang, compiler } = this.translateService; const translations = this.translateService.store.translations[currentLang]; const defaultTranslations = this.translateService.store.translations[defaultLang]; const originalKey = patternCfg.gettext; let originalValue = originalKey; if (translations) { if (translations[originalKey]) { originalValue = translations[originalKey]; } else if (defaultTranslations) { if (defaultTranslations[originalKey]) { originalValue = defaultTranslations[originalKey]; } } } let key = originalKey; let value = originalValue; const interpolateParams = { ...params, noPatternMessages: true }; let match; const pipeRegex = RegExp('{{\\s*([^\\s]+)\\s*\\|\\s*([^\\s]+)\\s*}}', 'g'); // tslint:disable-next-line:no-conditional-assignment while ((match = pipeRegex.exec(originalKey)) !== null) { const [placeholder, paramName, pipeName] = match; if (this.pipes[pipeName]) { key = key.replace(placeholder, `{{${paramName}}}`); value = value.replace(placeholder, `{{${paramName}}}`); interpolateParams[paramName] = this.pipes[pipeName](params[paramName]); } } if (translations) { translations[key] = compiler.compile(value, currentLang); } return this.translateService.instant(key, interpolateParams); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PatternMessagesService, deps: [{ token: HOOK_PATTERN_MESSAGES }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PatternMessagesService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PatternMessagesService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Inject, args: [HOOK_PATTERN_MESSAGES] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0dGVybi1tZXNzYWdlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9pMThuL3BhdHRlcm4tbWVzc2FnZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRTdDOztHQUVHO0FBSUgsTUFBTSxPQUFPLHNCQUFzQjtJQVNqQyxZQUEyQyxRQUFRO1FBUG5ELGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsVUFBSyxHQUFHO1lBQ04sWUFBWSxFQUFFLENBQUMsSUFBNEIsRUFBRSxFQUFFLENBQzdDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7WUFDL0QsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7U0FDckQsQ0FBQztRQUdBLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFlO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxPQUFPLFdBQVcsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMs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QkFDbkI7OzBCQVVjLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBtYXBWYWx1ZXMsIGVhY2ggfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgSE9PS19QQVRURVJOX01FU1NBR0VTIH0gZnJvbSAnLi9wYXR0ZXJucy1tZXNzYWdlLmhvb2snO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8qKlxuICogQSBzZXJ2aWNlIHRvIHRyYW5zbGF0ZSBtZXNzYWdlcyBieSB1c2luZyByZWdleHAgcGF0dGVybnMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBhdHRlcm5NZXNzYWdlc1NlcnZpY2Uge1xuICB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICBwYXR0ZXJuczogYW55ID0ge307XG4gIHBpcGVzID0ge1xuICAgIGFic29sdXRlRGF0ZTogKGRhdGU6IHN0cmluZyB8IG51bWJlciB8IERhdGUpID0+XG4gICAgICBmb3JtYXREYXRlKGRhdGUsICdtZWRpdW0nLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpLFxuICAgIHRyYW5zbGF0ZToga2V5ID0+IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGtleSlcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEhPT0tfUEFUVEVSTl9NRVNTQUdFUykgcGF0dGVybnMpIHtcbiAgICBlYWNoKHBhdHRlcm5zLCBwYXR0ZXJuID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5wYXR0ZXJucywgcGF0dGVybik7XG4gICAgfSk7XG4gIH1cblxuICB0cmFuc2xhdGUobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSB0aGlzLnRyYW5zbGF0ZVdpdGhQYXR0ZXJucyhtZXNzYWdlKTtcbiAgICByZXR1cm4gdHJhbnNsYXRpb24gIT09IG1lc3NhZ2UgPyB0cmFuc2xhdGlvbiA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2xhdGVXaXRoUGF0dGVybnMobWVzc2FnZSwgcGF0dGVybnMgPSB0aGlzLnBhdHRlcm5zKSB7XG4gICAgbGV0IHRyYW5zbGF0ZWRNZXNzYWdlID0gbWVzc2FnZTtcblxuICAgIGVhY2gocGF0dGVybnMsIChwYXR0ZXJuQ2ZnLCBwYXR0ZXJuKSA9PiB7XG4gICAgICBjb25zdCBnbG9iYWxSZWdFeHAgPSBuZXcgUmVnRXhwKHBhdHRlcm4sICdnJyk7XG4gICAgICBsZXQgZ2xvYmFsTWF0Y2g7XG5cbiAgICAgIGlmICghZ2xvYmFsUmVnRXhwLnRlc3QodHJhbnNsYXRlZE1lc3NhZ2UpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGdsb2JhbFJlZ0V4cC50ZXN0KCcnKTsgLy8gcmVzZXQgdGhlIHJlZ2V4cFxuICAgICAgZ2xvYmFsTWF0Y2ggPSBnbG9iYWxSZWdFeHAuZXhlYyh0cmFuc2xhdGVkTWVzc2FnZSk7XG4gICAgICB3aGlsZSAoZ2xvYmFsTWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgW2xvY2FsTWF0Y2hdID0gZ2xvYmFsTWF0Y2g7XG5cbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJWYWx1ZXMgPSBtYXBWYWx1ZXMocGF0dGVybkNmZy5wbGFjZWhvbGRlcnMsIHBsYWNlaG9sZGVyID0+IHtcbiAgICAgICAgICBjb25zdCBleHByID0gcGxhY2Vob2xkZXIuY2FwdHVyZSB8fCBwbGFjZWhvbGRlcjtcbiAgICAgICAgICBsZXQgcmVwbGFjZW1lbnQgPSBsb2NhbE1hdGNoLnJlcGxhY2UobmV3IFJlZ0V4cChwYXR0ZXJuLCAnZycpLCBleHByKTtcblxuICAgICAgICAgIGlmIChwbGFjZWhvbGRlci50cmFuc2xhdGUpIHtcbiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gdGhpcy50cmFuc2xhdGVXaXRoUGF0dGVybnMocmVwbGFjZW1lbnQsIHBsYWNlaG9sZGVyLnRyYW5zbGF0ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgdHJhbnNsYXRlZE1lc3NhZ2UgPSB0cmFuc2xhdGVkTWVzc2FnZS5yZXBsYWNlKFxuICAgICAgICAgIGxvY2FsTWF0Y2gsXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVXaXRoUGFyYW1zKHBhdHRlcm5DZmcsIHBsYWNlaG9sZGVyVmFsdWVzKVxuICAgICAgICApO1xuXG4gICAgICAgIGdsb2JhbE1hdGNoID0gZ2xvYmFsUmVnRXhwLmV4ZWModHJhbnNsYXRlZE1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0cmFuc2xhdGVkTWVzc2FnZTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNsYXRlV2l0aFBhcmFtcyhwYXR0ZXJuQ2ZnOiBhbnksIHBhcmFtczogYW55ID0ge30pIHtcbiAgICBjb25zdCB7IGRlZmF1bHRMYW5nLCBjdXJyZW50TGFuZywgY29tcGlsZXIgfSA9IHRoaXMudHJhbnNsYXRlU2VydmljZTtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RvcmUudHJhbnNsYXRpb25zW2N1cnJlbnRMYW5nXTtcbiAgICBjb25zdCBkZWZhdWx0VHJhbnNsYXRpb25zID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0b3JlLnRyYW5zbGF0aW9uc1tkZWZhdWx0TGFuZ107XG4gICAgY29uc3Qgb3JpZ2luYWxLZXkgPSBwYXR0ZXJuQ2ZnLmdldHRleHQ7XG5cbiAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsS2V5O1xuICAgIGlmICh0cmFuc2xhdGlvbnMpIHtcbiAgICAgIGlmICh0cmFuc2xhdGlvbnNbb3JpZ2luYWxLZXldKSB7XG4gICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0cmFuc2xhdGlvbnNbb3JpZ2luYWxLZXldO1xuICAgICAgfSBlbHNlIGlmIChkZWZhdWx0VHJhbnNsYXRpb25zKSB7XG4gICAgICAgIGlmIChkZWZhdWx0VHJhbnNsYXRpb25zW29yaWdpbmFsS2V5XSkge1xuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSBkZWZhdWx0VHJhbnNsYXRpb25zW29yaWdpbmFsS2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBrZXkgPSBvcmlnaW5hbEtleTtcbiAgICBsZXQgdmFsdWUgPSBvcmlnaW5hbFZhbHVlO1xuICAgIGNvbnN0IGludGVycG9sYXRlUGFyYW1zID0ge1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgbm9QYXR0ZXJuTWVzc2FnZXM6IHRydWVcbiAgICB9O1xuXG4gICAgbGV0IG1hdGNoO1xuICAgIGNvbnN0IHBpcGVSZWdleCA9IFJlZ0V4cCgne3tcXFxccyooW15cXFxcc10rKVxcXFxzKlxcXFx8XFxcXHMqKFteXFxcXHNdKylcXFxccyp9fScsICdnJyk7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbmRpdGlvbmFsLWFzc2lnbm1lbnRcbiAgICB3aGlsZSAoKG1hdGNoID0gcGlwZVJlZ2V4LmV4ZWMob3JpZ2luYWxLZXkpKSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgW3BsYWNlaG9sZGVyLCBwYXJhbU5hbWUsIHBpcGVOYW1lXSA9IG1hdGNoO1xuICAgICAgaWYgKHRoaXMucGlwZXNbcGlwZU5hbWVdKSB7XG4gICAgICAgIGtleSA9IGtleS5yZXBsYWNlKHBsYWNlaG9sZGVyLCBge3ske3BhcmFtTmFtZX19fWApO1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocGxhY2Vob2xkZXIsIGB7eyR7cGFyYW1OYW1lfX19YCk7XG4gICAgICAgIGludGVycG9sYXRlUGFyYW1zW3BhcmFtTmFtZV0gPSB0aGlzLnBpcGVzW3BpcGVOYW1lXShwYXJhbXNbcGFyYW1OYW1lXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRyYW5zbGF0aW9ucykge1xuICAgICAgdHJhbnNsYXRpb25zW2tleV0gPSBjb21waWxlci5jb21waWxlKHZhbHVlLCBjdXJyZW50TGFuZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChrZXksIGludGVycG9sYXRlUGFyYW1zKTtcbiAgfVxufVxuIl19