MVC中如何实现本地化的解决方案
1. Q: 什么是本地化?
A: 本地化是指企业在国际化过程中,为了提高市场竞争力,同时降低成本,将产品的生产、销售等环节按特定国家/地区或语言市场的需要进行组织,使之符合特定区域市场的组织变革过程。
2. 其思路是:创建一个新的资源文件项目,在需要的地方进行相应的调用。
其具体步骤如下:
1>. 创建类库项目

在Resource project中添加文件夹Views-Home,这里最好和MVC对应起来,看起来一目了然。
2> 添加资源文件
需要添加中文和英文两个资源文件。如上图所示:英文Index.en.resx和中文Index.resx

如上图所示,上图是Index.en.resx,名称和调用该资源信息的名称一致,值是在界面显示的方式。Index.resx则在值一列中表现为“首页”。
注意,上图中有个用红色框,“访问修饰符”应该选择public(全局),不然在mvc项目中无法引用到该资源文件。
3>. 添加调用“资源文件”类,源码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web; namespace Resource
{
/// <summary>
/// 资源调用类
/// </summary>
public class Invoke
{
public static void SetCurrentThreadCulture(HttpSessionStateBase session)
{
if (session != null && session["Culture"] != null)
{
System.Threading.Thread.CurrentThread.CurrentCulture = (System.Globalization.CultureInfo)session["Culture"];
System.Threading.Thread.CurrentThread.CurrentUICulture = (System.Globalization.CultureInfo)session["Culture"];
}
}
}
}
4>. 创建MVC项目,并使用资源文件,以自带的MVC示例为例
首先在MVC project中引用“Resource project”,在Home下的Index.cshtml中添加引用:Resource.Invoke.SetCurrentThreadCulture(Session),
在需要用的的地方添加@Resource.Views.Home.Index.home (如果这边在Home下无法显示出Index的话,是因为资源文件中的访问修饰符未修改为public),如下图所示:
@{
ViewBag.Title = "Home Page";
Resource.Invoke.SetCurrentThreadCulture(Session);
}
@section featured {
<section class="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1>@Resource.Views.Home.Index.home</h1>
</hgroup>
......
这里用到了Session。所以需要创建控制器Local。内容如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace MvcLocalizeDemo.Controllers
{
public class LocalController : Controller
{
//
// GET: /Local/ public ActionResult Index()
{
return View();
} public ActionResult en()
{
System.Globalization.CultureInfo en = new System.Globalization.CultureInfo("en-US");
Session["Culture"] = en;
return this.Redirect(this.Request.UrlReferrer.ToString());
} public ActionResult cn()
{
System.Globalization.CultureInfo ch = new System.Globalization.CultureInfo("zh-CN");
Session["Culture"] = ch;
return this.Redirect(this.Request.UrlReferrer.ToString());
}
}
}
这里的“en-US”代表英文,“zh-CN”代表中文,中间是中横线,不是下划线,这个要注意。不同的语言代码对于不同的地区或国家,具体参照:http://www.myexception.cn/mobile/1434882.html (随便找的)
5>. 运行MVC项目

当点击红色框中的中文/英文时,会将蓝色框中的首页置为“首页/Home”。
6>. 在Model层调用文件
[Required(ErrorMessageResourceType = typeof(Resource.Entity.UserAccount), ErrorMessageResourceName = "Common_Required_ErrorMessage")]
[Display(ResourceType = typeof(Resource.Entity.UserAccount), Name = "OLDPassword_DisplayName")]
public string OldPassword { get; set; }
如上所示,只需要在各个属性上面,添加typeof即可。
MVC中如何实现本地化的解决方案的更多相关文章
- 在ASP.NET MVC中实现本地化和全球化
在开发多语言网站时,我们可以为某种语言创建一个资源文件,根据浏览器所设置的不同语言偏好,让运行时选择具体使用哪个资源文件.资源文件在生成程序集的时候被嵌入到程序集. 本篇体验,在ASP.NET MVC ...
- 针对Linux ASP.NET MVC网站中 httpHandlers配置无效的解决方案
近期有Linux ASP.NET用户反映,在MVC网站的Web.config中添加 httpHandlers 配置用于处理自定义类型,但是在运行中并没有产生预期的效果,服务器返回了404(找不到网页) ...
- MVC项目中ExecutionTimeout不生效的解决方案
我们做web服务器端开发时,经常会遇到一个需求场景,因为某些耗时处理造成页面的响应处理时间超长,技术角度就想能否给页面处理程序一个指定的超时时间,服务端处理程序执行时间超过这个指定的超时时间则中断处理 ...
- 关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】
最近一直用ASP.NET MVC 4.0 +LINQ TO SQL来开发设计公司内部多个业务系统网站,在这其中发现了一些问题,也花了不少时间来查找相关资料或请教高人,最终都还算解决了,现在我将这些问题 ...
- MVC中,查询以异步呈现,分页不用异步的解决方案
MVC中,查询以异步呈现,分页不用异步的解决方案 这种需求,用一个ASPX页面和一个ASCX分部视图就可以解决了,ASPX提供对ASCX的引用,ASCX显示列表信息,ASPX主页面提供查询功能 < ...
- asp.net mvc 中[Authorize]在IE9以上版本关于FormsAuthentication.SetAuthCookie无效的问题 解决方案
简单的解决方法是,在网站根目录,新增一个浏览器定义文件(browser definition file) 叫“App_Browsers”文件夹,然后里面放一个“IE10.browser”文件即可,网站 ...
- spring web mvc中遇到的错误以及学习小记(持续记录)
错误:cvc-complex-type.2.4.a: 发现了以元素 'init-param' 开头的无效内容.应以 '{"http://java.sun.com/xml/ns/javaee& ...
- 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
- 4.在MVC中使用仓储模式进行增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-using-the-repository-pattern-in-mvc/ 系列目录: ...
随机推荐
- 【剑指offer】堆栈推弹出序列
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26077863 剑指offer上的第22题,九度OJ上AC. 题目描写叙述: 输入两个整数序 ...
- C++达到String分类
这是一个非常经典的面试题,能够测试学生很短的时间C++法师是综合,答案应包含C++大多数知识类,保证书String符类可以完成值.抄.的变量和其它函数的定义. #include<iostream ...
- 华为G520联通版刷机包 基于MIUI CM11新 平稳 稳定
ROM介绍 刷先配置双卡:"设定-安卓原生设置-双卡套-配置订阅",否则,无信号 使开发人员选项方法:"设定-安卓原生设置-关于手机-发布"连续点击版本 启用A ...
- (一)spring MVC基本概念和流程
MVC的概念 Model(模型):包含数据和行为.不过现在一般都分离开来:Value Object(数据) 和 服务层(行为). View(视图):负责进行模型的展示,一般就是展示给用户的界面. Co ...
- JS function立即调用的几种写法
//立即执行 (function () { alert(1) })() //立即执行 !function () { alert(1) }() //立即执行 +function () { alert(1 ...
- wp如何代码实现锁屏
原文:wp如何代码实现锁屏 由于wp系统对开发者相对封闭,造成了用户对那些稍有用处但又不那么有用的功能过度追求,比如说重启.锁屏等功能.针对一个功能写两行代码,再起一个牛逼哼哼的名字,就可以获得超级多 ...
- SQL于DML(数据库操作语言)采用
1.Insert语句: INSERT [INTO] table [(column1, column2, column3, . . .)] VALUES(value1, value2, value3, ...
- POJ1135_Domino Effect(最短)
Domino Effect Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8224 Accepted: 2068 Des ...
- Swift语言指南(八)--语言基础之元组
原文:Swift语言指南(八)--语言基础之元组 元组 元组(Tuples)将多个值组合为一个复合值.元组内的值可以是任何类型,各个元素不需要为相同类型(各个元素之间类型独立,互不干扰--Joe.Hu ...
- J2EE之验证码实现
package cn.itcast.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; i ...