本文短地址:http://zdd.me/aspnetmultilingual
現在的網站大多數都支援多語言,為不同語言的使用者訪問網站提供方便。我在前幾天用asp.net mvc 2 做了一個網站同時提供了中文和英文的支援,在這裡將我的網站的多語言的實現方式與各位網友分享一下,也希望有更好的實現方式的網友能夠賜教。
建立一個asp.net mvc 2 項目,先看一下mvc 2項目的初始結構:
- Views 用於呈現使用者介面,通常是aspx和ascx或html檔案,這裡一般不涉及程式的邏輯處理
- Scripts 用於存在js指令檔
- Models 中包含了程式的核心資料,這裡一般包括資料實體,資料驗證,資料庫訪問等
- Controllers 是 Models 和 Views 之間的資料互動的橋樑,即收集來自Views 處理後交給Models,並將來自 Models 的資料傳給 Views 呈現出來。
- Content 一般用於存放程式中用到的圖片和CSS檔案
在建立的項目中添加一個 Resources 檔案夾,這個就是用來存放多語言的資源檔(Resources File)的。為了方便管理資源檔,在 Resources 檔案夾中添加上Home、Account、Shared、Models 等子目錄,分別存放對應的資源檔。項目建好了,接下來就開始實現多語言支援。
本文主要示範多語言的實現方式,因此在這裡只實現Shared視圖中的Site.Master頁面的多語言支援。在Resources/Shared檔案夾中添加一個資源檔,命名為 Shared.resx ,這個檔案裡存放網站的預設語言(在這裡是簡體中文);再添加一個命名為 Shared.en-us.resx 的檔案,這個檔案使網站實現英語支援。資源檔的命名格式為 <檔案名稱>.<語言名稱>.resx 。
添加完資源檔後,首先將資源檔的 Access Modifier 改成 Public 。然後添加下面的字串。 在Shared.en-us.resx中加入對應的英語。
資源檔的預設命名空間是 項目名稱.檔案夾名稱 ,我們將它的命名空間改成 ViewResources
現在我們就可以在頁面中使用資源檔中的內容了,下面就將Site.Master中的字元改為使用資源檔中的字元,使用方式如所示:
按 Ctrl + F5 運行程式,可以看到Site.Master中的字元已經改成中文了。接著實現中文和英文之間的切換:
在 Global.asax.cs 檔案中加入下面方法
protected void Application_AcquireRequestState(object sender, EventArgs e) { if (HttpContext.Current.Session != null) { CultureInfo cultureInfo = (CultureInfo)this.Session["Culture"]; // 判斷Session中是否有值,沒有就設定預設值 if (cultureInfo == null) { string langName = "zh-cn"; if (HttpContext.Current.Request.UserLanguages != null && HttpContext.Current.Request.UserLanguages.Length != 0) { langName = HttpContext.Current.Request.UserLanguages[0]; } cultureInfo = new CultureInfo(langName); this.Session["Culture"] = cultureInfo; } System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfo; System.Threading.Thread.CurrentThread.CurrentUICulture = cultureInfo; System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureInfo.Name); System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureInfo.Name); } }這個方法在使用者訪問每個頁面時判斷使用者要使用的語言。我們在 HomeController 中加入修改語言的方法:
/// <summary>/// 修改語言/// </summary>/// <param name="lang">參數 lang 為使用者要使用的語言</param>/// <param name="returnUrl">參數 returnUrl 使用者點擊修改語言時停留的頁面</param>/// <returns></returns>public ActionResult ChangeCulture(string lang, string returnUrl){ Session["Culture"] = new CultureInfo(lang); return Redirect(returnUrl);}然後在 LogOnUserControl.ascx 中加入修改語言的串連:
至此多語言切換我們已經完全實現了,按 Ctrl + F5 運行程式,就可以中英文之間切換了。
本樣本只實現了中文和英文之間的切換,如果想再增加語言只需要增加資源檔即可輕鬆實現。
樣本程式下載MvcMultilingual.zip