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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM