| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354 | using System;using System.Collections;using System.Windows.Forms;using System.Xml;namespace OTSIncAReportApp.SysMgrTools{    /// <summary>    /// 国际化语言类型类    /// </summary>    public class Language    {        #region 构造函数        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()        {        }        #endregion        #region 测试国际化语言        public Hashtable GetNameTable(string name)        {            //测试国际化语言版本            string Global ;//ZH or  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()];                    //    }                    //}                    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++)                                {                                    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)                    {                        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    }}
 |