This repository was archived by the owner on Nov 8, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 67
This repository was archived by the owner on Nov 8, 2021. It is now read-only.
Multiple HTTP requests #68
Copy link
Copy link
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
evandersar, Akkora and mwmw7
Metadata
Metadata
Assignees
Labels
No labels