在mvc4中多语言建站的实例
环境:vs2012 asp.net mvc4.
实现方式:resource 资源文件,根据路由规则中Lang参数来判断载入哪种语言方式
在网上找到了相关资料,顺便自己做了个练习,新建工程之类的步骤就免了,该注意的地方说明下,记着方便下次使用。
1:添加资源文件,记得设置资源文件的访问模式为public,不然默认是Internal,外面会访问不到:
2:添加路由规则,记得加在Default路由规则的前面,否则新规则没用,详细原因请参考这篇文章

- 1 routes.Add(new Route(
- 2 "{lang}/{controller}/{action}/{id}",
- 3 new RouteValueDictionary(new {
- 4 lang = "en-US",//默认为E文
- 5 controller = "Account",
- 6 action = "Logon",
- 7 id = UrlParameter.Optional
- 8 }),
- 9 new MultiLangRouteHandler()//这个类主要是通过GetHttpHandler来取得当前Lang的值
- 10 ));


- 1 public class MultiLangRouteHandler : MvcRouteHandler {
- 2 protected override IHttpHandler GetHttpHandler(RequestContext requestContext) {
- 3 string lang = requestContext.RouteData.Values["lang"].ToString();
- 4
- 5 //Thread.CurrentThread.CurrentCulture = new CultureInfo(lang);
- 6 Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
- 7
- 8 //return new MvcHandler(requestContext);
- 9 return base.GetHttpHandler(requestContext);
- 10 }
- 11 }

有关代码中的CurrentUICulture可以参考我上一篇文章,里面有详细解释。
3:中英文切换入口。

- 1 <div>
- 2 @{
- 3 string controller = ViewContext.Controller.ValueProvider.GetValue("controller").RawValue.ToString();
- 4 string action = ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString();
- 5 //string lang = ViewContext.Controller.ValueProvider.GetValue("lang").RawValue.ToString();
- 6 }
- 7 @Html.ActionLink("中文", action, new { Controller = controller, lang = "zh-CN" }, new {@class="btn-a" })
- 8 @Html.ActionLink("English", action, new { Controller = controller, lang = "en-US" }, new {@class="btn-a" })
- 9 </div>

4:界面上普通文字的多语言
其实我有按照上面的那篇文章写测试程序,但是写死的资源文件并没有根据中英文来切换,我都不知道是不是哪里有问题,闷~,后来mvc群里面的朋友(无情水)介绍另外一篇文章,我参照着改写了下,在此说声ths...

- public static class LangHelper {
- //界面普通文字的多语言
- public static string GetLangbyKey(this HtmlHelper htmlhelper, string key) {
- Type resourceType = (Thread.CurrentThread.CurrentUICulture.Name == "en-US") ? typeof(Resources.en_US) : typeof(Resources.zh_CN);
- PropertyInfo p = resourceType.GetProperty(key);
- if (p != null)
- return p.GetValue(null, null).ToString();
- else
- return "undefined";
- }
- //js定义多语言弹出框
- public static string LangOutJsVar(this HtmlHelper htmlhelper, string key) {
- Type resourceType = (Thread.CurrentThread.CurrentUICulture.Name == "en-US") ? typeof(Resources.en_US) : typeof(Resources.zh_CN);
- PropertyInfo p = resourceType.GetProperty(key);
- if (p != null)
- return string.Format("var {0} = '{1}'", key, p.GetValue(null, null).ToString());
- else
- return string.Format("var {0} = '{1}'", key, "undefined");
- }
- }

View页面调用直接用函数的方式。如:<h2>@Html.GetLangbyKey("LogonDisplay")</h2>
5:DisplayName 的多语言化
重新定义一LocalDisplayName属性,他继承自DisplayNameAttribute

- public class LocalDisplayName : DisplayNameAttribute {
- private string _defaultName = "";
- public Type ResourceType {
- get { return (Thread.CurrentThread.CurrentUICulture.Name == "en-US") ? typeof(Resources.en_US) : typeof(Resources.zh_CN); }
- }
- public string ResourceName {
- get;
- set;
- }
- public LocalDisplayName(string defaultName) {
- _defaultName = defaultName;
- }
- public override string DisplayName {
- get {
- PropertyInfo p = ResourceType.GetProperty(ResourceName);
- if (p != null)
- return p.GetValue(null, null).ToString();
- else
- return _defaultName;
- }
- }
- }

在Model类上就把Display属性换为LocalDisplayName

- public class Account {
- [Required]
- [LocalDisplayName("user name", ResourceName = "UserDisplay")]
- public string UserName { get; set; }
- [Required]
- [LocalDisplayName("password", ResourceName = "PwdDisplay")]
- public string Pwd { get; set; }
- [Required]
- [Compare("Pwd",ErrorMessageResourceName="ConfirmPwdErrorDisplay")]
- [LocalDisplayName("confirm password", ResourceName = "ConfirmPwdDisplay")]
- public string ConfirmPwd { get; set; }
- [Required]
- [LocalDisplayName("remember", ResourceName = "RemDisplay")]
- public bool Rememberme { get; set; }
- }

