[C#.NET][Winform] 文化特性 - 多國語言應用程式 / UI Culture - Multiple Languages Application
經蹂躪兄的指導,使用資源檔也可以很方便的處理多國語言,參考了他的文章後,再加以實作
http://www.dotblogs.com.tw/larrynung/2009/04/24/8158
http://www.dotblogs.com.tw/larrynung/2009/08/17/10100
在msdn寫著http://msdn.microsoft.com/zh-tw/library/y99d1cd3.aspx
Visual Studio 專案系統對於 Windows Form 應用程式的當地語系化提供了相當程度的支援。有兩種方式可以使用 Visual Studio 開發環境產生資源檔:
-
讓專案系統針對可當地語系化的 UI 項目 (例如表單上的文字和影像) 產生資源檔。接著再將資源檔建置至附屬組件;這些稱為表單架構資源。
-
加入資源檔範本然後使用 XML 設計工具編輯範本 (執行第二種方法的原因,是為了製作出現在對話方塊和錯誤訊息中的可當地語系化字串,在這個情況下,您必須撰寫程式碼以存取這些資源,這些稱為專案資源)。
一般而言,對於 Windows Form 應用程式中表單的所有特定資源,您應該都使用表單架構資源。對於所有非表單架構的使用者介面字串和影像 (例如錯誤訊息),您應該都使用專案資源。
官方建議表單都應該使用表單架構資源,下篇的內容正是表單架構資源的操作步驟。
1.表單的Localizable屬性設為true
2.規畫Form,先規劃好中文的。
這時在Form1.resx可以看到vs已經幫我們產生了預設語言的東西。
3.建立英文語系資源檔
3-1.選擇Language語系
3-2.逐一修改Form上的Text屬性
這時候vs就會自動幫忙產生出資源檔:Form1.en.resx
4.切換語系
在這裡已經寫的很詳細,切換語系的動作主要是用ComponentResourceManager.ApplyResources方法來套用資源檔,詳細內容請參考
http://www.dotblogs.com.tw/larrynung/2009/08/17/10100
我將它包成dll,用互端呼叫只要一句就能達成切換語系的功能,有興趣的再自行去下載 ChangeLanguage.zip。
using System.Windows.Forms.ChangeLanguage; namespace WindowsFormsApplication8 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Language.Apply(this, "zh-tw"); } private void button2_Click(object sender, EventArgs e) { Language.Apply(this, "en-us"); } } }
後記:
我發現,不同的Form.Language屬性,等於又是一個不同的執行個體,我們可以為不同語言版本的Form,定義不同的屬性(資訊都存放在資源檔裡),比如中文版的Form.Size跟英文版的Form.Size不一樣,或者是裡面的控制項大小不一樣,這樣可以個別為不同語言的控制項長度做修改,以免切換語系後控制項長度不足而遮到顯示文字。
上篇也是同樣是多國語言 http://www.dotblogs.com.tw/yc421206/2011/02/20/21469 (這篇忘了處理選單中文化,等有機會再修改它了),同樣也是減少出錯的機會,不過本篇有提到,不同的Language有不同的執行個體,這是上篇所沒有擁有的功能。
範例下載MutiLanguage.zip
HOW TO:使用 AutoSize 和 TableLayoutPanel 控制項支援 Windows Form 的當地語系化
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET