1. 程式人生 > >C#的Winform多語言實現(resx檔案)

C#的Winform多語言實現(resx檔案)

   使用resx檔案實現Winform多語言切換,本博文提供的程式碼可以實現簡體中文、繁體中文、英文的切換。如果需要增加其它語言的切換,只需要編寫相應的語言的resx檔案即可。 並且,當修改了語言之後,會更新所有開啟的視窗。先貼幾張圖展示一下效果。

程式下載連線:http://download.csdn.net/detail/softimite_zifeng/9731575

1. 簡體中文


2. 繁體中文


3. 英文


1. 為每個視窗建立相應語言的resx檔案。以英文為例,右鍵->新增->新建項->資原始檔,檔名為視窗名.en-US如上面的兩個視窗,分別為LoginForm.en-US.resx和PasswordForm.en-US.resx。簡體中文為LoginForm.zh-CN.resx和PasswordForm.zh-CN.resx,繁體中文為LoginForm.zh-CHT.resx和PasswordForm.zh-CHT.resx。下面給出LoginForm.en-US.resx檔案的截圖。



2. 在專案的Properties的Settings.settings中新增變數DefaultLanguage,用於儲存當前設定的預設語言。當下次啟動程式時,會讀取該變數,從而將程式的語言設定為上次程式關閉時的語言。



3. 建立一個靜態類(MultiLanguage.cs)用於編寫與切換語言相關的變數和程式碼。

(1)變數DefaultLanguage,用於儲存當前預設語言

  1. //當前預設語言
  2. publicstaticstring DefaultLanguage = "zh-CN";  
(2)函式SetDefaultLanguage修改當前預設語言
  1. /// <summary>
  2. /// 修改預設語言
  3. /// </summary>
  4. /// <param name="lang">待設定預設語言</param>
  5. publicstaticvoid SetDefaultLanguage(string lang)  
  6. {  
  7.     System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);  
  8.     DefaultLanguage = lang;  
  9.     Properties.Settings.Default.DefaultLanguage = lang;  
  10.     Properties.Settings.Default.Save();  
  11. }  
(3)函式LoadLanguage用於載入語言或切換語言
  1. /// <summary>
  2. /// 載入語言
  3. /// </summary>
  4. /// <param name="form">載入語言的視窗</param>
  5. /// <param name="formType">視窗的型別</param>
  6. publicstaticvoid LoadLanguage(Form form, Type formType)  
  7. {  
  8.     if (form != null)  
  9.     {  
  10.         System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(formType);  
  11.         resources.ApplyResources(form, "$this");  
  12.         Loading(form, resources);  
  13.     }  
  14. }  
  15. /// <summary>
  16. /// 載入語言
  17. /// </summary>
  18. /// <param name="control">控制元件</param>
  19. /// <param name="resources">語言資源</param>
  20. privatestaticvoid Loading(Control control, System.ComponentModel.ComponentResourceManager resources)  
  21. {  
  22.     if (control is MenuStrip)  
  23.     {  
  24.         //將資源與控制元件對應
  25.         resources.ApplyResources(control, control.Name);  
  26.         MenuStrip ms = (MenuStrip)control;  
  27.         if (ms.Items.Count > 0)  
  28.         {  
  29.             foreach (ToolStripMenuItem c in ms.Items)  
  30.             {  
  31.                 //遍歷選單
  32.                 Loading(c, resources);  
  33.             }  
  34.         }  
  35.     }  
  36.     foreach (Control c in control.Controls)  
  37.     {  
  38.         resources.ApplyResources(c, c.Name);  
  39.         Loading(c, resources);  
  40.     }  
  41. }  
  42. /// <summary>
  43. /// 遍歷選單
  44. /// </summary>
  45. /// <param name="item">選單項</param>
  46. /// <param name="resources">語言資源</param>
  47. privatestaticvoid Loading(ToolStripMenuItem item, System.ComponentModel.ComponentResourceManager resources)  
  48. {  
  49.     if (item is ToolStripMenuItem)  
  50.     {  
  51.         resources.ApplyResources(item, item.Name);  
  52.         ToolStripMenuItem tsmi = (ToolStripMenuItem)item;  
  53.         if (tsmi.DropDownItems.Count > 0)  
  54.         {  
  55.             foreach (ToolStripMenuItem c in tsmi.DropDownItems)  
  56.             {  
  57.                 Loading(c, resources);  
  58.             }  
  59.         }  
  60.     }  
  61. }  

4. 在主視窗的Load事件中讀取Properties.Settings.Default.DefaultLanguage,並將ComboBox賦值為當前預設語言,即簡體中文、繁體中文或英文。

  1. privatevoid LoginForm_Load(object sender, EventArgs e)  
  2. {  
  3.     //設定combobox的值
  4.     string language = Properties.Settings.Default.DefaultLanguage;  
  5.     if (language == "zh-CN")  
  6.     {  
  7.         languageTxt.Text = "簡體中文(預設)";  
  8.     }  
  9.     elseif (language == "zh-CHT")  
  10.     {  
  11.         languageTxt.Text = "繁體中文";  
  12.     }  
  13.     elseif (language == "en-US")  
  14.     {  
  15.         languageTxt.Text = "English";  
  16.     }  
  17. }  

