在服务中使用Angular ngx-translate

3

我正在使用ngx-translate和ngx-translate/http-loader为我的ionic/angular项目进行翻译。我在app.module.ts的引入中有如下代码:

TranslateModule.forRoot({
  loader: {
    provide: TranslateLoader,
    useFactory: (createTranslateLoader),
    deps: [HttpBackend]
  }
})

同时在同一文件中还有这个加载函数:

export function createTranslateLoader(handler: HttpBackend) {
     const http = new HttpClient(handler);
     return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}

这让我有机会在组件的html中使用这种翻译语法:{{ 'TEXT' | translate }},我还可以像这样写一些东西来翻译组件的ts文件:var text = this.translateService.instant("TEXT"); 现在我想在通过命令“ng generate s”生成的服务中使用translateService.instant,但我尝试了一下,它不起作用,返回的是"TEXT"本身。那么问题出在哪里?
4个回答

2
尝试使用this.translateService.get("TEXT").subscribe(...)进行翻译。详见:https://github.com/ngx-translate/core#4-use-the-service-the-pipe-or-the-directive
instant(key: string|Array, interpolateParams?: Object):获取一个键(或键数组)的瞬时翻译值。/!\此方法是同步的,而默认文件加载器是异步的。您需要知道何时已加载翻译并且可以安全地使用此方法。如果不确定,则应改用get方法。

0

我曾经遇到过同样的问题,但我在命令生成的服务构造函数中添加了语言并解决了这个问题。

constructor(
    private translate: TranslateService,
  ) {
    this.translate.use(environment.lang);
  }

0
如果我理解正确,那么在您新生成的服务中,您只需要注入翻译服务即可:
constructor(translateService: TranslateService) {}

是的,我确实这样做了,但我认为我在app.module.ts中编写的配置仅适用于组件而不适用于服务。 - Nika Kurashvili
以下是有关“Translate”服务的详细说明,这可能会对你有所帮助。https://www.codeandweb.com/babeledit/tutorials/how-to-translate-your-angular7-app-with-ngx-translate - Gergő Kajtár

0

首先在您的服务构造函数中注入翻译服务:

constructor(public translateService: TranslateService) {}

然后使用它来获取当前语言的翻译:

this.translateService.getTranslation(this.translateService.currentLang).subscribe((translation: string) => { this.translationText= translation.text; });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接