C# Winform軟體多語言(漢語、英語。。。)介面的切換,低耦合
阿新 • • 發佈:2018-12-12
最近做程式需要用到多語言版本的問題,在網上收集了一些資料,現做以整理。
方法1. 通過新增不同語言的資原始檔的方式進行切換
步驟1):
窗體屬性Localizable設為TRUE,Language選擇需要的語言,然後修改一下窗體的Text屬性,就可以在窗體工程樹下生成對應語言的資原始檔,如下圖所示。
步驟2)
雙擊對應的資原始檔,對控制元件名稱進行修改,就可以。
問題:
只能修改控制元件的標題等屬性,不能修改軟體中的內容(也可能是我沒找方法)
方法2. 通過新增語言XML檔案的方法
1、設計圖(自己瞎畫的呵呵)
2、做的小demo,介面如下
3、下面是程式碼展示部分
1)Form1程式碼展示
1 namespace WindowsFormsApplication1 2 { 3 public partial class Form1 : Form 4 { 5 public Form1() 6 { 7 InitializeComponent(); 8 SetLanguage(); 9 } 10 11 private void SetLanguage() 12 { 13 this.lbUserName.Text = GlobalData.GlobalLanguage.Login_UserName; 14 this.lbPwd.Text = GlobalData.GlobalLanguage.Login_UserPwd; 15 this.btnLogin.Text = GlobalData.GlobalLanguage.Login_Login; 16 } 17 } 18 }
2)GlobalData類程式碼展示
1 namespace WindowsFormsApplication1 2 { 3 public class GlobalData 4 { 5 /// <summary> 6 /// 系統語言(Chinese(中文),English(英文)。。。) 7 /// </summary> 8 public static string SystemLanguage = System.Configuration.ConfigurationManager.AppSettings["Language"]; 9 // 在呼叫ConfigurationManager時,要載入System.Configuration.dll10 private static Language globalLanguage; 11 public static Language GlobalLanguage 12 { 13 get 14 { 15 if (globalLanguage == null) 16 { 17 globalLanguage = new Language(); 18 return globalLanguage; 19 } 20 return globalLanguage; 21 } 22 } 23 24 } 25 }
3)Language類程式碼展示
1 namespace WindowsFormsApplication1 2 { 3 public class Language 4 { 5 #region 登陸介面 6 public string Login_UserName = ""; 7 public string Login_UserPwd = ""; 8 public string Login_Login = ""; 9 #endregion 10 11 protected Dictionary<string, string> DicLanguage = new Dictionary<string, string>(); 12 public Language() 13 { 14 XmlLoad(GlobalData.SystemLanguage); 15 BindLanguageText(); 16 } 17 18 /// <summary> 19 /// 讀取XML放到記憶體 20 /// </summary> 21 /// <param name="language"></param> 22 protected void XmlLoad(string language) 23 { 24 try 25 { 26 XmlDocument doc = new XmlDocument(); 27 string address = AppDomain.CurrentDomain.BaseDirectory + "Languages\\" + language + ".xml"; 28 doc.Load(address); 29 XmlElement root = doc.DocumentElement; 30 31 XmlNodeList nodeLst1 = root.ChildNodes; 32 foreach (XmlNode item in nodeLst1) 33 { 34 DicLanguage.Add(item.Name, item.InnerText); 35 } 36 } 37 catch (Exception ex) 38 { 39 throw ex; 40 } 41 } 42 43 public void BindLanguageText() 44 { 45 Login_UserName = DicLanguage["Login_UserName"]; 46 Login_UserPwd = DicLanguage["Login_UserPwd"]; 47 Login_Login = DicLanguage["Login_Login"]; 48 } 49 } 50 }
4)App.config程式碼展示
1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <appSettings> 4 <!-- Language的值只能是Chinese(中文),English(英文) --> 5 <add key="Language" value="English"/> 6 </appSettings> 7 </configuration>
5)English.xml程式碼展示
1 <?xml version="1.0" encoding="utf-8" ?> 2 <English> 3 <Login_UserName>UserName:</Login_UserName> 4 <Login_UserPwd>Password:</Login_UserPwd> 5 <Login_Login>Login</Login_Login> 6 </English>
6)Chinese.xml程式碼展示
1 <?xml version="1.0" encoding="utf-8" ?> 2 <Chinese> 3 <Login_UserName>使用者名稱:</Login_UserName> 4 <Login_UserPwd>密碼:</Login_UserPwd> 5 <Login_Login>登入</Login_Login> 6 </Chinese>
4、如果想要換法語則只需要在App.config中配置換成French,然後再新增一個French.xml,內容和其他語言模板一樣把內容換成法語則可。
5、OK。