Asp.net MVC 2 網站輕鬆實現多語言支援

來源:互聯網
上載者:User

  本文短地址: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

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.