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,用於儲存當前預設語言
- //當前預設語言
- publicstaticstring DefaultLanguage = "zh-CN";
-
/// <summary>
- /// 修改預設語言
- /// </summary>
- /// <param name="lang">待設定預設語言</param>
- publicstaticvoid 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>
- publicstaticvoid LoadLanguage(Form 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>
- privatestaticvoid 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>
- privatestaticvoid 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);
- }
- }
- }
- }
4. 在主視窗的Load事件中讀取Properties.Settings.Default.DefaultLanguage,並將ComboBox賦值為當前預設語言,即簡體中文、繁體中文或英文。
- privatevoid LoginForm_Load(object sender, EventArgs e)
- {
- //設定combobox的值
- string language = Properties.Settings.Default.DefaultLanguage;
- if (language == "zh-CN")
- {
- languageTxt.Text = "簡體中文(預設)";
- }
- elseif (language == "zh-CHT")
- {
- languageTxt.Text = "繁體中文";
- }
- elseif (language == "en-US")
- {
- languageTxt.Text = "English";
- }
- }
5. 在每個視窗的Load事件中呼叫函式MultiLanguage.LoadLanguage,使視窗在出現時即顯示為當前預設語言。
- privatevoid PasswordForm_Load(object sender, EventArgs e)
- {
- //載入語言
- MultiLanguage.LoadLanguage(this, typeof(PasswordForm));
- }
- //切換語言
- privatevoid languageTxt_SelectedIndexChanged(object sender, EventArgs e)
- {
- languageTxt.Enabled = false;
- if (languageTxt.Text == "簡體中文(預設)")
- {
- //修改預設語言
- MultiLanguage.SetDefaultLanguage("zh-CN");
- //對所有開啟的視窗重新載入語言
- foreach (Form form in Application.OpenForms)
- {
- LoadAll(form);
- }
- }
- elseif (languageTxt.Text == "繁體中文")
- {
- //修改預設語言
- MultiLanguage.SetDefaultLanguage("zh-CHT");
- //對所有開啟的視窗重新載入語言
- foreach (Form form in Application.OpenForms)
- {
- LoadAll(form);
- }
- }
- elseif (languageTxt.Text == "English")
- {
- //修改預設語言
- MultiLanguage.SetDefaultLanguage("en-US");
- //對所有開啟的視窗重新載入語言
- foreach (Form form in Application.OpenForms)
- {
- LoadAll(form);
- }
- }
- languageTxt.Enabled = true;
- }
- privatevoid LoadAll(Form form)
- {
- if (form.Name == "LoginForm")
- {
- MultiLanguage.LoadLanguage(form, typeof(LoginForm));
- }
-
相關推薦
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語言實現(2)GPT實現以及統一方式讀取磁盤分區
tfs 下載 數據 特殊 dpt 屬性列表 handle 系統分區 成了 上一節實現了主GPT頭的信息提取,這一節繼續提取整個的GPT數據,並且將GPT分區表和MBR分區表兩種格式融合成一個模塊,使主調函數(也可以說是使用者)不需要關心磁盤的分區表類型:它太底層了,確實