调用方式:<div>@Html.LabelFor(m => m.UserName)</div>
实现效果:
大概这样基本的就实现了, 有个Errormessage的还没整好,有空再来写。有不对的地方大家给予指正,谢谢!
参考文档:
http://www.cnblogs.com/codehunter008/archive/2008/09/01/1281565.html
http://www.cnblogs.com/lionking/articles/1894277.html
如果是要写数据库的文字,应该怎么实现多语言呢?有什么好的方式,请教下。
下载链接: 点击下载
來源:http://www.cnblogs.com/Joans/archive/2012/08/16/2640473.html
在mvc4中多语言建站的实例的更多相关文章
- joomla多语言建站之默认前台语言设置
joomla多语言建站后,如果想设置其中一种语言为默认前台语言,即: 从后台点击“Site Name”跳转时: 访问域名时: 页面自动切换至某一种语言,可以在后台通过“语言管理”模块来实现,将“网站前 ...
- [转]ASP.NET MVC4中@model使用多个类型实例的方法
本文转自:http://blog.csdn.net/hulihui/article/details/48199897 有时需要在ASP.NET MVC4的视图的@model中使用多个类型的实例,.NE ...
- Nodejs电影建站开发实例(下)
作为一个真正的网站,不能没有数据的支持,下面使用的数据库为mongodb,电影可能有的数据:电影名称.导演.国家.语言.上映时间.图片.简介.视频 4.使用路由 app.js var express ...
- Nodejs电影建站开发实例(上)
网站环境:使用express框架.bootstrap样式.jade模板.mongoose数据库 npm insatll express -g npm insatll jada -g npm insat ...
- mvc4中使用部分视图局部刷新实例
如上效果图,网页中有主视图(上)和部分视图(下),点击提交会把文本框中的值发送到服务器,再返回所有添加的信息,在下方局部更新(只更新部分视图),实现如下: 1.网页主视图代码: @model MvcA ...
- ASP.NET MVC4中@model使用多个类型实例的方法
转http://blog.csdn.net/hulihui/article/details/48199897
- (转) Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么?
Web 建站技术中,HTML.HTML5.XHTML.CSS.SQL.JavaScript.PHP.ASP.NET.Web Services 是什么? 建站有很多技术,如 HTML.HTML5.XHT ...
- Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么(转)
Web 建站技术中,HTML.HTML5.XHTML.CSS.SQL.JavaScript.PHP.ASP.NET.Web Services 是什么?修改 建站有很多技术,如 HTML.HTML5.X ...
- 如何在一个项目中同时包含mvc建站、webapi接口
项目做得多了..就会发现有些小项目不想建太多的项目..现在思明在这里和大家分享一下如果再一个项目中同时包含mvc建站以及实现webapi接口 1.新建项目 aps.net web 应用程序 2 新建模 ...
随机推荐
- Android——shape和selector和layer-list的(详细说明 转)
<shape>和<selector>在Android UI设计中经常用到.比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到<shape> ...
- Listener 监听对象的创建和销毁
HttpSessionListener.ServletContextListener.ServletRequestListener分别用于控制Session.context.request的创建和销毁 ...
- Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考) - 推荐
http://blog.csdn.net/lc0817/article/details/53266212/ https://github.com/leoChaoGlut/log-sys 上面是我基于S ...
- linux守护进程编写实践
主要参考:http://colding.bokee.com/5277082.html (实例程序是参考这的) http://wbwk2005.blog.51cto.com/2215231/400260 ...
- Python 文件操作三
文件重命名os模块中的rename()可以完成对文件的重命名操作rename(需要修改的文件名, 新的文件名) import os os.rename("11.txt", &quo ...
- Elasticsearch与Solr 选型
转自:http://blog.csdn.net/jameshadoop/article/details/44905643 搜索引擎选择: Elasticsearch与Solr 搜索引擎选型调研文档 E ...
- Sublime Text 3 For Mac
安装 Sublime Text 3 下载地址:http://www.sublimetext.com/3 我此时使用的是Build 3083版本. 安装 Package Control 这个是精华所在, ...
- android 图片处理
一.缩放 指宽.高缩放 (1)按比例缩放 在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用BitmapFactory的de ...
- 【转】在android程序中使用配置文件properties
在android程序中使用配置文件来管理一些程序的配置信息其实非常简单 在这里我们主要就是用到Properties这个类直接给函数给大家 这个都挺好理解的 读写函数分别如下: //读取配置文件 pub ...
- 关于Unity中DOTween插件的使用(专题一)
DOTween flash里面的一个概念叫补间动画,DOTween就是干这个事情的. 补间动画:在1秒钟之内从A点移动到B点,在这个之间会把动画补间补好. 当我们安装好DOTween后,它就会提供很多 ...