使用@ngx-translate 时如何捕获未翻译的键

pen*_*e89 0 typescript angular

我需要编辑库@ngx-translate/core 的管道,以了解哪些词没有被翻译并保存以将它们发送到单独的服务中

export class MyMissingTranslationHandler implements MissingTranslationHandler {
    handle (params: MissingTranslationHandlerParams) {
        if (params.translateService.currentLang === params.translateService.defaultLang) {
            return 'not translate';
        }
    }
  }

@NgModule ({
    imports: [
        BrowserModule,
        HttpClientModule,
        BrowserAnimationsModule,
        RouterModule.forRoot (appRoutes),
        SharedModule,
        FuseMainModule,
        TranslateModule.forRoot ({
            loader: {
                provide: TranslateLoader,
                useFactory: HttpLoaderFactory,
                deps: [HttpClient]
            },
            missingTranslationHandler: {provide: MissingTranslationHandler, useClass: MyMissingTranslationHandler}
        }),
Run Code Online (Sandbox Code Playgroud)

目前,这导致在没有翻译的单词中,将它们替换为“未翻译”一词,而我需要的是捕获无法翻译的单词。

我试图修改文件 translate.pipe.d.ts,但我不知道如何获得该值。真的非常感谢能帮助我的人

PeS*_*PeS 8

好的,它来了。MissingTranslationHandler按照评论中的说明使用。

@Injectable()
export class MyMissingTranslationHandler implements MissingTranslationHandler {
  handle(params: MissingTranslationHandlerParams) {
    this.nts.notTranslated(params.key);
    return '[MISSING]' + params.key;
  }

  constructor(private nts: NotTranslatedService) {}
}
Run Code Online (Sandbox Code Playgroud)

初始化TranslateModule为:

TranslateModule.forRoot ({
        loader: {
            provide: TranslateLoader,
            useFactory: HttpLoaderFactory,
            deps: [HttpClient]
        },
        missingTranslationHandler: {
            provide: MissingTranslationHandler,
            useClass: MyMissingTranslationHandler,
            deps: [NotTranslatedService]
        }
    })
Run Code Online (Sandbox Code Playgroud)

...和服务:

@Injectable({
  providedIn: 'root'
})
export class NotTranslatedService {
  ...
  notTranslated(key: string) {
     console.log('Not translated', key);
     // do whatever you want...
  }
}
Run Code Online (Sandbox Code Playgroud)