angular的坑永遠都是那麼多,固然了,主要仍是我太菜~html
基於ngx-translate實現多語言切換這個功能,我又是折騰了好久,下面是我實現的過程:git
一、安裝ngx-translategithub
須要安裝@ngx-translate/core和@ngx-translate/http-loader,個人問題主要出在這個,angular的版本不一樣,要安裝對應組件的版本也不一樣。npm
能夠到官網查看對應版本的說明:https://github.com/ngx-translate/corejson
我本地用的是angular5,使用最新的版本,會報錯。。bootstrap
針對angular5版本的組件安裝命令是:app
npm install @ngx-translate/core@9.1.1 --save
npm install @ngx-translate/http-loader@2.0.1 --save
若是你用的不是angular5,能夠到下面對應的changelog頁面,查找對應的版本號:ide
https://github.com/ngx-translate/core/releasesspa
https://github.com/ngx-translate/http-loader/releasescode
二、修改app.module.ts,添加對ngx-translate的支持
引入:
import { HttpClientModule,HttpClient } from '@angular/common/http'; import {TranslateModule,TranslateLoader} from '@ngx-translate/core'; import {TranslateHttpLoader} from '@ngx-translate/http-loader';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
HttpClientModule, TranslateModule.forRoot({ loader: { provide: TranslateLoader, useFactory: HttpLoaderFactory, deps: [HttpClient] } })
],
providers: [],
bootstrap: [AppComponent]
})
三、修改app.component.ts,添加對ngx-translate的支持
引入ngx-translate:
import {TranslateService} from '@ngx-translate/core';
初始化(紅色內容爲添加內容):
constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen,public translate: TranslateService) { platform.ready().then(() => { // Okay, so the platform is ready and our plugins are available. // Here you can do any higher level native things you might need. statusBar.styleDefault(); splashScreen.hide(); translate.addLangs(["zh", "en"]); translate.setDefaultLang('zh'); const browserLang = translate.getBrowserLang(); translate.use(browserLang.match(/zh|en/) ? browserLang : 'zh'); });
四、添加語言資源文件:
添加en.json和zh.json文件,這兩個文件要建在:
項目根目錄-》src-》assets-》i18n目錄下,個人en.json文件內容以下:
zh.json文件內容以下:
五、在html頁面中能夠引入資源
{{'search' | translate}}
{{'home.firstPage' | translate}}
search和home.firstPage是資源的名稱
官方參考例子:https://stackblitz.com/github/ngx-translate/example