根據市場需求,基於.NET CORE平臺開發的RoadFlow工作流平臺需要實現多語言版本。經過方案討論和比對,決定採用.NET自帶的本地化功能來實現多語言。話不多說,直接上實現方式。
首先修改Startup.cs
在public void ConfigureServices(IServiceCollection services)方法中加入:
//設定語言包資料夾名稱 services.AddLocalization(o => { o.ResourcesPath = "Language"; });
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);
這裡指定語言包所在目錄,相對於專案根目錄下。從上圖中看到專案根目錄下有一個Language資料夾。
在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 });
到這裡啟動檔案就設定好了。
在根目錄下新建Language目錄,用於存放語言包
語言包下的目錄結構和MVC對應,控制器對應控制器,檢視對應檢視。
目錄下新建資原始檔:
CORE載入資原始檔的方式有三種:URL,Cookie,請求頭。我們這裡採用Cookie。所以在開啟首頁的時候寫了一個Cookie:
Response.Cookies.Append(".AspNetCore.Culture", "c=en-US|uic=en-US");
.AspNetCore.Culture為Cookie key。接下來就可以開始使用語言包了。
控制器中使用:
在控制器中加入:
private readonly IStringLocalizer<HomeController> _localizer; public HomeController(IStringLocalizer<HomeController> localizer) { _localizer = localizer; }
接下來在使用語言的地方:
_localizer["資原始檔中定義的名稱"]就可以讀取到相應的語言了。
在檢視中使用:
檢視頂部引用:
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
在要使用語言的地方就可以使用了:
Localizer["Welcome"]