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即可。
