UNPKG

ngx-translate-formatjs-compiler

Version:

[Format.js](https://formatjs.io/) based [@ngx/translate](https://github.com/ngx-translate/core) compiler.

48 lines 5.64 kB
import { Injectable } from '@angular/core'; import { TranslateCompiler } from '@ngx-translate/core'; import { IntlMessageFormat } from 'intl-messageformat'; import * as i0 from "@angular/core"; export class TranslateFormatJsCompiler extends TranslateCompiler { /** Compiles single translation */ compile(value, lang) { return (params) => { try { return new IntlMessageFormat(value, lang).format(params); } catch (e) { // eslint-disable-next-line no-console console.error(e); return `ERROR in: "${value}"`; } }; } /** Compile translations object */ compileTranslations(translations, lang) { this.compileRecursively(translations, lang); return translations; } /** * Traverse through object and replace translations strings with compile function. * @param obj to be traversed * @param lang from @ngx-translate * @returns translation object with compile functions. */ compileRecursively(obj, lang) { Object.keys(obj).forEach((key) => { const value = obj[key]; if (typeof value === 'string') { // eslint-disable-next-line no-param-reassign obj[key] = this.compile(value, lang); } else { this.compileRecursively(value, lang); } }); } } TranslateFormatJsCompiler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: TranslateFormatJsCompiler, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); TranslateFormatJsCompiler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: TranslateFormatJsCompiler }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: TranslateFormatJsCompiler, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLWZvcm1hdC1qcy1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNsYXRlLWZvcm1hdC1qcy1jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUd2RCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsaUJBQWlCO0lBQzlELGtDQUFrQztJQUNsQyxPQUFPLENBQ0wsS0FBYSxFQUNiLElBQVk7UUFFWixPQUFPLENBQUMsTUFBWSxFQUFPLEVBQUU7WUFDM0IsSUFBSTtnQkFDRixPQUFPLElBQUksaUJBQWlCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMxRDtZQUFDLE9BQU8sQ0FBTSxFQUFFO2dCQUNmLHNDQUFzQztnQkFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakIsT0FBTyxjQUFjLEtBQUssR0FBRyxDQUFDO2FBQy9CO1FBQ0gsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELGtDQUFrQztJQUNsQyxtQkFBbUIsQ0FBQyxZQUFpQixFQUFFLElBQVk7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QyxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxrQkFBa0IsQ0FBQyxHQUFRLEVBQUUsSUFBWTtRQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV2QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtnQkFDN0IsNkNBQTZDO2dCQUM3QyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDdEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN0QztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7c0hBeENVLHlCQUF5QjswSEFBekIseUJBQXlCOzJGQUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVDb21waWxlciB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSW50bE1lc3NhZ2VGb3JtYXQgfSBmcm9tICdpbnRsLW1lc3NhZ2Vmb3JtYXQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlRm9ybWF0SnNDb21waWxlciBleHRlbmRzIFRyYW5zbGF0ZUNvbXBpbGVyIHtcbiAgLyoqIENvbXBpbGVzIHNpbmdsZSB0cmFuc2xhdGlvbiAqL1xuICBjb21waWxlKFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgbGFuZzogc3RyaW5nLFxuICApOiBzdHJpbmcgfCAoKHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBhbnkpIHtcbiAgICByZXR1cm4gKHBhcmFtcz86IGFueSk6IGFueSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEludGxNZXNzYWdlRm9ybWF0KHZhbHVlLCBsYW5nKS5mb3JtYXQocGFyYW1zKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICByZXR1cm4gYEVSUk9SIGluOiBcIiR7dmFsdWV9XCJgO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKiogQ29tcGlsZSB0cmFuc2xhdGlvbnMgb2JqZWN0ICovXG4gIGNvbXBpbGVUcmFuc2xhdGlvbnModHJhbnNsYXRpb25zOiBhbnksIGxhbmc6IHN0cmluZyk6IGFueSB7XG4gICAgdGhpcy5jb21waWxlUmVjdXJzaXZlbHkodHJhbnNsYXRpb25zLCBsYW5nKTtcbiAgICByZXR1cm4gdHJhbnNsYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlIHRocm91Z2ggb2JqZWN0IGFuZCByZXBsYWNlIHRyYW5zbGF0aW9ucyBzdHJpbmdzIHdpdGggY29tcGlsZSBmdW5jdGlvbi5cbiAgICogQHBhcmFtIG9iaiB0byBiZSB0cmF2ZXJzZWRcbiAgICogQHBhcmFtIGxhbmcgZnJvbSBAbmd4LXRyYW5zbGF0ZVxuICAgKiBAcmV0dXJucyB0cmFuc2xhdGlvbiBvYmplY3Qgd2l0aCBjb21waWxlIGZ1bmN0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgY29tcGlsZVJlY3Vyc2l2ZWx5KG9iajogYW55LCBsYW5nOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgb2JqW2tleV0gPSB0aGlzLmNvbXBpbGUodmFsdWUsIGxhbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb21waWxlUmVjdXJzaXZlbHkodmFsdWUsIGxhbmcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=