哈嘍..大家好 很久沒有更新了,今天就來一篇最近開發用到的功能,那就是中英文切換,這個實際上也不是高大上,先說一下原理,在.NET Core框架中給我們提供了全球化的類,叫做Localization,其官方的文檔地址傳送門。
在我的項目中,我是這樣操作的,你想用別的方式,也可以看文檔自己去搞。這個已經不是什么新鮮的東西了,只是網上的實現有些問題,不容易明白。
我們無需任何Nuget包,因為它是在Microsoft.AspNetCore.Mvc.Localization中,那么我們直接在.NET Core 框架中添加 Localization 服務。
public void ConfigureServices(IServiceCollection services) { services.AddLocalization(options => options.ResourcesPath = "Resources"); services.AddMvc() .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix); services.Configure<RequestLocalizationOptions>(opts => { var supportedCultures = new List<CultureInfo>{ new CultureInfo("en-US"), new CultureInfo("zh-CN")}; opts.SupportedCultures = supportedCultures; opts.SupportedUICultures = supportedCultures; opts.RequestCultureProviders = new List<IRequestCultureProvider>{ new X_DOVERequestCultureProvider() }; }); services.AddControllersWithViews(); }嗯,這個代碼是.NET Core 3.1 的 應該不會有太大區別吧?那個X_DOVERequestCultureProvider是我們自定義實現的,寫入了一些規則,我們看一下。
public class X_DOVERequestCultureProvider : RequestCultureProvider { public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext) { var CULTURE_String = "CULTURE"; var CultureCookie = httpContext.Request.Cookies[CULTURE_String]?.ToString() ?? ""; if (string.IsNullOrWhiteSpace(CultureCookie)) { CultureCookie = "zh-CN"; httpContext.Response.Cookies.Append(key: CULTURE_String, value: CultureCookie, options: new CookieOptions() { Expires = DateTime.Now.AddYears(1) }); } return Task.FromResult(new ProviderCultureResult(CultureCookie)); } }首先我們應該知道RequestCultureProvider,它是一個在框架自身包括的 .net core 提供的,我們繼承它重寫了它的抽象類,在其中獲取了httpContext的Cookies值,然后進行判斷,如果沒有咱們就不給它進行一個輸出了,否則它還是我們的zh-CN 就是中文。
對,別忘記了要在Configure中使用中間價
app.UseRequestLocalization( options:app.ApplicationServices .GetService<IOptions<RequestLocalizationOptions>>().Value);
隨后我們應該定義我們的配置文件,創建一個文件夾,放進去,它應當和上面Startup中的文件夾相同,隨后創建對應的視圖位置,一個英文一個中文,一定要注意后面對應的en-Us 和 zh-CN 要相同哦。
新聞熱點
疑難解答
圖片精選