systelab-translate
Version:
The internationalization (i18n) library for Systelab
69 lines • 12 kB
JavaScript
import { of as observableOf, forkJoin as observableForkJoin } from 'rxjs';
import { catchError, map } from 'rxjs/operators';
export class LocalizableTranslateStaticLoader {
constructor(http, location) {
this.http = http;
this.location = location;
this.prefix = '';
if (!(window.location.pathname === '/' || window.location.pathname === '/context.html')) {
this.prefix = window.location.pathname;
if (this.prefix.endsWith('index.html')) {
// That's the case of Electron when starting from local file.
this.prefix = this.prefix.substr(0, this.prefix.length - 10);
}
if (this.prefix.endsWith('/')) {
this.prefix = this.prefix.substr(0, this.prefix.length - 1);
}
if (this.prefix.endsWith(this.location.path())) {
// When starting from an Angular application route
this.prefix = this.prefix.substr(0, this.prefix.length - this.location.path().length);
}
this.prefix = (this.prefix !== '') ? this.prefix + '/' : '';
}
}
getTranslation(locale) {
// If the execution is from testing the http access can be avoided with mock translations
if (globalThis.jasmine && globalThis.jasmine['translations']) {
return observableOf(globalThis.jasmine['translations']);
}
const language = locale.split('-')[0];
const country = locale.split('-')[1];
const languageAndCountry = language + '_' + country;
return observableForkJoin([
this.http.get(`${this.prefix}i18n/language/MessagesBundle_${language}.json`).pipe(catchError(() => observableOf({}))),
this.http.get(`${this.prefix}i18n/language/MessagesBundle_${languageAndCountry}.json`).pipe(catchError(() => observableOf({}))),
this.http.get(`${this.prefix}i18n/error/ErrorsBundle_${language}.json`).pipe(catchError(() => observableOf({}))),
this.http.get(`${this.prefix}i18n/error/ErrorsBundle_${languageAndCountry}.json`).pipe(catchError(() => observableOf({}))),
]).pipe(map((translations) => {
if (translations.length > 0) {
let bundles = translations[0];
for (let i = 1; i < translations.length; i++) {
bundles = this.mergeRecursive(bundles, translations[i]);
}
return bundles;
}
else {
return observableOf(undefined);
}
}));
}
mergeRecursive(obj1, obj2) {
for (const p in obj2) {
try {
// Property in destination object set; update its value.
if (obj2[p].constructor === Object) {
obj1[p] = this.mergeRecursive(obj1[p], obj2[p]);
}
else {
obj1[p] = obj2[p];
}
}
catch (e) {
// Property in destination object not set; create it and set its value.
obj1[p] = obj2[p];
}
}
return obj1;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxpemFibGVUcmFuc2xhdGVTdGF0aWNMb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi10cmFuc2xhdGUvc3JjL2xpYi9Mb2NhbGl6YWJsZVRyYW5zbGF0ZVN0YXRpY0xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWMsRUFBRSxJQUFJLFlBQVksRUFBRSxRQUFRLElBQUksa0JBQWtCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUtqRCxNQUFNLE9BQU8sZ0NBQWdDO0lBSTVDLFlBQW9CLElBQWdCLEVBQVUsUUFBa0I7UUFBNUMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUFGdEQsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUdyQixJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUN6RixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ3ZDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsNkRBQTZEO2dCQUM3RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsTUFBTSxHQUFH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QyxDQUFDO2dCQUN6RCxDQUFDO2dCQUNELE9BQU8sT0FBTyxDQUFDO1lBQ2hCLENBQUM7aUJBQU0sQ0FBQztnQkFDUCxPQUFPLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBUyxFQUFFLElBQVM7UUFDMUMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUM7Z0JBQ0osd0RBQXdEO2dCQUN4RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakQsQ0FBQztxQkFBTSxDQUFDO29CQUNQLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLENBQUM7WUFDRixDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWix1RUFBdUU7Z0JBQ3ZFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsQ0FBQztRQUNGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7Q0FFRCIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgYXMgb2JzZXJ2YWJsZU9mLCBmb3JrSm9pbiBhcyBvYnNlcnZhYmxlRm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRyYW5zbGF0ZUxvYWRlciB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuZXhwb3J0IGNsYXNzIExvY2FsaXphYmxlVHJhbnNsYXRlU3RhdGljTG9hZGVyIGltcGxlbWVudHMgVHJhbnNsYXRlTG9hZGVyIHtcblxuXHRwcm90ZWN0ZWQgcHJlZml4ID0gJyc7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbikge1xuXHRcdGlmICghKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSA9PT0gJy8nIHx8IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSA9PT0gJy9jb250ZXh0Lmh0bWwnKSkge1xuXHRcdFx0dGhpcy5wcmVmaXggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XG5cdFx0XHRpZiAodGhpcy5wcmVmaXguZW5kc1dpdGgoJ2luZGV4Lmh0bWwnKSkge1xuXHRcdFx0XHQvLyBUaGF0J3MgdGhlIGNhc2Ugb2YgRWxlY3Ryb24gd2hlbiBzdGFydGluZyBmcm9tIGxvY2FsIGZpbGUuXG5cdFx0XHRcdHRoaXMucHJlZml4ID0gdGhpcy5wcmVmaXguc3Vic3RyKDAsIHRoaXMucHJlZml4Lmxlbmd0aCAtIDEwKTtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLnByZWZpeC5lbmRzV2l0aCgnLycpKSB7XG5cdFx0XHRcdHRoaXMucHJlZml4ID0gdGhpcy5wcmVmaXguc3Vic3RyKDAsIHRoaXMucHJlZml4Lmxlbmd0aCAtIDEpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucHJlZml4LmVuZHNXaXRoKHRoaXMubG9jYXRpb24ucGF0aCgpKSkge1xuXHRcdFx0XHQvLyBXaGVuIHN0YXJ0aW5nIGZyb20gYW4gQW5ndWxhciBhcHBsaWNhdGlvbiByb3V0ZVxuXHRcdFx0XHR0aGlzLnByZWZpeCA9IHRoaXMucHJlZml4LnN1YnN0cigwLCB0aGlzLnByZWZpeC5sZW5ndGggLSB0aGlzLmxvY2F0aW9uLnBhdGgoKS5sZW5ndGgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnByZWZpeCA9ICh0aGlzLnByZWZpeCAhPT0gJycpID8gdGhpcy5wcmVmaXggKyAnLycgOiAnJztcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0VHJhbnNsYXRpb24obG9jYWxlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuXHRcdC8vIElmIHRoZSBleGVjdXRpb24gaXMgZnJvbSB0ZXN0aW5nIHRoZSBodHRwIGFjY2VzcyBjYW4gYmUgYXZvaWRlZCB3aXRoIG1vY2sgdHJhbnNsYXRpb25zXG5cdFx0aWYgKGdsb2JhbFRoaXMuamFzbWluZSAmJiBnbG9iYWxUaGlzLmphc21pbmVbJ3RyYW5zbGF0aW9ucyddKSB7XG5cdFx0XHRyZXR1cm4gb2JzZXJ2YWJsZU9mKGdsb2JhbFRoaXMuamFzbWluZVsndHJhbnNsYXRpb25zJ10pO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxhbmd1YWdlOiBzdHJpbmcgPSBsb2NhbGUuc3BsaXQoJy0nKVswXTtcblx0XHRjb25zdCBjb3VudHJ5OiBzdHJpbmcgPSBsb2NhbGUuc3BsaXQoJy0nKVsxXTtcblxuXHRcdGNvbnN0IGxhbmd1YWdlQW5kQ291bnRyeTogc3RyaW5nID0gbGFuZ3VhZ2UgKyAnXycgKyBjb3VudHJ5O1xuXG5cdFx0cmV0dXJuIG9ic2VydmFibGVGb3JrSm9pbihbXG5cdFx0XHR0aGlzLmh0dHAuZ2V0KGAke3RoaXMucHJlZml4fWkxOG4vbGFuZ3VhZ2UvTWVzc2FnZXNCdW5kbGVfJHtsYW5ndWFnZX0uanNvbmApLnBpcGUoXG5cdFx0XHRcdGNhdGNoRXJyb3IoKCkgPT4gb2JzZXJ2YWJsZU9mKHt9KSkpLFxuXHRcdFx0dGhpcy5odHRwLmdldChgJHt0aGlzLnByZWZpeH1pMThuL2xhbmd1YWdlL01lc3NhZ2VzQnVuZGxlXyR7bGFuZ3VhZ2VBbmRDb3VudHJ5fS5qc29uYCkucGlwZShcblx0XHRcdFx0Y2F0Y2hFcnJvcigoKSA9PiBvYnNlcnZhYmxlT2Yoe30pKSksXG5cdFx0XHR0aGlzLmh0dHAuZ2V0KGAke3RoaXMucHJlZml4fWkxOG4vZXJyb3IvRXJyb3JzQnVuZGxlXyR7bGFuZ3VhZ2V9Lmpzb25gKS5waXBlKFxuXHRcdFx0XHRjYXRjaEVycm9yKCgpID0+IG9ic2VydmFibGVPZih7fSkpKSxcblx0XHRcdHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5wcmVmaXh9aTE4bi9lcnJvci9FcnJvcnNCdW5kbGVfJHtsYW5ndWFnZUFuZENvdW50cnl9Lmpzb25gKS5waXBlKFxuXHRcdFx0XHRjYXRjaEVycm9yKCgpID0+IG9ic2VydmFibGVPZih7fSkpKSxcblx0XHRdKS5waXBlKFxuXHRcdFx0bWFwKCh0cmFuc2xhdGlvbnM6IGFueVtdKSA9PiB7XG5cdFx0XHRcdGlmICh0cmFuc2xhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGxldCBidW5kbGVzID0gdHJhbnNsYXRpb25zWzBdO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgdHJhbnNsYXRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRidW5kbGVzID0gdGhpcy5tZXJnZVJlY3Vyc2l2ZShidW5kbGVzLCB0cmFuc2xhdGlvbnNbaV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gYnVuZGxlcztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JzZXJ2YWJsZU9mKHVuZGVmaW5lZCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pKTtcblx0fVxuXG5cdHByaXZhdGUgbWVyZ2VSZWN1cnNpdmUob2JqMTogYW55LCBvYmoyOiBhbnkpIHtcblx0XHRmb3IgKGNvbnN0IHAgaW4gb2JqMikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Ly8gUHJvcGVydHkgaW4gZGVzdGluYXRpb24gb2JqZWN0IHNldDsgdXBkYXRlIGl0cyB2YWx1ZS5cblx0XHRcdFx0aWYgKG9iajJbcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuXHRcdFx0XHRcdG9iajFbcF0gPSB0aGlzLm1lcmdlUmVjdXJzaXZlKG9iajFbcF0sIG9iajJbcF0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9iajFbcF0gPSBvYmoyW3BdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIFByb3BlcnR5IGluIGRlc3RpbmF0aW9uIG9iamVjdCBub3Qgc2V0OyBjcmVhdGUgaXQgYW5kIHNldCBpdHMgdmFsdWUuXG5cdFx0XHRcdG9iajFbcF0gPSBvYmoyW3BdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb2JqMTtcblx0fVxuXG59XG5cbiJdfQ==