Um eine Kompatibilität mit alten Browsern, wie dem Firefox Version <= 5 zu erreichen, kann man das angular http Modul nicht verwenden. Das ngx-translate Module bneötigt einen Loader, der die richtige Sprache lädt per Ajax Request. Dies läst sich auch mit dem XMLHttpRequest und einem Observalbe lösen:
import {Injectable} from '@angular/core';
import {TranslateLoader} from '@ngx-translate/core';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class LanguageLoader implements TranslateLoader {
getTranslation(lang: string): Observable<any> {
return Observable.create(function (observer) {
let url = `./assets/i18n/${lang}.json?=` + new Date().getTime();
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == XMLHttpRequest.DONE || xhr.readyState == 4) {
let response = JSON.parse(xhr.responseText);
observer.next(response);
observer.complete();
}
}
xhr.open('GET', url, true);
xhr.send(null);
});
}
}
In der app.module.ts kann man dann den Loader wie folgt einbinden:
TranslateModule.forRoot({
loader: {provide: TranslateLoader, useClass: LanguageLoader}
})
