1. 程式人生 > >C# Winform軟體多語言(漢語、英語。。。)介面的切換,低耦合

C# Winform軟體多語言(漢語、英語。。。)介面的切換,低耦合

最近做程式需要用到多語言版本的問題,在網上收集了一些資料,現做以整理。

方法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.dll
10 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。