首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ngx-translate如何隔离翻译服务

ngx-translate如何隔离翻译服务
EN

Stack Overflow用户
提问于 2020-03-16 16:16:49
回答 1查看 1.5K关注 0票数 1

我的目标是将包含另一个组件的模块导入到我的angular应用程序中。导入的模块可以在各种应用程序中使用,并且还应该支持不同的语言。在将模块导入到angular项目中时,开发人员不应该关心转换文件,为此,我使用以下配置将ngx-translate中的TranslateModule导入到该子模块中:

代码语言:javascript
复制
import {ModuleWithProviders, NgModule, Optional, SkipSelf} from '@angular/core';
import {HttpClient, HttpClientModule} from '@angular/common/http';
import {RouterModule, Routes} from '@angular/router';
import { LoginMaskComponent } from './login/login.component';
import { SettingsComponent } from './settings/settings.component';
import {ValidationGuard} from './validation.guard';
import {OtLoginServiceConfiguration} from './ot-login.service';
import {CommonModule} from '@angular/common';
import {TranslateLoader, TranslateModule} from '@ngx-translate/core';
import {TranslateHttpLoader} from '@ngx-translate/http-loader';

const LOGIN_ROUTES: Routes = [
  { path: 'login', component: LoginMaskComponent },
  { path: 'settings', component: SettingsComponent, canActivate: [ValidationGuard] }
];

@NgModule({
  declarations: [
    LoginMaskComponent,
    SettingsComponent
  ],
    imports: [
        RouterModule.forChild(LOGIN_ROUTES),
        HttpClientModule,
        TranslateModule.forChild({
          loader: {
            provide: TranslateLoader,
            useFactory: (createTranslateLoader),
            deps: [ HttpClient ]
          },
          isolate: true
        }),
        CommonModule
    ],
  exports: [
    LoginMaskComponent,
    SettingsComponent
  ]
})

export class OtLoginModule {}

export function createTranslateLoader(http: HttpClient) {
  return new TranslateHttpLoader(http, './assets/i18n/login/');
}

在使用此子模块的angular项目中,TranslateModule配置如下所示:

代码语言:javascript
复制
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { OtLoginModule } from 'ot-login';
import {HttpClient, HttpClientModule} from '@angular/common/http';
import {TranslateHttpLoader} from '@ngx-translate/http-loader';
import {TranslateLoader, TranslateModule} from '@ngx-translate/core';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    HttpClientModule,
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: (createTranslateLoader),
        deps: [ HttpClient ]
      },
      isolate: true
    }),
    OtLoginModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

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

但现在我仍然面临这样的问题,即将使用angular应用程序的翻译,而不是子模块的翻译。我做错了什么?有人能帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2020-03-16 18:45:36

要使其正常工作,您应该转到lazy loaded modules。没有这一点,它就不会工作。

请参见this post from Fabien,以及这个带有Angular 8的working example on GitHub

但也要注意,在这种设计中,您必须为每个模块设置默认语言。当然,每个模块都会获取自己的翻译,因此可能会影响性能(网络延迟)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60702428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档