|
|
@@ -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
|
|
|
+ }
|
|
|
+}
|