应用场景:通过前端切换网站使用英语、中文两种语言。

解决思路:ResourceManager会通过当前线程区域性信息,读取对应的Resource文件,从而达到切换语言的效果,其实质是是在切换当前线程的区域性信息。

具体实现:

注意:每次访问新的页面,应用程序池分配线程资源并不一定每次访问都是同一线程资源,所以每次请求都需要重新设置区域性信息。我将区域性信息设置写在了OnActionExecuting中,如果是老版本的asp.net项目也可以写在global文件的Application_BeginReuest事件方法中


下来我们按步骤来贴代码:

1、项目中创建Resource文件 后缀名为.resx

添加资源文件,配置ResourceManager(指定应用程序读取资源文件路径和文件)





Language.cs 关于配置ResourceManager的用法,以及参数的意义参照:使用Resource文件实现应用程序多语言

using System.Resources;

namespace MutilLanguage
{
public class Language
{
public static ResourceManager lanRM
{
get
{
return new ResourceManager("MutilLanguage.ResourceLan", typeof(MutilLanguage.Language).Assembly);
}
}
}
}

2、js 设置cookie,作用是保存当前的区域性信息 en-US,zh-CN

点击html切换语言,js 设置cookie

html代码

<a class="lang nav-link" data-val="en-US">english</a>
<a class="lang nav-link" data-val="zh-CN">中文</a>

设置cookie两种方案:js设置cookie;ajax后台设置cookie

js 设置cookie,path=/ 作用域为当前站点

  $(".lang").click(function () {
console.log($(this).attr("data-val"));
let code = $(this).attr("data-val"); //document.cookie = `lang=${code};path=/`;
//window.location.reload(true);
});

ajax后端设置cookie:

c#代码

 		[HttpGet]
public IActionResult ChangeCultrue(string nativeCode)
{
HttpContext.Response.Cookies.Append("lang", nativeCode);
return Json(new { msg="ok"});
}

js调用

            $(".lang").click(function () {
console.log($(this).attr("data-val"));
let code = $(this).attr("data-val"); $.ajax({
url: "../home/ChangeCultrue",
data: {
nativeCode: code
},
success: function () {
window.location.reload(true);
} });
});

3、设置当前线程的区域性信息(每次加载页面)

通过重写OnActionExecuting方法,在每次执行Action代码块方法之前为当前线程设置区域作用域。

 public override void OnActionExecuting(ActionExecutingContext context)
{
string cookielang = "";
context.HttpContext.Request.Cookies.TryGetValue("lang",out cookielang);
if (string.IsNullOrEmpty(cookielang))
cookielang = "zh-CN";
Thread.CurrentThread.CurrentCulture = new CultureInfo(cookielang);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
base.OnActionExecuting(context);
}

4、代码读取资源,根据设置的区域信息不同显示的语言类别不同

//@MutilLanguage.Language.lanRM.GetString("home")
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">@MutilLanguage.Language.lanRM.GetString("home")</a>
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">@MutilLanguage.Language.lanRM.GetString("privacy")</a>

C#代码

MutilLanguage.Language.lanRM.GetString("home")

CultureInfo.CurrentCulture 属性是每个线程的设置,可确定日期、时间、货币和数字的默认格式、文本排序顺序、字符串比较以及大小写转换。CurrentCulture 属性不是一个语言设置。

