• 首页
  • 产品与方案
  • 众成服务
  • 走进众成
  • 新闻中心
  • 企业文化
  • 联系我们
  • 解决方案
  • 众成软件
  • 维护支持
  • 运维服务
  • 技术交流
  • 公司介绍
  • 荣誉资质
  • 合作伙伴
  • 招贤纳士
  • 公司新闻
  • 业界动态
  • 文化建设
  • 企业文化
  • 荣誉榜

首页 > 产品与方案 > 众成软件

众成软件

ASP.NET MVC 多语言实现技巧 最简、最易维护和最快速开发

 作者:佚名   文章来源:软件部    点击数:  更新时间:2017-03-06 12:38:11

说说传统做法的缺点

1、做过多语言的都知道这玩意儿太花时间

2、多语言架构一般使用资源文件、XML或者存储数据库来实现。这样就在一定程序上降低了性能

3、页面的可读性变差,需要和资源文件进行来回切换

4、修改麻烦

5、样式兼容难调

6、JS如何处理

另类做法

传统做法看上去高大上实质上维护起来确实很费力,所以有一部分人就采用了另类做法直接做二套页面。总体来说上面一种和下面一种可以说半斤八两。

上面一种显的有点档次,但维护成本并不低,页面可读性差,样式兼容难调,唯一优点是页面代码逻辑只有一套,只在这一点上占了优势。

另类做法升级版

为了快速开发和易维护性我对另类方法进行了2点升级

1、重写MVC默认视图引擎

在Gobal Application_Start中添加自定义视图引擎,只看红圈内容

return view时会根据Cookie里面的语言后缀找到相应的cshtml文件,BestViewEngine具体内容如下:

/// 自定义MVC视图引擎

///

publicsealedclassBestViewEngine : RazorViewEngine

{

publicBestViewEngine()

{

}

///

/// 重写FindView

///

///

///

///

///

///

publicoverrideViewEngineResult FindView(ControllerContext controllerContext,stringviewName,stringmasterName,booluseCache)

{

varkey ="languageKey";//COOKIE KEY

varcm = CookiesManager<string>.GetInstance();

if(cm.ContainsKey(key))//验证多语言COOKIE是否有值

{

varcacheVal = cm[key];//获取多语言后缀 (例如: en)

if(cacheVal.IsValuable())

viewName +="_{0}".ToFormat(cm[key]);//将原视图名添加后缀 比如 index 添加后缀之后就是 index_en

}

returnbase.FindView(controllerContext, viewName, masterName, useCache);//参数处理后调用BASE的FindView方法

}

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Web;

usingSystem.Web.Mvc;

usingBest.WidgetFactory.Cache;

usingSyntacticSugar;

namespaceBest.Site.Models

{

///

  

2、添加扩展函数让一个js支持多种语言的cshtml (例如:index.js 可以用在index.cshtml和index_en.cshtml)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

usingSystem.Web.Mvc;

usingSyntacticSugar;

usingSystem.Text.RegularExpressions;

publicstaticclassHtmlHelperExtensions

{

publicstaticMvcHtmlString PageLanguage(thisHtmlHelper helper,objectobj)

{

stringstr=obj.ModelToJson();//将对象转为json

StringBuilder sb =newStringBuilder();

sb.Append("");

MvcHtmlString mvcString =newMvcHtmlString(sb.ToString());

returnmvcString;

}

}

  

cshtml中如何使用这个扩展函数(如下图)

JS里面调用PageLanguage属性

IMG_258

目录结构如下,当用户访问 /Role/index ,我们COOKIE里面存的是 en 那么 return view 本来找到的是 index.cshtml 经过我们的重写就会找到

index_en.cshtml

如果要添加更多语言我们只要添加相应的cshtml和cookie,JS和后台代码全部一致

回顾一下代码:

index_en.cshtml

IMG_260

index.cshtml

统一的JS(只看红圈部分便可)

IMG_262

 

下载此文档:ASP.NET MVC 多语言实现技巧 最简、最易维护和最快速开发   类型:doc,   大小:1 MB
  • 地址:温州市车站大道大诚商厦E幢四楼 | 电话:0577-88891333 | 技术服务电话:4008515159 | 传真:0577-88363999
  • 邮箱:jucher@jucher.com | 浙ICP备05000620号-1
  • Copyright © 2009-2019 JUCHER CORPORATION CO., LTD All Rights Reserve