Angular ngx-translate 国际化实践(中文转英文)
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 国际化实践(中文转英文)的更多相关文章
- 利用angular结合translate为项目实现国际化
前言 利用H5项目第一版本已经上线,话说有了第一期就有了第二期,这不要为第二期做准备了,老大发话第一件事就要利用Angular JS实现项目的国际化以及后续要借助这个框架来实现其他功能,好吧我表示没怎 ...
- js控制文本框只能输入中文、英文、数字与指定特殊符号.
先在'' 里输入 onkeyup="value=value.replace(/[^\X]/g,'')" 然后在(/[\X]/g,'')里的 X换成你想输入的代码就可以了, 中文u4 ...
- JAVAWEB项目实现验证码中文、英文、数字组合
验证码基础 一.什么是验证码及它的作用 :验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意 ...
- (js) 输入框只能输入中文、英文、数字、@符号和.符号
只能输入中文.英文.数字.@符号和.符号<input type="text" onkeyup="value=value.replace(/[^\a-\z\A-\Z0 ...
- JS 控制文本框只能输入中文、英文、数字与指定特殊符号
想做姓名输入的js判断是否是中文,但是网上找的很多是源于一篇文章的,判断中文的正则式不对,后来找到一个可以准确判断了,但是是监测里面有中文的就行,跟我想要的只能输入中文的意思相左,所以又找了下面的 J ...
- Matlab界面语言切换,自由显示中文或英文语言
Matlab界面语言切换,自由显示中文或英文语言分享给大家,Matlab是一款商业数学软件,广泛使用于算法的开发.数据发现和数值计算等.不同用户对Matlab显示的语言需求也不一样,一用户习惯使用中文 ...
- Java判断字符串是中文还是英文
在做开发的时候我们经常需要用到根据某个字符或者字符串来判断其是中文还是英文,从而做相应的处理,其实不难,大多数人们都是用到正则来判断的,下面小贝就给大家分享一下Java判断字符串是中文还是英文 推荐文 ...
- JS 数字 、中文、 英文、判断
<pre name="code" class="html">单独的验证: 利用正则表达式限制网页表单里的文本框输入内容: 用正则表达式限制只能输入中 ...
- JAVA 统计字符串中中文,英文,数字,空格的个数
面试题:输入一行字符,分别统计出其中英文字母.中文字符.空格.数字和其它字符的个数 可以根据各种字符在Unicode字符编码表中的区间来进行判断,如数字为'0'~'9'之间,英文字母为'a'~'z'或 ...
- js控制文本框仅仅能输入中文、英文、数字与指定特殊符号
JS 控制文本框仅仅能输入数字 <input onkeyup="value=value.replace(/[^0-9]/g,'')"onpaste="value=v ...
随机推荐
- Nginx rewrite 详解
Nginx rewrite 详解 本篇主要介绍 nginx 的 rewrite 重定向这个功能进行 详解介绍, 以及介绍它的使用场景 1. rewrite 基本介绍 rewrite是实现URL重写的关 ...
- python 定时发送邮件
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart f ...
- 5、基于EasyExcel的导入导出
一.Apach POI处理Excel的方式: 传统Excel操作或者解析都是利用Apach POI进行操作,POI中处理Excel有以下几种方式: 1.HSSFWorkbook: HSSFWorkbo ...
- 使用xshell连接linux虚拟机
目录 1.涉及的软件 2.连接步骤 2.1.虚拟机网络连接设置 2.2.配置linux的ip地址 2.3.关闭linux的防火墙 2.4.启动ssh服务 2.5.使用xshell连接linux 1.涉 ...
- 前菜--Numpy
import numpy as np NumPy : numberial python NumPy的核心:数据结构 ndarray 1.1 数组方法 np.array 创建数组 基本语法:np.arr ...
- 如何用 30s 给面试官讲清楚什么是 Session-Cookie 认证
引言 由于 HTTP 协议是无状态的,完成操作关闭浏览器后,客户端和服务端的连接就断开了,所以我们必须要有一种机制来保证客户端和服务端之间会话的连续性,也称为认证,最常见的应用场景就是保持用户的登录态 ...
- Java学习笔记:2022年1月8日
Java学习笔记:2022年1月8日 摘要:这天主要学习了HTML超文本标记语言以及CSS层叠样式表的基本知识,主要就是通过这两种技术进行基本的网页渲染. 目录 Java学习笔记:2022年1月8日 ...
- P8775 [蓝桥杯 2022 省 A] 青蛙过河
简要题意 有一只青蛙在 \(1\) 处,有一些石头,位于 \(2,3,4,\cdots n\),它们的高度是 \(H_2,H_3,\cdots,H_n\).青蛙每落一次石头,该石头的高度就会 \(-1 ...
- Jest如何有序地执行测试
项目场景: node环境下编写js库,处于规范性考虑,需要做单元测试,我选择了Jest 问题描述 我的js库需要访问数据库,因此操作都是异步的,而且各个测试单元有严格的先后执行顺序(比如,建表 > ...
- Translent关键字-InvalidClassException异常_原理和解决方案
Translent关键字 static关键字:静态关键字静态优先于非静态加载到内存中(静态优先于对象进入到内存中)被static修饰的成员变量不能被序列化的,序列化的都是对象private stati ...