更新 Angular 12+
- 创建一个新的自定义翻译加载器
// loader/customTranslate.loader.ts
import { TranslateLoader } from '@ngx-translate/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { catchError } from 'rxjs/operators';
const LOCAL_URL = 'http://your.url.blanik.me/api';
export class CustomTranslateLoader implements TranslateLoader {
constructor(private httpClient: HttpClient) {}
getTranslation(lang: string): Observable<any> {
const url = `${LOCAL_URL}/assets/i18n/${lang}.json`;
return this.httpClient.get(url).pipe(catchError((_) => this.httpClient.get(`/assets/i18n/en.json`)));
}
}
- 更新 Angular 应用程序模块
// app.module.ts
// {...}
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { HttpClient } from '@angular/common/http';
import { CustomTranslateLoader } from './loader/customTranslate.loader';
@NgModule({
declarations: [AppComponent, OtherComponent],
imports: [
BrowserModule,
// ...
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: CustomTranslateLoader,
deps: [HttpClient],
},
}),
],
providers: [],
bootstrap: [AppComponent],
})
export class AppModule {}
- 将语言切换添加到您的组件
<select class="form-control" #langauge (change)="translateSite(langauge.value)">
<option *ngFor="let localization of translateService.getLangs()" [value]="localization"
[selected]="localization === translateService.currentLang">
{{ localization }}
</option>
</select>
import { Component, OnInit } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent{
title = 'your-app-name';
constructor(public translateService: TranslateService) {
translateService.addLangs(['en', 'fr', 'pl']);
translateService.setDefaultLang('en');
}
translateSite(langauge: string) {
this.translateService.use(langauge);
}
}
请记住在您的服务器上设置正确的 CORS 和/或(推荐)将您的翻译文件保存在同一个域下。
不要在httpClient
. 否则,浏览器将阻止读取文件。
干杯!