ASP.NET Core MVC 中實現(xiàn)中英文切換的示例代碼
哈嘍..大家好 很久沒有更新了,今天就來一篇最近開發(fā)用到的功能,那就是中英文切換,這個實際上也不是高大上,先說一下原理,在.NET Core框架中給我們提供了全球化的類,叫做Localization,其官方的文檔地址傳送門。
在我的項目中,我是這樣操作的,你想用別的方式,也可以看文檔自己去搞。這個已經(jīng)不是什么新鮮的東西了,只是網(wǎng)上的實現(xiàn)有些問題,不容易明白。
我們無需任何Nuget包,因為它是在Microsoft.AspNetCore.Mvc.Localization中,那么我們直接在.NET Core 框架中添加 Localization 服務(wù)。
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 的 應(yīng)該不會有太大區(qū)別吧?那個X_DOVERequestCultureProvider是我們自定義實現(xiàn)的,寫入了一些規(guī)則,我們看一下。
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)); } }
首先我們應(yīng)該知道RequestCultureProvider,它是一個在框架自身包括的 .net core 提供的,我們繼承它重寫了它的抽象類,在其中獲取了httpContext的Cookies值,然后進行判斷,如果沒有咱們就不給它進行一個輸出了,否則它還是我們的zh-CN 就是中文。
對,別忘記了要在Configure中使用中間價
app.UseRequestLocalization( options:app.ApplicationServices .GetService<IOptions<RequestLocalizationOptions>>().Value);
隨后我們應(yīng)該定義我們的配置文件,創(chuàng)建一個文件夾,放進去,它應(yīng)當(dāng)和上面Startup中的文件夾相同,隨后創(chuàng)建對應(yīng)的視圖位置,一個英文一個中文,一定要注意后面對應(yīng)的en-Us 和 zh-CN 要相同哦。
就現(xiàn)在我們在視圖中最上面導(dǎo)入包,然后對應(yīng)字典就可以了。
@using Microsoft.AspNetCore.Mvc.Localization @inject IViewLocalizer Localizer <section class="copyright"> @Localizer["section1"] <a rel="external nofollow" > | GitHub</a></section>
你肯定知道該怎么辦了,對的你可以去修改Cookies來操作當(dāng)前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>
好吧,歡迎各位同學(xué)把重寫url的方法寫寫出來,回復(fù)在本篇文章中..我們看一下效果,好的就這樣吧..
到此這篇關(guān)于ASP.NET Core MVC 中實現(xiàn)中英文切換的示例代碼的文章就介紹到這了,更多相關(guān)ASP.NET Core MVC 中英文切換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- asp.net mvc webapi 實用的接口加密方法示例
- ASP.NET Core MVC解決控制器同名Action請求不明確的問題
- 如何在Asp.Net Core MVC中處理null值的實現(xiàn)
- 創(chuàng)建一個ASP.NET MVC5項目的實現(xiàn)方法(圖文)
- ASP.NET Core MVC如何實現(xiàn)運行時動態(tài)定義Controller類型
- asp.net mvc core管道及攔截器的理解
- ASP.NET Core MVC獲取請求的參數(shù)方法示例
- ASP.NET Core MVC通過IViewLocationExpander擴展視圖搜索路徑的實現(xiàn)
- 在ASP.NET Core Mvc集成MarkDown的方法
- 如何使用簽名保證ASP.NET MVC OR WEBAPI的接口安全
相關(guān)文章
ASP.NET2.0使用Enter Key作為默認(rèn)提交問題分析(附源碼)
這篇文章主要介紹了ASP.NET2.0使用Enter Key作為默認(rèn)提交,結(jié)合實例形式分析了ASP.NET2.0使用Enter Key默認(rèn)提交的注意事項與相關(guān)實現(xiàn)技巧,并附上源碼供讀者參考,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11網(wǎng)頁(aspx)與用戶控件(ascx)交互邏輯處理實現(xiàn)
為了以后好維護,把幾個頁面(ASPX)相同的部分抽取放在一個用戶控件(ASCX)上,現(xiàn)在把邏輯分享下,感興趣的各位可以參考下哈2013-03-03ASP.NET WebForm中<%=%>與<%#%>的區(qū)別
這篇文章主要介紹了ASP.NET WebForm中<%=%>與<%#%>的區(qū)別,需要的朋友可以參考下2015-01-01ASP.NET中ListView(列表視圖)的使用前臺綁定附源碼
ListView(列表視圖)想必大家都知道吧,接下來本文將介紹下ListView的使用前臺綁定,感興趣的你可不要錯過本文了哈2013-03-03