NetCore 国际化最佳实践

NetCore 国际化最佳实践

ASP.NET Core中提供了一些本地化服务和中间件,可将网站本地化为不同的语言文化。ASP.NET Core中我们可以使用Microsoft.AspNetCore.Localization库来实现本地化。但是默认只支持使用资源文件方式做多语言存储,很难在实际场景中使用。有没有可能支持官方资源文件的基础上还能支持动态添加修改多语言呢,答案是有的,那就是NetPro.Globalization

安装

Package Manager方式:

Install-Package NetPro.Globalization 6.0.10

.NET CLI 方式:

dotnet add package NetPro.Globalization --version 6.0.10

PackageReference:

<PackageReference Include="NetPro.Globalization" Version="6.0.10" />

.NET CLI 方式:

paket add NetPro.Globalization --version 6.0.10

基于NetPro环境的初始化

如基于NetPro环境的使用,比较简单,在执行安装步骤后配置多语言持久化的sqlite地址即可

"Globalization": {"UIQueryStringKey": "language", //请求的query携带的多语言参数名,默认为language"ConnectionString": "Data Source=Globalization.db;Cache=Shared", //sqlite地址"Cultures": ["zh-CN","en-US"],"Annotations": true, //是否打开注册数据注解本地化服务"Record": true //不存在是否记录(自动插入数据库默认语系),默认true}

脱离NetPro环境的使用

如不是基于NetPro环境的使用,比需要手动进行各项初始化

public void ConfigureServices(IServiceCollection services){services.AddGlobalization();}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){//置于app.UseRouting()后便可;var configuration = app.ApplicationServices.GetService<IConfiguration>();var globalization = configuration.GetSection(nameof(Globalization)).Get<Globalization>();var cultures = globalization?.Cultures ?? new string[] { };var localizationOptions = new RequestLocalizationOptions().AddSupportedUICultures(cultures);localizationOptions.RequestCultureProviders.Insert(0, new QueryStringRequestCultureProvider { UIQueryStringKey = globalization.UIQueryStringKey });localizationOptions.RequestCultureProviders.Insert(1, new AcceptLanguageHeaderRequestCultureProvider());localizationOptions.RequestCultureProviders.Insert(2, new CookieRequestCultureProvider());app.UseRequestLocalization(localizationOptions);}

使用

public class GlobalizationDemoController : ControllerBase{private readonly IStringLocalizer<NetPro.Globalization.Globalization> _localizer;//建议使用NetPro.Globalization.Globalization 统一的类提供字符串承载,过多语言碎片public GlobalizationDemoController(, IStringLocalizer<NetPro.Globalization.Globalization> localizer){_localizer = localizer;}/// <summary>/// 多语言国际化示例/// </summary>[HttpGet("globalization")]public IActionResult Globalization(){var localMsg = _localizer["当前时间为"] + $":{DateTime.Now}";return Ok(new { localMsg });}}

客户端处理

客户端请求接口时,依次支持,query,header,cookie等三种方式携带多语言标识

  • query 默认 language; 支持修改UIQueryStringKey节点覆盖默认参数名,推荐query方式

  • header 默认 Accept-Language

  • cookie 默认为 .AspNetCore.Culture  既:(Microsoft.AspNetCore.Localization.CookieRequestCultureProvider.DefaultCookieName)

实验:

中文环境:

request http://localhost:5001/api/globalizationdemo/globalization?language=zh-CN
response localMsg: "当前时间为:2022/6/11 14:47:01"

英文环境:

request http://localhost:5001/api/globalizationdemo/globalization?language=en-US
response localMsg: "当前时间为:2022/6/11 14:47:01"

发现依然中文,原因是找不到对应的语言,会自动将_localizer[string]中的字符串作为默认值插入,此时只需要手动再插入一条en-US的翻译即可

4da0525fea1f04a59a9660b1d29527f0.png

再次请求:

request http://localhost:5001/api/globalizationdemo/globalization?language=en-US
response localMsg: "This  time is:2022/6/11 14:50:25"

总结

除了以上支持sqlite数据库存储多语言信息,同时也支持微软默认的资源文件方式,并且使用方式与原生一致,不会有新的学习成本。

NetPro.Globalizatio:

https://github.com/LeonKou/NetPro/tree/dev_6.0/src/Library/NetPro.Globalization

NetPro框架Github地址:

https://github.com/LeonKou/NetPro

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285084.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

复分析——第1章——复分析准备知识(E.M. Stein R. Shakarchi)

第一章 复分析准备知识 (Preliminaries to Complex Analysis) The sweeping development of mathematics during the last two centuries is due in large part to the introduction of complex numbers; paradoxically, this is based on the seemingly absurd no…

【ArcGIS微课1000例】0009:ArcGIS影像拼接(镶嵌、镶嵌至新栅格)

本课程以 DEM数据为例,讲述ArcGIS中影像的拼接方法及注意事项。 文章目录 方法一:Mosaic工具方法二:Mosaic To New Raster工具实验数据下载观察两个数据,接边处切合效果很好。 方法一:Mosaic工具 使用Mosaic工具要千万注意,Mosaic的结果是将输入栅格追加到目标栅格上,…

C语言试题170之矩阵转置

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款刷算法、笔试、面经、拿大公司offer神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:设有一矩…

【ArcGIS微课1000例】0010:ArcGIS影像裁剪(裁剪、掩膜提取)

文章目录 裁剪方法方法一:Extract By Mask(按掩膜提取)方法二:Clip(裁剪)数据下载裁剪方法 方法一:Extract By Mask(按掩膜提取) 加载配套的实验数据,运行Extract By Mask(按掩膜提取)工具,参数设置如下: 掩膜提取结果: 方法二:Clip(裁剪) 加载配套的实验…

阿里创新自动化测试工具平台--Doom

背景 信息系统上线后通常会需要迭代升级甚至重构&#xff0c;如何确保系统原有业务的正确性非常重要。曾经有一家叫瑞穗证券的证券公司因为一个系统bug导致了数亿美金的损失&#xff0c;赔掉了公司一年的利润。这样的极端例子虽然少见&#xff0c;但是却像达摩克利斯之剑警示着…

《微信读书》自定义样式

一直用微信读书看书&#xff0c;但是微信读书的Web版的布局不太喜欢。 重写下它的样式再加上单击关闭工具栏&#xff0c;这样看着舒服多了^_^&#xff1a; /*浮动工具栏*/ document.getElementsByClassName("readerControls")[0].style.left"0"; document.…

C# NanoFramework WIFI扫描、连接和HttpWebRequest 之 ESP32

可喜可贺新板子终于到了&#xff0c;啥也不说&#xff0c;赶紧搞起来。ESP32的主要功能就是WIFI&#xff0c;有了WIFI &#xff0c;就可以直接连接家里的WIFI路由器啥的&#xff0c;直接连接到外网了&#xff0c;这个时候&#xff0c;它就相当于是一个小型的电脑或手机&#xf…

【ArcGIS微课1000例】0011:ArcGIS空间查询(按位置选择Select by Location)完全案例详解

利用按位置选择工具,您可以根据要素相对于另一图层要素的位置来进行选择。例如,如果您想了解最近的洪水影响了多少家庭,那么可以选择该洪水边界内的所有家庭。 您可使用多种选择方法,选择与同一图层或其他图层中的要素接近或重叠的点、线或面要素。 文章目录 1、点—点查询…

[转]收集android上开源的酷炫的交互动画和视觉效果:Interactive-animation

原文链接&#xff1a;http://www.open-open.com/lib/view/open1411443332703.html 描述&#xff1a;收集android上开源的酷炫的交互动画和视觉效果。 1.交互篇 2.视觉篇 交互篇 1.SlidingUpPanelLayout 项目介绍&#xff1a;他的库提供了一种简单的方式来添加一个可拖动滑动面板…

EntityFramework用法探索(三)CodeFirst流畅API

Code First Fluent API&#xff0c;使用流畅API来定义模型映射。 同样使用与上文 Database First 模式相同的例子&#xff0c;假设需要设计一个零售系统&#xff0c;我们先构建一个 Customer 类。 1 public class Customer 2 { 3 public long Id { get; set; } 4 p…

js浏览器对象模型(BOM)

浏览器对象模型(Browser Object Model,BOM)&#xff1a;浏览器为js提供的对象集合。 1 windows对象 windows对象&#xff1a;表示浏览器的框架以及与其相关的内容&#xff0c;比如滚动条和导航栏图标等等。或者说windows对象就代表浏览器本身。windows对象是个全局对象&#xf…

Hello Playwright:(8)等待页面加载

在我们前面的文章中&#xff0c;我们始终使用await page.GotoAsync(url);加载页面&#xff0c;我们的目的是等待足够长的时间让页面上的元素出现。但是&#xff0c;我们更希望永远不要因为等待浪费任何时间。WaitUntilGotoAsync方法的定义如下&#xff1a;Task<IResponse?&…

【ArcGIS微课1000例】0012:ArcGIS创建及连接ArcSDE企业级地理数据库实例

文章目录 实验材料实验过程创建企业级数据库连接企业级数据库创建要素类要素入库实验材料 ArcGIS:版本为10.2Server.ecp:版本为10.2SQL Server:版本为2008实验过程 创建企业级数据库 企业级地理数据库的创建需要通过工具箱来实现。 数据库平台:SQL Server 实例:localhos…

C语言试题172之实现冒泡排序算法

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款刷算法、笔试、面经、拿大公司offer神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:实现冒泡…

Qt移动应用开发(八):实现跨平台的QML和OpenGL混合渲染

Qt移动应用开发&#xff08;八&#xff09;&#xff1a;实现跨平台的QML和OpenGL混合渲染 上一篇文章讲到了利用C这个桥梁&#xff0c;我们实现了QML和Java的交互。Qt 5大力推崇的QML/JS开发&#xff0c;让轻量、高速开发的QML/JS打头阵&#xff0c;让重量的C撑腰&#xff0c;差…

【ArcGIS微课1000例】0013:ArcGIS创建色带图例(以GlobeLand30土地覆盖数据为例)

本文以GlobeLand30土地覆盖数据(2010年)为例,讲解在ArcGIS中创建色带图例的方法。 案例数据: 色带图例: 创建过程: 选择2010年数据,点击添加到右侧的图例项。 在图例向导里面,删除图例标题,点击下一步。

使用.NET IoT驱动超声波测距传感器

背景最近买的一堆传感器到货了&#xff0c;先来把玩一下超声波测距传感器。超声波传感器一般用于机器人&#xff0c;小车的避障&#xff0c;物体的测距&#xff0c;液位检测&#xff0c;停车检测等领域。HC-SR04知识回顾开始之前我们先复习一下高中的物理知识。原理通过上图的原…

2019-nCoV 全国新型肺炎疫情每日动态趋势可视图

传染源: 野生动物&#xff0c;可能为中华菊头蝠 病毒: 新型冠状病毒 2019-nCoV 传播途径: 经呼吸道飞沫传播&#xff0c;亦可通过接触传播 易感人群: 人群普遍易感。老年人及有基础疾病者感染后病情较重&#xff0c;儿童及婴幼儿也有发病 潜伏期: 一般为 3~7 天&#xff0c;最长…

【ArcGIS遇上Python】ArcGIS Python将多个文件夹内的分幅数据整合到同一个文件夹内——以Globeland30数据为例

文章目录 WinRAR解压缩ArcGIS Python批处理从Glabeland30官网下载的全球地覆盖数据包括3年(2000、2010、2020),每一年都是按图幅存储的tif格式栅格数据。以2000的数据为例,全球共812个图幅,每一个图幅对应一个压缩包,如下图所示。 WinRAR解压缩 在进行数据预处理时,必须…

Docker Compose 安装 Superset

前言动手学 dockerSuperset 是一个强大的在线 SQL 查询编辑工具&#xff0c;同时也是一个轻量级的 BI 工具&#xff0c;今天我们就来动手学一下用 docker compose 安装 Superset。安装动手学 docker安装 git 并克隆项目&#xff1a;yum install git -ygit clone https://github…