Visual C# 多國語言

摘要:Visual C# 多國語言

參考:http://ezworker2010.blogspot.tw/2011/10/form-labelbuttonmenu-default-form.html

先在要使用多國語言的 Form 上把會使用到的物件先都擺上: Label、Button、Menu。 先都設定好 Default 的語言,再來要修改 Form 的屬性 Localizable to True,如下圖:
 

Change Localizable from False to True

接著再把 Language 設定成所需使用的語言: Chinese (Traditional, Taiwan),修改 Lable、Button等的Text ,系統會自動產生相對應的 Form1.zh-TW.resx 如下:

 
Form1.zh-TW.resx

在程式一開始Using的後面加上:

 
using System.Threading;
using System.Globalization;
using System.Resources;
 
並在 Form1 的 InitializeComponent(); 前加上:
 
Thread.CurrentThread.CurrentCulture = new CultureInfo("");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("");
 
雙引號中間沒資料就是用 Default Language, 如果雙引號中間是 "zh-TW" 就是使用繁體中文如:
 
Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-TW");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-TW");
 
再從專案中 Properties下的 Settings.settings 加一個 Language 的變數如下:
 
Setting.settings
把原有程式 :
Thread.CurrentThread.CurrentCulture = new CultureInfo("");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("");
 
修改成:
Thread.CurrentThread.CurrentCulture = new CultureInfo(Properties.Settings.Default.Language); Thread.CurrentThread.CurrentUICulture = new CultureInfo(Properties.Settings.Default.Language);
 
這樣只要修改Properties 中的 Language 就能改變使用的語系。
 
再在程式中找一處可以加入修改Properties 值得地方:
 
Properties.Settings.Default.Language = "zh-TW";
Properties.Settings.Default.Save();
            
這樣使用者就可以自己更改語系。

參考:http://www.dotblogs.com.tw/yc421206/archive/2011/02/21/21482.aspx

官方建議表單都應該使用表單架構資源,下篇的內容正是表單架構資源的操作步驟。

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/archive/2009/08/17/10100.aspx

 

我將它包成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");
        }
    }
}