1.安装包

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

2.根模块app.module.ts 引入

import { HttpClientModule, HttpClient } from '@angular/common/http';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
export function createTranslateLoader(http: HttpClient) {
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
} imports: [
HttpClientModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: createTranslateLoader,
deps: [HttpClient]
}
})
],

3.在有需要的模块引入 TranslateModule

import { TranslateModule } from '@ngx-translate/core';
imports: [
TranslateModule,
]

4.新建语言转换文件

  在assets新建文件夹 i18n,新建语言文件(名字自定义即可):

  

  正常用en-Us.json 代表英文,内容如下

{
"用户登录":"User Login",
"账号":"Account",
"密码":"Pwd",
"验证":"Verify",
"登录":"Login",
"取消":"Cancel",
"请滑动到":"Swipe to"
}

  我们是中文转英文,所以

  zh-CN.json 如下即可:

{

}

5.在component 注册服务和使用

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

  constructor(
private translate: TranslateService
) {
this.translate.use('en-US');
}

  1)无参:

  三个方法

--管道翻译
<a>{{'用户登录'| translate}}</a> --命令翻译
<a [translate]="'用户登录'"></a> --服务翻译
cancel='取消'
ts:
this.translate.get(this.cancel).subscribe((res: string) => {
this.cancel = res;
});
html:
<button mat-raised-button>{{cancel}}</button> 在属性上面使用,也是可以的,如下:
<input matInput type="text" [placeholder]="'账号'|translate" [(ngModel)]="acc">
<input matInput type="password" placeholder="{{'密码'| translate}}" [(ngModel)]="pwd">

  2)有参:

  修改 en-Us.json

{
"用户登录":"User Login {{user}}",
"取消":"Cancel {{ee}}",
}

  同样是三个方法

--管道翻译
<a>{{'用户登录'| translate:{user:'kxy'} }}</a> --命令翻译
<a [translate]="'用户登录'" [translateParams]="{user:'kxy'}"></a> --服务翻译
cancel='取消'
ts:
this.translate.get(this.cancel, { 'ee': '?' }).subscribe((res: string) => {
console.log(res); // welcome to this app
this.cancel = res;
});
html:
<button mat-raised-button>{{cancel}}</button>

  效果图展示:

  

6.扩展:

  可以将服务封装起来

import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { TranslateService } from '@ngx-translate/core';
import { Subscription } from 'rxjs';
import { DialogService } from 'src/app/dialog/dialog.service'; @Injectable({
providedIn: 'root'
})
export class LanguageService {
private _sub: Subscription = new Subscription(); constructor(
public router: Router,
public translate: TranslateService,
public ds: DialogService,
) {
} ngOnDestroy() {
console.log('ngOnDestroy')
if (this._sub) { this._sub.unsubscribe(); }
}
iniLanguage(): string {
let lang = window.localStorage.getItem('_language');
if (lang == 'en-US') {
this.translate.use('en-US');
return 'English'
}
else {
this.translate.use('zh-CN');
return '中文'
}
}
changeLanguage(nowLanguage: string, url: string) {
if (nowLanguage == '中文') {
this._sub.add(
this.ds.openConfirm('是否切换到[English],切换后会刷新界面').subscribe(res => {
if (res == 'yes') {
window.localStorage.setItem('_language', 'en-US');
this.router.navigateByUrl('/', { skipLocationChange: true }).then(
() => {
this.router.navigate([url]);
}
)
}
})
)
}
if (nowLanguage == 'English') {
this._sub.add(
this.ds.openConfirm('Whether to switch to [中文], the interface will refresh after switching').subscribe(res => {
if (res == 'yes') {
window.localStorage.removeItem('_language');
this.router.navigateByUrl('/', { skipLocationChange: true }).then(
() => {
this.router.navigate([url]);
}
)
}
})
)
}
}
}

  页面组件中仅需

  iniLanguage() {
this.language = this.langService.iniLanguage();
if (this.language == 'English') {
for (let i = 0; i < this.menu.length; i++) {
this.langService.translate.get(this.menu[i].desc as string).subscribe((res: string) => {
this.menu[i].desc = res;
});
}
}
}
changeLanguage(nowLanguage: string) {
this.langService.changeLanguage(nowLanguage, '/plm');
}

 iniLanguage() 最外层组件调用一次即可,无需所有组件都调用。

 对应的子组件子页面模块,如果无需用服务翻译,那仅需在模块中引入 TranslateModule即可使用pipe

