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. 推荐一款 在线+离线数据 同步框架 Dotmim.Sync

    移动智能应用可以分为在线模式.纯离线模式与"在线+离线"混合模式.在线模式下系统数据一般存储在服务器端的大中型数据库(如 SQL Server.Oracle.MySQL 等),移动 ...

  2. Spring+Quartz+Dom4j实现一个小项目

    目录 1.项目背景 2.技术介绍 3.实现代码 4.程序演示 5.打成jar包 1.项目背景 最近在工作中碰到了一个问题,一个叫aura的系统每天都会接收到许多xml,其中有些xml会包含错误信息,这 ...

  3. SQLSERVER 的复合索引和包含索引到底有啥区别?

    一:背景 1. 讲故事 在 SQLSERVER 中有非常多的索引,比如:聚集索引,非聚集索引,唯一索引,复合索引,Include索引,交叉索引,连接索引,奇葩索引等等,当索引多了之后很容易傻傻的分不清 ...

  4. 【带你读论文】向量表征经典之DeepWalk

    摘要:详细讲解DeepWalk,通过随机游走的方式对网络化数据做一个表示学习,它是图神经网络的开山之作,借鉴了Word2vec的思想. 本文分享自华为云社区<[论文阅读] (25) 向量表征经典 ...

  5. P8701 [蓝桥杯 2019 国 B] 第八大奇迹

    简要题意 你需要维护一个长度为 \(L\) 的序列 \(a\),初始时全部都是 \(0\),有 \(N\) 个操作,支持: C p x,将 \(a_p\) 修改为 \(x\). Q a b,输出 \( ...

  6. 洛谷P1259 黑白棋子的移动 题解

    本蒟蒻这题用的打表做法,其实也可以理解为是一种递推. 先来观察一下样例: 当n为7时,输出共有14行,易得输出行数为2n. ooooooo*******-- oooooo--******o* oooo ...

  7. 高并发环境下3种方式优化Tomcat性能

    摘要:Tomcat作为最常用的Java Web服务器,随着并发量越来越高,Tomcat的性能会急剧下降,那有没有什么方法来优化Tomcat在高并发环境下的性能呢? 本文分享自华为云社区<[高并发 ...

  8. 常用的函数式接口_supplier接口-接口练习

    常用的函数式接口_supplier接口 常用的函数式接口java.util.function.SuppLier<T>接口仅包含一个无参的方法:T get().用来获取一个泛型参数指定类型的 ...

  9. Java 进阶P-8.13+P-8.14

    格式化输入输出 Print Writer format("格式",...); printf("格式",...); print(各种基本类型); println( ...

  10. DJI Flight Simulator 无人机模拟器 功能介绍与使用说明

    0 前言 无人机是当前非常火热的"相机设备",而大疆又是其中翘楚,功能丰富,可以说是一个将带着云台的智能手机放到了天空中.如果你有自己玩过旋翼无人机航模的话,可能会体会到大疆的另一 ...