获取 NGX 翻译以在 NX 工作区库中工作

Get NGX translate to work in a NX workspace lib

我正在尝试让应用程序组件和库组件的翻译工作。现在我只能让 app 或 lib 组件工作,但不能同时工作。

结构:

如果我在 libs/features/ui/ui.module.ts:

中添加 import TranslateModule 和 provider,我可以使应用程序中的 home 组件正常工作
@NgModule({
  imports: [
    ReactiveFormsModule,
    FormsModule,
    CommonModule,
    ToastrModule.forRoot(),
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: createTranslateLoader,
        deps: [HttpClient]
     }
})],
providers: [
  {
      provide: APP_INITIALIZER,
      useFactory: appInitializerFactory,
      deps: [TranslateService, Injector],
      multi: true
  }
],
declarations: [LoginComponent],
exports: [
  LoginComponent
]
})

现在登录的翻译工作正常,但主页组件只是写出翻译密钥 "home.greet"

如果我在 libs/core/core.module.ts

中添加相同的导入 TranslateModule 和提供者,我也可以使应用程序中的登录组件正常工作

如果我同时在两个不同的地方添加代码,登录只会翻译,但home组件再次写出翻译密钥"home.greet"

而且初始化它两次似乎是错误的,那么我应该把我的导入和翻译提供者放在哪里,我应该如何设法在这两个地方翻译?

我能够通过以下步骤解决同样的问题:

  1. 在 lib->feature->src->assets->i18n 文件夹中维护特定于 lib 的翻译。
  2. 更新 angular.json app->architect->build->options->assets

    { "input": "libs/feature/src/assets/i18n", "glob": "*.json", "output": "assets/i18n/feature" }

  3. 更新 Lib->feature.module 中的翻译模块 forChild()

TranslateModule.forChild({
          loader: {
            provide: TranslateLoader,
            useFactory: (http: HttpClient) => {
              return new TranslateHttpLoader(
                http,
                `${environment.i18nPrefix}/assets/i18n/feature/`,
                '.json'
              );
            },
            deps: [HttpClient]
          },
          isolate: true
        })

  1. 在功能模块中触发以下效果

 setTranslateServiceLanguage$ = createEffect(
    () =>
      this.store.pipe(
        select(selectSettingsLanguage),
        distinctUntilChanged(),
        tap(language => this.translateService.use(language))
      ),
    { dispatch: false }
  );

感谢 tomastrajan 的以下回购 https://github.com/tomastrajan/angular-ngrx-material-starter