asp.net多语言网站的完整解决方案
应用场景:通过前端切换网站使用英语、中文两种语言。
解决思路: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多语言网站的完整解决方案的更多相关文章
- [译]MVC网站教程(一):多语言网站框架
本文简介 本博文介绍了 Visual Studio 工具生成的 ASP.NET MVC3 站点的基本框架:怎样实现网站的语言的国际化与本地化功能,从零开始实现用户身份认证机制,从零开始实现用户注册机制 ...
- 利用JFreeChart绘制股票K线图完整解决方案
http://blog.sina.com.cn/s/blog_4ad042e50100q7d9.html 利用JFreeChart绘制股票K线图完整解决方案 (2011-04-30 13:27:17) ...
- Jenkins与网站代码上线解决方案【转】
转自 Jenkins与网站代码上线解决方案 - 惨绿少年 https://www.nmtui.com/clsn/lx524.html 1.1 前言 Jenkins是一个用Java编写的开源的持续集成工 ...
- XP局域网访问无权限、不能互相访问问题的完整解决方案
XP局域网访问无权限问题的完整解决方案: 1:用管理员账户登录系统 2:在“开始”-- “运行”里输入 GPEDIT.MSC 目的是打开组策略选项 3:依次展开”WINDOWS设置”-”本地策略”-” ...
- 手动从0搭建ABP框架-ABP官方完整解决方案和手动搭建简化解决方案实践
本文主要讲解了如何把ABP官方的在线生成解决方案运行起来,并说明了解决方案中项目间的依赖关系.然后手动实践了如何从0搭建了一个简化的解决方案.ABP官方的在线生成解决方案源码下载参考[3],手动搭 ...
- ASP.NET MVC 3 网站优化总结(三)Specify Vary: Accept-Encoding header
继续进行 ASP.NET MVC 3 网站优化工作,使用 Google Page 检测发现提示 You should Specify Vary: Accept-Encoding header,The ...
- ASP.NET MVC 3 网站优化总结(一) 使用 Gzip 压缩
网站开启 Gzip 压缩的好处相信很多人都已经清楚,这样做可以提高网站的性能.那么为什么很多网站没有开启 Gzip 压缩功能呢?原因有4点:防病毒软件.浏览器 bug.网站代理和服务器未配置. 使用 ...
- ASP.NET MVC 3 网站优化总结(六)压缩 HTML
压缩 html 可以去除代码中无用的空格等,这样可提高网站的加载速度并节省带宽.今天就让我们看看在 ASP.NET MVC 3 怎么实现 html 压缩,我们可通过实现 ActionFilter 来完 ...
- 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
随机推荐
- Nginx中的Location和Rewrite
Nginx中的Location和Rewrite 目录 Nginx中的Location和Rewrite 一.location 1. location的分类 2. location常用的匹配规则 3. l ...
- 趣谈IO多路复用的本质
在<轻松搞懂5种IO模型>中,我发起了一个投票. 答案是[同步IO多路复用].目前,60%的朋友答对了.原因这里解释一下. 同步和异步的概念区别 同步:线程自己去获取结果.(一个线程) 异 ...
- Zookeeper开源客户端Curator之创建会话
前面Zookeeper的链接使用的都是其提供的原生代码,实际开发过程中非常底层的细节开发工作如连接重连,反复注册等耗费开发人员大量的工作精力并且重复工作.而开源客户端Curator的出现解决了该类问题 ...
- vmware 16 pro 安装macos
VMware 16 安装 MAC OS 10.13 原版(详细图文教程)关于虚拟机安装苹果系统的教程网络上有很多, 有些适合自己, 有些则不适合(教程中的版本老旧或工具资源消失), 在安装成功后选择用 ...
- 【C#操作符】typeof 和 is 运算符执行的类型检查之间的差异
typeof 运算符也能用于公开的泛型类型.具有不止一个类型参数的类型的规范中必须有适当数量的逗号.不能重载 typeof 运算符. is 可以检测和父类是否兼容,typeof责不能 public c ...
- Debian 11 配置优化指南
原文地址: Debian 11 配置优化指南 - WindSpiritIT 0x00 简介 本文仅适用于配置 Debian 11 Bullseye 文中同时包含 Gnome 桌面和 KDE 桌面配置, ...
- Git学习笔记(详细)、idea集成
目录 概述 安装 常用命令 总结 idea使用git idea使用github Gitee GitLab Git使用git rebase 修改提交历史中的作者及邮箱信息 概述 官网:https://g ...
- C# 方法里面的默认参数
最近有很多地方都用到了方法的默认参数,遂总结之. (一)先从原理说起 在C#中,一旦为某个参数分配了一个默认值,编译器就会向内部该参数应用定制一个attribute 即是(OptionalAttrib ...
- Nginx平滑升级的详细操作方法
转至:https://blog.csdn.net/midion9/article/details/49684325 一.平滑升级概述Nginx方便地帮助我们实现了平滑升级.其原理简单概括,就是:(1) ...
- linux(Centos7)安装mysql
查看系统环境 [root@localhost html]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) CentOS 7 ...