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
JavaScript
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=