ASP.NET MVC:多语言的三种技术处理策略
背景
本文介绍了多语言的三种技术处理策略,每种策略对应一种场景,这三种场景是:
- 多语言资源信息只被.NET使用。
- 多语言资源信息只被Javascript使用。
- 多语言资源信息同时被.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:多语言的三种技术处理策略相关推荐
- Java 基础入门随笔(1) JavaSE版——java语言三种技术架构
1.java语言的三种技术架构: J2SE(java 2 Platform Standard Edition):标准版,是为开发普通桌面和商务应用程序提供的解决方案.该技术体系是其他两者的基础,可以完 ...
- Java三种技术架构
Java语言的三种技术架构: J2SE:JAVA 2 Platform Standard Edition (标准版) SE是为开发普通桌面和商务应用程序开发的解决方案,这是学习其他两者的基础. J2 ...
- (转载)ASP.NET MVC多语言切换
流程图 1.创建语言文件 创建App_GlobalResources文件夹 创建Language文件夹 创建资源文件 这些操作做完后,目录结构应该是以下这样的 我们打开每个资源文件,在里面添加一条T ...
- c语言属于结构化程序设计语言,c语言填空题1.结构化程序设计语言的三种基本结构分别是,和.-查字典问答网...
c语言填空题 1.结构化程序设计语言的三种基本结构分别是,和. 2.C源程序的基本单位是______,一个C源程序中至少应包括一个______. 3.开发一个C程序要经过编辑.__________.连 ...
- c语言的三种基本结构——初学者一定要了解哦
文章目录 前言 一.顺序结构 二.选择结构(分支语句) 1.选择语句之→if语句 1.1 if语句的基本结构 1.2 if语句之多分支: 1.3 if语句的常见错误使用. 2.选择语句之→switch ...
- C语言中三种大括号格式的规范
C语言中三种大括号格式的使用规范 简介: 在C中,使用大括号的方法无所谓对还是错--只要每个开括号后都有一个闭括号,你的程序中就不再会出现与大括号有关的问题.然而,有三种著名的大括号格式:Kernig ...
- C语言的三种基本结构
C语言的三种基本结构 顺序结构 顾名思义 顺序结构就是顺序写的c语言程序 没有判断也没有循环 所有的语句都是用线性的顺序执行 如下代码为基础的顺序结构 #include <stdio.h> ...
- str是什么数据类型c语言,C语言的三种基本数据类型是什么?
C语言的三种基本数据类型为整型.实型.字符型. 1.整型.包括short.int.long等,用以表示一个整数,默认为有符号型,配合unsigned关键字,可以表示为无符号型. 2.实型,即浮点型.包 ...
- X86服务器虚拟化的三种技术--(1)
[说明]此文转载自毛文波博士的博客,简明扼要地介绍了在x86服务器虚拟化方法上的三个主要技术流派:Para-Virtualization, Full-Virtualization和Hardware-A ...
最新文章
- OCS2007R2部署之一软硬件环境准备
- 设计建造者模式java代码,Java设计模式-建造者模式
- 在VMware环境Windows server 2003下测试磁盘阵列实验
- 《系统集成项目管理工程师》必背100个知识点-06项目经理(PM)和PMO的区别
- 如何使ResNet优于EfficientNet?改进训练方法和扩展策略就可以
- pythonmatplotlib刷新_matplotlib:如何刷新figure.canvas
- JavaScript之array
- 网际协议IP与其配套协议
- linux的ssh命令
- Jenkins可持续集成
- paip.提升性能---mysql 优化cpu多核以及lan性能的关系.
- 基于JAVA+SQL Server数据库项目——学生校园卡管理系统(SSH框架)
- 尝试OUTFIle、INFILE快速导入导出数据
- 佳能mf4400打印机无线服务器,佳能Canon imageCLASS MF4400 驱动
- 神经网络训练平台,在线神经网络训练
- 【算法】贪心算法:LeetCode 714 买卖股票的最佳时机含手续费 、LeetCode 968 监控二叉树
- JS 数组动态添加键值对
- Skip List(跳表)
- mysql root密码是什么_mysql如何查看root密码是什么
- 10.梯度、激活函数和loss