[C#.NET][Winform] 文化特性 - 多國語言應用程式 / UI Culture - Multiple Languages Application

[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

image

 

2.規畫Form,先規劃好中文的。

image

 

這時在Form1.resx可以看到vs已經幫我們產生了預設語言的東西。

image

 

3.建立英文語系資源檔

3-1.選擇Language語系

image

 

3-2.逐一修改Form上的Text屬性

image

 

這時候vs就會自動幫忙產生出資源檔:Form1.en.resx

image

 

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不一樣,或者是裡面的控制項大小不一樣,這樣可以個別為不同語言的控制項長度做修改,以免切換語系後控制項長度不足而遮到顯示文字。

image image  

上篇也是同樣是多國語言 http://www.dotblogs.com.tw/yc421206/2011/02/20/21469 (這篇忘了處理選單中文化,等有機會再修改它了),同樣也是減少出錯的機會,不過本篇有提到,不同的Language有不同的執行個體,這是上篇所沒有擁有的功能。

範例下載MutiLanguage.zip

 

HOW TO‎:使用 AutoSize 和 TableLayoutPanel 控制項支援 Windows Form 的當地語系化

全球化 Windows Form

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo