ASP.NET Core MVC 中實現中英文切換

  哈嘍..你們好 好久沒有更新了,今天就來一篇最近開發用到的功能,那就是中英文切換,這個實際上也不是高大上,先說一下原理,在.NET Core框架中給咱們提供了全球化的類,叫作Localization,其官方的文檔地址傳送門git

  在個人項目中,我是這樣操做的,你想用別的方式,也能夠看文檔本身去搞。這個已經不是什麼新鮮的東西了,只是網上的實現有些問題,不容易明白。github

  咱們無需任何Nuget包,由於它是在 Microsoft.AspNetCore.Mvc.Localization 中,那麼咱們直接在.NET Core 框架中添加 Localization 服務。cookie

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 是咱們自定義實現的,寫入了一些規則,咱們看一下。app

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中使用中間價ide

            app.UseRequestLocalization(
                options:app.ApplicationServices
                .GetService<IOptions<RequestLocalizationOptions>>().Value);

  隨後咱們應該定義咱們的配置文件,建立一個文件夾,放進去,它應當和上面Startup中的文件夾相同,隨後建立對應的視圖位置,一個英文一箇中文,必定要注意後面對應的en-Us 和 zh-CN 要相同哦。url

  就如今咱們在視圖中最上面導入包,而後對應字典就能夠了。spa

@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的,.net

<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的方法寫寫出來,回覆在本篇文章中..咱們看一下效果,好的就這樣吧..code

相關文章
相關標籤/搜索