背景

本文介绍了多语言的三种技术处理策略,每种策略对应一种场景,这三种场景是:

  1. 多语言资源信息只被.NET使用。
  2. 多语言资源信息只被Javascript使用。
  3. 多语言资源信息同时被.NET和Javascript使用。

下文我们就一个一个场景的分析。

第一种场景:多语言资源信息只被.NET使用

这种场景的技术处理最简单,可以充分利用VisualStudio提供的资源编辑器及资源文件。

实现步骤

1、定义资源文件。

2、使用资源文件。

1 <h1>Classic:@Strings.Title </h1>

第二种场景:多语言资源信息只被Javascript使用

这种场景的技术实现需要参考使用的Javascript类库,自己做也不难(无非是原型覆盖或变量覆盖)。

实现步骤

1、定义Javascript本地化文件。

2、引入需要的本地化文件(可以静态引入或动态根据配置引入)。

1 <script src="../../../Javascript/Ext/locale/ext-lang-zh_CN.js"></script>

第三种场景:多语言资源信息同时被.NET和Javascript使用

这种场景多少有些复杂,因为资源信息需要在两个地方使用,我们可以重复定义两次,或者用代码生成器,不过这里介绍另外一种方式:服务器生成Javascript。

实现步骤

1、定义生成Javascript代码的控制器(会把服务器的资源文件生成为Javascript代码,这样就保证资源只需要定义一次)。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6
 7 using Happy.Web.Mvc;
 8
 9 namespace Happy.MvcExample.Controllers
10 {
11     public class JavascriptResourceController : Controller
12     {
13         //
14         // GET: /JavascriptResource/Strings
15
16         public ActionResult Strings()
17         {
18             return new JavascriptResourceResult("MvcExample.Strings", typeof(Resource.Strings));
19         }
20     }
21 }

2、使用服务器生成的Javascript代码。

1 <script src="~/Scripts/jquery-2.0.3.js"></script>
2 <script type="text/javascript" src="JavascriptResource/Strings"></script>
3 <script type="text/javascript">
4     $("#ClientTitle").text(MvcExample.Strings.Title);
5 </script>

3、JavascriptResourceResult实现。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.Web.Mvc;
 7
 8 using Happy.Infrastructure.ExtentionMethods;
 9
10 namespace Happy.Web.Mvc
11 {
12     /// <summary>
13     /// 将服务器端的资源文件转换为Javascript代码,主要为了在服务端和客户端之间共享资源文件。
14     /// </summary>
15     public sealed class JavascriptResourceResult : JavaScriptResult
16     {
17         public JavascriptResourceResult(string javascriptObjectName, Type resourceType)
18         {
19             javascriptObjectName.MustNotNullAndNotWhiteSpace("javascriptObjectName");
20             resourceType.MustNotNull("resourceType");
21
22             var namespaceDefinitionString = GetNamespaceDefinitionString(javascriptObjectName);
23             var keyValueStrings = GetKeyValueString(resourceType);
24
25             this.Script = string.Format("{0};{1} = {{{2}}}", namespaceDefinitionString, javascriptObjectName, keyValueStrings);
26         }
27
28         private static string GetNamespaceDefinitionString(string javascriptObjectName)
29         {
30             var names = javascriptObjectName.Split('.');
31
32             var namespaces = names.Take(names.Length - 1).Select((x, index) =>
33             {
34                 return String.Join(".", names.Take(index + 1).ToArray());
35             });
36
37             var sb = new StringBuilder();
38             sb.AppendFormat("var {0} = {0} || {{}}", namespaces.First());
39             foreach (var item in namespaces.Skip(1))
40             {
41                 sb.AppendFormat("{0} = {0} || {{}}", item);
42             }
43
44             return sb.ToString();
45         }
46
47         private static string GetKeyValueString(Type resourceType)
48         {
49             var keyvalues = resourceType
50                 .GetProperties()
51                 .Select(x =>
52                 {
53                     return string.Format("{0}: '{1}'", x.Name, x.GetValue(null));
54                 }).ToArray();
55
56             return String.Join(",", keyvalues);
57         }
58     }
59 }

最终的运行效果

切换语言需要修改Web.Config,配置如下:

1 <globalization uiCulture="en-US"/>

中文

英文

注:不同的颜色是不同的模板导致的。

代码下载

地址:http://happy.codeplex.com/SourceControl/latest。

