angular的国际化方案,采用ngx-translate来实现。

安装模块:

npm install @ngx-translate/core --save

在根模块中导入:

// other module

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

@NgModule({

declarations: [

AppComponent,

],

imports: [

// other module

TranslateModule.forRoot(),

],

providers: [

],

bootstrap: [AppComponent]

})

export class AppModule {

}

我们希望可以在一个固定的文件里面配置对应的翻译文件,然后在每个用到的组件里面使用它,随意我们需要借助TranslateHttpLoader来加载翻译文件。首先安装TranslateHttpLoader:

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

翻译文件可以放在/assets/i18n/[lang].json中,[lang]代表使用的语言文件名称。然后我们可以在跟组件中添加配置对应的加载项:

// other module

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

// 自定义加载方法

export function HttpLoaderFactory(http: HttpClient) {

return new TranslateHttpLoader(http, './assets/i18n/', '.json?');

}

@NgModule({

declarations: [

AppComponent,

],

imports: [

// other module

TranslateModule.forRoot({

loader: {

provide: TranslateLoader,

useFactory: HttpLoaderFactory,

deps: [HttpClient],

}

}),

],

providers: [

],

bootstrap: [AppComponent]

})

export class AppModule {

}

然后我们在翻译文件中配置一个简单的示例:

// /asserts/il8n/en.json

{

"Hello": "hello, {{value}}",

"Introduce": {

"Name": "my name is {{name}}.",

"Today": "today is {{date}}, and now time is {{time}}"

}

}

应用的时候我们可以使用点语法,例如:Introduce.Name。

好了,定义好之后再来看如何使用。我们可以使用服务或管道或指令的方式来达到显示语言的效果。在使用之前,我们需要在应用中初始化TranslateService:

import { Component } from '@angular/core';

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

@Component({

selector: 'app-root',

templateUrl: './app.component.html',

styleUrls: ['./app.component.less']

})

export class AppComponent {

constructor(

public translate: TranslateService,

) {

this.translate.setDefaultLang('en');

this.translate.use('en');

}

}

我倾向于在跟组件的construct里面初始化TranslateService,因为一个系统的翻译是统一的,在开始应用的时候就需要设置好默认语言。这里使用translate.setDefaultLang('en')来设置默认语言为英文。然后使用translate.user('en')手动选择使用英文。在切换语言的时候,我们使用translate.user([lang])来设置启用哪个语言。

最后来使用翻译,有多种使用的方式。来看看。

使用方式

使用Service的方式

在运行的时候,会先发起个请求通过Http获取翻译文件,通过Observable的方式应用参数上去,然后获得翻译的内容。

// app.compent.ts

this.translate.get(

'Introduce.Name',

{name: 'Jarvis'}

).subscribe((res: string) => {

console.log('res', res); // res my name is Jarvis.

});

this.translate.get(

'Introduce.Today',

{

date: new Date().getDate(),

time: new Date().getTime()

},

).subscribe((res: string) => {

console.log('res', res); // res today is 22, and now time is 1534937370461

});

使用pipe的方式