5. 在每個視窗的Load事件中呼叫函式MultiLanguage.LoadLanguage,使視窗在出現時即顯示為當前預設語言。

  1. privatevoid PasswordForm_Load(object sender, EventArgs e)  
  2. {  
  3.     //載入語言
  4.     MultiLanguage.LoadLanguage(thistypeof(PasswordForm));  
  5. }  
6. 編寫用於切換語言的ComboBox的SelectedIndexChanged事件,使得當使用者選擇對應的語言時,程式會切換到該語言。
  1. //切換語言
  2. privatevoid languageTxt_SelectedIndexChanged(object sender, EventArgs e)  
  3. {  
  4.     languageTxt.Enabled = false;  
  5.     if (languageTxt.Text == "簡體中文(預設)")  
  6.     {  
  7.         //修改預設語言
  8.         MultiLanguage.SetDefaultLanguage("zh-CN");  
  9.         //對所有開啟的視窗重新載入語言
  10.         foreach (Form form in Application.OpenForms)  
  11.         {  
  12.             LoadAll(form);  
  13.         }  
  14.     }  
  15.     elseif (languageTxt.Text == "繁體中文")  
  16.     {  
  17.         //修改預設語言
  18.         MultiLanguage.SetDefaultLanguage("zh-CHT");  
  19.         //對所有開啟的視窗重新載入語言
  20.         foreach (Form form in Application.OpenForms)  
  21.         {  
  22.             LoadAll(form);  
  23.         }  
  24.     }  
  25.     elseif (languageTxt.Text == "English")  
  26.     {  
  27.         //修改預設語言
  28.         MultiLanguage.SetDefaultLanguage("en-US");  
  29.         //對所有開啟的視窗重新載入語言
  30.         foreach (Form form in Application.OpenForms)  
  31.         {  
  32.             LoadAll(form);  
  33.         }  
  34.     }  
  35.     languageTxt.Enabled = true;  
  36. }  
  37. privatevoid LoadAll(Form form)  
  38. {  
  39.     if (form.Name == "LoginForm")  
  40.     {  
  41.         MultiLanguage.LoadLanguage(form, typeof(LoginForm));  
  42.     }  
  43.     

    相關推薦

    C#的Winform語言實現resx檔案

       使用resx檔案實現Winform多語言切換,本博文提供的程式碼可以實現簡體中文、繁體中文、英文的切換。如果需要增加其它語言的切換,只需要編寫相應的語言的resx檔案即可。 並且,當修改了語言之後,會更新所有開啟的視窗。先貼幾張圖展示一下效果。 程式下載連線:ht

    C#的Winform語言實現XML檔案

           使用XML檔案實現Winform多語言切換,本博文提供的程式碼可以實現簡體中文、繁體中文、英文的切換。如果需要增加其它語言的切換,只需要編寫相應的語言的XML檔案即可。 並且,當修改了語言之後,會更新所有開啟的視窗。先貼幾張圖展示一下效果。 http://d

    C#的Winform語言實現API翻譯

           呼叫百度翻譯API實現Winform多語言切換,本博文提供的程式碼可以實現簡體中文、繁體中文、英文的切換。如果需要增加其它語言的切換,只需要呼叫API將其翻譯為想要的語言 即可。 並且,當修改了語言之後,會更新所有開啟的視窗。        呼叫API翻譯可以

    QT in VS 語言實現中英文切換

    最近專案需要軟體具有中英文雙語切換功能,而QT又自帶此功能,現將實現方式記錄下來。 說到中英文切換,少不了要了解QT的內部編碼方式。在此就不詳述QT編碼方式了,具體可參考 徹底弄懂Qt的編碼。只需要記住QT採用utf-8編碼!window作業系統採用ansi編

    模擬退火演算法與C語言實現TSP問題

    1簡介: 模擬退火來自冶金學的專有名詞退火。退火是將材料加熱後再經特定速率冷卻,目的是增大晶粒的體積,並且減少晶格中的缺陷。材料中的原子原來會停留在使內能有區域性最小值的位置,加熱使能量變大,原子會離開原來位置,而隨機在其他位置中移動。退火冷卻時速度較慢,使得原子有較多可能

    Prim演算法的C語言實現鄰接矩陣

    #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> #define MAX 100

    漢諾塔C語言實現純程式碼

    (本篇只為記錄程式碼,不加註解)a、b、c三座塔,將n個從小到大(自上而下)的圓盤從a移動到c,移動期間小圓盤必須在大圓盤上面,問移動步驟。#include<stdio.h> int main() { void hanoi(int n,char one

    QT in VS 語言實現中英文切換,每個步驟都有截圖,只有UTF8才能讓Qt語言家正確讀取。先qApp->removeTranslator,然後installTranslator,每個類都要寫上槽函數RetranslateUI

    har hang 刷新 編碼方式 enum utf 工具 orm 中英文切換 最近項目需要軟件具有中英文雙語切換功能,而QT又自帶此功能,現將實現方式記錄下來。 說到中英文切換,少不了要了解QT的內部編碼方式。在此就不詳述QT編碼方式了,具體可參考 徹底弄懂Qt的編碼。只需

    VUE實現Studio管理後臺:支援語言國際化vue-i18n

    RXEditor的第一版本是英文版,有些朋友看起來覺得不習慣,後來因為惰性,不願意再修改舊程式碼加入中文版,這次提前就把這個問題解決了,克服惰性最好的方式,就是想到就儘快去做,避免拖延。 本來計劃在介面的右上角,做一個下拉選單選擇語言。下拉選單的工作量稍稍有些大,並且很少有隨時切換介面語言的需求。最終確定獲取

    20 字元裝置驅動相關的函式和引數及實現虛擬檔案

    字元裝置驅動相關的函式和引數及實現(虛擬檔案) 使用者程序呼叫函式順序: open ---> kernel ---> cdev.ops->open(..) read ---> kernel ---> cdev.ops->read(

    【vue 進階指南 一】語言國際化中英文切換

    vue + element-ui + vue-i18n 多語言國際化 1.element-ui 並不支援最新版的vue-i8n 外掛,開發時注意i18n的版本,當然本示例成功解決版本不相容的問題,詳細說明請看element官方文件:http://eleme

    RadioGroup裡RadioButton顯示實現非常簡單

    RadioGroup顯示多行實現步驟 RadioGroup裡面包裹的RadioButton的特性是單選和互斥,該種需求在專案中用到的比較多。 RadioButton實現多行顯示的話就失去了本來的特性。 網上多數是自定義來處理這種需求,來實現單選和互斥。

    c++實現 c++順序表的實現採用模板

    函式實現資料的插入(頭插&&尾插)、刪除(頭刪&&尾刪)、查詢、按位置插入、按位置刪除、順序表求長、順序表清除、順序表摧毀、資料的逆置以及資料排序 main函式 #include"SeqList.h"//順序表 void main() {

    【Mac】資料夾語言設定漢化

    當我們使用Mac中文語言的時候,使用終端Terminal看到的資料夾列表和直接在Finder裡面看到的不一樣。經常我們使用一箇中文的資料夾在終端cd選擇的時候切換輸入法會感覺比較噁心。 但是系統預設的幾個資料夾“桌面”,“下載”等在終端看到的卻是英文的 “De

    C語言實現一個通訊錄,可以進行增刪查改等項功能動態版本

    基於前一篇文章的靜態通訊錄,新增malloc函式,realloc函式以及free,將其改變為一個動態的通訊錄,可以動態記憶體開闢,儘可能防止記憶體的浪費。 具體程式碼如下: contact.h #ifndef __CONTACT_H__ #define __CO

    C++之執行緒C++11 thread.h檔案實現執行緒

    轉載自: 與 C++11 多執行緒相關的標頭檔案 C++11 新標準中引入了四個標頭檔案來支援多執行緒程式設計,他們分別是<atomic> ,<thread>,<mutex>,<condition_variable>和&l

    C語言程式設計實現建立個目錄資料夾

        因為要建立90個資料夾,本人實在不想一個一個的建立,就想是不是可以用C語言程式設計來實現呢,剛才查閱了很多部落格,終於終於我實現了,可以用迴圈的方式建立了,也不屬於自己原創,參考了很多大神的程式碼。現在我把原始碼貼出來,在Visual studio 2015上跑成功了

    基於Huffman樹的檔案壓縮原理及C語言實現

    在上文基於Huffman樹的檔案壓縮原理及C語言實現(一)中已經介紹並實現瞭如何建立Huffman樹,得到Huffman編碼,這篇我們將會接著說。如何通過Huffman樹,實現檔案壓縮。 實現思路 任何檔案都可以看作是由位元組組成的位元組塊,將位元組看作

    在STM32上實現NTFS之4:GPT分區表的C語言實現1:主GPT表頭的實現

    center mbr分區 sum 對齊 字節數 決定 容器 alt 水平 題外話:在荒廢了很久沒有更新之後……某日突然收到讀者的站內信!內容大體是詢問GPT分區表信息的讀取方式,筆者激動萬分之下,決定繼續解剖NTFS……其實GPT嚴格上不算是NTFS的內容, GPT和M

    在STM32上實現NTFS之5:GPT分區表的C語言實現2GPT實現以及統一方式讀取磁盤分區

    tfs 下載 數據 特殊 dpt 屬性列表 handle 系統分區 成了   上一節實現了主GPT頭的信息提取,這一節繼續提取整個的GPT數據,並且將GPT分區表和MBR分區表兩種格式融合成一個模塊,使主調函數(也可以說是使用者)不需要關心磁盤的分區表類型:它太底層了,確實