通过C#进行中英文转换
- 编写相应语言的XML文件,添加xml文件
ChineseSimplified.xml文件内容
<?xml version="1.0" encoding="GB2312" ?>
<Softimite Language="12"><Form><Name>LoginForm</Name><Controls><Control name="LoginForm" text="登录"/><Control name="accountLab" text="账户"/><Control name="passwordLab" text="密码"/><Control name="languageLab" text="语言"/><Control name="loginBtn" text="登录"/><Control name="passwordBtn" text="修改密码"/></Controls></Form><Form><Name>PasswordForm</Name><Controls><Control name="PasswordForm" text="修改密码"/><Control name="accountLab" text="账户"/><Control name="passwordLab" text="旧密码"/><Control name="newpasswordLab" text="新密码"/><Control name="modifyBtn" text="修改"/></Controls></Form>
</Softimite>
English.xml文件内容
<?xml version="1.0" encoding="utf-8" ?>
<Softimite Language="12"><Form><Name>LoginForm</Name><Controls><Control name="LoginForm" text="Login"/><Control name="accountLab" text="Account"/><Control name="passwordLab" text="Password"/><Control name="languageLab" text="Language"/><Control name="loginBtn" text="Login"/><Control name="passwordBtn" text="Modify pwd"/></Controls></Form><Form><Name>PasswordForm</Name><Controls><Control name="PasswordForm" text="Modify Password"/><Control name="accountLab" text="Account"/><Control name="passwordLab" text="Old password"/><Control name="newpasswordLab" text="New password"/><Control name="modifyBtn" text="Modify"/></Controls></Form>
</Softimite>
如下图所示,是2种语言的XML文件。注:必须将这2个XML文件属性中的“ 复制到输出目录”设置为“ 如果较新则复制”,否则,程序在运行过程中会找不到这几个文件。
2.创建一个静态类(MultiLanguage.cs)用于编写与切换语言相关的变量和代码。
//当前默认语言public static string DefaultLanguage = "ChineseSimplified";
函数ReadXMLText用于从XML语言文件中读取控件在该语言下的值/// <summary>/// 从XML文件中读取需要修改Text的內容/// </summary>/// <param name="frmName">窗口名,用于获取对应窗口的那部分内容</param>/// <param name="lang">目标语言</param>/// <returns></returns>private static Hashtable ReadXMLText(string frmName, string lang){try{Hashtable hashResult = new Hashtable();XmlReader reader = null;//判断是否存在该语言的配置文件,若是进行读取操作if (!(new System.IO.FileInfo("Languages/" + lang + ".xml")).Exists){return null;}else{reader = new XmlTextReader("Languages/" + lang + ".xml");}XmlDocument doc = new XmlDocument();doc.Load(reader);XmlNode root = doc.DocumentElement;//获取XML文件中对应该窗口的内容XmlNodeList nodeList = root.SelectNodes("Form[Name='" + frmName + "']/Controls/Control");foreach (XmlNode node in nodeList){try{//修改内容为控件的Text值XmlNode node1 = node.SelectSingleNode("@name");XmlNode node2 = node.SelectSingleNode("@text");if (node1 != null){hashResult.Add(node1.InnerText.ToLower(), node2.InnerText);}}catch { }}reader.Close();return hashResult;}catch{return null;}}/// <summary>/// 加载语言/// </summary>/// <param name="form">加载语言的窗口</param>public static void LoadLanguage(Form form, string getlanguage){//根据用户选择的语言获得表的显示文字 Hashtable hashText = ReadXMLText(form.Name, getlanguage);if (hashText == null){return;}//获取当前窗口的所有控件Control.ControlCollection sonControls = form.Controls;try{//遍历所有控件foreach (Control control in sonControls){if (control.GetType() == typeof(Panel)) //Panel{GetSetSubControls(control.Controls, hashText);}else if (control.GetType() == typeof(GroupBox)) //GroupBox{GetSetSubControls(control.Controls, hashText);}else if (control.GetType() == typeof(TabControl)) //TabControl{GetSetSubControls(control.Controls, hashText);}else if (control.GetType() == typeof(TabPage)) //TabPage{GetSetSubControls(control.Controls, hashText);}if (hashText.Contains(control.Name.ToLower())){control.Text = (string)hashText[control.Name.ToLower()];}}if (hashText.Contains(form.Name.ToLower())){form.Text = (string)hashText[form.Name.ToLower()];}}catch { }}/// <summary>/// 获取并设置控件中的子控件/// </summary>/// <param name="controls">父控件</param>/// <param name="hashResult">哈希表</param>private static void GetSetSubControls(Control.ControlCollection controls, Hashtable hashText){try{foreach (Control control in controls){if (control.GetType() == typeof(Panel)) //Panel{GetSetSubControls(control.Controls, hashText);}else if (control.GetType() == typeof(GroupBox)) //GroupBox{GetSetSubControls(control.Controls, hashText);}else if (control.GetType() == typeof(TabControl)) //TabControl{GetSetSubControls(control.Controls, hashText);}else if (control.GetType() == typeof(TabPage)) //TabPage{GetSetSubControls(control.Controls, hashText);}if (hashText.Contains(control.Name.ToLower())){control.Text = (string)hashText[control.Name.ToLower()];}}}catch (Exception ex){throw new Exception(ex.Message);}}
3.添加选择的语言
public static string language = null;
private void languageTxt_SelectedIndexChanged(object sender, EventArgs e){languageTxt.Enabled = false;switch( languageTxt.SelectedIndex){case 0:language ="ChineseSimplified";foreach (Form form in Application.OpenForms){MultiLanguage.LoadLanguage(form, language);}break;case 1:language = "English";//对所有打开的窗口重新加载语言foreach (Form form in Application.OpenForms){MultiLanguage.LoadLanguage(form, language);}break ;}languageTxt.Enabled = true;}
4.在主窗口的Load事件中显示当前选择的语言
private void LoginForm_Load(object sender, EventArgs e){if (language == "ChineseSimplified"){languageTxt.Text = "简体中文(默认)";}else if (language == "English"){languageTxt.Text = "English";}}