ASP.NET MVC:多语言的三种技术处理策略相关推荐

  1. Java 基础入门随笔(1) JavaSE版——java语言三种技术架构

    1.java语言的三种技术架构: J2SE(java 2 Platform Standard Edition):标准版,是为开发普通桌面和商务应用程序提供的解决方案.该技术体系是其他两者的基础,可以完 ...

  2. Java三种技术架构

    Java语言的三种技术架构: J2SE:JAVA 2 Platform Standard  Edition (标准版) SE是为开发普通桌面和商务应用程序开发的解决方案,这是学习其他两者的基础. J2 ...

  3. (转载)ASP.NET MVC多语言切换

    流程图 1.创建语言文件  创建App_GlobalResources文件夹 创建Language文件夹 创建资源文件 这些操作做完后,目录结构应该是以下这样的 我们打开每个资源文件,在里面添加一条T ...

  4. c语言属于结构化程序设计语言,c语言填空题1.结构化程序设计语言的三种基本结构分别是,和.-查字典问答网...

    c语言填空题 1.结构化程序设计语言的三种基本结构分别是,和. 2.C源程序的基本单位是______,一个C源程序中至少应包括一个______. 3.开发一个C程序要经过编辑.__________.连 ...

  5. c语言的三种基本结构——初学者一定要了解哦

    文章目录 前言 一.顺序结构 二.选择结构(分支语句) 1.选择语句之→if语句 1.1 if语句的基本结构 1.2 if语句之多分支: 1.3 if语句的常见错误使用. 2.选择语句之→switch ...

  6. C语言中三种大括号格式的规范

    C语言中三种大括号格式的使用规范 简介: 在C中,使用大括号的方法无所谓对还是错--只要每个开括号后都有一个闭括号,你的程序中就不再会出现与大括号有关的问题.然而,有三种著名的大括号格式:Kernig ...

  7. C语言的三种基本结构

    C语言的三种基本结构 顺序结构 顾名思义 顺序结构就是顺序写的c语言程序 没有判断也没有循环 所有的语句都是用线性的顺序执行 如下代码为基础的顺序结构 #include <stdio.h> ...

  8. str是什么数据类型c语言,C语言的三种基本数据类型是什么?

    C语言的三种基本数据类型为整型.实型.字符型. 1.整型.包括short.int.long等,用以表示一个整数,默认为有符号型,配合unsigned关键字,可以表示为无符号型. 2.实型,即浮点型.包 ...

  9. X86服务器虚拟化的三种技术--(1)

    [说明]此文转载自毛文波博士的博客,简明扼要地介绍了在x86服务器虚拟化方法上的三个主要技术流派:Para-Virtualization, Full-Virtualization和Hardware-A ...

最新文章

  1. JavaScript数据类型检测总结
  2. MySQL编译安装及主从配置
  3. C语言【将一个文本文件中的全部信息显示到屏幕上】
  4. 第4章 Python 数字图像处理(DIP) - 频率域滤波6 - 二维DFT和IDFT的一些性质 - 平移和旋转、周期性、对称性
  5. 使用PowerMock模拟静态方法
  6. numpy.arange()官方用法详解(附numpy官方文档)
  7. 关于Redis的常识
  8. [CF321E] Ciel and Gondolas
  9. 戴尔服务器安装群晖系统安装教程,实战群晖NAS小白安装教程与经验分享
  10. 记一次华为服务器故障解决
  11. 联想官方出品小工具:关闭或开启 Win10 系统自动更新
  12. Collecting package metadata (current_repodata.json): fail亲测成功
  13. 跳舞的小人 和 盲文
  14. 假如用VIVO手机拍照,这几个功能一定要打开,效果媲美单反
  15. NSG2 安装、运行备忘
  16. 图解 Redis,还有人看不懂?
  17. 牛客算法周周练11A - 切题之路(阅读理解)
  18. 程序员职业发展路线图(完整版+珍藏版)
  19. git pull 时一直卡在Unpacking objects【待解决】
  20. android报错:TextView.setText(java.lang.CharSequence)on a null object reference

热门文章

  1. 测试一个显示器有拖影的软件,让“瑕疵”原形毕露,教你检测游戏显示器!
  2. 关闭计算机的配色方案更改,win10系统电脑提示是否要更改配色方案来提高性能窗口的处理方案...
  3. 一款基于React的思维导图脑图组件 (zz-mind-react)
  4. 【前端】JS异步加载
  5. 低压开关柜组成部分图解
  6. Windows Server 2012 域控服务器连接转换服务器实现office服务功能
  7. php将二维数组去重,PHP基于array_unique实现二维数组去重
  8. U-Mail邮件系统详解邮件收发延迟原因及解决方案
  9. unix 命令 vi操作 相关命令总结
  10. 由于不可抗力 /(ㄒoㄒ)/~~国庆学习了 GitLab CI 简单来聊一聊