大家好,我是深山踏红叶,今天我们来聊一聊本地化(Localization), 在开发中本地化也是一个非常重要的方面。Dotnet平台也提供了强大的本地化支持,能够帮助我们根据用户的语言和区域设置提供多语言支持,提高用户体验。下面我们来聊 ASP.NET Core 中的本地化功能,如何配置及如何在应用程序中实现它。
在 ASP.NET Core 中,启用本地化功能首先需要在 Startup.cs
中进行配置。
在服务容器中添加本地化服务:
在 ConfigureServices
方法中添加本地化服务:
public void ConfigureServices(IServiceCollection services)
{
//指定资源文件的存放位置
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddControllersWithViews()
.AddViewLocalization()
.AddDataAnnotationsLocalization();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var supportedCultures = new[] { "en-US", "zh-CN" };
var localizationOptions = new RequestLocalizationOptions()
//默认文化设置
.SetDefaultCulture("en-US")
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
AddLocalization
方法设置资源文件的根目录,并注册本地化服务,如 IStringLocalizer<>
和 IStringLocalizerFactory
。AddDataAnnotationsLocalization
方法注册数据注解本地化服务,主要通过设置 DataAnnotationLocalizerProvider
委托来实现。AddViewLocalization
方法注册视图本地化服务,包括 IViewLocalizer
、IHtmlLocalizer<>
和 IHtmlLocalizerFactory
。UseRequestLocalization
启用 RequestLocalizationMiddleware
,该中间件可以从请求中解析区域文化信息(Culture)并设置到当前线程中。AddSupportedCultures
和 AddSupportedUICultures
配置应用支持的 Culture 和 UICulture。SetDefaultCulture
设置应用的默认 Culture。创建资源文件: 资源文件(.resx)用于存储不同语言的文本。创建 Resources
文件夹,为每种支持的语言创建不同的资源文件。
Resources/Controllers/WeatherForecastController.resx
:默认语言资源文件 。Resources/Controllers/WeatherForecastController.zh-CN.resx
:简体中文资源文件。Resources/Controllers/WeatherForecastController.fr-FR.resx
:法语资源文件。名称 | en-US | zh-CN |
---|---|---|
WelcomeMessage | Welcome to Netshare ! | 欢迎访问Netshare ! |
默认的情况需要对应相对应的文件路径,为了优雅地使用共享资源,我们在项目根目录下创建SharedResource伪类,用来代理共享资源。
IStringLocalizer
[ApiController]
[Route("[controller]")]
publicclassWeatherForecastController : ControllerBase
{
privatereadonly IStringLocalizer<WeatherForecastController> _localizer;
privatereadonly IStringLocalizer<SharedResource> _sharedLocalizer;
public WeatherForecastController( IStringLocalizer<WeatherForecastController> localizer, IStringLocalizer<SharedResource> sharedLocalizer)
{
_localizer = localizer;
_sharedLocalizer = sharedLocalizer;
}
[HttpGet(Name = "GetWeatherForecast")]
public IActionResult Index()
{
var content = $"当前区域文化:{CultureInfo.CurrentCulture.Name}\n" +
$"{_localizer["NetName"]}\n" +
$"{_sharedLocalizer["CurrentTime"]}{DateTime.Now.ToLocalTime()}\n";
return Content(content);
}
}
当前区域文化:zh-CN NetName CurrentTime :2025/3/1 18:19:13
访问:https://localhost:7256/WeatherForecast?culture=en-US
当前区域文化:en-US NetName CurrentTime3/1/2025 6:24:57 PM
IStringLocalizerFactory
创建。IStringLocalizer<>
是对 IStringLocalizer
的封装,提供了更灵活的本地化方式。IHtmlLocalizerFactory
创建。在视图文件中,你还可以直接使用 @localizer
标签获取本地化的文本:
@inject IStringLocalizer<SharedResource> localizer
<h1>@localizer["WelcomeMessage"]</h1>
ASP.NET Core 默认提供了以下三种请求文化提供程序,用于解析请求中的语言信息:
culture
和 ui-culture
设置语言,例如:?culture=zh-CN&ui-culture=zh-CN
。.AspNetCore.Culture
设置语言,值格式为 c=zh-CN|uic=zh-CN
。Accept-Language
字段读取语言信息。参考:https://www.cnblogs.com/xiaoxiaotank/p/17466952.html
https://learn.microsoft.com/zh-cn/aspnet/core/blazor/globalization-localization?view=aspnetcore-9.0
ASP.NET Core 提供了强大的本地化功能,通过灵活配置本地化服务和请求文化提供程序,可以轻松实现国际化支持。同时,支持自定义扩展和资源文件格式切换,满足不同开发场景的需求
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有