全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Angular2+国际化方案(ngx-translate)的示例代码

本文只针对ngx-translate/core 6.x版本,如果你使用的是5.x或者更低的版本,请参照以下链接。

https://github.com/ngx-translate/core/blob/fb02ca5920aae405048ebab50e09db67d5bf12a2/README.md

安装

首先需要安装npm依赖:

npm install @ngx-translate/core --save
npm install @ngx-translate/http-loader --save // 针对Angular>=4.3
npm install @ngx-translate/http-loader@0.1.0 --save // 针对Angular<4.3

这里需要注意,如果你使用的Angular版本是 Angular <4.3,那么需要安装http-loader@0.1.0版本。

因为0.1.0以后的版本TranslateHttpLoader构造函数的第一个参数改为HttpClient类型,而非Http类型。

用法

1、引入TranslateModule模块

首先需要在你项目的root NgModule中引入TranslateModule.forRoot()模块。一般在项目中默认命名为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就是当前正在使用的语言。

注意:如果当前采用的是AOT编译方式或者是ionic2工程,那么useFactory对应的必须是一个export的自定义方法而非内联方法。

 即以下这种方式是不被允许的:

@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 服务

在需要用到的component里面注入TranslateService。

import {TranslateService} from '@ngx-translate/core';

然后在构造函数中定义当前应用的默认语言。

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、翻译文本书写规则

有两种方式可以加载我们翻译好的语言文本。

首先你可以把翻译好的语言文本放到一个json文件中,然后通过TranslateHttpLoader来引用这个json文件。

例如:en.json

{
  "HELLO": "hello {{value}}"
}

另外也可以通过setTranslation方法手动加载。

translate.setTranslation('en', {
  HELLO: 'hello {{value}}'
});

同时,这里的json结构是支持嵌套的。

{
  "HOME": {
    "HELLO": "hello {{value}}"
  }
}

以上结构,可以通过"HOME.HELLO"来引用HELLO的内容。 

4、使用方法

我们可以通过TranslateService, TranslatePipe 或者 TranslateDirective这三种方式来获取我们翻译的文本内容。

TranslateService:

translate.get('HELLO', {value: 'world'}).subscribe((res: string) => {
  console.log(res);
  //=> 'hello world'
});

其中第二个参数{value: 'world'}是可选的。 

TranslateService:

<div>{{ 'HELLO' | translate:param }}</div>

param可以像如下方式在component里面定义。同样,这个参数也是可选的。

param = {value: 'world'};

 TranslateDirective:

<div [translate]="'HELLO'" [translateParams]="{value: 'world'}"></div>

或者

<div translate [translateParams]="{value: 'world'}">HELLO</div>

5、使用HTML标签

允许在你的翻译文本中直接嵌入HTML标签。

{
  "HELLO": "Welcome to my Angular application!<br><strong>This is an amazing app which uses the latest technologies!</strong>"
}

这时可以使用innerHTML 来进行渲染。

<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;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# ngx  # translate  # Angular  # 国际化  # 方案  # Angular4项目中添加i18n国际化插件ngx-translate的步骤详解  # Angular2中如何使用ngx-translate进行国际化  # 浅析如何利用angular结合translate为项目实现国际化  # AngularJs 国际化(I18n/L10n)详解  # AngularJS国际化详解及示例代码  # Angular 项目实现国际化的方法  # 的是  # 如果你  # 可以通过  # 加载  # 可选  # 而非  # 是一个  # 你可以  # 第一个  # 我们可以  # 第二个  # 或者是  # 自定义  # 可以使用  # 不被  # 有两种  # 命名为  # 需要注意  # 更低  # 大家多多 


相关文章: 如何选择PHP开源工具快速搭建网站?  广平建站公司哪家专业可靠?如何选择?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  盐城做公司网站,江苏电子版退休证办理流程?  官网网站制作腾讯审核要多久,联想路由器newifi官网  音乐网站服务器如何优化API响应速度?  如何通过.red域名打造高辨识度品牌网站?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  网站制作的步骤包括,正确网址格式怎么写?  IOS倒计时设置UIButton标题title的抖动问题  如何有效防御Web建站篡改攻击?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  如何用好域名打造高点击率的自主建站?  如何在IIS服务器上快速部署高效网站?  如何通过VPS搭建网站快速盈利?  建站之星如何一键生成手机站?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  详解jQuery停止动画——stop()方法的使用  宁波自助建站系统如何快速打造专业企业网站?  如何在IIS7上新建站点并设置安全权限?  网站制作难吗安全吗,做一个网站需要多久时间?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  盘锦网站制作公司,盘锦大洼有多少5G网站?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  建站之星安装提示数据库无法连接如何解决?  专业网站建设制作报价,网页设计制作要考什么证?  制作证书网站有哪些,全国城建培训中心证书查询官网?  已有域名和空间,如何快速搭建网站?  如何在阿里云服务器自主搭建网站?  如何配置IIS站点权限与局域网访问?  ,巨量百应是干嘛的?  如何设计高效校园网站?  如何获取上海专业网站定制建站电话?  香港服务器选型指南:免备案配置与高效建站方案解析  临沂网站制作公司有哪些,临沂第四中学官网?  创业网站制作流程,创业网站可靠吗?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  建站之星如何实现网站加密操作?  黑客入侵网站服务器的常见手法有哪些?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  如何选择高效稳定的ISP建站解决方案?  建站之星如何修改网站生成路径?  红河网站制作公司,红河事业单位身份证如何上传?  高端网站建设与定制开发一站式解决方案 中企动力  C++中引用和指针有什么区别?(代码说明)  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  香港网站服务器数量如何影响SEO优化效果? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。