Angular ngx-translate 国际化实践(中文转英文)的更多相关文章

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

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

  2. js控制文本框只能输入中文、英文、数字与指定特殊符号.

    先在'' 里输入 onkeyup="value=value.replace(/[^\X]/g,'')" 然后在(/[\X]/g,'')里的 X换成你想输入的代码就可以了, 中文u4 ...

  3. JAVAWEB项目实现验证码中文、英文、数字组合

    验证码基础 一.什么是验证码及它的作用 :验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意 ...

  4. (js) 输入框只能输入中文、英文、数字、@符号和.符号

    只能输入中文.英文.数字.@符号和.符号<input type="text" onkeyup="value=value.replace(/[^\a-\z\A-\Z0 ...

  5. JS 控制文本框只能输入中文、英文、数字与指定特殊符号

    想做姓名输入的js判断是否是中文,但是网上找的很多是源于一篇文章的,判断中文的正则式不对,后来找到一个可以准确判断了,但是是监测里面有中文的就行,跟我想要的只能输入中文的意思相左,所以又找了下面的 J ...

  6. Matlab界面语言切换,自由显示中文或英文语言

    Matlab界面语言切换,自由显示中文或英文语言分享给大家,Matlab是一款商业数学软件,广泛使用于算法的开发.数据发现和数值计算等.不同用户对Matlab显示的语言需求也不一样,一用户习惯使用中文 ...

  7. Java判断字符串是中文还是英文

    在做开发的时候我们经常需要用到根据某个字符或者字符串来判断其是中文还是英文,从而做相应的处理,其实不难,大多数人们都是用到正则来判断的,下面小贝就给大家分享一下Java判断字符串是中文还是英文 推荐文 ...

  8. JS 数字 、中文、 英文、判断

    <pre name="code" class="html">单独的验证: 利用正则表达式限制网页表单里的文本框输入内容: 用正则表达式限制只能输入中 ...

  9. JAVA 统计字符串中中文,英文,数字,空格的个数

    面试题:输入一行字符,分别统计出其中英文字母.中文字符.空格.数字和其它字符的个数 可以根据各种字符在Unicode字符编码表中的区间来进行判断,如数字为'0'~'9'之间,英文字母为'a'~'z'或 ...

  10. js控制文本框仅仅能输入中文、英文、数字与指定特殊符号

    JS 控制文本框仅仅能输入数字 <input onkeyup="value=value.replace(/[^0-9]/g,'')"onpaste="value=v ...

随机推荐

  1. intel Pin:动态二进制插桩的安装和使用,以及如何开发一个自己的Pintool

    先贴几个你可能用得上的链接 intel Pin的官方介绍Pin: Pin 3.21 User Guide (intel.com) intel Pin的API文档Pin: API Reference ( ...

  2. 时间片差分调度法-充分利用MCU的资源

    前言 通过该篇学习了嵌入式的任务调度(即时间片论法)后,了解到通过以1ms为调度时间单位轮询判断是否需要执行函数任务,那么下面介绍如何基于时间片论法的任务调度模式充分利用MCU的资源,姑且先称这种方式 ...

  3. 【机器学习】李宏毅——AE自编码器(Auto-encoder)

    1.What 在自编码器中,有两个神经网络,分别为Encoder和Decoder,其任务分别是: Encoder:将读入的原始数据(图像.文字等)转换为一个向量 Decoder:将上述的向量还原成原始 ...

  4. 【机器学习】李宏毅——Domain Adaptation(领域自适应)

    在前面介绍的模型中,一般我们都会假设训练资料和测试资料符合相同的分布,这样模型才能够有较好的效果.而如果训练资料和测试资料是来自于不同的分布,这样就会让模型在测试集上的效果很差,这种问题称为Domai ...

  5. 基于 Traefik 的 ForwardAuth 配置

    前言 Traefik 是一个现代的 HTTP 反向代理和负载均衡器,使部署微服务变得容易. Traefik 可以与现有的多种基础设施组件(Docker.Swarm 模式.Kubernetes.Mara ...

  6. 一篇文章带你了解设计模式原理——UML图和软件设计原则

    一篇文章带你了解设计模式原理--UML图和软件设计原则 我们在学习过程中可能并不会关心设计模式,但一旦牵扯到项目和面试,设计模式就成了我们的短板 这篇文章并不会讲到二十三种设计模式,但是会讲解设计模式 ...

  7. [OpenCV实战]48 基于OpenCV实现图像质量评价

    本文主要介绍基于OpenCV contrib中的quality模块实现图像质量评价.图像质量评估Image Quality Analysis简称IQA,主要通过数学度量方法来评价图像质量的好坏. 本文 ...

  8. Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level

    云服务器很久没管过了,今天去看了下云服务器日志,不看不知道,一看吓一跳. 日志里竟然是一排的报错,再翻下此前的日志,每天都报一个错误: [http-nio-80-exec-10] org.apache ...

  9. 【随笔】Ubuntu18.04下virtualbox卡死的解决办法

    //得到该进程ID X pgrep Xorg //杀掉进程 kill X 然后重新登陆帐号即可

  10. 如何在 pyqt 中使用动画实现平滑滚动的 QScrollArea

    前言 在之前的博客<如何在 pyqt 中实现平滑滚动的 QScrollArea>中,我们使用定时器和队列实现了平滑滚动.但是实现代码还是有一点复杂,所以这篇博客将使用 Qt 的动画框架 Q ...