C# 多國語系 resource file

摘要: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後的變化了


不知道這樣講有沒有比較了解~~貼了那麼多圖~之前去爬文都看不太懂別人寫的~

今天剛好很閒~

我就來分享一下給大家了