typescript - Angular ngx-translate uvnitř služby
Používám ngx-translate a ngx-translate/http-loader pro překlad svého projektu v Ionic/Angular. Mám tento kód uvnitř imports v app.module.ts:
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: (createTranslateLoader),
deps: [HttpBackend]
}
})
a tato funkce načítání ve stejném souboru:
export function createTranslateLoader(handler: HttpBackend) {
const http = new HttpClient(handler);
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}
To mi dává příležitost použít tento typ překladové syntaxe uvnitř HTML komponenty: {{ 'TEXT' | translate }}, také mohu napsat něco takového pro překlad uvnitř souboru TS komponenty: var text=this.translateService.instant("TEXT");
Teď chci použít translateService.instant uvnitř služby vytvořené příkazem "ng generate s". Zkoušel jsem to, ale nefunguje to, vrací to samo "TEXT". Tak kde je problém?
Odpověď č. 1
zkuste this.translateService.get("TEXT").subscribe(...)
viz: https://github.com/ngx-translate/core#4-use-the-service-the-pipe-or-the-directive
instant(key: string|Array, interpolateParams?: Object): string|Object: Získá okamžitě přeloženou hodnotu klíče (nebo pole klíčů). /!\ Tato metoda je synchronní a výchozí načítání souborů je asynchronní. Je na vás, abyste věděli, kdy jsou vaše překlady načteny a kdy je bezpečné tuto metodu použít. Pokud si nejste jisti, měli byste místo toho použít metodu get.
Odpověď č. 2
Pokud chápu správně, pak ve vaší nově vygenerované službě musíte jednoduše injektovat službu pro překlad:
constructor(translateService: TranslateService) {}