{{'Hello' | translate: param

在js里定义参数param:

const param = {

value: 'world',

};

使用指令

管道的方式虽然方便,但参数还是需要在先定义好,这样子变量多的话也比较繁琐。使用指令的方式可以在程序中直接传参:

或者直接将元素的内容作为key:

Introduce.Today

应用html标签

可以在翻译文件中中定义简单的行级html标签

{

"Hello": "hello, {{value}}",

}

要渲染它们,在任何元素上只需要将innerHTML属性和管道一同使用即可。

常用方法

instant() 即时翻译

有些情况下,我们要在js里面动态的获取值和赋值,这时候没法使用模板语法,使用subscribe的方式又不利于代码的组织,这时候我们需要即时翻译来搞定了。方法定义:

instant(key: string|Array), insterpolateParams?: Object):string|Object

调用的时候传入key和对应的参数,即可返回当前key的翻译:

this.translate.instant('HELLO', {value: 'Jarvis'});

但是需要注意的是,这个方法是同步的,默认加载器是异步的。使用这个方法需要确保翻译文件已经加载完成了,如果不确定,就应该用get的方式。

参考:

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

时间: 2019-05-15

angular做语言切换_angular多语言配置详解相关推荐

  1. C语言向右移三个字母怎么做,c语言左移和右移的示例详解

    逻辑移位,简单理解就是物理上按位进行的左右移动,两头用0进行补充,不关心数值的符号问题. 算术移位,同样也是物理上按位进行的左右移动,两头用0进行补充,但必须确保符号位不改变. 算术移位指令 算术移位 ...

  2. c语言指针用法及实际应用详解,通俗易懂超详细

    c语言指针用法及实际应用详解,通俗易懂超详细! \\\插播一条:文章末尾有惊喜哟~/// 今天给大家来讲解一下指针. 我会由浅到深,最后联合实际应用讲解,让大家学会指针的同时,知道大佬们都用指针来干嘛 ...

  3. c语言编程 输入螺旋数组,C语言 经典题目螺旋矩阵 实例详解

    C语言 经典题目螺旋矩阵 实例详解 C语言 经典题目螺旋矩阵 //N阶螺旋矩阵 #include #include int main() { int N,i,j,n,num=1; int a[10][ ...

  4. c语言二级指针有什么作用,C语言中二级指针的实例详解

    C语言中二级指针的实例详解 C语言中二级指针的实例详解 用图说明 示例代码: #include int main(int argc, const char * argv[]) { // int a = ...

  5. 国际C语言混乱代码大赛优胜作品详解之“A clock in one line

    国际C语言混乱代码大赛优胜作品详解之"A clock in one line" 发表于2013-04-11 17:22| 9419次阅读| 来源StackOverflow| 53  ...

  6. c语言二级证题库及详解答案,全国计算机等级考试二级C语言上机题库及其答案详解...

    全国计算机等级考试二级C语言上机题库及其答案详解 全国计算机二级C语言上机考试题第一套给定程序的功能是:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积( 注: 圆面积公式为:2 ...

  7. Go 语言快速开发入门(基础语法详解,第一节)

    Go 语言快速开发入门(基础语法详解,第一节) 一.基础语法详解,第一节 1.HelloWorld 1.1.代码编写和解释 1.2.go语言注意事项 2.Go 语言的转义字符&&Go ...

  8. Elasticsearch 多语言及中文分词与检索详解

    文章目录 1. 自然语言与查询 Recall 2. 混合多语言的挑战 3. 分词的挑战 4. 中文分词方法的演变 - 字典法 5. 中文分词方法的演变 - 基于统计法的机器学习算法 6. 中文分词器现 ...

  9. c语言结构体成员变量私有化,C语言中结构体变量私有化详解

    C语言中结构体变量私有化详解 背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚 ...

最新文章

  1. 算法面试不懂技巧,你纯属被刷
  2. xen 虚拟机挂了,宿主机假死的问题追终,全思路
  3. hdu 2795(单点改动)
  4. python语言中包含的标准数据类型_Python对象——标准类型的分类
  5. linq to entity 错误 1 错误 75: 类型 视图名称 的键部分 “主键的列名1”无效。该键的所有部分都必须不可以为 null。(转)...
  6. Java实现冒泡排序及逆序冒泡排序
  7. .xls和.xlsx 有什么区别?
  8. php酒店系统论文,基于PHP的酒店管理系统PHP1008(毕业设计+论文)
  9. 洛谷P1640 [SCOI2010]连续攻击游戏 (二分图) HQG_AC 的博客
  10. World从任意页开始设置页码详细教程
  11. 每日一书丨这本书献给所有铸就开源世界的人们
  12. 集成电路将成一级学科,这些高校迎来重大机遇!
  13. 腾讯职场等级(转载自网络)
  14. 花菁染料Cy3.5 炔烃,Cy3.5 alkyne储存条件及光谱特性解析
  15. MATLAB程序:IEEE802.16d路径损耗模型
  16. Verilog转电路图
  17. 监控系统的基本架构(Metric monitoring)
  18. 单片机C语言C51的输入输出
  19. 用C/CCC++实现输出双声道(立体声).wav 文件
  20. 分割字符串的AfxExtractSubString函数

热门文章

  1. 曲靖沾益区计算机学校,【曲靖市沾益区职业技术学校-网址】2021招生简介|怎么样...
  2. rawquery 没扎到返回什么_Flutter之踩坑的日子(RawQuery的使用)
  3. python异常值检测_python – 使用RPCA的异常值
  4. WSDM 2022 | 一种用于在线广告自动竞价的协作竞争多智能体框架
  5. java is开头版本解决_eclipse指定jdk版本启动,解决Version XXXX of the JVM is not
  6. eovs实训报告总结心得_实训总结与心得体会3篇_心得体会
  7. CST normalize S-parameter to given impedance
  8. 穿越剧_张宇鑫:穿越剧——从皇帝到乞丐
  9. super在python3和python2_Python扩展与 – 使用super()python 3 vs python 2
  10. 『数据库』怎样设计一个数据库