Angular12和WebApi多语言使用
1.安装ngx-translate
运行下面命令安装@ngx-translate/core和@ngx-translate/http-loader:
npm install @ngx-translate/core --save
npm install @ngx-translate/http-loader –save
2.配置多语言
1.在根模块app.module.ts下导入TranslateModule,并定义配置
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}
@NgModule({
imports: [
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient],
},
}),
],
providers: [
{ provide: NZ_I18N, useValue: en_US },
]
})
2.在./src/assets/i18n下创建多语言文件en_US.json和zh-CN.json,多语言的值是json形式展示
cd ./src/assets/i18n
ls en_US.json
ls zh-CN.json
3.注入TranslateService服务,并定义设置语言的函数,例如调用函数切换为英文setLanguage('en_US')
//注入多语言服务
constructor(private translate: TranslateService){}
//设置语言
async setLanguage(lang: FrontEndLanguage) {
await this.translate.use(lang).toPromise();
}
3.设置自定义文件夹
如果你想自定义多语言文件存放的路径,那就必须实现TranslateLoader
1.继承TranslateLoader,实现方法
export class CustomTranslateHttpLoader implements TranslateLoader {
constructor(private http: HttpClient) { }
getTranslation(lang: string) {
const prefix = './assets/language/';
const suffix = '.json';
this.http.head
return this.http.get(`${prefix}${lang}${suffix}`, { headers: { 'Content-Type': 'application/json;charset=utf-8' } });
}
}
2.然后在app.module.ts下的HttpLoaderFactory中使用自定义的加载器
export function HttpLoaderFactory(http: HttpClient) {
return new CustomTranslateHttpLoader(http);
}
4.多语言使用
1.在后端ts获取多语言信息,首先注入TranslateService服务
//注入多语言服务
constructor(private translate: TranslateService){}
//获取多语言值
this.translate.instant(summary);
2.在html中给表格的列头添加多语言值,“th”:{"Name":'名称'}
<th nzAlign="center" nzWidth="20%" ><span style="color: red;"> </span>{{"th.Name"|translate}}</th>
5.WebAPI实现多语言
首先为什么需要后端多语言,前端不是有了吗?主要针对一些特殊提示,只能后端返回的场景,如果你对Asp .net管道模型或者webAPI框架有足够深入,可以使用HttpModule或者根据你的业务需要,自己在框架上扩展都可以,此处使用DelegatingHandler在webAPI管道中拦截的方式实现,主要实现步骤如下:
1.首先需要客户端在请求头带上语言表示当前请求的语言类型,然后web项目中创建资源文件

