此文主要是最近做多语言的工作的一个经验分享。文中的内容为参照多位大神的方案后,自己揉捏出来的一个新的方案,对于html和javascript部分的多语言的切换,共用一套资源文件。代码中主要是使用 IHttpModule + cookie 的方式实现。具体原理不多说(请问度娘或谷歌),旨在共享代码。 如果有不喜欢的也请绕行,勿喷!

此方案比较简单易懂,也不low,还是紧跟国际范的,如果觉得好,不妨用用看!

第一步:创建资源文件

第二步:添加 IHttpModule 接口实现类

namespace PIMS_WebConsole
{
public class CultureAwareHttpModule : IHttpModule
{
public void Dispose() { }
public void Init(HttpApplication context)
{
context.BeginRequest += SetCurrentCulture;
}
private void SetCurrentCulture(object sender, EventArgs args)
{
string cultureName = string.Empty;
HttpCookie cultureCookie = System.Web.HttpContext.Current.Request.Cookies[Const.CookieName_Language];
if (cultureCookie != null)
{
cultureName = cultureCookie.Value;
Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureName);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
}
}
}
}

第三步: web.config中注册实例类

  <system.webServer>
<modules>
<add name="CultureAwareHttpModule" type="PIMS_WebConsole.CultureAwareHttpModule"/>
</modules>
</system.webServer>

到此,后台的多语言切换部分的代码齐了。后面是脚本的代码

第四步:javascript部分的核心代码

var __page = __page || {};//语言cookie名称
__page.langcookiename = "_pims_lang";//选择语言
__page.lang = $.cookie(__page.langcookiename);
if (!__page.lang) {
__page.lang = "zh-CN";
_setLanguageCookie(__page.lang);
};
__page.localization();
__page.setLanguageCookie = _setLanguageCookie; function _setLanguageCookie(lang) {
$.cookie(__page.langcookiename, lang, { expires: 9999 });
window.location.reload();
}

第五步:view+js中语言的使用

view中直接@Resource的方式就可以了(不要跟我说怎么我的不行呢?我不会告诉你需要去view的config中using这个命名空间的),JS中,主要是在view中定义一个Json对象,然后JS中使用此Json对象。 能一定程度的解决某些强迫症选手,对于自己代码中各类名称的自定义癖好。

view中示例:

<script>var $PageLanguage = {
OK: "@Html.Raw(@Resource.OK)",
Cancel: "@Html.Raw(@Resource.Cancel)",
Create: "@Html.Raw(@Resource.Create)",
Query: "@Html.Raw(@Resource.Query)",
MachineName: "@Html.Raw(@Resource.MachineName)",
Shift: "@Html.Raw(@Resource.Shift)"
};
</script>

@section Scripts {
  @Scripts.Render("~/CustomJS/test.js?v=1.0")

}

<label class="toolbar-label" for="Shift">@Resource.Shift</label>

JS中示例:

$(function () {
alert($PageLanguage.OK);
});

到此,你已经完成了所有的内容,可以开始你的表演了!

谢谢!

