This repository was archived by the owner on Nov 8, 2021. It is now read-only.
This repository was archived by the owner on Nov 8, 2021. It is now read-only.
Multiple HTTP requests #68
Open
Description
Current behavior
Currently TranslateHttpLoader produces HTTP request every time getTranslation is called.
Expected behavior
TranslateHttpLoader should store state of language file loading and only one HTTP request is made.
How do you think that we should fix this?
This is how I implemented this (proof of concept, it performs only ONE request, everything works and tokens are translated):
private errorState = false;
private waiter = new Subject<Object>();
private requestedLang: string;
getTranslation(lang: string): Observable<Object>
{
if(this.errorState)
return of({});
if(this.requestedLang != null && this.requestedLang == lang)
return this.waiter.asObservable();
let languagPath = `assets/locale/${lang}.json`;
this.requestedLang = lang;
this.http.get(languagPath).pipe(
catchError(error => {
console.warn("can't load language file", languagPath, error);
this.errorState = true;
return of({});
})
).subscribe(result => {
//console.log("translation", lang,"loaded!");
this.waiter.next(result);
});
return this.waiter.asObservable();
}
Minimal reproduction of the problem with instructions
Even standard ngx-translate template calls getTranslation at least two times.
My app got approximately 140 (app with multiple pages and modules) and lots of annoying alerts were displayed in case when translations were not found. If success, other requests fetched (304), but fetch still has delay.
Environment
ngx-translate version: 11.0.1
Angular version: 7.1.4
Browser:
- [x] Chrome (desktop) version XX
For Tooling issues:
- Node version: 10.15
- Platform: Windows
Metadata
Metadata
Assignees
Labels
No labels