C#WinForm實現(xiàn)多語言切換的示例
因項目需要,所以在網(wǎng)上找了一些方法實現(xiàn)了該功能,本文也是做一個總結(jié)和記錄。使用resx文件實現(xiàn)Winform多語言切換,以實現(xiàn)簡體中文、英文、泰語的切換為例。如果后續(xù)需要增加其它語言的切換,只需要按照步驟重復操作即可。
效果圖如下:
中文:
英語:
泰語:
窗體設(shè)置
下面來說一下流程:
1.首先將Form1的 Localizable 屬性為 true( 設(shè)置該屬性后,.net 將根據(jù)不同的語言,為應用程序生成不同的資源文件),然后將Language屬性設(shè)置為所需要的語言,如下所示。
2.當把Language屬性設(shè)置成例如英語后,那么我們對窗體中的控件名稱進行調(diào)整,如下圖:
別的語言也是這種操作,只是拿英語做個示例。當我們把頁面調(diào)整完后,我們重新生成一下,然后再把上述Language屬性切回到默認或漢語時,再把項目重新生成一下。這樣的話,語言文件就會自動生成好了。
注意:一定要重新啟動一下,不然改過之后直接運行不會出現(xiàn)語言文件!
當我們把窗體的設(shè)置全部搞定后,我們來看怎么設(shè)置自動切換,如圖所示,我是在登錄頁面就放了一個下拉框,當選中語言時,所有窗體的語言會自動切換,接下來我們看一下實現(xiàn)方法。
實時語言切換
1.項目的Properties的Settings.settings中添加變量DefaultLanguage,用于保存當前設(shè)置的默認語言。當下次啟動程序時,會讀取該變量,從而將程序的語言設(shè)置為上次程序關(guān)閉時的語言。第一次將默認語言設(shè)置為中文zh-CN。
2.創(chuàng)建一個靜態(tài)類(MultiLanguage.cs)用于編寫與切換語言相關(guān)的變量和代碼。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace CodePrint { //用于編寫與切換語言相關(guān)的變量和代碼 class MultiLanguage { //當前默認語言 public static string DefaultLanguage = "zh-CN"; /// <summary> /// 修改默認語言 /// </summary> /// <param name="lang">待設(shè)置默認語言</param> public static void SetDefaultLanguage(string lang) { System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang); DefaultLanguage = lang; Properties.Settings.Default.DefaultLanguage = lang; Properties.Settings.Default.Save(); } /// <summary> /// 加載語言 /// </summary> /// <param name="form">加載語言的窗口</param> /// <param name="formType">窗口的類型</param> public static void LoadLanguage(Logins form, Type formType) { if (form != null) { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(formType); resources.ApplyResources(form, "$this"); Loading(form, resources); } } /// <summary> /// 加載語言 /// </summary> /// <param name="control">控件</param> /// <param name="resources">語言資源</param> private static void Loading(Control control, System.ComponentModel.ComponentResourceManager resources) { if (control is MenuStrip) { //將資源與控件對應 resources.ApplyResources(control, control.Name); MenuStrip ms = (MenuStrip)control; if (ms.Items.Count > 0) { foreach (ToolStripMenuItem c in ms.Items) { //遍歷菜單 Loading(c, resources); } } } foreach (Control c in control.Controls) { resources.ApplyResources(c, c.Name); Loading(c, resources); } } /// <summary> /// 遍歷菜單 /// </summary> /// <param name="item">菜單項</param> /// <param name="resources">語言資源</param> private static void Loading(ToolStripMenuItem item, System.ComponentModel.ComponentResourceManager resources) { if (item is ToolStripMenuItem) { resources.ApplyResources(item, item.Name); ToolStripMenuItem tsmi = (ToolStripMenuItem)item; if (tsmi.DropDownItems.Count > 0) { foreach (ToolStripMenuItem c in tsmi.DropDownItems) { Loading(c, resources); } } } } } }
3.在窗體的Load(雙擊Form1即可跳轉(zhuǎn)至該事件)事件中讀取Properties.Settings.Default.DefaultLanguage,并將ComboBox賦值為當前默認語言,即簡體中文或英文。
private void Login_Load(object sender, EventArgs e) { //設(shè)置combobox的值 string language = Properties.Settings.Default.DefaultLanguage; if (language == "zh-CN") { comboBox1.Text = "簡體中文(默認)"; } else if (language == "en-US") { comboBox1.Text = "English"; } else if(language == "th-TH") { comboBox1.Text = "???"; } MultiLanguage.LoadLanguage(this, typeof(Logins)); }
4.編寫用于切換語言的ComboBox的SelectedIndexChanged事件,使得當用戶選擇對應的語言時,程序會切換到該語言。
事件添加方式如下:選中ComboBox,點擊事件,在SelectedIndexChanged事件中輸入方法名languageTxt_SelectedIndexChanged,按回車即可自動生成。
private void languageTxt_SelectedIndexChanged(object sender, EventArgs e) { comboBox1.Enabled = false; if (comboBox1.Text == "中文") { //修改默認語言 MultiLanguage.SetDefaultLanguage("zh-CN"); //對所有打開的窗口重新加載語言 foreach (Form form in Application.OpenForms) { LoadAll(form); } } else if (comboBox1.Text == "English") { //修改默認語言 MultiLanguage.SetDefaultLanguage("en-US"); //對所有打開的窗口重新加載語言 foreach (Form form in Application.OpenForms) { LoadAll(form); } } else if(comboBox1.Text == "???") { //修改默認語言 MultiLanguage.SetDefaultLanguage("th-TH"); //對所有打開的窗口重新加載語言 foreach (Form form in Application.OpenForms) { LoadAll(form); } } comboBox1.Enabled = true; }
LoadAll(form)方法:
private void LoadAll(Form form) { if (form.Name == "Logins") { MultiLanguage.LoadLanguage((Logins)form, typeof(Logins)); } else if (form.Name == "CodePrint") { MultiLanguage.LoadLanguage((Logins)form, typeof(CodePrint)); } else if(form.Name == "CodePrint") { MultiLanguage.LoadLanguage((Logins)form, typeof(CodePrint)); } }
if里面就是我們可以切換的窗體名稱。
到此這篇關(guān)于C#WinForm實現(xiàn)多語言切換的示例的文章就介紹到這了,更多相關(guān)C# WinForm多語言切換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#?wpf使用DockPanel實現(xiàn)制作截屏框
做桌面客戶端的時候有時需要實現(xiàn)截屏功能,能夠在界面上框選截屏,本文就來為大家介紹一下wpf如何使用DockPanel制作截屏框吧,感興趣的可以了解下2023-09-09