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} })