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

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

安装

首先需要安装npm依赖:

  1. 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。

  1.  
  1. import {NgModule} from '@angular/core';
  2. import {BrowserModule} from '@angular/platform-browser';
  3. import {HttpClientModule, HttpClient} from '@angular/common/http';
  4. import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
  5. import {TranslateHttpLoader} from '@ngx-translate/http-loader';
  6. import {AppComponent} from './app';
  1. export function createTranslateLoader(http: HttpClient) {
  2. return new TranslateHttpLoader(http, './assets/i18n/', '.json');
  3. }
  4.  
  5. @NgModule({
  6. imports: [
  7. BrowserModule,
  8. HttpClientModule,
  9. TranslateModule.forRoot({
  10. loader: {
  11. provide: TranslateLoader,
  12. useFactory: (createTranslateLoader),
  13. deps: [HttpClient]
  14. }
  15. })
  16. ],
  17. bootstrap: [AppComponent]
  18. })
  19. export class AppModule { }

这里使用了TranslateHttpLoader 来加载我们定义好的语言文件。"/assets/i18n/[lang].json"这里的lang就是当前正在使用的语言。

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

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

  1. @NgModule({
  2. imports: [
  3. BrowserModule,
  4. HttpModule,
  5. TranslateModule.forRoot({
  6. provide: TranslateLoader,
  7. useFactory: (http: HttpClient) => new TranslateStaticLoader(http, '/assets/i18n', '.json'),
  8. deps: [HttpClient]
  9. })
  10. ],
  11. bootstrap: [AppComponent]
  12. })
  13. export class AppModule { }

2、注入TranslateService 服务

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

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

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

  1. constructor(private translate: TranslateService) {
  2. // this language will be used as a fallback when a translation isn't found in the current language
  3. translate.setDefaultLang('en');
  4.  
  5. // use the brower's default lang, if the lang isn't available, it will use the 'en'
  6. let broswerLang = translate.getBrowserLang();
  7. translate.use(broswerLang.match(/en|cn/) ? broswerLang : 'en');
  8. }

3、翻译文本书写规则

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

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

例如:en.json

  1. {
  2. "HELLO": "hello {{value}}"
  3. }

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

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

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

  1. {
  2. "HOME": {
  3. "HELLO": "hello {{value}}"
  4. }
  5. }

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

4、使用方法

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

TranslateService:

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

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

TranslateService

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

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

  1. param = {value: 'world'};

TranslateDirective

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

或者

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

5、使用HTML标签

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

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

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

  1. <div [innerHTML]="'HELLO' | translate"></div>

TranslateService API

公有属性(public properties):

  1. /**
  2. * The default lang to fallback when translations are missing on the current lang
  3. */
  4. defaultLang: string;
  5. /**
  6. * The lang currently used
  7. * @type {string}
  8. */
  9. currentLang: string;
  10. /**
  11. * an array of langs
  12. * @type {Array}
  13. */
  14. langs: string[];
  15. /**
  16. * a list of translations per lang
  17. * @type {{}}
  18. */
  19. translations: any;

