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 OTSSysMgrApp { public class Language { public Language(Form form) { //测试国际化语言版本 string Global = "EN"; Global = ReadDefaultLanguage(); getNames(form, Global); } #region 测试国际化语言 //读取默认语言 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 { //遍历控件 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.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.Controls.Count > 0) GetSubControls(control.Controls, table); if (table.Contains(control.Name.ToLower())) control.Text = (string)table[control.Name.ToLower()]; } } #endregion } }