Angular 5.0 學習9:Angular i18n(國際化方案)

1、引言

i18n(其來源是英文單詞 internationalization的首末字符i和n,18爲中間的字符數)是「國際化」的簡稱。在資訊領域,國際化(i18n)指讓產品(出版物,軟件,硬件等)無需作大的改變就可以適應不一樣的語言和地區的須要。對程序來講,在不修改內部代碼的狀況下,能根據不一樣語言及地區顯示相應的界面。 在全球化的時代,國際化尤其重要,由於產品的潛在用戶可能來自世界的各個角落。一般與i18n相關的還有L10n(「本地化」的簡稱)。
Angular 將使用 @ngx-translate/core 和 @ngx-translate/http-loader實現國際化方案css

2、實現

1.安裝

請務必根據Angular 版本選擇好對應的版本號,不然會浪費時間。
圖片描述html

npm install @ngx-translate/core@9.1.1 --save
npm install @ngx-translate/http-loader@2.0.1 --save 

2.在app.module.ts配置

// app.module.ts

import {BrowserModule} from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {NgModule} from '@angular/core';
import {AppRoutingModule} from './app-routing.module';
import {FormsModule} from '@angular/forms';
import {HttpClient, HttpClientModule} from '@angular/common/http';
import {TranslateHttpLoader} from '@ngx-translate/http-loader';
import {TranslateLoader, TranslateModule} from '@ngx-translate/core';

// 這裏配置
export function createTranslateHttpLoader(http: HttpClient) {
  return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    FormsModule,
    HttpClientModule,
    BrowserAnimationsModule,
    // 在這裏配置
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: (createTranslateHttpLoader),
        deps: [HttpClient]
      }
    })
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule {
}

3.新建json文件

在assets 新建文件夾 i18n,在i18n文件下下新建zh.json 和 en.json 文件,分別表示中文和英文。npm

//  zh.json  不要在json文件寫註釋,會報錯
{
  "hello": "你好",
  "header": {
    "author": "z哥"
  }
}
//  en.json  不要在json文件寫註釋,會報錯
{
  "hello": "Hello",
  "header": {
    "author": "zhiyu"
  }
}

4.獲取瀏覽器默認語言

app.component.ts 文件獲取瀏覽器默認語言,若是不是英語和中文,就默認設置爲中文。json

import {Component, OnInit} from '@angular/core';
import {TranslateService} from '@ngx-translate/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  title = 'app';

  constructor(public translateService: TranslateService) {
  }

  ngOnInit() {
    /* --- set i18n begin ---*/
    this.translateService.addLangs(['zh', 'en']);
    this.translateService.setDefaultLang('zh');
    const browserLang = this.translateService.getBrowserLang();
    this.translateService.use(browserLang.match(/zh|en/) ? browserLang : 'zh');
    /* --- set i18n end ---*/
  }
}

5.經過以上配置,便可根據瀏覽器語言設置來加載國際化語言

<h1>{{'hello' | translate}}</h1>  
<h1>{{'header.author' | translate}}</h1>  // 嵌套的這樣書寫

6.手動選擇語言

<button (click)="changeLanguage(language)">{{ languageBtn}}</button>
languageBtn;
  language;

  constructor(public translateService: TranslateService) {
  }

  ngOnInit() {
    const browserLang = this.translateService.getBrowserLang();
    this.settingBtn(browserLang);
  }

  /*設置btn的文字和須要傳遞的參數*/
  settingBtn(language: string) {
    if (language === 'zh') {
      this.languageBtn = 'English';
      this.language = 'en';
    } else {
      this.languageBtn = '中文';
      this.language = 'zh';
    }
  }

  /*切換語言*/
  changeLanguage(lang: string) {
    console.log(lang);
    this.translateService.use(lang);
    this.settingBtn(lang);
  }
相關文章
相關標籤/搜索