123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using System.Xml;
- namespace OTSCommon
- {
- public class Language
- {
- public Language(Form form)
- {
- //测试国际化语言版本
- string Global = "EN";
- Global = ReadDefaultLanguage();
- getNames(form, Global);
- }
- public Language(UserControl form)
- {
- //测试国际化语言版本
- string Global = "EN";
- Global = ReadDefaultLanguage();
- getNames(form, Global);
- }
- public Language()
- {
-
- }
- #region 测试国际化语言
- public Hashtable GetNameTable(string name)
- {
- //测试国际化语言版本
- string Global = "EN";
- Global = ReadDefaultLanguage();
- return ReadResource(name, Global);
- }
- //读取默认语言
- public static string ReadDefaultLanguage()
- {
- string xmlName = System.Windows.Forms.Application.StartupPath + @"/Resources/XMLData/LanguageDefine.xml";
- XmlReader reader = XmlReader.Create(xmlName);
- XmlDocument doc = new XmlDocument();
- doc.Load(reader);
- XmlNode root = doc.DocumentElement;
- //选取DefaultLangugae节点
- XmlNode node = root.SelectSingleNode("DefaultLanguage");
- string result = string.Empty;
- if (node != null)
- //取出节点中的内容
- result = node.InnerText;
- reader.Close();
- return result;
- }
- // 获取控件的名称
- public static void getNames(Form form, string lang)
- {
- Hashtable table = ReadResource(form.Name, lang);
- //将所有控件放入集合
- Control.ControlCollection controlNames = form.Controls;
- try
- {
- //反射
- System.Reflection.FieldInfo[] fieldInfo = form.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
- for (int i = 0; i < fieldInfo.Length; i++)
- {
-
- //if (fieldInfo[i].FieldType.Name == "ContextMenuStrip")
- //{
- // ContextMenuStrip contextMenuStrip = (ContextMenuStrip)fieldInfo[i].GetValue(form);
- // for (int j = 0; j < contextMenuStrip.Items.Count; j++)
- // {
- // if (table.Contains(contextMenuStrip.Items[j].Name.ToLower()))
- // contextMenuStrip.Items[j].Text = (string)table[contextMenuStrip.Items[j].Name.ToLower()];
- // }
- //}
- if(fieldInfo[i].FieldType.Name == "ToolStripMenuItem")
- {
- ToolStripMenuItem toolStripMenuItem=(ToolStripMenuItem)fieldInfo[i].GetValue(form);
- if (table.Contains(fieldInfo[i].Name.ToLower()))
- toolStripMenuItem.Text = (string)table[fieldInfo[i].Name.ToLower()];
- }
-
- }
- //遍历控件
- foreach (Control control in controlNames)
- {
- if (control.GetType().ToString() == "System.Windows.Forms.DataGridView")
- {
- for (int i = 0; i < ((DataGridView)control).Columns.Count; i++)
- {
- if (table.Contains(((DataGridView)control).Columns[i].Name.ToLower()))
- ((DataGridView)control).Columns[i].HeaderText = table[((DataGridView)control).Columns[i].Name.ToLower()].ToString();
- }
- }
- if (control.GetType().ToString() == "System.Windows.Forms.Ribbon")
- {
- System.Windows.Forms.Ribbon rib = (System.Windows.Forms.Ribbon)control;
- for (int i = 0; i < rib.Tabs.Count; i++)
- {
- for (int j = 0; j < rib.Tabs[i].Panels.Count; j++)
- {
- for (int k = 0; k < rib.Tabs[i].Panels[j].Items.Count; k++)
- {
- if (rib.Tabs[i].Panels[j].Items[k].Tag != null)
- {
- string name = rib.Tabs[i].Panels[j].Items[k].Tag.ToString().ToLower();
- if (table.Contains(name))
- rib.Tabs[i].Panels[j].Items[k].Text = (string)table[name];
- }
- }
- if(rib.Tabs[i].Panels[j].Tag!=null)
- {
- if (rib.Tabs[i].Panels[j].Tag != null)
- {
- string pan = rib.Tabs[i].Panels[j].Tag.ToString().ToLower();
- if (table.Contains(pan))
- { rib.Tabs[i].Panels[j].Text = (string)table[pan]; }
- }
- }
-
-
- }
- if (rib.Tabs[i].Tag != null)
- {
- string tab = rib.Tabs[i].Tag.ToString().ToLower();
- if (table.Contains(tab))
- { rib.Tabs[i].Text = (string)table[tab]; }
- }
- }
- for (int i = 0; i < rib.OrbDropDown.MenuItems.Count; i++)
- {
- if(rib.OrbDropDown.MenuItems[i].Tag!=null)
- {
- string item = rib.OrbDropDown.MenuItems[i].Tag.ToString().ToLower();
- if (table.Contains(item))
- { rib.OrbDropDown.MenuItems[i].Text = (string)table[item]; }
- }
-
- }
- for (int i = 0; i < rib.OrbDropDown.OptionItems.Count; i++)
- {
- string item = rib.OrbDropDown.OptionItems[i].Tag.ToString().ToLower();
- if (table.Contains(item))
- { rib.OrbDropDown.OptionItems[i].Text = (string)table[item]; }
- }
- }
- if (control.GetType().ToString() == "System.Windows.Forms.StatusStrip")
- {
- StatusStrip st = (StatusStrip)control;
- for (int i = 0; i < st.Items.Count; i++)
- {
- if (table.Contains(st.Items[i].Name.ToLower()))
- st.Items[i].Text = (string)table[st.Items[i].Name.ToLower()];
- }
- }
-
- if (control.Controls.Count > 0)
- {
- GetSubControls(control.Controls, table);
- }
- if (table.Contains(control.Name.ToLower()))
- control.Text = (string)table[control.Name.ToLower()];
- }
- if (table.Contains(form.Name.ToLower()))
- form.Text = (string)table[form.Name.ToLower()];
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.ToString());
- }
- }
- // 获取控件的名称
- public static void getNames(UserControl form, string lang)
- {
- Hashtable table = ReadResource(form.Name, lang);
- //将所有控件放入集合
- Control.ControlCollection controlNames = form.Controls;
- try
- {
- //反射
- System.Reflection.FieldInfo[] fieldInfo = form.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
- for (int i = 0; i < fieldInfo.Length; i++)
- {
- if (fieldInfo[i].FieldType.Name == "ContextMenuStrip")
- {
- ContextMenuStrip contextMenuStrip = (ContextMenuStrip)fieldInfo[i].GetValue(form);
- for (int j = 0; j < contextMenuStrip.Items.Count; j++)
- {
- if (table.Contains(contextMenuStrip.Items[j].Name.ToLower()))
- contextMenuStrip.Items[j].Text = (string)table[contextMenuStrip.Items[j].Name.ToLower()];
- }
- }
- }
- //遍历控件
- foreach (Control control in controlNames)
- {
-
- if (control.GetType().ToString() == "System.Windows.Forms.DataGridView")
- {
- for (int i = 0; i < ((DataGridView)control).Columns.Count; i++)
- {
- if (table.Contains(((DataGridView)control).Columns[i].Name.ToLower()))
- ((DataGridView)control).Columns[i].HeaderText = table[((DataGridView)control).Columns[i].Name.ToLower()].ToString();
- }
- }
- if (control.GetType().ToString() == "System.Windows.Forms.Ribbon")
- {
- System.Windows.Forms.Ribbon rib = (System.Windows.Forms.Ribbon)control;
- for (int i = 0; i < rib.Tabs.Count; i++)
- {
- for (int j = 0; j < rib.Tabs[i].Panels.Count; j++)
- {
- for (int k = 0; k < rib.Tabs[i].Panels[j].Items.Count; k++)
- {
- string name = rib.Tabs[i].Panels[j].Items[k].Tag.ToString().ToLower();
- if (table.Contains(name))
- rib.Tabs[i].Panels[j].Items[k].Text = (string)table[name];
- }
- if (rib.Tabs[i].Panels[j].Tag != null)
- {
- string pan = rib.Tabs[i].Panels[j].Tag.ToString().ToLower();
- if (table.Contains(pan))
- { rib.Tabs[i].Panels[j].Text = (string)table[pan]; }
- }
- }
- if (rib.Tabs[i].Tag != null)
- {
- string tab = rib.Tabs[i].Tag.ToString().ToLower();
- if (table.Contains(tab))
- { rib.Tabs[i].Text = (string)table[tab]; }
- }
- }
- for (int i = 0; i < rib.OrbDropDown.MenuItems.Count; i++)
- {
- string item = rib.OrbDropDown.MenuItems[i].Tag.ToString().ToLower();
- if (table.Contains(item))
- { rib.OrbDropDown.MenuItems[i].Text = (string)table[item]; }
- }
- for (int i = 0; i < rib.OrbDropDown.OptionItems.Count; i++)
- {
- string item = rib.OrbDropDown.OptionItems[i].Tag.ToString().ToLower();
- if (table.Contains(item))
- { rib.OrbDropDown.OptionItems[i].Text = (string)table[item]; }
- }
- }
- if (control.GetType().ToString() == "System.Windows.Forms.StatusStrip")
- {
- StatusStrip st = (StatusStrip)control;
- for (int i = 0; i < st.Items.Count; i++)
- {
- if (table.Contains(st.Items[i].Name.ToLower()))
- st.Items[i].Text = (string)table[st.Items[i].Name.ToLower()];
- }
- }
- if (control.Controls.Count > 0)
- {
- GetSubControls(control.Controls, table);
- }
- if (table.Contains(control.Name.ToLower()))
- control.Text = (string)table[control.Name.ToLower()];
- }
- if (table.Contains(form.Name.ToLower()))
- form.Text = (string)table[form.Name.ToLower()];
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.ToString());
- }
- }
- //frmName是窗体的Name,lang是要显示的语言(如ZH或EN), Hashtable的Key值就是Name属性的值,其value值就是Text属性将要显示的值
- public static Hashtable ReadResource(string frmName, string lang)
- {
- Hashtable result = new Hashtable();
- XmlReader reader = null;
- reader = new XmlTextReader(System.Windows.Forms.Application.StartupPath + @"/Resources/XMLData/AppResource_" + lang + ".xml");
- XmlDocument doc = new XmlDocument();
- doc.Load(reader);
- XmlNode root = doc.DocumentElement;
- XmlNodeList nodelist = root.SelectNodes("Form[Name='" + frmName + "']/Controls/Control");
- foreach (XmlNode node in nodelist)
- {
- try
- {
- XmlNode node1 = node.SelectSingleNode("@name");
- XmlNode node2 = node.SelectSingleNode("@text");
- if (node1 != null)
- {
- if (node2==null)
- {
- result.Add(node1.InnerText.ToLower(), "");
- }
- result.Add(node1.InnerText.ToLower(), node2.InnerText);
- }
- }
- catch (FormatException fe)
- {
- Console.WriteLine(fe.ToString());
- }
- }
- reader.Close();
- return result;
- }
- // 获得子控件的显示名 ,读取控件中子控件的显示值
- private static void GetSubControls(Control.ControlCollection controls, Hashtable table)
- {
- foreach (Control control in controls)
- {
- if (control.GetType().ToString() == "System.Windows.Forms.DataGridView")
- {
- for (int i = 0; i < ((DataGridView)control).Columns.Count; i++)
- {
- if (table.Contains(((DataGridView)control).Columns[i].Name.ToLower()))
- ((DataGridView)control).Columns[i].HeaderText = table[((DataGridView)control).Columns[i].Name.ToLower()].ToString();
- }
- }
-
- if (control.Controls.Count > 0)
- GetSubControls(control.Controls, table);
- if (table.Contains(control.Name.ToLower()))
- control.Text = (string)table[control.Name.ToLower()];
- }
- }
- #endregion
- }
- }
|