2.实现DelegatingHandler,以作为拦截输出
public class CultureDelegatingHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.Headers.TryGetValues("culture", out IEnumerable<string> values);
if (values != null && values.Count() > 0)
{
string language = values.FirstOrDefault().Replace('_', '-');
switch (language)
{
case "EN":
language = "en_us";
break;
case "ZH":
language = "zh-CN";
break;
}
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(language);
}
return base.SendAsync(request, cancellationToken);
}
}
Angular12和WebApi多语言使用的更多相关文章
- Golang 入门系列(十一)Go语言实现webapi
之前,已经讲过很多Golang的东西,比如基础语法,mysql的使用,redis的使用等等,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/ca ...
- webApi 验证basic-authentication认证的资源的各种语言的实现
HTTP Basic authentication (BA) 是一个基于http请求的,简单验证.详细资料:https://en.wikipedia.org/wiki/Basic_access_aut ...
- Go语言实现FastDFS分布式存储系统WebAPI网关
前言 工作需要,第一次使用 Go 来实战项目. 需求:采用 golang 实现一个 webapi 的中转网关,将一些资源文件通过 http 协议上传至 FastDFS 分布式文件存储系统. 一.Fas ...
- ASP.NET Core WebAPI实现本地化多语言(单资源文件)
在Startup ConfigureServices 注册本地化所需要的服务AddLocalization和 Configure<RequestLocalizationOptions> p ...
- .Net语言 APP开发平台——Smobiler学习日志:手机应用的TextTabBar快速实现方式
参考页面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-put.html http://www.yuanjiaocheng.net/we ...
- ABP教程-给项目添加SwaggerUI,生成动态webapi
上一篇,我们是正式将ABP生成的代码项目,跑起来了,然后演示了下多租户的不同.那么这篇我们就来实现下SwaggerUI. Q:SwaggerUI是干什么的呢? A:他是一个能将我们的webapi,通过 ...
- 微信企业号开发(1)WebAPI在回调模式中的URL验证
微信回调模式的官方文档. 开发语言:C#(微信相关功能代码可以从官网下载) 首先,必须要明确几个参数,这几个参数在微信企业号中,每次调用都会使用到. 1.msg_signature:签名(已加密,加密 ...
- C#工业物联网和集成系统解决方案的技术路线(数据源、数据采集、数据上传与接收、ActiveMQ、Mongodb、WebApi、手机App)
目 录 工业物联网和集成系统解决方案的技术路线... 1 前言... 1 第一章 系统架构... 3 1.1 硬件构架图... 3 1.2 ...
- webapi文档描述-swagger
最近做的项目使用mvc+webapi,采取前后端分离的方式,后台提供API接口给前端开发人员.这个过程中遇到一个问题后台开发人员怎么提供接口说明文档给前端开发人员,最初打算使用word文档方式进行交流 ...
- Linux(CentOS 6.7)下配置Mono和Jexus并且部署ASP.NET MVC3、4、5和WebApi(跨平台)
1.开篇说明 a. 首先我在写这篇博客之前,已经在自己本地配置了mono和jexus并且成功部署了asp.net mvc项目,我也是依赖于在网上查找的各种资料来配置环境并且部署项目的,而其在网上也已有 ...
随机推荐
- (NLP)关键词提取之——TF-IDF解析
关键词提取--TF-IDF 1 TF-IDF定义 概要 tf-idf(英语:term frequency–inverse document frequency)是一种用于信息检索与文本挖掘的常用加权技 ...
- K8s 部署一套 MySQL 集群
一般情况下 Kubernetes 可以通过 ReplicaSet 以一个 Pod 模板创建多个 pod 副本,但是它们都是无状态的,任何时候它们都可以被一个全新的 pod 替换.然而有状态的 pod ...
- 一文玩转NGINX(对于NGINX,你真的了解吗?)
前言 nginx [engine x] 是一个 HTTP 和反向代理服务器, 邮件代理服务器, 和一个通用的 TCP/UDP 代理服务器, 最初由 Igor Sysoev. 运行了很久 在许多负载重的 ...
- C++ 容器(STL容器)
容器(container)用于存放数据的类模板.可变长数组.链表.平衡二叉树等数据结构在STL中都被实现为容器. 在使用容器时,即将容器类模型实例化为容器类,会指明容器中存放的元素是什么类型. 容器可 ...
- WPF透明框设置Demo
<Window x:Class="GuiDB.EBMultiEditTextWin" xmlns="http://schemas.microsoft.com/win ...
- 代码随想录第二天|数组part02
开始时间10:30 209.长度最小的子数组 题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解. 拓展题目可以先不做. 题目链接:https://lee ...
- 2023人形全能赛v831代码(包括YOLOv2识别和扫码以及颜色识别)
v831 import time, math from maix import nn, camera, display, image import serial class YOLOv2: def _ ...
- Kubernets初窥门径 (NameSpace、Pod、Label、Deployment、Service)
1.Namespace Namespace是Kubernetes系统中一种非常重要的资源,它的主要作用是用来实现多套系统的资源隔离或者多租户的资源隔离. 默认情况下,Kubernetes集群中的所有P ...
- 手把手教你实现PyTorch版ViT:图像分类任务中的Transformer实战
作者:SkyXZ CSDN:SkyXZ--CSDN博客 博客园:SkyXZ - 博客园 ViT论文Arxiv地址:An Image is Worth 16x16 Words: Transformers ...
- STM32学会要花费多长时间?一个从机械转行老程序员的血泪史
看到这个问题,我不禁想起了6年前那个拿着机械毕业证却被分配到电子部门的懵逼青年--没错,就是我. 当时坐在工位上,面对着桌上那块STM32F103的开发板,内心是崩溃的.我特么学了四年机械,研究生又搞 ...