2011年9月8日 星期四

完整的C#多國語言解決方案(一)- 畫面多國語言

新增一個C#專案,並選擇 [ Windows Form應用程式 ],將原本預設的 Form1更改設定為FormMain,可看到畫面如下

 







為了測試,我們在Form上面放上四個原件,一個Lable,名稱為Lbl_Test,一個ListBox,名稱為LstBx_Test,一個PictureBox,名稱為PBox_Test,一個按鈕,名稱為Btn_Test

將Form的Localizable改為True,此Form就會具有多國語言的特質,然後若把Language改為中文,並且更改視窗內任何原件的位置或Text,之後存檔,就會看到多了一個檔案:FormMain.zh-TW.resx,位置跟文字的資訊就會被儲存在這個語系檔中。如下圖




接下來再把Language改為英文,並且更改視窗內任何原件的位置或Text,之後存檔,就會看到多了一個檔案:FormMain.en.resx,位置跟文字的資訊就會被儲存在這個語系檔中。如下圖




如何能控制系統現在要顯示哪一種語系的應用程式外觀呢?可以不用設定,OS就會自動決定出了你的語系,比方你安裝台灣中文版的Windows通常你的語系跟使用地區就會是台灣,安裝過程也有讓你設定使用地區,這些就會決定了語系,當然,為了測試或特殊需求,你也可以在Program.cs當中撰寫以下幾行程式:

CultureInfo CI = new CultureInfo( "zh-TW" );
System.Threading.Thread.CurrentThread.CurrentUICulture = CI;

CultureInfo就是設定文化語系的Class,用他設定zh-TWen即可決定要使用的語系國家,之後將此設定到CurrentThread即可將此程式指定為該語系了。經過以上的設定過後,專案將會有中文與英文兩個版面,而根據被指定要顯示中文或英文語系來顯示不同的Text String與物件位置(各國語言文字所需要的長寬不同的關係)

那圖片的部分能不能透過以上的步驟來設定兩種以上語系的圖片,然後讓應用程式根據語系,來呈現不同的圖片呢?答案是不行。圖片的控制要自己來。這是最麻煩的地方,多語系如果要有不同的圖,就是要多花很多功夫。






而如果你有訊息要顯示在...比方對話框中,或者是其他跟Form、Panel無關的地方能不能透過這種設定方式,來讓不同語系之下,顯示不同的Text String呢?答案是不行。難道就這麼束手無策了嗎?也不是的,跟圖片不同的是,有特別的解決方法,請看以下的作法介紹:




沒有留言:

張貼留言