Language.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Windows.Forms;
  8. using System.Xml;
  9. namespace OTSSysMgrApp
  10. {
  11. public class Language
  12. {
  13. public Language(Form form)
  14. {
  15. //测试国际化语言版本
  16. string Global = "EN";
  17. Global = ReadDefaultLanguage();
  18. getNames(form, Global);
  19. }
  20. #region 测试国际化语言
  21. //读取默认语言
  22. public static string ReadDefaultLanguage()
  23. {
  24. string xmlName = System.Windows.Forms.Application.StartupPath + @"/Resources/XMLData/LanguageDefine.xml";
  25. XmlReader reader = XmlReader.Create(xmlName);
  26. XmlDocument doc = new XmlDocument();
  27. doc.Load(reader);
  28. XmlNode root = doc.DocumentElement;
  29. //选取DefaultLangugae节点
  30. XmlNode node = root.SelectSingleNode("DefaultLanguage");
  31. string result = string.Empty;
  32. if (node != null)
  33. //取出节点中的内容
  34. result = node.InnerText;
  35. reader.Close();
  36. return result;
  37. }
  38. // 获取控件的名称
  39. public static void getNames(Form form, string lang)
  40. {
  41. Hashtable table = ReadResource(form.Name, lang);
  42. //将所有控件放入集合
  43. Control.ControlCollection controlNames = form.Controls;
  44. try
  45. {
  46. //遍历控件
  47. foreach (Control control in controlNames)
  48. {
  49. if (control.GetType().ToString() == "System.Windows.Forms.DataGridView")
  50. {
  51. for (int i = 0; i < ((DataGridView)control).Columns.Count; i++)
  52. {
  53. if (table.Contains(((DataGridView)control).Columns[i].Name.ToLower()))
  54. ((DataGridView)control).Columns[i].HeaderText = table[((DataGridView)control).Columns[i].Name.ToLower()].ToString();
  55. }
  56. }
  57. if (control.Controls.Count > 0)
  58. {
  59. GetSubControls(control.Controls, table);
  60. }
  61. if (table.Contains(control.Name.ToLower()))
  62. control.Text = (string)table[control.Name.ToLower()];
  63. }
  64. if (table.Contains(form.Name.ToLower()))
  65. form.Text = (string)table[form.Name.ToLower()];
  66. }
  67. catch (Exception ex)
  68. {
  69. Console.WriteLine(ex.ToString());
  70. }
  71. }
  72. //frmName是窗体的Name,lang是要显示的语言(如ZH或EN), Hashtable的Key值就是Name属性的值,其value值就是Text属性将要显示的值
  73. public static Hashtable ReadResource(string frmName, string lang)
  74. {
  75. Hashtable result = new Hashtable();
  76. XmlReader reader = null;
  77. reader = new XmlTextReader(System.Windows.Forms.Application.StartupPath + @"/Resources/XMLData/AppResource_" + lang + ".xml");
  78. XmlDocument doc = new XmlDocument();
  79. doc.Load(reader);
  80. XmlNode root = doc.DocumentElement;
  81. XmlNodeList nodelist = root.SelectNodes("Form[Name='" + frmName + "']/Controls/Control");
  82. foreach (XmlNode node in nodelist)
  83. {
  84. try
  85. {
  86. XmlNode node1 = node.SelectSingleNode("@name");
  87. XmlNode node2 = node.SelectSingleNode("@text");
  88. if (node1 != null)
  89. {
  90. result.Add(node1.InnerText.ToLower(), node2.InnerText);
  91. }
  92. }
  93. catch (FormatException fe)
  94. {
  95. Console.WriteLine(fe.ToString());
  96. }
  97. }
  98. reader.Close();
  99. return result;
  100. }
  101. // 获得子控件的显示名 ,读取控件中子控件的显示值
  102. private static void GetSubControls(Control.ControlCollection controls, Hashtable table)
  103. {
  104. foreach (Control control in controls)
  105. {
  106. if (control.Controls.Count > 0)
  107. GetSubControls(control.Controls, table);
  108. if (table.Contains(control.Name.ToLower()))
  109. control.Text = (string)table[control.Name.ToLower()];
  110. }
  111. }
  112. #endregion
  113. }
  114. }