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

到此这篇关于asp.net core mvc 中实现中英文切换的示例代码的文章就介绍到这了,更多相关asp.net core mvc 中英文切换内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!