Language.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  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 OTSPartA_STDEditor
  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.GetType().ToString() == "System.Windows.Forms.TabControl")
  147. {
  148. TabControl st = (TabControl)control;
  149. for (int i = 0; i < st.TabCount; i++)
  150. {
  151. if (table.Contains(st.TabPages[i].Name.ToLower()))
  152. st.TabPages[i].Text = (string)table[st.TabPages[i].Name.ToLower()];
  153. }
  154. }
  155. if (control.Controls.Count > 0)
  156. {
  157. GetSubControls(control.Controls, table);
  158. }
  159. if (table.Contains(control.Name.ToLower()))
  160. control.Text = (string)table[control.Name.ToLower()];
  161. }
  162. if (table.Contains(form.Name.ToLower()))
  163. form.Text = (string)table[form.Name.ToLower()];
  164. }
  165. catch (Exception ex)
  166. {
  167. Console.WriteLine(ex.ToString());
  168. }
  169. }
  170. // 获取控件的名称
  171. public static void getNames(UserControl form, string lang)
  172. {
  173. Hashtable table = ReadResource(form.Name, lang);
  174. //将所有控件放入集合
  175. Control.ControlCollection controlNames = form.Controls;
  176. try
  177. {
  178. //反射
  179. System.Reflection.FieldInfo[] fieldInfo = form.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
  180. for (int i = 0; i < fieldInfo.Length; i++)
  181. {
  182. if (fieldInfo[i].FieldType.Name == "ContextMenuStrip")
  183. {
  184. ContextMenuStrip contextMenuStrip = (ContextMenuStrip)fieldInfo[i].GetValue(form);
  185. for (int j = 0; j < contextMenuStrip.Items.Count; j++)
  186. {
  187. if (table.Contains(contextMenuStrip.Items[j].Name.ToLower()))
  188. contextMenuStrip.Items[j].Text = (string)table[contextMenuStrip.Items[j].Name.ToLower()];
  189. }
  190. }
  191. }
  192. //遍历控件
  193. foreach (Control control in controlNames)
  194. {
  195. if (control.GetType().ToString() == "System.Windows.Forms.DataGridView")
  196. {
  197. for (int i = 0; i < ((DataGridView)control).Columns.Count; i++)
  198. {
  199. if (table.Contains(((DataGridView)control).Columns[i].Name.ToLower()))
  200. ((DataGridView)control).Columns[i].HeaderText = table[((DataGridView)control).Columns[i].Name.ToLower()].ToString();
  201. }
  202. }
  203. if (control.GetType().ToString() == "System.Windows.Forms.Ribbon")
  204. {
  205. System.Windows.Forms.Ribbon rib = (System.Windows.Forms.Ribbon)control;
  206. for (int i = 0; i < rib.Tabs.Count; i++)
  207. {
  208. for (int j = 0; j < rib.Tabs[i].Panels.Count; j++)
  209. {
  210. for (int k = 0; k < rib.Tabs[i].Panels[j].Items.Count; k++)
  211. {
  212. string name = rib.Tabs[i].Panels[j].Items[k].Tag.ToString().ToLower();
  213. if (table.Contains(name))
  214. rib.Tabs[i].Panels[j].Items[k].Text = (string)table[name];
  215. }
  216. if (rib.Tabs[i].Panels[j].Tag != null)
  217. {
  218. string pan = rib.Tabs[i].Panels[j].Tag.ToString().ToLower();
  219. if (table.Contains(pan))
  220. { rib.Tabs[i].Panels[j].Text = (string)table[pan]; }
  221. }
  222. }
  223. if (rib.Tabs[i].Tag != null)
  224. {
  225. string tab = rib.Tabs[i].Tag.ToString().ToLower();
  226. if (table.Contains(tab))
  227. { rib.Tabs[i].Text = (string)table[tab]; }
  228. }
  229. }
  230. for (int i = 0; i < rib.OrbDropDown.MenuItems.Count; i++)
  231. {
  232. string item = rib.OrbDropDown.MenuItems[i].Tag.ToString().ToLower();
  233. if (table.Contains(item))
  234. { rib.OrbDropDown.MenuItems[i].Text = (string)table[item]; }
  235. }
  236. for (int i = 0; i < rib.OrbDropDown.OptionItems.Count; i++)
  237. {
  238. string item = rib.OrbDropDown.OptionItems[i].Tag.ToString().ToLower();
  239. if (table.Contains(item))
  240. { rib.OrbDropDown.OptionItems[i].Text = (string)table[item]; }
  241. }
  242. }
  243. if (control.GetType().ToString() == "System.Windows.Forms.StatusStrip")
  244. {
  245. StatusStrip st = (StatusStrip)control;
  246. for (int i = 0; i < st.Items.Count; i++)
  247. {
  248. if (table.Contains(st.Items[i].Name.ToLower()))
  249. st.Items[i].Text = (string)table[st.Items[i].Name.ToLower()];
  250. }
  251. }
  252. if (control.GetType().ToString() == "System.Windows.Forms.TabControl")
  253. {
  254. TabControl st = (TabControl)control;
  255. for (int i = 0; i < st.TabCount; i++)
  256. {
  257. if (table.Contains(st.TabPages[i].Name.ToLower()))
  258. st.TabPages[i].Text = (string)table[st.TabPages[i].Name.ToLower()];
  259. }
  260. }
  261. if (control.Controls.Count > 0)
  262. {
  263. GetSubControls(control.Controls, table);
  264. }
  265. if (table.Contains(control.Name.ToLower()))
  266. control.Text = (string)table[control.Name.ToLower()];
  267. }
  268. if (table.Contains(form.Name.ToLower()))
  269. form.Text = (string)table[form.Name.ToLower()];
  270. }
  271. catch (Exception ex)
  272. {
  273. Console.WriteLine(ex.ToString());
  274. }
  275. }
  276. //frmName是窗体的Name,lang是要显示的语言(如ZH或EN), Hashtable的Key值就是Name属性的值,其value值就是Text属性将要显示的值
  277. public static Hashtable ReadResource(string frmName, string lang)
  278. {
  279. Hashtable result = new Hashtable();
  280. XmlReader reader = null;
  281. reader = new XmlTextReader(System.Windows.Forms.Application.StartupPath + @"/Resources/XMLData/ResourceForSTDManage-" + lang + ".xml");
  282. XmlDocument doc = new XmlDocument();
  283. doc.Load(reader);
  284. XmlNode root = doc.DocumentElement;
  285. XmlNodeList nodelist = root.SelectNodes("Form[Name='" + frmName + "']/Controls/Control");
  286. foreach (XmlNode node in nodelist)
  287. {
  288. try
  289. {
  290. XmlNode node1 = node.SelectSingleNode("@name");
  291. XmlNode node2 = node.SelectSingleNode("@text");
  292. if (node1 != null)
  293. {
  294. result.Add(node1.InnerText.ToLower(), node2.InnerText);
  295. }
  296. }
  297. catch (FormatException fe)
  298. {
  299. Console.WriteLine(fe.ToString());
  300. }
  301. }
  302. reader.Close();
  303. return result;
  304. }
  305. // 获得子控件的显示名 ,读取控件中子控件的显示值
  306. private static void GetSubControls(Control.ControlCollection controls, Hashtable table)
  307. {
  308. foreach (Control control in controls)
  309. {
  310. if (control.GetType().ToString() == "System.Windows.Forms.DataGridView")
  311. {
  312. for (int i = 0; i < ((DataGridView)control).Columns.Count; i++)
  313. {
  314. if (table.Contains(((DataGridView)control).Columns[i].Name.ToLower()))
  315. ((DataGridView)control).Columns[i].HeaderText = table[((DataGridView)control).Columns[i].Name.ToLower()].ToString();
  316. }
  317. }
  318. if (control.Controls.Count > 0)
  319. GetSubControls(control.Controls, table);
  320. if (table.Contains(control.Name.ToLower()))
  321. control.Text = (string)table[control.Name.ToLower()];
  322. }
  323. }
  324. #endregion
  325. }
  326. }