公有方法(public methods):

  1. /**
  2. * Sets the default language to use as a fallback
  3. * @param lang
  4. */
  5. setDefaultLang(lang: string): void;
  6. /**
  7. * Gets the default language used
  8. * @returns string
  9. */
  10. getDefaultLang(): string;
  11. /**
  12. * Changes the lang currently used
  13. * @param lang
  14. * @returns {Observable<*>}
  15. */
  16. use(lang: string): Observable<any>;
  17. /**
  18. * Gets an object of translations for a given language with the current loader
  19. * and passes it through the compiler
  20. * @param lang
  21. * @returns {Observable<*>}
  22. */
  23. getTranslation(lang: string): Observable<any>;
  24. /**
  25. * Manually sets an object of translations for a given language
  26. * after passing it through the compiler
  27. * @param lang
  28. * @param translations
  29. * @param shouldMerge
  30. */
  31. setTranslation(lang: string, translations: Object, shouldMerge?: boolean): void;
  32. /**
  33. * Returns an array of currently available langs
  34. * @returns {any}
  35. */
  36. getLangs(): Array<string>;
  37. /**
  38. * @param langs
  39. * Add available langs
  40. */
  41. addLangs(langs: Array<string>): void;
  42. /**
  43. * Returns the parsed result of the translations
  44. * @param translations
  45. * @param key
  46. * @param interpolateParams
  47. * @returns {any}
  48. */
  49. getParsedResult(translations: any, key: any, interpolateParams?: Object): any;
  50. /**
  51. * Gets the translated value of a key (or an array of keys)
  52. * @param key
  53. * @param interpolateParams
  54. * @returns {any} the translated key, or an object of translated keys
  55. */
  56. get(key: string | Array<string>, interpolateParams?: Object): Observable<string | any>;
  57. /**
  58. * Returns a stream of translated values of a key (or an array of keys) which updates
  59. * whenever the language changes.
  60. * @param key
  61. * @param interpolateParams
  62. * @returns {any} A stream of the translated key, or an object of translated keys
  63. */
  64. stream(key: string | Array<string>, interpolateParams?: Object): Observable<string | any>;
  65. /**
  66. * Returns a translation instantly from the internal state of loaded translation.
  67. * All rules regarding the current language, the preferred language of even fallback languages will be used except any promise handling.
  68. * @param key
  69. * @param interpolateParams
  70. * @returns {string}
  71. */
  72. instant(key: string | Array<string>, interpolateParams?: Object): string | any;
  73. /**
  74. * Sets the translated value of a key, after compiling it
  75. * @param key
  76. * @param value
  77. * @param lang
  78. */
  79. set(key: string, value: string, lang?: string): void;
  80. /**
  81. * Allows to reload the lang file from the file
  82. * @param lang
  83. * @returns {Observable<any>}
  84. */
  85. reloadLang(lang: string): Observable<any>;
  86. /**
  87. * Deletes inner translation
  88. * @param lang
  89. */
  90. resetLang(lang: string): void;
  91. /**
  92. * Returns the language code name from the browser, e.g. "de"
  93. *
  94. * @returns string
  95. */
  96. getBrowserLang(): string;
  97. /**
  98. * Returns the culture language code name from the browser, e.g. "de-DE"
  99. *
  100. * @returns string
  101. */
  102. getBrowserCultureLang(): string;

Angular(2+) 国际化方案(ngx-translate)的更多相关文章

  1. Angular i18n(国际化方案)

    一.引言 i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称.在资讯领域,国际化(i18n)指让产品(出版物,软件,硬件等)无 ...

  2. angular项目国际化配置(ngx-translate)

    原文 https://www.jianshu.com/p/7d1da3098625 大纲 1.认识ngx-translate 2.ngx-translate的配置步骤 3.ngx-translate的 ...

  3. jquery.i18n.properties前端国际化方案

    如果新项目要做系统国际化, 时下热门的任何一种技术选型都有成熟的方案,比如: vue + vue-i18n angular + angular-translate react + react-intl ...

  4. 结合webpack 一步一步实现懒加载的国际化简易版方案

    想法来源于工作需求,最后倒腾出一个国际化工作流,期望是这样的: 1. 自动化处理国际化文案(表现为转义翻译人员给到的文件处理成技术人员所识别的文件) 2. 转化后的国际化文件能够按需加载,实现懒加载的 ...

  5. 利用angular结合translate为项目实现国际化

    前言 利用H5项目第一版本已经上线,话说有了第一期就有了第二期,这不要为第二期做准备了,老大发话第一件事就要利用Angular JS实现项目的国际化以及后续要借助这个框架来实现其他功能,好吧我表示没怎 ...

  6. AngularJS 国际化——Angular-translate

    对于一个用户群面向全球的的应用来说,不得不考虑国际化的问题.当然,即便是刚刚起步的小应用,如果有心搞大,也应该提前设计国际化的方案. 本篇讲述使用AngularJS构建的应用的简单国际化方案,准确的说 ...

  7. angular实例教程(用来熟悉指令和过滤器的编写)

    angular的插件太少了,  所以很多指令和过滤器都要自己写,  所以对指令传进来的参数, 以及angular编译的流程更加熟悉才行写出好的插件, 有些简单的指令是参考angularUI里面, 作为 ...

  8. [Angularjs]国际化

    写在前面 在项目中,有用到国际化,跟着就了解了下使用angularjs实现的国际化,这里做一下记录. 系列文章 [Angularjs]ng-select和ng-options [Angularjs]n ...

  9. [Angularjs]angular ng-repeat与js特效加载先后导致的问题

    写在前面 最近在项目中遇到这样的一个前端的bug,在ng-repeat中绑定的图片,有一个晃动的特效,在手机端浏览的时候,图片有时候会正常展示,有时就展示不出来.当时猜测是因为angularjs与特效 ...

