使用.NET 6开发TodoList应用(29)——实现静态字符串本地化功能
系列导航及源代码#
需求#
在开发一些需要支持多种语言的应用程序时,我们需要根据切换的语言来对应展示一些静态的字符串字段,在本文中我们暂时不去讨论如何结合前端一起来实现根据切换当前应用程序的Culture来实现字符串的自动切换和日期时间的切换,只通过一个简单的例子来展示如何在.NET Web API项目中实现多语言字符串的功能。
目标#
作为演示,实现支持英文和中文的本地化语言。
原理与思路#
实现静态字符串的本地化切换功能实际很简单,我们只需要借助Microsoft.Extensions.Localization
包就可以完成一个最简单的本地化功能。实现过程分为:1)引入本地化依赖注入;2)添加资源文件;3)本地化配置。
实现#
引入本地化依赖注入#
为了验证静态字符串的本地化功能,我们在TodoListController
中注入本地化IStringLocalizer<T>
功能并新增一个演示接口:
TodoListController.cs
private readonly IStringLocalizer<TodoListController> _localizer;
public TodoListController(IMediator mediator, IStringLocalizer<TodoListController> localizer)
{
_mediator = mediator;
_localizer = localizer;
}
// .....
[HttpGet("meta")]
public ApiResponse<string> GetTodoListMeta()
{
var response = ApiResponse<string>.Success(_localizer["TodoListMeta"]);
return response;
}
添加资源文件#
我们在Api
项目中添加资源文件作为演示目的,新建Resources
文件夹,并新增两个文件Controllers.TodoListController.en-us.resx
和Controllers.TodoListController.zh.resx
:
在对应的resx
文件中生成的位置:
<data name="TodoListMeta" xml:space="preserve">
<value>This is a TodoList Controller</value>
</data>
和
<data name="TodoListMeta" xml:space="preserve">
<value>这是一个TodoList应用控制器</value>
</data>
添加本地化配置#
最后我们在Program
中对本地化进行配置:
Program.cs
// 引入本地化服务
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
// 省略其他...
// 引入本地化中间件
var supportedCultures = new[] { "en-US", "zh" };
var localizationOptions = new RequestLocalizationOptions()
.SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);
app.MapDefaultControllerRoute();
验证#
启动Api
项目,执行获取TodoList/meta
的请求:
验证1: 请求不携带任何Culture信息#
则使用默认配置的en-US
:
验证2: 请求携带culture=en-us查询字符串#
指定使用en-Us
:
验证3: 请求携带culture=zh查询字符串#
指定使用zh
:
可以看到我们可以根据不同的culture对应返回本地化后的字符串内容。
总结#
关于静态字符串的本地化功能本文只做了最基础的介绍,此外还可以通过DataAnnotation
的方式对Dto的属性字段进行本地化控制,微软的官方文档可以作为不同应用场景的参考:Globalization and localization in ASP.NET Core。
因为在实际开发中,如果需要大量用到本地化(Localization)的功能,那么提供国际化(Globalization)也是必要的,并且这两个方面在实现上一般都会借助更为成熟的框架(例如ABP)使用已经包装好的模块功能。所以文章不做过多展开,上面提供的官方文档已经足以应对日常的开发。
下一篇文章我们会将应用程序使用Docker进行打包,并且向容器中添加证书以实现HTTPS方式访问。
参考资料#
作者:CODE4NOTHING
出处:https://www.cnblogs.com/code4nothing/p/build-todolist-29.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
欢迎转载,转载请注明出处
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!