ASP.NET Core MVC 中实现中英文切换

  哈喽..大家好 很久没有更新了,今天就来一篇最近开发用到的功能,那就是中英文切换,这个实际上也不是高大上,先说一下原理,在.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的方法写写出来,回复在本篇文章中..我们看一下效果,好的就这样吧..

原文地址:https://www.cnblogs.com/ZaraNet/p/12346595.html

时间: 2024-08-29 19:47:13

ASP.NET Core MVC 中实现中英文切换的相关文章

asp.net core mvc中如何把二级域名绑定到特定的控制器上

由于公司的工作安排,一直在研究其他技术,所以一直没时间更新博客,今天终于可以停下手头的事情,写一些新内容了. 应用场景:企业门户网站会根据内容不同,设置不同的板块,如新浪有体育,娱乐频道,等等.有的情况下需要给不同的板块设置不同的二级域名,如新浪体育sports.sina.com.cn. 在asp.net core mvc中,如果要实现板块的效果,可能会给不同的板块建立不同的控制器(当然也有其他的技术,这里不讨论实现方式的好坏),在这种情况下,如何给控制器绑定上独有的二级域名,比如体育频道对应的

007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】

Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Changing views and layout pages 修改视图和布局页 2.Change the title and menu link in the layout file 在布局文件中修改标题与菜单 3.Passing Data from the Controller to the View 从控制器向视图

ASP.NET Core MVC中Controller的Action如何直接使用Response.Body的Stream流输出数据

在ASP.NET Core MVC中,我们有时候需要在Controller的Action中直接输出数据到Response.Body这个Stream流中,例如如果我们要输出一个很大的文件到客户端浏览器让用户下载,那么在Controller的Action中用Response.Body这个Stream流,来逐步发送文件数据到客户端浏览器是最好的办法. 但是我今天在ASP.NET Core MVC的Controller的Action中使用Response.Body输出数据到客户端浏览器的时候遇到了个问题

ASP.NET Core MVC中URL和数据模型的匹配

Http GET方法 首先我们来看看GET方法的Http请求,URL参数和ASP.NET Core MVC中Controller的Action方法参数匹配情况. 我定义一个UserController,其中有一个只接受GET请求的Action方法GetDataInPage public class UserController : Controller { [HttpGet] public IActionResult GetDataInPage(string languageCode, int

在ASP.NET Core MVC中构建简单 Web Api

Getting Started 在 ASP.NET Core MVC 框架中,ASP.NET 团队为我们提供了一整套的用于构建一个 Web 中的各种部分所需的套件,那么有些时候我们只需要做一个简单的 Web Api 程序怎么办呢? 在 GitHub 中的 ASP.NET Core MVC 源码里面,我们只要关注 Microsoft.AspNetCore.Mvc 这个包,那么除了这个包之外它还包含这些: Microsoft.AspNetCore.Mvc.ApiExplorer Microsoft.

c# – Asp.Net Core MVC中Request.IsAjaxRequest()在哪里?

要了解有关新的令人兴奋的Asp.Net-5框架的更多信息,我正在使用最新发布的Visual Studio 2015 CTP-6来构建一个Web应用程序. 大多数事情看起来真的很有希望,但我似乎找不到Request.IsAjaxRequest() – 一个在旧的MVC项目中经常使用的功能. 有没有更好的方法来做到这一点 – 这使得他们删除这种方法 – 或者是“隐藏”在别的地方? 感谢任何建议,在哪里找到它或做什么改为! 我有点困惑,因为标题提到了MVC 5. 搜索Ajax in the MVC6

三分钟学会在ASP.NET Core MVC 中使用Cookie

一.Cookie是什么? 我的朋友问我cookie是什么,用来干什么的,可是我居然无法清楚明白简短地向其阐述cookie,这不禁让我陷入了沉思:为什么我无法解释清楚,我对学习的方法产生了怀疑!所以我们在学习一个东西的时候,一定要做到知其然知其所以然. HTTP协议本身是无状态的.什么是无状态呢,即服务器无法判断用户身份.Cookie实际上是一小段的文本信息).客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie.客户端浏览器会把Cooki

ASP.NET Core MVC 中两种路由的简单配置

1.全局约定路由 这种方式配置优先级比较低,如果控制器或者方法上标记了特性路由那么优先走特性路由. 当建立好一个mvc项目里,路由都是默认配置好的. 如果建立的是空项目那么需要手动配置: 1.需要在ConfigureServices方法中添加mvc服务 services.AddMvc(); 2.在Configure添加mvc中间件: app.UseMvcWithDefaultRoute(); //添加mvc中间件并使用默认路由配置 这里添加mvc中间时使用的是默认的路由配置,默认的路由配置就是跟

asp.net core mvc 中 ModelState.IsValid 值是fasle

问题描述:ModelState.IsValid 值是fasle 可能是Model绑定的模型里面的内容不能为空,但是实际上是空的. 原文地址:https://www.cnblogs.com/xiaobudong/p/10102161.html