1

ng2-translate not working with custom TranslateLoader when fetching data from API. Below is my custom TranslateLoader

translateCustomLoader.ts

@Injectable()
export class CustomTranslateLoader implements TranslateLoader  {

    constructor(private http: Http, private apiService: AuthHttp) { console.log("customer loader initialized"); }

    getTranslation(lang: string): Observable<any>{
        var apiAddress = "http://test.com/api/gettranslationsfromDB?culture=" + lang;

        return this.apiService.get(apiAddress).map((res) => res.json());

        //return Observable.of({ "hello": "translatedhello","welcome":"translatedwelcome"});
    }
}

Response from API is

{ "hello": "translatedhello","welcome":"translatedwelcome"}

Added TranslateLoader to providers in app.module.ts

providers: [CustomTranslateLoader, { provide: TranslateLoader, useClass: CustomTranslateLoader}]

In my HTML page I have below

<h4>{{ 'hello' | translate }}</h4>

I still see hello getting rendered.This works fine if I replace

return this.apiService.get(apiAddress).map((res) => res.json());

with

return Observable.of({ "hello": "translatedhello","welcome":"translatedwelcome"});

So I am pretty sure there isn't anything wrong with the configuration.What am I missing here?

Ravi A.
  • 2,163
  • 2
  • 18
  • 26

1 Answers1

2

I got it working by changing getTranslation as below

getTranslation(lang: string): Observable<any> {
    var apiAddress = "http://test.com/api/gettranslationsfromDB?culture=" + lang;
    return Observable.create(observer => {
            this.authService.get(apiAddress)
                .subscribe((res: Response) => {
                    observer.next(JSON.parse(res.json()));
                    observer.complete();               
                });
        });

    }

Although doesn't make much sense to me. Hope this helps someone.

Ravi A.
  • 2,163
  • 2
  • 18
  • 26