ASP.NET Core MVC 中实现中英文切换
【WPF学习】第四十七章 WriteableBitmap类
哈喽..大家好 良久没有更新了,本日就来一篇近来开发用到的功用,那就是中英文切换,这个实际上也不是嵬峨上,先说一下道理,在.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 要雷同哦。
就如今我们在视图中最上面导入包,然后对应字典就能够了。
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
<section class="copyright"> @Localizer["section1"] <a href="https://github.com/zaranetCore/amusinghoS"> | GitHub</a></section>
你一定晓得该怎样办了,对的你能够去修正Cookies来操纵当前httpContext中的合约,但只管怎样,我们只是重写了cookies的,还没有重写url的,
<script> $(function () { $("#language").change(function (e) { var opt = $("#language").val(); if (opt == 1) { document.cookie = 'CULTURE=zh-CN'; location.reload(); } else if(opt == 2) { document.cookie = 'CULTURE=en-US'; location.reload(); } }); }); </script>
好吧,迎接列位同砚把重写url的要领写写出来,复兴在本篇文章中..我们看一下结果,好的就如许吧..
解释为什么不能依赖fail-fast