本文将介绍ngx-translate在angular8.x中的使用,主要内容有ngx-translate的安装、前端json翻译模板的配置以及如何改造为请求后台获取翻译模板json。完成后整体应用文件目录结构如下:

|- src
|- |- app
|- |- |- app.component.css
|- |- |- app.component.html
|- |- |- app.component.ts
|- |- |- app.module.ts
|- |- assetss
|- |- |- i18n
|- |- |- |- en.json
|- |- |- |- zh.json
|- |- index.html
|- |- mian.ts
|- |- polyfills.ts
|- |- style.css
|- angular.json
|- package.json

一、安装

在安装之前需要确认自己使用的angular的版本,不同的版本的angular可能对应不同的ngx-translate的版本。本文使用的angular版本为8.0.0。安装版本说明如下:

Angular @ngx-translate/core @ngx-translate/http-loader
7/8 11.x+ 4.x+
6 10.x 3.x
5 8.x to 9.x 1.x to 2.x
4.3 7.x or less 1.x to 2.x
2 to 4.2.x 7.x or less 0.x

此表格来源于ngx-translate官网,时间2019-12-1 11:16:28。

确认版本之后可以输入如下命令安装:

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

如需要指定特定的版本可以参考如下命令:

npm install @ngx-translate/core@11.x --save

二、使用前端json翻译模板

1. 导入TranslateModule

要想在angular中使用ngx-translate,则必须将其在应用程序的根@NgModule中使用TranslateModule.forRoot()导入,forRoot静态方法是同时提供和配置服务的约定。确保只在应用程序的根模块中调用此方法,大多数情况下调用AppModule。如果需要在其他的module中使用,则需要在其他的module中使用imports: [..., TranslateModule],和exports:[..., TranslateModule]

import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core';
import {TranslateModule} from '@ngx-translate/core';@NgModule({imports: [BrowserModule,TranslateModule.forRoot()],bootstrap: [AppComponent]
})
export class AppModule { }

2. 使用AoT

如果想要在使用AoT编译的同时配置自定义的translateLoader,那么这边的函数必须使用export修饰,即必须使用导出函数而不是内联函数。现在AppModule中代码需要改造为如下:

// 包的导入省略......
// AoT
export function createTranslateLoader(http: HttpClient) {return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}
@NgModule({// import中必须导入HttpClientModule,否则会报错'NullInjectorError: No provider for HttpClient!'imports:[ BrowserModule, FormsModule, HttpClientModule,TranslateModule.forRoot({loader: {provide: TranslateLoader,useFactory: (createTranslateLoader),deps: [HttpClient]}})],declarations: [ AppComponent ],bootstrap:    [ AppComponent ]
})
export class AppModule { }

这边的loader中的provide代表将TranslateLoader注入进来,而他的实现是由useFactorycreateTranslateLoader来具体实现。

3. 配置json翻译模板

在2中可以看到new TranslateHttpLoader(http, './assets/i18n/', '.json')时已经指定了翻译模板的存放路径,所以现在需要在assets默认静态文件的存放目录下新建名为i18n的文件夹,并在其下新建zh.jsonen.json翻译模板文件,如下:

// en.json
// 注意:json文件中不要写注释!!!否则会报错
{"i18ntest":"Test Project For i18n","hello": "Hello World !","author":"author: {{value}}","language":"language","header": {"author": "Default.W"}
}
// zh.jsons
{"hello": "你好, 世界!","i18ntest":"测试项目(i18n)","author":"作者: {{value}}","language":"语言","header": {"author": "Default.W"}
}

4. 使用

在AppComponent中使用,需要先将TranslateService导入进来,并且在构造函数处注入:

constructor(public translateService: TranslateService) {this.translateService.setDefaultLang('zh'); // 设置当前的默认语言类型this.translateService.use('zh'); // 设置使用的语言类型
}

现在就可以在html中使用管道进行翻译了:

<h1>{{'i18ntest' | translate}}</h1>
<p>{{'hello' | translate}}</p>

翻译还支持传值的翻译方式,html文件中的param为AppComponent中定义的变量:

// AppComponent
public param;
ngOnInit() {this.param = {value: 'Default.W'};
}
<!-- app.component.html -->
<p>{{"author" | translate:param}}</p>

三、从后台请求需要的翻译模板

如果不想在前台配置翻译模板的json文件,我们还可以在后端自行添加properties文件,并且不要自己写好一个后台接口来请求这个配置文件并组装成为json文件返回。在前端我们只需要将translate.loader.ts的中的TranslateLoader实现,并在实现中请求后端写好的接口就可以切换为后台的json。

// 需要重新实现这个方法来请求后端接口
export abstract class TranslateLoader {abstract getTranslation(lang: string): Observable<any>;
}

实现代码示例:

