多國語系 建國科技大學 資管系 饒瑞佶
先選定一個語系文字設定好UI 接著將Localizable屬性設定為true
系統將自動產生Form.resx
接著選擇language屬性的其他語系
修改版面上文字 專案會產生語系對應的resx
對應語系的resx內容
在專案屬性中設定一個語系的設定 預設值
專案屬性設定最後寫入App.config中
在每個表單的建構子中加入 這樣表單在啟動時就會自動載入對應的語系 Thread.CurrentThread.CurrentCulture = new CultureInfo(Properties.Settings.Default["LNG"].ToString()); Thread.CurrentThread.CurrentUICulture = new CultureInfo(Properties.Settings.Default["LNG"].ToString()); // 上面兩行需要在InitializeComponent()之前 InitializeComponent(); 這樣表單在啟動時就會自動載入對應的語系
可是如果表單已經開啟要馬上切換語系? // 修改app.config中的LNG設定 Properties.Settings.Default.LNG = "en-US"; Properties.Settings.Default.Save(); //設定語系,從App.config中讀取語系設定 SetLang("en-US ", this, typeof(Main)); // 重新載入表單 FormClosed += (o, a) => new Main().ShowDialog(); Hide(); Close(); 重新設定語系到app.config 重新載入表單 馬上就可以切換語系
SetLang方法 public static void SetLang(string lang, Form form, Type formType) { System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang); if (form != null) System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(formType); resources.ApplyResources(form, "$this"); AppLang(form, resources); }
AppLang方法 private static void AppLang(Control control, System.ComponentModel.ComponentResourceManager resources) { if (control is MenuStrip) resources.ApplyResources(control, control.Name); MenuStrip ms = (MenuStrip)control; if (ms.Items.Count > 0) foreach (ToolStripMenuItem c in ms.Items) //設定語系 AppLang(c, resources); } foreach (Control c in control.Controls) resources.ApplyResources(c, c.Name);
// 下拉選單語系切換 private static void AppLang(ToolStripMenuItem item, System.ComponentModel.ComponentResourceManager resources) { if (item is ToolStripMenuItem) resources.ApplyResources(item, item.Name); ToolStripMenuItem tsmi = (ToolStripMenuItem)item; if (tsmi.DropDownItems.Count > 0) foreach (ToolStripMenuItem c in tsmi.DropDownItems) //if (tsmi != ToolStripSeparator) //{ } AppLang(c, resources); }