随机推荐

  1. Linux第六节随笔 输入输出重定向 、管道、通配符、wc / grep / tr / sort / cut / which /whereis /locate /find /

    三期第五讲 -高级文件管理1.输入输出重定向 ls -l /dev/stdin -> /proc/self/fd/0 标准输入 设备:键盘 标记:0 ls -l /dev/stdout -> ...

  2. 防盗链与token运用

    为什么要防盗链? 例如手机/PC应用,如果有人知道你的api地址,和应用格式,那么他人就可以利用这个接口进行盗链:盗取/盗用里面的数据. 防盗链特性: 1.因为是非开放性的,所以所有的接口都是封闭的, ...

  3. 移动端IOS第三方输入法遮挡底部Input及android键盘回落留白问题

    var interval; //消息框获取焦点 $('#J_text').focus(function(){ interval = setInterval(function() { scrollToE ...

  4. 为Python添加中文关键字

    狗屎咖啡 2 个月前 原址: https://zhuanlan.zhihu.com/p/31159526 swizl/cnpython 1. 大部分语法,可以按下面方法加同义的中文token第1步. ...

  5. day 10 字符编码和文件处理 细节整理

    pycharm是文本编辑器. 大概理解为:  输出到屏幕上的时候,是解码过的字符串,用 decode 处理的时候要编码成相应的流, encode 成你要用的格式就可以了 1 .字符编码: 字符==== ...

  6. thinkinginjava学习笔记04_初始化与清理

    java沿用了c++的构造器,使用一个和类名完全一样的方法作为类的构造器,可以有多个构造器来通过不同的参数进行构造,称为重载:不仅是构造器可以重载,其他方法也一样通过不同的形参以及不同的返回值来实现重 ...

  7. ngx-bootstrap使用02 Accordion组件的使用

    1 Accordion组件 该组件通过一个可折叠的控制面板去在有限空间内显示更多的信息 according组件在可折叠指令的最外层,该组件提供了一些列的项目列表去显示被折叠的内容,这些项目列表包含he ...

  8. jQuery 效果函数(三)

    方法 描述 animate() 对被选元素应用“自定义”的动画 clearQueue() 对被选元素移除所有排队的函数(仍未运行的) delay() 对被选元素的所有排队函数(仍未运行)设置延迟 de ...

  9. php mysql语句预编译(preparestatement)

    预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高. 预处理语句的工作原理如下: 预处理:创建 SQL 语句模板并发送到数据库.预留的值使用参数 "?" 标记 .例如: ...

  10. 移动端页面 css reset

    这个是通用的  css reset.这个版本适用于 移动端页面 如果需要在 PC端使用,可以 修改 html{font-size: 10px;}为html{font-size: 12px;} 其他地方 ...