asp.net多语言网站的完整解决方案的更多相关文章

  1. [译]MVC网站教程(一):多语言网站框架

    本文简介 本博文介绍了 Visual Studio 工具生成的 ASP.NET MVC3 站点的基本框架:怎样实现网站的语言的国际化与本地化功能,从零开始实现用户身份认证机制,从零开始实现用户注册机制 ...

  2. 利用JFreeChart绘制股票K线图完整解决方案

    http://blog.sina.com.cn/s/blog_4ad042e50100q7d9.html 利用JFreeChart绘制股票K线图完整解决方案 (2011-04-30 13:27:17) ...

  3. Jenkins与网站代码上线解决方案【转】

    转自 Jenkins与网站代码上线解决方案 - 惨绿少年 https://www.nmtui.com/clsn/lx524.html 1.1 前言 Jenkins是一个用Java编写的开源的持续集成工 ...

  4. XP局域网访问无权限、不能互相访问问题的完整解决方案

    XP局域网访问无权限问题的完整解决方案: 1:用管理员账户登录系统 2:在“开始”-- “运行”里输入 GPEDIT.MSC 目的是打开组策略选项 3:依次展开”WINDOWS设置”-”本地策略”-” ...

  5. 手动从0搭建ABP框架-ABP官方完整解决方案和手动搭建简化解决方案实践

      本文主要讲解了如何把ABP官方的在线生成解决方案运行起来,并说明了解决方案中项目间的依赖关系.然后手动实践了如何从0搭建了一个简化的解决方案.ABP官方的在线生成解决方案源码下载参考[3],手动搭 ...

  6. ASP.NET MVC 3 网站优化总结(三)Specify Vary: Accept-Encoding header

    继续进行 ASP.NET MVC 3 网站优化工作,使用 Google Page 检测发现提示 You should Specify Vary: Accept-Encoding header,The ...

  7. ASP.NET MVC 3 网站优化总结(一) 使用 Gzip 压缩

    网站开启 Gzip 压缩的好处相信很多人都已经清楚,这样做可以提高网站的性能.那么为什么很多网站没有开启 Gzip 压缩功能呢?原因有4点:防病毒软件.浏览器 bug.网站代理和服务器未配置. 使用 ...

  8. ASP.NET MVC 3 网站优化总结(六)压缩 HTML

    压缩 html 可以去除代码中无用的空格等,这样可提高网站的加载速度并节省带宽.今天就让我们看看在 ASP.NET MVC 3 怎么实现 html 压缩,我们可通过实现 ActionFilter 来完 ...

  9. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. k8s之PV、PVC

    目录 一.PVC和PV 1.1 PV概念 1.2 PVC概念 1.3 PV与PVC之间的关系 1.4 两种PV的提供方式 二.基于nfs创建静态PV资源和PVC资源 2.1 配置nfs存储(192.1 ...

  2. 系统操作命令实践 下(系统指令+增删改查+vim编辑器)

    目录 1.考试 2.今日问题 3.今日内容 4.复制文件 4.移动文件 Linux文件查看补充 cat , nl 5.删除文件 6.系统别名 7.vi/vim编辑器 系统操作命令实践 下(系统指令+增 ...

  3. 《PHP程序员面试笔试宝典》——如何准备集体面试?

    本文摘自<PHP程序员面试笔试宝典>. PHP面试技巧分享,PHP面试题,PHP宝典尽在"琉忆编程库". 集体面试也被称为群面.无领导小组面试.由于计算机发展至今,软件 ...

  4. 基于TMS320C6670的软件无线电核心板

    一.板卡概述 北京太速科技自主研发的TMS320C6670核心板,采用TI KeyStone系列的四核定点/浮点DSP TMS320C6670作主处理器.板卡引出处理器的全部信号引脚,便于客户二次开发 ...

  5. win10 VScode配置GCC(MinGW)

    前提 安装 Visual Studio Code 安装 C/C++ 扩展 for VS Code 也可以在vscode的extension界面搜索'c'查找插件安装 获取最新的 Mingw-w64 , ...

  6. vscode分栏显示快捷键

    vscode没有默认的分栏快捷键,我们可以自定义,步骤如下: 1.Crtl + k,再Ctrl + s,调出快捷键设置面板 2.在搜索栏输入"视图:",在未定义快捷键的区域找到&q ...

  7. TestNG基本使用

    TestNG简介 Testng是一套开源测试框架,是从Junit继承而来,testng意为test next generation 创建maven项目,添加依赖 <dependency> ...

  8. 实例演示:Excel实现数据更新获取,并根据公式计算后展示

    ​ 我们数据库中有一些明细数据,希望我们可以使用Excel的公式,对报表数据进行,最后展示在自定义的行列固定报表中. 如下图:从左侧表中获取大类名称为饮料.海鲜.日用品,从2016/11/11到201 ...

  9. 自助BI工具:Tableau和Smartbi的对比(上)

    商业智能(BI)和分析平台长期以来一直是商业的重要组成部分,但由于自助BI工具的兴起,在数据科学家和数据库管理员的支持下,分析的责任已经从IT转移到了商业分析师身上. 因此,BI已经从生成月度报告的记 ...

  10. Excel真的是三维地图可视化制作最好的选择吗?

    随着数据在当下互联网快速发展下变的维度更广,数量更大.结构越来越复杂,人们想要更加清晰,快速的认知和理解一份数据,传统的二维平面图表已经不能满足需求,三维可视化技术越结合多媒体技术.网络技术以及三维镜 ...