ASP.NET MVC 4 多國語系(i18n) 基礎探討

日前因為專案需要不同語言的版本,所以找了方法實作這個部分。

而且利用此篇文章來做個自我的紀錄,如何實踐語言的切換,就讓我們看下去吧。

至於上篇AJAX CRUD後續的應用....等我有空在寫好了。

 

首先因為多語系需要建立多個對照表,而在Visual Studio中的對照表,為一個KEY對一個VALUE而已。

並不能直接看到一個KEY對應多個VALUE。

於是在Visual Studio中的擴充功能中,有一個外掛叫做ResXManager他可以將多個Resource檔案整合再一起編輯以及觀看。

安裝完外掛後,可以開啟該工具就可以看到以下畫面。

建置多國語系前要做一些事前設定

STEP1 修改 Web.Confing

在其中加入此段設定碼

 <globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true"/>

插入的位置如下圖

此設定為抓取Loacl端的語言設定,判定該設備應該選用何種語系。

Step 2 修改 Global.asax 全域設定

加入以下片段程式碼

protected void Application_BeginRequest(Object sender, EventArgs e)
{
 HttpCookie MyLang = Request.Cookies["MyLang"];
 if (MyLang != null)
 {
  System.Threading.Thread.CurrentThread.CurrentCulture =
  new System.Globalization.CultureInfo(MyLang.Value);
  System.Threading.Thread.CurrentThread.CurrentUICulture =
  new System.Globalization.CultureInfo(MyLang.Value);
 }
}

此段目的在於去抓取使用者的Cookies看他是否有記錄過什麼語言,在網頁載入之前,做一個語系的設定。

Step 3 建立 Resource 對照表

我建立的方式為先新增另一個專案類別庫

將對照的Resource建立在該類別庫底下,該層級會是這樣:

方案-->專案_WEB-->View & Controll

       -->專案_Resource-->App_GlobalResources-->Resource

有把Resource拆出來在後續的維護等等的會比較清楚從哪下手。

在此我們建立英文和繁體中文的Resource對照表

在此要先注意Resource檔案要做兩種的屬性設定

1.屬性下的自訂工具修改為-->PublicResXFileCodeGenerator  (修改完後對該Resource案右鍵"執行自訂工具")

2.屬性下的建置動作改為-->內嵌資源

設定完後才能正常的存取到該對應表的資料。

後續我們在Controller 以及 View做一個簡單的轉換語言和示範使用Resource檔案

Controller底下的程式碼如下:

namespace A00BF_Web.Controllers
{
    public class AccountController : Controller
    {
        //
        // GET: /Account/

        public ActionResult Login()
        {
            return View();
        }

        public ActionResult ChangeLang_En(string Lang = "en-US") 
        {
            HttpCookie MyLang = new HttpCookie("MyLang");

            MyLang.Value = "en-US";

            Response.Cookies.Add(MyLang);

            MyLang.Expires = DateTime.Now.AddDays(1);

            return RedirectToAction("Login");
        }
    }
}

建立一個畫面的Action為Login,以及一個切換語言用的Action為ChangeLang_En

在切換語言的Action就是去針對Cookies去做設定,因為設定完後Reload會先去抓取Cookies的語系來做網頁的語言設定。

再來看看我們的View

<p>@A00BF_Resource.App_GlobalResources.Resource.Login</p>

<input type="submit" onclick="location.href='@Url.Action("ChangeLang_En")'" value="English"/>

在文字中採用Html Helper去抓對應的Resource的KEY值。而他要顯示的Value將會透過語系的設定決定。

在第二行產生一個BUTTON作為連結切換語系Action的動作,這就很單純是去執行一個Action,沒什麼好講的。

最後讓我們來看看結果。

按下BUTTON後轉換為英文的Login 

這樣就達到我們基本的語系轉換功能。

此篇為一個新手應用,如有任何更好的方法歡迎在下留言提出,或者指點,感謝大家的收看,謝謝。

 

此篇文章引用:

The Will Will Web如何讓 App_GlobalResources 裡的全域資源檔變成公開類別

GSS Engineering Blog初探 ASP.NET MVC 多國語系(i18n)

張小呆的碎碎唸ASP.NET MVC - 使用 MVC 實作多國語系(一)