一文教會(huì)你.Net之多語(yǔ)言配置
本文轉(zhuǎn)載自微信公眾號(hào)「鵬祥」,作者AZRNG。轉(zhuǎn)載本文請(qǐng)聯(lián)系鵬祥公眾號(hào)。
開(kāi)篇語(yǔ)
首先非常感謝各位朋友或技術(shù)愛(ài)好者的關(guān)注。
介紹
支持多語(yǔ)言使網(wǎng)站可以覆蓋更廣泛的受眾。ASP.NET Core 提供的服務(wù)和中間件可將網(wǎng)站本地化為不同的語(yǔ)言。
本次示例環(huán)境:vs2019、net5
配置
無(wú)需引用Nuget包即可實(shí)現(xiàn)以下功能。
注入容器
- services.AddLocalization(t =>
- {
- t.ResourcesPath = "Language";
- });
啟用配置
- var supportedCultures = new List<CultureInfo>()
- {
- new CultureInfo("zh-CN"),
- new CultureInfo("en-US")
- };
- app.UseRequestLocalization(new RequestLocalizationOptions
- {
- //這里指定默認(rèn)語(yǔ)言包
- DefaultRequestCulture = new RequestCulture("en-US"),//為了測(cè)試配置默認(rèn)語(yǔ)言英文
- SupportedCultures = supportedCultures,
- SupportedUICultures = supportedCultures
- });
語(yǔ)言配置文件
需要在根目錄新建一個(gè)文件夾,文件夾名字就是ResourcesPath的名字。資源文件(resx結(jié)尾)存放路徑需要和使用的地方目錄結(jié)構(gòu)一致。(右鍵文件夾>添加>新建項(xiàng))
image.png
語(yǔ)言包下的目錄結(jié)構(gòu)和MVC對(duì)應(yīng),控制器對(duì)應(yīng)控制器,視圖對(duì)應(yīng)視圖。資源文件命名方式為使用文件的文件名稱加上語(yǔ)言代碼。
image.png
讀取資源文件
在控制器中使用,依賴注入資源文件
- [ApiController]
- [Route("[controller]")]
- public class HomeController : ControllerBase
- {
- private readonly IStringLocalizer<HomeController> _localizer;
- public HomeController(IStringLocalizer<HomeController> localizer)
- {
- _localizer = localizer;
- }
- [HttpGet]
- public string Get()
- {
- return _localizer["succeed"].Value;//如果找不到succeed的本地化值,那么就返回字符串“succeed”
- }
- }
測(cè)試
有多種方法可以告訴程序需要使用哪一個(gè)語(yǔ)言文件,下面只說(shuō)常見(jiàn)的使用,還支持自定義 。
默認(rèn)輸出
image.png
HTTP報(bào)文
和常見(jiàn)的請(qǐng)求一樣添加Accept-Language請(qǐng)求頭即可
- Accept-Language:zh-CN
image.png
Cookie
默認(rèn)使用cookie名稱.AspNetCore.Culture,值是
- c=zh-CN|uic=zh-CN
- c=zh-CN
- uic=zh-CN
c是Culture,uic是UICulture
URL參數(shù)
三種寫法,效果一樣
- ?culture=zh-CN&ui-culture=zh-CN
- ?culture=zh-CN
- ?ui-culture=zh-CN
image.png
參考文檔
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/localization?view=aspnetcore-5.0