ng2-translate
プラグインの例を作ってみましょう。Angular2:複数のモジュールで1つのモジュールインスタンス
私はルートAppModule
と子供TopPanelModule
とPagesModule
を持っています。
私はAppModule
ためng2-translate
を設定します。 AppComponent
で
@NgModule({
imports: [TranslateModule.forRoot({
provide: TranslateLoader,
useFactory: (http: Http) => new TranslateStaticLoader(http, '/assets/i18n', '.json'),
deps: [Http]
})],
exports: []
})
export class AppModule {
constructor(translateService: TranslateService) {
}
}
私はTranslateModule
のための言語と基本設定を設定します。 TopPanelComponent
、PagesComponent
-
@Component(...)
export class AppComponent {
constructor(translateService: TranslateService) {
translateService.addLangs(["en", "fr"]);
translateService.setDefaultLang('fr');
const browserLang = 'fr';
translateService.use(browserLang.match(/en|fr/) ? browserLang : 'en');
}
}
そして、私は子供たちにTranslateModule
を使用しようとしているコンポーネントをモジュール。それはうまくいきません。パイプがエラーを存在しない、何等の翻訳..この問題を解決するための
ない、私はそれにTranslateModule
を設定し、別のモジュールMyTranslateModule
を作成して、私のPagesModule
とTopPanelModule
にこのモジュールを使用しています。
@NgModule({
imports: [TranslateModule.forRoot({
provide: TranslateLoader,
useFactory: (http: Http) => new TranslateStaticLoader(http, '/assets/i18n', '.json'),
deps: [Http]
})],
exports: [TranslateModule]
})
export class MyTranslateModule {
constructor(translateService: TranslateService) {
translateService.addLangs(["en", "fr"]);
translateService.setDefaultLang('fr');
const browserLang = 'fr';
translateService.use(browserLang.match(/en|fr/) ? browserLang : 'en');
console.log('AdminTrModule: calling');
}
}
と
@NgModule({
imports: [MyTranslateModule]
})
export class PagesModule{
}
@NgModule({
imports: [MyTranslateModule]
})
export class TopPanelModule{
}
これは重要な部分です。それは動作します!しかし、私はそれがTranslateModuleの2つのインスタンスを作成すると思います。したがって、TopComponent
translateService.use('en')
を呼び出すことによってtransalte langaugeを変更すると、言語はTopPanelModule
に変更されますが、PagesModule
では変更されません。
遅延読み込みを使用していますか? –
@GünterZöchbauer、もし私が正しく知っていれば、angular2はデフォルトで遅延ロードを使用します。 –
いいえ、ルートで 'loadChildren'を使用する場合、遅延読み込みが使用されます。 –