Vyhledávání na webu

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