深圳南山网站建设,中国最大的建站网站,有设计感的网页设计,设计师接私单网站NetCore 国际化最佳实践ASP.NET Core中提供了一些本地化服务和中间件#xff0c;可将网站本地化为不同的语言文化。ASP.NET Core中我们可以使用Microsoft.AspNetCore.Localization库来实现本地化。但是默认只支持使用资源文件方式做多语言存储#xff0c;很难在实际场景中使用… 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.10PackageReference:PackageReference IncludeNetPro.Globalization Version6.0.10 /.NET CLI 方式:paket add NetPro.Globalization --version 6.0.10基于NetPro环境的初始化如基于NetPro环境的使用比较简单在执行安装步骤后配置多语言持久化的sqlite地址即可Globalization: {UIQueryStringKey: language, //请求的query携带的多语言参数名默认为languageConnectionString: Data SourceGlobalization.db;CacheShared, //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.GetServiceIConfiguration();var globalization configuration.GetSection(nameof(Globalization)).GetGlobalization();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 IStringLocalizerNetPro.Globalization.Globalization _localizer;//建议使用NetPro.Globalization.Globalization 统一的类提供字符串承载过多语言碎片public GlobalizationDemoController(, IStringLocalizerNetPro.Globalization.Globalization localizer){_localizer localizer;}/// summary/// 多语言国际化示例/// /summary[HttpGet(globalization)]public IActionResult Globalization(){var localMsg _localizer[当前时间为] ${DateTime.Now};return Ok(new { localMsg });}}客户端处理客户端请求接口时依次支持queryheadercookie等三种方式携带多语言标识query 默认 language; 支持修改UIQueryStringKey节点覆盖默认参数名推荐query方式header 默认 Accept-Languagecookie 默认为 .AspNetCore.Culture 既Microsoft.AspNetCore.Localization.CookieRequestCultureProvider.DefaultCookieName实验中文环境request http://localhost:5001/api/globalizationdemo/globalization?languagezh-CNresponse localMsg: 当前时间为2022/6/11 14:47:01英文环境request http://localhost:5001/api/globalizationdemo/globalization?languageen-USresponse localMsg: 当前时间为2022/6/11 14:47:01发现依然中文原因是找不到对应的语言会自动将_localizer[string]中的字符串作为默认值插入此时只需要手动再插入一条en-US的翻译即可再次请求request http://localhost:5001/api/globalizationdemo/globalization?languageen-USresponse localMsg: This time is2022/6/11 14:50:25总结除了以上支持sqlite数据库存储多语言信息同时也支持微软默认的资源文件方式并且使用方式与原生一致不会有新的学习成本。NetPro.Globalizatio:https://github.com/LeonKou/NetPro/tree/dev_6.0/src/Library/NetPro.GlobalizationNetPro框架Github地址https://github.com/LeonKou/NetPro