.NET CORE 多語言實現方案

roadflow工作流引擎發表於2019-07-19

根據市場需求,基於.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"]

相關文章