My App是基于JHipster因此语言服务是通过以下方式提供的智语言服务 in the ng-jhipster
库使用了一个Jhi配置服务配置ngx-translate
无需我在我的中导入和配置 TranslateModuleapp.module
。所以当我添加TranslateModule.forRoot(...)
对于 AppModule 的导入,一切都崩溃了,我到处都看到“未找到翻译...”消息。
我不知道如何使我的延迟加载页面使用与应用程序的急切加载部分相同的翻译服务实例,以便更改导航栏急切加载组件中的语言会影响延迟加载的页面使用的语言- 加载的页面。
我调查过这个想法 and 这个想法但他们都规定在 AppModule 中配置 TranslateModule 这会破坏它,而且我不知道如何在 JHipster 应用程序中控制 ngx-translate 配置。
我通过将BehaviorSubject 添加到 JhiLanguageHelper 服务,设法修复了延迟加载模块中的翻译。
@Injectable()
export class JhiLanguageHelper {
renderer: Renderer2 = null;
private _language: BehaviorSubject<string>;
constructor(
private translateService: TranslateService,
private rootRenderer: RendererFactory2,
private findLanguageFromKeyPipe: FindLanguageFromKeyPipe,
private titleService: Title,
private router: Router
) {
this._language = new BehaviorSubject<string>(this.translateService.currentLang);
this.renderer = rootRenderer.createRenderer(document.querySelector('html'), null);
this.init();
}
getAll(): Promise<any> {
return Promise.resolve(LANGUAGES);
}
get language(): Observable<string> {
return this._language.asObservable();
}
updateTitle(titleKey?: string) {
if (!titleKey) {
titleKey = this.getPageTitle(this.router.routerState.snapshot.root);
}
this.translateService.get(titleKey).subscribe((title) => {
this.titleService.setTitle(title);
});
}
private init() {
this.translateService.onLangChange.subscribe((event: LangChangeEvent) => {
this._language.next(this.translateService.currentLang);
this.renderer.setAttribute(document.querySelector('html'), 'lang', this.translateService.currentLang);
this.updateTitle();
this.updatePageDirection();
});
}
private getPageTitle(routeSnapshot: ActivatedRouteSnapshot) {
let title: string = (routeSnapshot.data && routeSnapshot.data['pageTitle']) ? routeSnapshot.data['pageTitle'] : 'hcmGatewayApp';
if (routeSnapshot.firstChild) {
title = this.getPageTitle(routeSnapshot.firstChild) || title;
}
return title;
}
private updatePageDirection() {
this.renderer.setAttribute(document.querySelector('html'), 'dir', this.findLanguageFromKeyPipe.isRTL(this.translateService.currentLang) ? 'rtl' : 'ltr');
}
}
您可以像这样订阅模块中的BehaviorSubject。
export class YourModule {
constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) {
this.languageHelper.language.subscribe((languageKey: string) => this.languageService.changeLanguage(languageKey));
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)