摘要:C# 多國語系 resource file
.net 提供了多國語系快速的使用方式~
我研究了一下~現在實做出來了~在這裡分享給大家
先來說明一下此範例的說明:
我想在Default.aspx中實現一個Label預設的情況下顯示中文,當我按下[我變]Button時切換成英文的Label
首先~
先產生ASP Folder 選擇App_LocalResources
並於此Folder中加入resource file如下圖
再新增的時候他有命名的規則~如下圖~
假設我這支ResourceFile是要給Default.aspx所使用的~
命名必須為為Default.aspx.resx~這是預設語系~
如果為英文版則為Default.aspx.en-us.resx
所以等於對應的網頁名稱+"."+語系名稱.resx
接著就是來編輯語系檔了~
如下圖~這是vs2005所提供的編輯頁面~
我在Default.aspx中建立的Label1的asp控制項~
那顯示在畫面上的屬性是Label1.Text
所以我在Default.apsx.resx中建立一筆Name為Label1.Text的資料~Value設為"中文"
也可另外建立Label所擁有屬性:例如Label1.ToolTip
那在Default.aspx.en-us.resx中建立中建立一筆Name為Label1.Text的資料~Value設為"English"
如以下圖例
那其實Resource File背後是由xml file所組成的~
如下圖範例
接下來來說明如何在畫面中設定對應
如下圖所示~
此頁面中擁有一個ASP Label的控制項~名為Label~
我於Label的tag中下了一段 meta:resourcekey="Label1"的指令~
此段指令就會根據現在你所指定的語言~去找到適合的Resource File 並於此找出相對的Key~
此範例中~他就會去尋找Default.apsx.resx中相對應的資料~
所以就算我在aspx中的Text="Label"~但執行之後Label所顯示的則為我於ResourceFile所設定的"中文"如下圖
接下來說明如何轉換語系
我鑽寫了一支叫MyPageBase的程式給Default來繼承~此用法是因為要做語系變化的時候不可能針對單一程式~一定是很多支程式~所寫的底從中給各網頁來繼承比較make sence~
我於此Class中先useing Sytem.Threading及Sytem.Globalization
並ovveride void InitializeCulture()
於此Method中下了兩行指令
Thread.CurrentThread.CurrentUICulture = new CultureInfo(strLanguage);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(strLanguage);
這兩行就是改變系統中的語系~
那我這支範例是先去讀取Session中所儲存的語系~再透過上面兩行去轉~
當沒有給的時候程式會自己去帶IE中所設的語系~因為中文的作業系統中就是中文~
可以看到我Button的事件中並沒有去改變Label.Text~而是去改變Session的值~
至於為什麼要Redirect~是因為當按下按鈕時Button_Click會觸發的比InitializeCulture()慢~所以會讀到不正確的Session值
以下就是按下button後的變化了
不知道這樣講有沒有比較了解~~貼了那麼多圖~之前去爬文都看不太懂別人寫的~
今天剛好很閒~
我就來分享一下給大家了