推荐:Asp.Net MVC 多语言(html+js共用一套资源文件)的更多相关文章

  1. ASP.NET MVC 4 RC的JS/CSS打包压缩功能 (转载)

    ASP.NET MVC 4 RC的JS/CSS打包压缩功能 打包(Bundling)及压缩(Minification)指的是将多个js文件或css文件打包成单一文件并压缩的做法,如此可减少浏览器需下载 ...

  2. EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象

    EF+LINQ事物处理   在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...

  3. (转)ASP.NET MVC 4 RC的JS/CSS打包压缩功能

    转自:http://www.cnblogs.com/shanyou/archive/2012/06/22/2558580.html 打包(Bundling)及压缩(Minification)指的是将多 ...

  4. ASP.NET MVC 4 RC的JS/CSS打包压缩功能

    打包(Bundling)及压缩(Minification)指的是将多个js文件或css文件打包成单一文件并压缩的做法,如此可减少浏览器需下载多个文件案才能完成网页显示的延迟感,同时通过移除JS/CSS ...

  5. 【转】ASP.NET MVC 4 RC的JS/CSS打包压缩功能

    原文链接:http://www.cnblogs.com/shanyou/archive/2012/06/22/2558580.html 打包(Bundling)及压缩(Minification)指的是 ...

  6. ASP.NET MVC 4 RC的JS/CSS打包压缩功能 Scripts.Render和Styles.Render

    打包(Bundling)及压缩(Minification)指的是将多个js文件或css文件打包成单一文件并压缩的做法,如此可减少浏览器需下载多个文件案才能完成网页显示的延迟感,同时通过移除JS/CSS ...

  7. ASP.NET MVC多语言 仿微软网站效果(转)

    本文转自: https://blog.csdn.net/Cooldiok/article/details/7831351 2017年10月22日 21:31:22 Cooldiok 微软作为ASP.N ...

  8. ASP.NET MVC之Bundle压缩JS和CSS

    介绍Bundle之前先引用<淘宝技术这十年>中一段话,对Web前端稍微有点常识的人都应该知道,浏览器下一步会加载页面中用到的CSS.JS(JavaScript).图片等样式.脚本和资源文件 ...

  9. ASP.NET MVC多语言 仿微软网站效果

    文章转载自:https://blog.csdn.net/cooldiok/article/details/78313513 微软作为ASP.NET的创造者,它对于官网的结构设计肯定有值得我们借鉴和参考 ...

随机推荐

  1. Ubuntu下安装qq方法及疑难问题解决

    在Ubuntu下安装qq有两种方法:.tar.gz包安装和.deb包安装下载地址:http://im.qq.com/qq/linux/download.shtml 方法一:.tar.gz包安装法 .t ...

  2. kafka 生产者基本操作

    kafka自带了一个在终端演示生产者发布消息的脚本--kafka-console-producer.sh 运行该脚本会启动一个进程,在运行该脚本时可以传递相应配置以覆盖默认配置. 参数-- -- pr ...

  3. Spring总结 2.装配bean

    本随笔内容要点如下: bean的作用域 占位符 一.bean的作用域 在默认情况下,Spring管理的bean的单例的.也就是说,无论注入多少次,都是同一个bean对象.一般情况下,单例模式是足以应付 ...

  4. Xcode中的Vim--XVim

    相信大家在开始使用一门编程语言的时候,最先做的事就是去学习它对应的IDE.在你稍微进阶的时候,就会想着去学习IDE中的各种快捷键,比如 如何删除整行 如何在不使用鼠标的情况下,在代码间快速移动.跳转 ...

  5. 136 Ugly Numbers(priority_queue+逆向求解要求数)

    题目链接: https://cn.vjudge.net/problem/UVA-136 /*问题 输出第1500个丑数,丑数的定义是不能被2,3,5以外的其他素数整除的数 解题思路 直接硬暴力先试一下 ...

  6. Docker基础-容器操作

    1.创建容器 1.新建容器 可以使用docker create命令新建一个容器. [root@linux-node1 ~]# docker create -it ubuntu:latest ffc90 ...

  7. 记录数据库操作记录的DDL触发器

    我们在项目中经常会对数据做一些操作,比如增加一个字段,修改一个存储过程,删除表等等操作,很有必要记录这些操作,以便以后出了问题,方便找到元凶.接下来介绍一个DDL触发器在实际环境中的使用,这个DDL触 ...

  8. Java多线程--JDK并发包(2)

    Java多线程--JDK并发包(2) 线程池 在使用线程池后,创建线程变成了从线程池里获得空闲线程,关闭线程变成了将线程归坏给线程池. JDK有一套Executor框架,大概包括Executor.Ex ...

  9. Mock session,cookie,querystring in ASB.NET MVC

    写测试用例的时候经常发现,所写的功能需要Http上下文的支持(session,cookie)这类的. 以下介绍2种应用场景. 用于控制器内Requet获取参数 控制器内的Requet其实是控制器内的属 ...

  10. Java中List、integer[]、int[]之间的转化

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.functio ...