Angular2+國(guó)際化方案(ngx-translate)的示例代碼
本文只針對(duì)ngx-translate/core 6.x版本,如果你使用的是5.x或者更低的版本,請(qǐng)參照以下鏈接。
https://github.com/ngx-translate/core/blob/fb02ca5920aae405048ebab50e09db67d5bf12a2/README.md
安裝
首先需要安裝npm依賴:
npm install @ngx-translate/core --save npm install @ngx-translate/http-loader --save // 針對(duì)Angular>=4.3 npm install @ngx-translate/http-loader@0.1.0 --save // 針對(duì)Angular<4.3
這里需要注意,如果你使用的Angular版本是 Angular <4.3,那么需要安裝http-loader@0.1.0版本。
因?yàn)?.1.0以后的版本TranslateHttpLoader構(gòu)造函數(shù)的第一個(gè)參數(shù)改為HttpClient類型,而非Http類型。
用法
1、引入TranslateModule模塊
首先需要在你項(xiàng)目的root NgModule中引入TranslateModule.forRoot()模塊。一般在項(xiàng)目中默認(rèn)命名為app.module.ts。
import {NgModule} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
import {HttpClientModule, HttpClient} from '@angular/common/http';
import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
import {TranslateHttpLoader} from '@ngx-translate/http-loader';
import {AppComponent} from './app';
export function createTranslateLoader(http: HttpClient) {
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}
@NgModule({
imports: [
BrowserModule,
HttpClientModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: (createTranslateLoader),
deps: [HttpClient]
}
})
],
bootstrap: [AppComponent]
})
export class AppModule { }
這里使用了TranslateHttpLoader 來加載我們定義好的語言文件。"/assets/i18n/[lang].json"這里的lang就是當(dāng)前正在使用的語言。
注意:如果當(dāng)前采用的是AOT編譯方式或者是ionic2工程,那么useFactory對(duì)應(yīng)的必須是一個(gè)export的自定義方法而非內(nèi)聯(lián)方法。
即以下這種方式是不被允許的:
@NgModule({
imports: [
BrowserModule,
HttpModule,
TranslateModule.forRoot({
provide: TranslateLoader,
useFactory: (http: HttpClient) => new TranslateStaticLoader(http, '/assets/i18n', '.json'),
deps: [HttpClient]
})
],
bootstrap: [AppComponent]
})
export class AppModule { }
2、注入TranslateService 服務(wù)
在需要用到的component里面注入TranslateService。
import {TranslateService} from '@ngx-translate/core';
然后在構(gòu)造函數(shù)中定義當(dāng)前應(yīng)用的默認(rèn)語言。
constructor(private translate: TranslateService) {
// this language will be used as a fallback when a translation isn't found in the current language
translate.setDefaultLang('en');
// use the brower's default lang, if the lang isn't available, it will use the 'en'
let broswerLang = translate.getBrowserLang();
translate.use(broswerLang.match(/en|cn/) ? broswerLang : 'en');
}
3、翻譯文本書寫規(guī)則
有兩種方式可以加載我們翻譯好的語言文本。
首先你可以把翻譯好的語言文本放到一個(gè)json文件中,然后通過TranslateHttpLoader來引用這個(gè)json文件。
例如:en.json
{
"HELLO": "hello {{value}}"
}
另外也可以通過setTranslation方法手動(dòng)加載。
translate.setTranslation('en', {
HELLO: 'hello {{value}}'
});
同時(shí),這里的json結(jié)構(gòu)是支持嵌套的。
{
"HOME": {
"HELLO": "hello {{value}}"
}
}
以上結(jié)構(gòu),可以通過"HOME.HELLO"來引用HELLO的內(nèi)容。
4、使用方法
我們可以通過TranslateService, TranslatePipe 或者 TranslateDirective這三種方式來獲取我們翻譯的文本內(nèi)容。
TranslateService:
translate.get('HELLO', {value: 'world'}).subscribe((res: string) => {
console.log(res);
//=> 'hello world'
});
其中第二個(gè)參數(shù){value: 'world'}是可選的。
TranslateService:
<div>{{ 'HELLO' | translate:param }}</div>
param可以像如下方式在component里面定義。同樣,這個(gè)參數(shù)也是可選的。
param = {value: 'world'};
TranslateDirective:
<div [translate]="'HELLO'" [translateParams]="{value: 'world'}"></div>
或者
<div translate [translateParams]="{value: 'world'}">HELLO</div>
5、使用HTML標(biāo)簽
允許在你的翻譯文本中直接嵌入HTML標(biāo)簽。
{
"HELLO": "Welcome to my Angular application!<br><strong>This is an amazing app which uses the latest technologies!</strong>"
}
這時(shí)可以使用innerHTML 來進(jìn)行渲染。
<div [innerHTML]="'HELLO' | translate"></div>
TranslateService API
公有屬性(public properties):
/**
* The default lang to fallback when translations are missing on the current lang
*/
defaultLang: string;
/**
* The lang currently used
* @type {string}
*/
currentLang: string;
/**
* an array of langs
* @type {Array}
*/
langs: string[];
/**
* a list of translations per lang
* @type {{}}
*/
translations: any;
公有方法(public methods):
/**
* Sets the default language to use as a fallback
* @param lang
*/
setDefaultLang(lang: string): void;
/**
* Gets the default language used
* @returns string
*/
getDefaultLang(): string;
/**
* Changes the lang currently used
* @param lang
* @returns {Observable<*>}
*/
use(lang: string): Observable<any>;
/**
* Gets an object of translations for a given language with the current loader
* and passes it through the compiler
* @param lang
* @returns {Observable<*>}
*/
getTranslation(lang: string): Observable<any>;
/**
* Manually sets an object of translations for a given language
* after passing it through the compiler
* @param lang
* @param translations
* @param shouldMerge
*/
setTranslation(lang: string, translations: Object, shouldMerge?: boolean): void;
/**
* Returns an array of currently available langs
* @returns {any}
*/
getLangs(): Array<string>;
/**
* @param langs
* Add available langs
*/
addLangs(langs: Array<string>): void;
/**
* Returns the parsed result of the translations
* @param translations
* @param key
* @param interpolateParams
* @returns {any}
*/
getParsedResult(translations: any, key: any, interpolateParams?: Object): any;
/**
* Gets the translated value of a key (or an array of keys)
* @param key
* @param interpolateParams
* @returns {any} the translated key, or an object of translated keys
*/
get(key: string | Array<string>, interpolateParams?: Object): Observable<string | any>;
/**
* Returns a stream of translated values of a key (or an array of keys) which updates
* whenever the language changes.
* @param key
* @param interpolateParams
* @returns {any} A stream of the translated key, or an object of translated keys
*/
stream(key: string | Array<string>, interpolateParams?: Object): Observable<string | any>;
/**
* Returns a translation instantly from the internal state of loaded translation.
* All rules regarding the current language, the preferred language of even fallback languages will be used except any promise handling.
* @param key
* @param interpolateParams
* @returns {string}
*/
instant(key: string | Array<string>, interpolateParams?: Object): string | any;
/**
* Sets the translated value of a key, after compiling it
* @param key
* @param value
* @param lang
*/
set(key: string, value: string, lang?: string): void;
/**
* Allows to reload the lang file from the file
* @param lang
* @returns {Observable<any>}
*/
reloadLang(lang: string): Observable<any>;
/**
* Deletes inner translation
* @param lang
*/
resetLang(lang: string): void;
/**
* Returns the language code name from the browser, e.g. "de"
*
* @returns string
*/
getBrowserLang(): string;
/**
* Returns the culture language code name from the browser, e.g. "de-DE"
*
* @returns string
*/
getBrowserCultureLang(): string;
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
AngularJS 中ui-view傳參的實(shí)例詳解
這篇文章主要介紹了AngularJS 中ui-view傳參的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08
如何解決手機(jī)瀏覽器頁(yè)面點(diǎn)擊不跳轉(zhuǎn)瀏覽器雙擊放大網(wǎng)頁(yè)
這篇文章主要介紹了如何解決手機(jī)瀏覽器頁(yè)面點(diǎn)擊不跳轉(zhuǎn)瀏覽器雙擊放大網(wǎng)頁(yè)的相關(guān)資料,需要的朋友可以參考下2016-07-07
詳解基于angular-cli配置代理解決跨域請(qǐng)求問題
本篇文章主要介紹了詳解基于angular-cli配置代理解決跨域請(qǐng)求問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
AngularJS對(duì)動(dòng)態(tài)增加的DOM實(shí)現(xiàn)ng-keyup事件示例
這篇文章主要介紹了AngularJS對(duì)動(dòng)態(tài)增加的DOM實(shí)現(xiàn)ng-keyup事件示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03
初學(xué)者AngularJS的環(huán)境搭建過程
這篇文章主要介紹了初學(xué)者AngularJS的環(huán)境搭建過程,在文章給大家提到了Angular-cli的特性,大家一起看看吧2017-10-10
AngularJS使用ngMessages進(jìn)行表單驗(yàn)證
這篇文章主要介紹了AngularJS使用ngMessages進(jìn)行表單驗(yàn)證的相關(guān)資料,需要的朋友可以參考下2015-12-12
對(duì)Angular.js Controller如何進(jìn)行單元測(cè)試
這篇文章主要給大家介紹了如何對(duì)Angular Controller進(jìn)行單頁(yè)測(cè)試。如果你不太了解angular也沒關(guān)系,本文也會(huì)提及關(guān)于Angular的一些知識(shí)。文中通過示例代碼介紹的很詳細(xì),詳細(xì)對(duì)大家的理解和學(xué)習(xí)很有幫助,下面來一起看看吧。2016-10-10

