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. git、docker、lunix、python、pycharm等常用命令整理

    git的使用 上传代码git clone ....git branch new_branchgit checkout branch_namegit add .git commit -m "& ...

  2. referer的反爬和爬虫下载视频

    一.缘由 在梨视频等一些网站中会使用防盗链作为反爬的基础方法,这个反爬并不严重,只是平时的时候需要多加留意.此次实现对应链接中梨视频的下载. 二.代码实现 #1.拿到contid #2.拿到video ...

  3. STM32按键控制LED亮灭的代码

    led.c #include "led.h" void LED_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2P ...

  4. c++中编码protobuf repeated string

    参考:http://www.cppblog.com/API/archive/2014/12/09/209070.aspx proto文件 addressbook.proto syntax = &quo ...

  5. [python]《Python编程快速上手:让繁琐工作自动化》学习笔记3

    1. 组织文件笔记(第9章)(代码下载) 1.1 文件与文件路径 通过import shutil调用shutil模块操作目录,shutil模块能够在Python 程序中实现文件复制.移动.改名和删除: ...

  6. [编程基础] Python配置文件读取库ConfigParser总结

    Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件. 文章目录 1 介绍 1.1 Python ConfigParser读取文件 1.2 Py ...

  7. MongoDB分片副本集生产环境部署-Windows版本

    title: MongoDB分片副本集生产环境部署(Windows版本) date: 2022-10-29 17:21:11 tags: - 运维 系统架构 配置环境 系统都是windows 10 专 ...

  8. 《深度探索C++对象模型》第六章 执行期语意学

    new运算符和delete运算符 运算符new看似是一个简单的运算,比如: int *pi=new int(5); 但是它实际由两个步骤完成: 1.通过适当的new运算符函数实体,配置所需的内存: / ...

  9. 《深度探索C++对象模型》第四章 Function语意学

    member function相对于nonmember function之间不存在效率之间的差别,因为编译器内部已经将"member 函数实体"转化为对等的"nonmem ...

  10. python实现简单信息收集

    python实现简单信息收集 import whois import socket import sys def Query(domain): ip = socket.gethostbyname(st ...