【发布时间】:2021-12-01 19:09:44
【问题描述】:
我是使用 Angular 的初学者,我对这个框架提供的众多可能性感到非常满意。但是有些库像 ngx-Translate 一样很难使用。
情况:
我从一个创意模板开始,它在 app-component 和其他组件之间使用中间层 (admin-layout.component.html): [文件说明][1]
<div class="wrapper">
<div class="sidebar">
<app-sidebar></app-sidebar>
</div>
<div class="main-panel">
<app-navbar></app-navbar>
<app-select-language></app-select-language>
<router-outlet></router-outlet>
<app-footer></app-footer>
</div>
</div>
我的目标是设置我的 web 应用程序的内部化。最初加载应用程序时,我已经成功使用了浏览器语言(英语或法语)
现在,我正在尝试使我的选择语言组件具有功能性,该组件旨在通过用户选择来切换整个应用程序语言:
import { Component } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-select-language',
template: `
<select #langSelect (change)="translate.use(langSelect.value)">
<option
*ngFor="let lang of translate.getLangs()"
[value]="lang"
[attr.selected]="lang === translate.currentLang ? '' : null"
>{{lang}}</option>
</select>
`,
})
export class SelectLanguageComponent {
constructor(public translate: TranslateService) {}
}
当做出选择时,app-module 已到达并传输了 lang 参数,但我找不到用其他语言重新编写页面的方法...
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { NgModule, APP_INITIALIZER, Injector } from "@angular/core";
import { FormsModule } from "@angular/forms";
import { HttpClientModule, HttpClient } from "@angular/common/http";
import { RouterModule } from "@angular/router";
import { ToastrModule } from 'ngx-toastr';
import { TranslateModule, TranslateLoader, TranslateService, DEFAULT_LANGUAGE } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
// import {MultiTranslateHttpLoader} from 'ngx-translate-multi-http-loader';
import { AppComponent } from "./app.component";
import { AdminLayoutComponent } from "./layouts/admin-layout/admin-layout.component";
import { AuthLayoutComponent } from './layouts/auth-layout/auth-layout.component';
import { NgbModule } from "@ng-bootstrap/ng-bootstrap";
import { AppRoutingModule } from "./app-routing.module";
import { ComponentsModule } from "./components/components.module";
NgModule({
declarations: [
AppComponent
],
imports: [
TranslateModule.forRoot()
]
})
export function HttpLoaderFactory(httpClient: HttpClient) {
return new TranslateHttpLoader(httpClient);
//return new TranslateHttpLoader(httpClient,
//environment.feServerUrl + '/assets/i18n/', '.json');
}
export function translateFactory(translate: TranslateService) {
return async () => {
translate.getBrowserLang();
// selection de la langue du navigateur :
const langue = translate.getBrowserLang();
translate.setDefaultLang(langue);
translate.use(langue);
translate.addLangs(['fr', 'en']);
const supportedLangs = ["en", "fr"];
supportedLangs.forEach((language) => {
translate.reloadLang(language);
});
return new Promise<any>(resolve => {
translate.onLangChange.subscribe((lang) => {
this.useDefaultLang == false;
// Called by the select-language.component
this.currentLang = lang.lang;
console.log("this.currentLang", this.currentLang);
// translate.setTranslation(lang.lang, DEFAULT_LANGUAGE);
// translate.setDefaultLang(this.currentLang);
// translate.reloadLang(this.currentLang);
translate.use(this.currentLang);
resolve(this.currentLang);
});
});
};
}
@NgModule({
imports: [
BrowserAnimationsModule,
FormsModule,
HttpClientModule,
ComponentsModule,
NgbModule,
RouterModule,
AppRoutingModule,
ToastrModule.forRoot(),
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
})
],
declarations: [AppComponent, AdminLayoutComponent, AuthLayoutComponent],
providers: [
{
provide: APP_INITIALIZER,
useFactory: translateFactory,
deps: [TranslateService, Injector],
multi: true
},
],
bootstrap: [AppComponent]
})
export class AppModule {
}
所有注释的代码都是不起作用的函数!
提前感谢您提供的帮助。
@+
【问题讨论】:
标签: angular typescript internationalization multilingual ngx-translate