ASP .NET MVC多國語系( Globalization / Localization )

於ASP .NET網站實現多國語系非難事,但MVC就沒那麼好。
網路上流傳的用法多半是Matt Hawley所寫的超好用HtmlHelper,使用方法請參見保哥的文章,有非常詳細的說明。

最近開發MVC 3專案發現Matt Hawley提供的class需小幅修改,改完後使用雖無問題,但使用他人作品畢竟存在版本問題,剛好看到Alex Adamyan提供另一種方式,只要使用Visual Studio就可解決,就決定改採Alex Adamyan的作法

介紹Alex Adamyam作法前,預習如何在MVC使用Global Resource
SETP 1:
在App_GlobalResources資料夾加入新資源檔,例如myResource.resx、myResource.zh-TW.resx
在resx中添加要使用的資源變數,例如myString1
SETP 2:
專案rebuild後,即可在View中輕鬆存取資源,無須額外設定或include外部class
使用語法是 <%= Resources.myResource.String1 %>
==============================================
以下正式說明Localization作法by Alex Adamyan

SETP 1:加入resx(資源檔)至App_LocalResources
新增resx檔案及其初始屬性
resx內容


SETP 2:變更resx的Access Modifier為Public
Access Modifier預設為No code generation,修改後resx的Custom Tool屬性會自動變為PublicResXFileCodeGenerator
修改Access Modifier
自動變更的Custom Tool屬性


SETP 3:修改resx的Properties
Build Action : Embedded Resource
Custom Tool Namespace : 無特殊命名規則,只是為專案方便取用而賦予
Copy to Output Directory : Copy always或Copy if newer
修改屬性值


SETP 4:Save & Rebuild即可於view page使用Local Resource


SETP 5:在Global指定culture
頁面載入要顯示何種語系大致上有三種方式
(1).直接指定Culture
(2).讀取web.config的globalization設定
(3).以使用者瀏覽器的預設語系為主
本文示範較能滿足多數用戶的作法(3).
protected void Application_AcquireRequestState(object sender, EventArgs e) {
//取得瀏覽器第一個語系 string lang = HttpContext.Current.Request.UserLanguages[0]; CultureInfo ci = new CultureInfo(lang); System.Threading.Thread.CurrentThread.CurrentUICulture = ci; System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name); }


SETP 6:成功顯示當地語系(繁體中文)

沒有留言: