一文教會你.Net之多語言配置
本文轉(zhuǎn)載自微信公眾號「鵬祥」,作者AZRNG。轉(zhuǎn)載本文請聯(lián)系鵬祥公眾號。
開篇語
首先非常感謝各位朋友或技術(shù)愛好者的關(guān)注。
介紹
支持多語言使網(wǎng)站可以覆蓋更廣泛的受眾。ASP.NET Core 提供的服務(wù)和中間件可將網(wǎng)站本地化為不同的語言。
本次示例環(huán)境:vs2019、net5
配置
無需引用Nuget包即可實現(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
- {
- //這里指定默認語言包
- DefaultRequestCulture = new RequestCulture("en-US"),//為了測試配置默認語言英文
- SupportedCultures = supportedCultures,
- SupportedUICultures = supportedCultures
- });
語言配置文件
需要在根目錄新建一個文件夾,文件夾名字就是ResourcesPath的名字。資源文件(resx結(jié)尾)存放路徑需要和使用的地方目錄結(jié)構(gòu)一致。(右鍵文件夾>添加>新建項)
image.png
語言包下的目錄結(jié)構(gòu)和MVC對應(yīng),控制器對應(yīng)控制器,視圖對應(yīng)視圖。資源文件命名方式為使用文件的文件名稱加上語言代碼。
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”
- }
- }
測試
有多種方法可以告訴程序需要使用哪一個語言文件,下面只說常見的使用,還支持自定義 。
默認輸出
image.png
HTTP報文
和常見的請求一樣添加Accept-Language請求頭即可
- Accept-Language:zh-CN
image.png
Cookie
默認使用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