angular國際化實踐(ngx-translate)

?
本篇文章介紹的方法并非是瀏覽器識別翻譯池充,它可以根據(jù)您的要求實現(xiàn)不同語言的精準翻譯哄辣,不同于angualr官方的實現(xiàn)方式睬关。

一逮矛、利用npm下載ngx-translate的依賴庫

npm install @ngx-translate/core --save 
npm install @ngx-translate/http-loader --save
  • 注意:請選擇與您的angular版本相對應(yīng)的版本矮燎,具體可參考下面截圖(來自ngx-translate官網(wǎng))


    Choose the version corresponding to your Angular version

二定血、引入TranslateModule模塊

  • 在項目根模塊(app.module.ts)中導(dǎo)入支持的包
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
  • 在項目根模塊中配置ngx-translate
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { Http } from '@angular/http';
import {
  TranslateModule,
  TranslateLoader,
} from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { AppComponent } from './app.component';
import {HttpClient, HttpClientModule} from '@angular/common/http';
export function createTranslateLoader(http: HttpClient) {
  return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    TranslateModule.forRoot({
      loader: {
          provide: TranslateLoader,
          useFactory: createTranslateLoader,
          deps: [HttpClient]
      }
    })
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
  • 在需要使用ngx-translate的module引入TranslateModule
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { TranslateModule } from '@ngx-translate/core';
import { LoginRoutingModule } from './login-routing.module';

@NgModule({
  imports: [
    CommonModule,
    TranslateModule,
    LoginRoutingModule,
  ]
})
export class LoginModule { }

三、注入TranslateService 服務(wù)

  • 在需要用到的component里面注入TranslateService
import {TranslateService} from '@ngx-translate/core';
  • 通過服務(wù)設(shè)置當前應(yīng)用的語言
constructor(private translate: TranslateService) {
    this.translate.use('en-US');
}

四诞外、創(chuàng)建國際化文件

  • 根據(jù)根模塊的配置澜沟,在assets文件中再創(chuàng)建一個文件夾i18n,然后在i18n的文件夾下創(chuàng)建國際化文件峡谊,可以是en-US.json(英文)倔喂、zh_CN.json(中文)、es_ES.json(西班牙)靖苇,this.translate.use('en-US')用的就是en-US.json翻譯文件席噩,如果要使用其他兩個翻譯文件就是this.translate.use('zh_CN')、this.translate.use('es_ES')
// en-US.json
 
{
    "welcome":"welcome to this app",
    "getName":"hello I am {{name}}"
}
// zh_CN.json
 
{
    "welcome":"歡迎使用本應(yīng)用",
    "getName":"你好贤壁,我是{{name}}"
}

五悼枢、國際化的具體應(yīng)用

  • 使用管道來翻譯輸入信息
<span>{{ 'welcome '| translate}}</span>
  • 使用指令來翻譯指定信息
<span [translate]="'welcome'">welcome</span>
  • 使用服務(wù)翻譯指定信息
import {TranslateService} from '@ngx-translate/core';
constructor(private translate: TranslateService) {}
this.translate.get('welcome').subscribe((res: string) => {
      console.log(res); // welcome to this app
      this.welcomeTranslate = res;
});
  • 對帶參數(shù)的信息進行翻譯--翻譯管道中帶參數(shù)
<span>{{"getName" | translate: {name:"crk"} }}</span>
  • 對帶參數(shù)的信息進行翻譯--翻譯指令帶參數(shù)
<span
  [translate]="getName"
  [translateParams]="{'name':'ggg'}">
  getName
</span>
  • 對帶參數(shù)的信息進行翻譯--翻譯服務(wù)帶參數(shù)
import {TranslateService} from '@ngx-translate/core';
constructor(private translate: TranslateService) {}
this.translate.get('getName',this.param).subscribe((res: string) => {
    console.log(res);
    this.getNameTranslate = res;
});

注意:項目中如果對http的request請求進行封裝,應(yīng)避免對加載國際化文件產(chǎn)生影響脾拆,例如

  const regex = new RegExp('^(http://|https://|//)');
     // 排除對國際化文件請求的封裝
    if (!regex.test(url) && url.indexOf('assets/i18n') === -1) {  
      url = this._apiSettings.baseUrl + url;
  }

?
以上馒索,是因項目開發(fā)需要,參照一些文章在學(xué)習(xí)和應(yīng)用ngx-translate的過程中所遇問題的一些總結(jié)名船,希望對您有所幫助绰上!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市渠驼,隨后出現(xiàn)的幾起案子蜈块,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件百揭,死亡現(xiàn)場離奇詭異爽哎,居然都是意外死亡,警方通過查閱死者的電腦和手機器一,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門课锌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人祈秕,你說我怎么就攤上這事渺贤。” “怎么了请毛?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵癣亚,是天一觀的道長。 經(jīng)常有香客問我获印,道長述雾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任兼丰,我火速辦了婚禮玻孟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鳍征。我一直安慰自己黍翎,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布艳丛。 她就那樣靜靜地躺著匣掸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氮双。 梳的紋絲不亂的頭發(fā)上碰酝,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音戴差,去河邊找鬼送爸。 笑死,一個胖子當著我的面吹牛暖释,可吹牛的內(nèi)容都是我干的袭厂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼球匕,長吁一口氣:“原來是場噩夢啊……” “哼纹磺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起亮曹,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤橄杨,失蹤者是張志新(化名)和其女友劉穎秘症,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讥珍,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年窄瘟,在試婚紗的時候發(fā)現(xiàn)自己被綠了衷佃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡蹄葱,死狀恐怖氏义,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情图云,我是刑警寧澤惯悠,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站竣况,受9級特大地震影響克婶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丹泉,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一情萤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摹恨,春花似錦筋岛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寝凌,卻和暖如春柒傻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背较木。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工诅愚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人劫映。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓违孝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泳赋。 傳聞我的和親對象是個殘疾皇子雌桑,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容