系列導航及源代碼
- 使用.NET 6開發TodoList應用文章索引
需求
在開發一些需要支持多種語言的應用程式時,我們需要根據切換的語言來對應展示一些靜態的字串欄位,在本文中我們暫時不去討論如何結合前端一起來實作根據切換當前應用程式的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方式訪問,
參考資料
- Globalization and localization in ASP.NET Core
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412758.html
標籤:.NET技术
