Language.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  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 OTSSysMgrTools
  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. public Language(UserControl form)
  21. {
  22. //测试国际化语言版本
  23. string Global = "EN";
  24. Global = ReadDefaultLanguage();
  25. getNames(form, Global);
  26. }
  27. public Language()
  28. {
  29. }
  30. #region 测试国际化语言
  31. public Hashtable GetNameTable(string name)
  32. {
  33. //测试国际化语言版本
  34. string Global = "EN";
  35. Global = ReadDefaultLanguage();
  36. return ReadResource(name, Global);
  37. }
  38. //读取默认语言
  39. public static string ReadDefaultLanguage()
  40. {
  41. string xmlName = System.Windows.Forms.Application.StartupPath + @"/Resources/XMLData/LanguageDefine.xml";
  42. XmlReader reader = XmlReader.Create(xmlName);
  43. XmlDocument doc = new XmlDocument();
  44. doc.Load(reader);
  45. XmlNode root = doc.DocumentElement;
  46. //选取DefaultLangugae节点
  47. XmlNode node = root.SelectSingleNode("DefaultLanguage");
  48. string result = string.Empty;
  49. if (node != null)
  50. //取出节点中的内容
  51. result = node.InnerText;
  52. reader.Close();
  53. return result;
  54. }
  55. // 获取控件的名称
  56. public static void getNames(Form form, string lang)
  57. {
  58. Hashtable table = ReadResource(form.Name, lang);
  59. //将所有控件放入集合
  60. Control.ControlCollection controlNames = form.Controls;
  61. try
  62. {
  63. //反射
  64. System.Reflection.FieldInfo[] fieldInfo = form.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
  65. for (int i = 0; i < fieldInfo.Length; i++)
  66. {
  67. if (fieldInfo[i].FieldType.Name == "ContextMenuStrip")
  68. {
  69. ContextMenuStrip contextMenuStrip = (ContextMenuStrip)fieldInfo[i].GetValue(form);
  70. for (int j = 0; j < contextMenuStrip.Items.Count; j++)
  71. {
  72. if (table.Contains(contextMenuStrip.Items[j].Name.ToLower()))
  73. contextMenuStrip.Items[j].Text = (string)table[contextMenuStrip.Items[j].Name.ToLower()];
  74. }
  75. }
  76. }
  77. //遍历控件
  78. foreach (Control control in controlNames)
  79. {
  80. if (control.GetType().ToString() == "System.Windows.Forms.DataGridView")
  81. {
  82. for (int i = 0; i < ((DataGridView)control).Columns.Count; i++)
  83. {
  84. if (table.Contains(((DataGridView)control).Columns[i].Name.ToLower()))
  85. ((DataGridView)control).Columns[i].HeaderText = table[((DataGridView)control).Columns[i].Name.ToLower()].ToString();
  86. }
  87. }
  88. if (control.GetType().ToString() == "System.Windows.Forms.Ribbon")
  89. {
  90. System.Windows.Forms.Ribbon rib = (System.Windows.Forms.Ribbon)control;
  91. for (int i = 0; i < rib.Tabs.Count; i++)
  92. {
  93. for (int j = 0; j < rib.Tabs[i].Panels.Count; j++)
  94. {
  95. for (int k = 0; k < rib.Tabs[i].Panels[j].Items.Count; k++)
  96. {
  97. if (rib.Tabs[i].Panels[j].Items[k].Tag != null)
  98. {
  99. string name = rib.Tabs[i].Panels[j].Items[k].Tag.ToString().ToLower();
  100. if (table.Contains(name))
  101. rib.Tabs[i].Panels[j].Items[k].Text = (string)table[name];
  102. }
  103. }
  104. if(rib.Tabs[i].Panels[j].Tag!=null)
  105. {
  106. if (rib.Tabs[i].Panels[j].Tag != null)
  107. {
  108. string pan = rib.Tabs[i].Panels[j].Tag.ToString().ToLower();
  109. if (table.Contains(pan))
  110. { rib.Tabs[i].Panels[j].Text = (string)table[pan]; }
  111. }
  112. }
  113. }
  114. if (rib.Tabs[i].Tag != null)
  115. {
  116. string tab = rib.Tabs[i].Tag.ToString().ToLower();
  117. if (table.Contains(tab))
  118. { rib.Tabs[i].Text = (string)table[tab]; }
  119. }
  120. }
  121. for (int i = 0; i < rib.OrbDropDown.MenuItems.Count; i++)
  122. {
  123. if(rib.OrbDropDown.MenuItems[i].Tag!=null)
  124. {
  125. string item = rib.OrbDropDown.MenuItems[i].Tag.ToString().ToLower();
  126. if (table.Contains(item))
  127. { rib.OrbDropDown.MenuItems[i].Text = (string)table[item]; }
  128. }
  129. }
  130. for (int i = 0; i < rib.OrbDropDown.OptionItems.Count; i++)
  131. {
  132. string item = rib.OrbDropDown.OptionItems[i].Tag.ToString().ToLower();
  133. if (table.Contains(item))
  134. { rib.OrbDropDown.OptionItems[i].Text = (string)table[item]; }
  135. }
  136. }
  137. if (control.GetType().ToString() == "System.Windows.Forms.StatusStrip")
  138. {
  139. StatusStrip st = (StatusStrip)control;
  140. for (int i = 0; i < st.Items.Count; i++)
  141. {
  142. if (table.Contains(st.Items[i].Name.ToLower()))
  143. st.Items[i].Text = (string)table[st.Items[i].Name.ToLower()];
  144. }
  145. }
  146. if (control.Controls.Count > 0)
  147. {
  148. GetSubControls(control.Controls, table);
  149. }
  150. if (table.Contains(control.Name.ToLower()))
  151. control.Text = (string)table[control.Name.ToLower()];
  152. }
  153. if (table.Contains(form.Name.ToLower()))
  154. form.Text = (string)table[form.Name.ToLower()];
  155. }
  156. catch (Exception ex)
  157. {
  158. Console.WriteLine(ex.ToString());
  159. }
  160. }
  161. // 获取控件的名称
  162. public static void getNames(UserControl form, string lang)
  163. {
  164. Hashtable table = ReadResource(form.Name, lang);
  165. //将所有控件放入集合
  166. Control.ControlCollection controlNames = form.Controls;
  167. try
  168. {
  169. //反射
  170. System.Reflection.FieldInfo[] fieldInfo = form.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
  171. for (int i = 0; i < fieldInfo.Length; i++)
  172. {
  173. if (fieldInfo[i].FieldType.Name == "ContextMenuStrip")
  174. {
  175. ContextMenuStrip contextMenuStrip = (ContextMenuStrip)fieldInfo[i].GetValue(form);
  176. for (int j = 0; j < contextMenuStrip.Items.Count; j++)
  177. {
  178. if (table.Contains(contextMenuStrip.Items[j].Name.ToLower()))
  179. contextMenuStrip.Items[j].Text = (string)table[contextMenuStrip.Items[j].Name.ToLower()];
  180. }
  181. }
  182. }
  183. //遍历控件
  184. foreach (Control control in controlNames)
  185. {
  186. if (control.GetType().ToString() == "System.Windows.Forms.DataGridView")
  187. {
  188. for (int i = 0; i < ((DataGridView)control).Columns.Count; i++)
  189. {
  190. if (table.Contains(((DataGridView)control).Columns[i].Name.ToLower()))
  191. ((DataGridView)control).Columns[i].HeaderText = table[((DataGridView)control).Columns[i].Name.ToLower()].ToString();
  192. }
  193. }
  194. if (control.GetType().ToString() == "System.Windows.Forms.Ribbon")
  195. {
  196. System.Windows.Forms.Ribbon rib = (System.Windows.Forms.Ribbon)control;
  197. for (int i = 0; i < rib.Tabs.Count; i++)
  198. {
  199. for (int j = 0; j < rib.Tabs[i].Panels.Count; j++)
  200. {
  201. for (int k = 0; k < rib.Tabs[i].Panels[j].Items.Count; k++)
  202. {
  203. string name = rib.Tabs[i].Panels[j].Items[k].Tag.ToString().ToLower();
  204. if (table.Contains(name))
  205. rib.Tabs[i].Panels[j].Items[k].Text = (string)table[name];
  206. }
  207. if (rib.Tabs[i].Panels[j].Tag != null)
  208. {
  209. string pan = rib.Tabs[i].Panels[j].Tag.ToString().ToLower();
  210. if (table.Contains(pan))
  211. { rib.Tabs[i].Panels[j].Text = (string)table[pan]; }
  212. }
  213. }
  214. if (rib.Tabs[i].Tag != null)
  215. {
  216. string tab = rib.Tabs[i].Tag.ToString().ToLower();
  217. if (table.Contains(tab))
  218. { rib.Tabs[i].Text = (string)table[tab]; }
  219. }
  220. }
  221. for (int i = 0; i < rib.OrbDropDown.MenuItems.Count; i++)
  222. {
  223. string item = rib.OrbDropDown.MenuItems[i].Tag.ToString().ToLower();
  224. if (table.Contains(item))
  225. { rib.OrbDropDown.MenuItems[i].Text = (string)table[item]; }
  226. }
  227. for (int i = 0; i < rib.OrbDropDown.OptionItems.Count; i++)
  228. {
  229. string item = rib.OrbDropDown.OptionItems[i].Tag.ToString().ToLower();
  230. if (table.Contains(item))
  231. { rib.OrbDropDown.OptionItems[i].Text = (string)table[item]; }
  232. }
  233. }
  234. if (control.GetType().ToString() == "System.Windows.Forms.StatusStrip")
  235. {
  236. StatusStrip st = (StatusStrip)control;
  237. for (int i = 0; i < st.Items.Count; i++)
  238. {
  239. if (table.Contains(st.Items[i].Name.ToLower()))
  240. st.Items[i].Text = (string)table[st.Items[i].Name.ToLower()];
  241. }
  242. }
  243. if (control.Controls.Count > 0)
  244. {
  245. GetSubControls(control.Controls, table);
  246. }
  247. if (table.Contains(control.Name.ToLower()))
  248. control.Text = (string)table[control.Name.ToLower()];
  249. }
  250. if (table.Contains(form.Name.ToLower()))
  251. form.Text = (string)table[form.Name.ToLower()];
  252. }
  253. catch (Exception ex)
  254. {
  255. Console.WriteLine(ex.ToString());
  256. }
  257. }
  258. //frmName是窗体的Name,lang是要显示的语言(如ZH或EN), Hashtable的Key值就是Name属性的值,其value值就是Text属性将要显示的值
  259. public static Hashtable ReadResource(string frmName, string lang)
  260. {
  261. Hashtable result = new Hashtable();
  262. XmlReader reader = null;
  263. reader = new XmlTextReader(System.Windows.Forms.Application.StartupPath + @"/Resources/XMLData/AppResource_" + lang + ".xml");
  264. XmlDocument doc = new XmlDocument();
  265. doc.Load(reader);
  266. XmlNode root = doc.DocumentElement;
  267. XmlNodeList nodelist = root.SelectNodes("Form[Name='" + frmName + "']/Controls/Control");
  268. foreach (XmlNode node in nodelist)
  269. {
  270. try
  271. {
  272. XmlNode node1 = node.SelectSingleNode("@name");
  273. XmlNode node2 = node.SelectSingleNode("@text");
  274. if (node1 != null)
  275. {
  276. if (node2==null)
  277. {
  278. result.Add(node1.InnerText.ToLower(), "");
  279. }
  280. result.Add(node1.InnerText.ToLower(), node2.InnerText);
  281. }
  282. }
  283. catch (FormatException fe)
  284. {
  285. Console.WriteLine(fe.ToString());
  286. }
  287. }
  288. reader.Close();
  289. return result;
  290. }
  291. // 获得子控件的显示名 ,读取控件中子控件的显示值
  292. private static void GetSubControls(Control.ControlCollection controls, Hashtable table)
  293. {
  294. foreach (Control control in controls)
  295. {
  296. if (control.GetType().ToString() == "System.Windows.Forms.DataGridView")
  297. {
  298. for (int i = 0; i < ((DataGridView)control).Columns.Count; i++)
  299. {
  300. if (table.Contains(((DataGridView)control).Columns[i].Name.ToLower()))
  301. ((DataGridView)control).Columns[i].HeaderText = table[((DataGridView)control).Columns[i].Name.ToLower()].ToString();
  302. }
  303. }
  304. if (control.Controls.Count > 0)
  305. GetSubControls(control.Controls, table);
  306. if (table.Contains(control.Name.ToLower()))
  307. control.Text = (string)table[control.Name.ToLower()];
  308. }
  309. }
  310. #endregion
  311. }
  312. }