ASP.NET Core之多語言配置
阿新 • • 發佈:2021-06-12
介紹
支援多語言使網站可以覆蓋更廣泛的受眾。 ASP.NET Core 提供的服務和中介軟體可將網站本地化為不同的語言。
本次示例環境:vs2019、net5
配置
無需引用Nuget包即可實現以下功能。
注入容器
services.AddLocalization(t=>
{
t.ResourcesPath="Language";
});
啟用配置
varsupportedCultures=newList<CultureInfo>()
{
newCultureInfo("zh-CN"),
newCultureInfo("en-US")
};
app.UseRequestLocalization(newRequestLocalizationOptions
{
//這裡指定預設語言包
DefaultRequestCulture=newRequestCulture("en-US"),//為了測試配置預設語言英文
SupportedCultures=supportedCultures,
SupportedUICultures=supportedCultures
});
語言配置檔案
需要在根目錄新建一個資料夾,資料夾名字就是ResourcesPath的名字。資原始檔(resx結尾)存放路徑需要和使用的地方目錄結構一致。(右鍵資料夾>新增>新建項)
image-20210511223406104
語言包下的目錄結構和MVC對應,控制器對應控制器,檢視對應檢視。資原始檔命名方式為使用檔案的檔名稱加上語言程式碼。
image.png
讀取資原始檔
在控制器中使用,依賴注入資原始檔
[ApiController]
[Route("[controller]")]
publicclassHomeController:ControllerBase
{
privatereadonlyIStringLocalizer<HomeController>_localizer;
publicHomeController(IStringLocalizer<HomeController>localizer)
{
_localizer=localizer;
}
[HttpGet]
publicstringGet()
{
return_localizer["succeed"].Value;//如果找不到succeed的本地化值,那麼就返回字串“succeed”
}
}
測試
有多種方法可以告訴程式需要使用哪一個語言檔案,下面只說常見的使用,還支援自定義 。
預設輸出
HTTP報文
和常見的請求一樣新增Accept-Language請求頭即可
Accept-Language:zh-CN
Cookie
預設使用cookie名稱.AspNetCore.Culture,值是
c=zh-CN|uic=zh-CN
c=zh-CN
uic=zh-CN
c是Culture,uic是UICulture
URL引數
三種寫法,效果一樣
?culture=zh-CN&ui-culture=zh-CN
?culture=zh-CN
?ui-culture=zh-CN
參考文件
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/localization?view=aspnetcore-5.0