export class TranslateHttpLoader implements TranslateLoader {/***  Get the translate from the service*/public getTranslation(lang: string): Observable<Object> {Subject subject = new Subject<any>();this.http.post(url).subscribe({next: res => {subject.next(res);},error: err => {console.log('获取失败');}});return subject;}
}

四、最终结果

1. 英文:

2. 中文

3. 完整代码

完整代码请查看github。

五、参考文献

[1] ngx-translate官方Github

angular8.x + ngx-translate实现国际化相关推荐

  1. 01、pyqt入门使用--01布局、基本组件、第一个示例、qtdesigner大概使用

    01.本系列使用pyqt5作为教材创建项目   --安装 pyqt5 和 pyqt5-tools[这个就是为了使用qtdesigner这个工具] 两个包   --进入Lib\site-packages ...

  2. Angular-translate笔记

    Angular-translate笔记 在已经保证 translate 功能 (国际化) 可以使用的前提下,翻译可以有两种写法,分别是在HTML中和TS中完成翻译. 在HTML中使用 管道 ( | ) ...

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

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

  4. ngx-translate实现国际化:this.translate.use()、this.translate.get()、this.translate.instant()、onLangChange

    Angular ngx-translate实现国际化 准备工作 ① ngx-translate的前提配置 ② 创建国际化文件 assets -i18n ③ 注入translateService服务 使 ...

  5. Flask 教程 第十三章:国际化和本地化

    本文转载自:https://www.jianshu.com/p/e2923f4042d6 这是Flask Mega-Tutorial系列的第十三部分,我将告诉你如何扩展Microblog应用以支持多种 ...

  6. AngularJS 国际化——Angular-translate

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

  7. 国际化困境(第一篇)

    (和我前一篇文章一样,这篇文章也需要读者动手写些程序,参与其中,实验过程可能需要反复重启电脑,另外最好准备一套英文Windows系统,哦,如果再有一套Windows Vista英文版,那再好不过,总之 ...

  8. golang国际化站点

    管理多个本地包 在开发一个应用的时候,首先我们要决定是只支持一种语言,还是多种语言,如果要支持多种语言,我们则需要制定一个组织结构,以方便将来更多语言的添加.在此我们设计如下:Locale有关的文件放 ...

  9. Ionic+Angular实现中英国际化(附代码下载)

    场景 Ionic介绍以及搭建环境.新建和运行项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106308166 在上面搭建起 ...

  10. QT学习:多国语言国际化

    一.国际化支持的实现 (1)使用QString对象表示所有用户可见的文本.由于QString内部使用Unicode编码实现,所以它可以用于表示所有需要向用户呈现的文本.当然,对于仅程序员可见的文本并不 ...

最新文章

  1. android切图尺寸_安卓设计尺寸规范
  2. 芯片、模组、开发板的区别与联系-结合ESP32浅谈(转载)
  3. 百度搜索效果(页面传来数据地址,由服务器去获取)
  4. java spring工作原理_SpringMVC的工作原理是什么样的,跟Spring的关系是怎么样的?
  5. 去掉WinLicense文件效验的方法
  6. python手机号码正确编程_python 小练习之生成手机号码
  7. git服务器维护 备份,gitlab服务运维,备份与恢复 - 橙子柠檬's Blog
  8. React面试题总结,一文说清!
  9. 思科光传输功率查询_常见的6款40G QSFP+光模块型号介绍及应用
  10. 避障跟随测距c语言程序,红外避障小车c语言程序.pdf
  11. 洛谷P2144 bzoj1002 [FJOI2007]轮状病毒 (高精度板子)
  12. Linux 性能监测:介绍
  13. IT行业必须知道的基础知识
  14. 2020-12-19 nn.CrossEntropyLoss()
  15. cmake flags
  16. java判断是否是英文_Java 判断输入是否为英文字符
  17. Ubuntu 如何安装 微信?实测
  18. Python 读文件并按十六进制输出
  19. 【opencv-c++】cv::ximgproc::thinning图像细化算法
  20. 我的世界服务器怎么无限刷红石,我的世界:生存最需要的5个红石机器!MC大神才能看懂这操作!...

热门文章

  1. 传统推荐模型——协同过滤
  2. 爬虫英雄联盟官网的全英雄介绍和技能介绍
  3. 如何做一个优秀的管理者
  4. OPA:open policy agent简介
  5. 苏州外包php,【苏州IT外包经验】Ubuntu 17.10系统下配置PHP+Apache+Mysql
  6. 买土豆的故事(转中外管理)
  7. bindingResult
  8. 【懒懒的Tensorflow学习笔记一之快速入门】
  9. 【5G】5GC网元服务及对应消息
  10. 戴维斯分校 计算机硕士,加州大学戴维斯分校计算机研究生录取条件是什么?