import { TRANSLATIONS, TRANSLATIONS_FORMAT, LOCALE_ID, MissingTranslationStrategy } from '@angular/core'; import { CompilerConfig } from '@angular/compiler'; import { Observable } from "rxjs/Rx"; export function getTranslationProviders(): Promise { // Get the locale id from the global const locale = document['locale'] as string; // return no providers if fail to get translation file for locale const noProviders: Object[] = []; // No locale or U.S. English: no translation providers if (!locale || locale === 'en-IN') { return Promise.resolve(noProviders); } // Ex: '/clari5-cc/cc/app/locale/messages.fa-IR..xliff2.xlf` const translationFile = `/clari5-cc/cc/app/locale/messages.${locale}.xliff2.xlf`; return getTranslationsWithRxjs(translationFile) .then( (translations: string ) => [ { provide: TRANSLATIONS, useValue: translations }, { provide: TRANSLATIONS_FORMAT, useValue: 'xlf2' }, { provide: LOCALE_ID, useValue: locale }, ]) .catch(() => noProviders); // ignore if file not found } declare var System: any; //modified as per https://stackoverflow.com/a/43369141/41284 and no longer using systemjs function getTranslationsWithRxjs(file: string) { // changes Start here var text = ""; var fileRequest = new XMLHttpRequest(); fileRequest.open("GET", file, false); console.log("after opening fileRequest GET for " + file); fileRequest.onerror = function (err) { console.log(err); } fileRequest.onreadystatechange = function () { if (fileRequest.readyState === 4) { if (fileRequest.status === 200 || fileRequest.status == 0) { text = fileRequest.responseText; } } } console.log("before fileRequest send for " + file); fileRequest.send() console.log("after fileRequest send for " + file); var observable = Observable.of(text); console.log("after creating observable " + file); var prom = observable.toPromise(); console.log("after creating promise " + file); return prom; }