Ver código fonte

add Language

CXS 5 anos atrás
pai
commit
2f56a3a81f

+ 343 - 0
OTS/OTSIncAMeasureApp/Language.cs

@@ -0,0 +1,343 @@
+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 OTSIncAMeasureApp
+{
+    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()];
+                        }
+                    }
+
+                }
+
+                //遍历控件
+                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)
+                    {
+                        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
+    }
+}

+ 2 - 1
OTS/OTSIncAMeasureApp/OTSIncAMeasureAppForm.cs

@@ -13,6 +13,7 @@ using OTSIncAMeasureApp.OTSMeasureThread;
 //using OTSProgMgrInfo;
 
 using System.Collections;
+using OTSDataType;
 //using OTSSysMgrApp;
 namespace OTSIncAMeasureApp
 {
@@ -1362,7 +1363,7 @@ namespace OTSIncAMeasureApp
         /// <param name="doRunType"></param>
         /// <param name="HoleID"></param>
         /// <param name="c_DomainMessure"></param>
-        public void StartSampleHoleBSEImage(int doRunType, int HoleID, CDomainClr c_DomainMessure)
+        public void StartSampleHoleBSEImage(int doRunType, int HoleID, CDomain c_DomainMessure)
         {
             //线程执行类型 1:测量类型 2:获取样品孔图片类型
             m_MeasureThread.SetDoRunType(doRunType);