免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Asp.net core 2.x/3.x 的 Globalization 和 localization 的使用 (一) 使用方法

由于Api的接口需要返回多語(yǔ)言,因此參考了網(wǎng)上很多篇文章,,有些文章寫(xiě)的太過(guò)于理論,看起來(lái)比較費(fèi)勁,今天下午搞了一個(gè)下午,總結(jié)了一下經(jīng)驗(yàn),,

做這個(gè)功能時(shí),主要參考了兩篇文章:

https://blog.johnwu.cc/article/ironman-day21-asp-net-core-localization.html

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-3.1

大家可對(duì)照著看

一般有兩種情況: 一種是web項(xiàng)目需要返回多語(yǔ)言,,一種是dll里,需要單獨(dú)實(shí)現(xiàn)多語(yǔ)言的,比如插件中

前提,項(xiàng)目中需要引入 Microsoft.Extensions.Localization 包

 

一.Web 項(xiàng)目中

  如果是默認(rèn)創(chuàng)建的Asp.net core的項(xiàng)目,以及引用完Microsoft.Extensions.Localization包了,所以不需要額外引入

  1.資源文件的位置問(wèn)題

  網(wǎng)上的教程中,提到一個(gè)SharedResource的用法,并且是放在Resources文件夾中,今天試了很多次,發(fā)覺(jué)是這么用的,

  比如在不同的area中:

  創(chuàng)建一個(gè)Resources文件夾,

  然后添加一個(gè)叫SharedResource的類(lèi),內(nèi)容啥都不需要就要一個(gè)空的類(lèi)而已

  再添加對(duì)應(yīng)語(yǔ)言的資源文件,如: SharedResource.en.resx  或者 SharedResource.th.resx

  結(jié)構(gòu):

  

 

   SharedResource.cs :

 namespace ZKXT.Devices.Api.Areas.AppApi.Resources {   public class SharedResource{} }

 

  2.Start.cs 中:

public void ConfigureServices(IServiceCollection services){    services.Configure<RequestLocalizationOptions>(options =>{     options.DefaultRequestCulture = new RequestCulture("zn-cn");  //默認(rèn)的語(yǔ)言  });    services.AddLocalization(); //注冊(cè)相應(yīng)Service  }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){ var support = new List<CultureInfo>()    {      new CultureInfo("zh-cn"), //注冊(cè)多種語(yǔ)言,具體可以查看http://www.lingoes.net/zh/translator/langcode.htm找對(duì)應(yīng)      new CultureInfo("en"),      new CultureInfo("th")    }; app.UseRequestLocalization(x =>    {      x.SetDefaultCulture("zh-cn");      x.SupportedCultures = support; //設(shè)置支持的語(yǔ)言      x.SupportedUICultures = support; //設(shè)置UI語(yǔ)言,這里有個(gè)很大的坑,如果不設(shè)置該屬性,在Action中,CultureInfo.CurrentCulture返回的是正確的語(yǔ)言,但是在CultureInfo.CurrentUICulture返回的是默認(rèn)語(yǔ)言      x.AddInitialRequestCultureProvider(new AcceptLanguageHeaderRequestCultureProvider()); //設(shè)置判斷當(dāng)前語(yǔ)言的方式,我項(xiàng)目中是使用了Accept-Language 的header值作為判斷    });  }

   3.Controller中:

  在構(gòu)造函數(shù)中注入

public DevicesController(IStringLocalizer<SharedResource> localize=null):ControllerBase 

  注意: 這里的SharedResource,一定是要對(duì)應(yīng)的area中的,框架會(huì)根據(jù)SharedResource對(duì)應(yīng)的namespace轉(zhuǎn)換成對(duì)應(yīng)的路徑,并讀取相應(yīng)的資源文件,這個(gè)比較重要.

二. dll中

  1.需手動(dòng)引入 Microsoft.Extensions.Localization 包 

  2.需要在web項(xiàng)目中注入后,在request中自動(dòng)設(shè)定當(dāng)前線程的語(yǔ)言

  3.資源文件目錄結(jié)構(gòu)如圖:

  

   public class Base{   private static IStringLocalizerFactory _factory = null;   private string _name="";   static Base()   {      _factory = new ResourceManagerStringLocalizerFactory(Options.Create(new LocalizationOptions(){ ResourcesPath = "Resources" }),NullLoggerFactory.Instance);      _name=typeof(Base).Assembly.GetName().Name;   }
  
protected virtual IStringLocalizer GetLocalizer() //后續(xù)使用該函數(shù),即可返回對(duì)應(yīng)的Localizer   {     return _factory.Create("SharedResource", _name); //這里能指定名稱,就不是非要新建個(gè) SharedResource 類(lèi)了,看了factory的源碼,Create的實(shí)現(xiàn)自帶緩存功能,所以不會(huì)每次都new一個(gè)類(lèi),因此直接Create就好,不需要自己做緩存   }}

 

最后,也是最重要的,,記得發(fā)布之后,,發(fā)布的目錄下,有一堆的語(yǔ)言代碼的文件夾,如圖:

 

 記得把自己剛剛編寫(xiě)的語(yǔ)言對(duì)應(yīng)的文件夾更新到服務(wù)器上,要不然,出來(lái)的還是默認(rèn)語(yǔ)言,因?yàn)榭蚣苷也坏綄?duì)應(yīng)的語(yǔ)言文件信息

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
ASP.NET Core MVC/API(一)
ASP.NET Core API總結(jié)(一)
找回?cái)嚯姟⑺罊C(jī)前未儲(chǔ)存的Word,Excel文件
.Net之多語(yǔ)言配置
精彩 .NET 2015
Vue Axios ASP.NET Core WebAPI 文件上傳下載
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服