首页 > 其他分享 >NetCore 国际化最佳实践

NetCore 国际化最佳实践

时间:2023-09-16 19:55:40浏览次数:39  
标签:NetPro 国际化 NetCore localizer globalization 默认 最佳 Globalization new

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的翻译即可

再次请求:

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

以上是关于NetCore 国际化最佳实践的主要内容

标签:NetPro,国际化,NetCore,localizer,globalization,默认,最佳,Globalization,new
From: https://www.cnblogs.com/stry/p/17707201.html

相关文章

  • 【Kubernetes】Kubernetes日志收集最佳实践及开源工具盘点
    Kubernetes是一种流行的开源容器编排平台,被开发人员和DevOps团队广泛用于部署和管理容器化应用程序。在Kubernetes上运行任何应用程序的一个关键方面是日志收集,它有助于监控应用程序的健康和性能,并快速解决问题。在本文中,我们将讨论Kubernetes日志收集以及Kubernetes环境中的最佳实......
  • Nutch相关框架安装使用最佳指南(转)
    Chineseinstallingandusinginstruction - Thebestguidanceininstallingandusing NutchinChina 国内首套免费的《Nutch相关框架视频教程》        土豆在线观看地址:http://www.tudou.com/home/item_u106249539s0p1.html 超清原版下载地址: http://pan.......
  • 优维产品最佳实践:如何有效管理流水线?
    前言:在上一期中,我们探讨了流水线的配置,也知道了不同开发阶段需要不同的流水线。在实际生产过程中,企业通常拥有众多组件,每个组件都需要相应阶段的流水线,这也导致了流水线数量的不断增加。因此,本文旨在为大家介绍如何有效地维护这些流水线。EasyDevOps有三种方式来维护流水线:自定义前......
  • Stream流处理快速上手最佳实践
    一引言JAVA1.8得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念Stream流式思想类似于工厂车间的“生产流水线”,Stream流不是一种数据结构,不保存数据,而是对数据进行加工处理。Stream可以看作是流水线上的一个工序。在流水线上,通过多个工序让一个原材料加工成一个商品......
  • Go之流程控制大全: 细节、示例与最佳实践
    本文深入探讨Go语言中的流程控制语法,包括基本的if-else条件分支、for循环、switch-case多条件分支,以及与特定数据类型相关的流程控制,如for-range循环和type-switch。文章还详细描述了goto、fallthrough等跳转语句的使用方法,通过清晰的代码示例为读者提供了直观的指导。关注微......
  • netcore请求json斜杠带空格导致请求报错
    我用netcore发布了一个webapi接口,个别电脑,同样的浏览器(谷歌),swagger调用接口的时候,它的json体会加空格,然后请求就会报错。这是控制器里的方法下图是请求输入: 下图是加了空格的请求内容,如红色框所示,带了空格 下图是报错的内容下图是正常请求的内容,可以返回想要的结果......
  • Java8 Optional用法和最佳实践
    介绍根据Oracle文档,Optional是一个容器对象,可能包含也可能不包含非空值。Java8中引入它是为了解决NullPointerException的问题。本质上,Optional是一个包装类,其中包含对其他对象的引用。在这种情况下,对象只是指向内存位置的指针,它也可以指向任何内容。另一种看待它的方式......
  • docker 尝试把.netcore项目打成镜像
    添加国内镜像https://blog.csdn.net/qq_44797987/article/details/112681224生成Dockerfile文件打开VisualStudio右键Web项目,添加docker支持执行命令验证......
  • NetCore 之 log4net 实战
    上一篇主要详细介绍log4net相关的一些配置项,本章意在从实战角度详解log4net在NetCore中使用。1、创建Netcoreconsolapplication通过Nugetpackage安装log4net(Microsoft.Extensions.Logging.Log4Net.AspNetCore),Hosting(Microsoft.Extensions.Hosting)及DI(Microsoft.Extens......
  • IIS上缺少 AspNetCoreModuleV2 如何解决
    实际上是少了装了.NetCoreSDK需要找到自己的程序使用的.NetCore对应版本进行下载https://dotnet.microsoft.com/en-us/download/dotnet/3.0只装Hosting就行了......