多語言/國際化/全球化&本地化,這些詞彙表達的是同一個意思,即系統同時支持多種不同國家的語言,我們用本地化這個詞來表達。在ASP.NET Core 6.0中可以很方便的做到,這篇博客也是記錄一下主要的步驟,最後會放出一個demo供參考。注意我們的版本是.net Core 6.0,所以下面的步驟是基於這個版本。
一、添加本地化服務
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
builder.Services.AddMvc()
.AddViewLocalization(Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[] { "zh-CN", "en-US" };
options.SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
});
支持多語言,我們一般使用資源文件,即resx格式的文件存儲,並統一放置在項目的Resources目錄下。這裏我們使用了zh-CN和en-US兩種語言,可以根據需要自行添加更多的其它語言。
二、處理本地化中間件請求
//處理本地化中間件請求
var supportedCultures = new[] { "zh-CN", "en-US" };
var localizationOptions = new RequestLocalizationOptions().SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);
三、準備資源文件
按照如下圖的目錄結構準備相應視圖的資源文件
資源文件的內容示例:
四、視圖使用資源文件
1. 注入視圖本地化中間件
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
2. 使用中間件
@Localizer["title"]
如上就實現了本地化的功能,非常簡單。當然控制器部分內容的本地化跟視圖操作一樣的,可通過注入IStringLocalizer實現。在Resources文件夾中創建Controllers文件夾,分目錄存放即可。
附後放出一個demo項目,供參考:
鏈接:https://pan.baidu.com/s/1Nym4GQjwFBAHKWt2xZjQuQ
提取碼:8eb6
參考資料:
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/localization?view=aspnetcore-6.0