這里本文使用Microsoft.AspNetCore.Localization來實現多語言的解決方案
默認是包含這個包的,所有不需要再額外安裝
首先需要注入我們需要的服務
1.在startup.cs中注入
public void ConfigureServices(IServiceCollection services) { //設置語言包文件夾名稱 services.AddLocalization(o => { o.ResourcesPath = "Language"; });
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
這里的路徑是根據項目根目錄尋找的相對路徑,設置成最后語言文件保存的路徑即可
然后在Configure中添加我們需要的語言文件的文件名,后面會再次提及文件名,
然后可以指定默認使用的語言文件DefaultRequestCulture
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { IList<CultureInfo> supportedCultures = new List<CultureInfo> { new CultureInfo("zh-CN"), new CultureInfo("zh"), new CultureInfo("en-US") }; app.UseRequestLocalization(new RequestLocalizationOptions { //這里指定默認語言包 DefaultRequestCulture = new RequestCulture("zh-CN"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseMvc(); }
至此我們完成了需要的配置,然后添加最重要的語言文件,
語言文件有兩種添加方式
1.根據使用的控制器名稱進行命名,如默認的ValuesController,則語言文件需要命名為Controllers.ValuesController.zh-CN.resx
2.可以在我們保存語言文件的路徑下創建一級Controllers目錄,然后語言文件在名稱上就可以去掉開頭的Controllers.

雖然這種方式也不太美觀,不過也算好了一步,其實也可以自己手寫注入,然后通過過濾器實現類似的效果
接下來在語言文件中添加我們需要的數據進行測試
在en-US中添加
在另外兩個文件中添加相同的名稱
接下來測試調用,這里我們有三種方法可以告知服務端需要使用哪一個語言文件
1.cookie
2.http報文
3.url參數
在控制器中注入語言文件
[Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { private readonly IStringLocalizer<ValuesController> _localizer; public ValuesController(IStringLocalizer<ValuesController> localizer) { _localizer = localizer; } // GET api/values [HttpGet] public string Get() { return _localizer["Error"].Value; } }
使用注入的對象就可以獲取我們需要的鍵
_localizer["Error"]
我們需要顯示的數據保存在Value屬性中
訪問頁面顯示如下

這里是因為我們設置的默認語言,所以加載了中文文件
接下來通過url參數傳遞來訪問不同的語言,加上參數culture=en-US

這樣便會自動返回英文的結果
需要注意的是參數傳遞可以用三種寫法,效果一致
?culture=zh-CN&ui-culture=zh-CN ?culture=zh-CN ?ui-culture=zh-CN
如果是使用cookie方式的話,使用cookie名稱.AspNetCore.Culture,值如下
c=zh-CN|uic=zh-CN c=zh-CN uic=zh-CN
如果是使用http請求的話,則和常見請求一樣添加Accept-Language請求頭即可
Accept-Language:zh-CN


