winForm 國際化的簡單實現
國際化就是要實現多語種的介面切換。首先,我們不可能用if else等語句來根據選擇的不同語種對所有的控制元件一個一個的設值,這樣太麻煩了。.Net提供了國際化相關的支援,主要放在System.Globalization名稱空間下。下面是一個簡單的實現,麻雀雖小,五臟俱全。
這個程式是最近寫的一個程式,就在這基礎上進行改造,關鍵是弄懂原理。
1> 首先要加入Resource檔案
在VS工程-->新增新專案里加入三個resource檔案,Resource檔案的作用就是存放我們的介面控制元件的顯示字串。這裡我們要實現3種語言的切換,所有加入了3個,分別命名為:Resource.en-US.resx,Resource.zh-CN.resx,Resource.ja-JP.resx。注意命名規則第一部分要相同,第二部分是不同語言的culture name,我定義的就是英語,中文,日文。
2> 在這3個檔案中定義介面相關的字串資訊。
注意定義的名字在3個檔案中要一致,否則找不到。
Resource.en-US.resx
tsmi_language_Name Language
tsmi_japanese_Name Japanese
tsmi_english_Name English
tsmi_close_Name Close
tsmi_chiniese_Name Chinese
Resource.zh-CN.resx
tsmi_language_Name 語言
tsmi_chiniese_Name 中文
tsmi_english_Name 英文
tsmi_japanese_Name 日文
tsmi_close_Name 退出
Resource.ja-JP.resx
tsmi_language_Name 言語
tsmi_chiniese_Name 中國語
tsmi_english_Name 英語
tsmi_japanese_Name 日本語
tsmi_close_Name 閉じる
3> 利用ResourceManager類進行讀取。
ResourceManager會根據不同的cultrue來讀不同的resource檔案,所以,實現的關鍵就是根據不同的語言來改變當前程式執行緒的cultrue就可以達到目地。而對於介面控制元件Text的賦值程式碼將是不變的,當新增加一種語言是,也就是再加一個resource檔案,對程式碼的改動幾乎沒有影響。
基本程式碼:
Resource的讀取類
- class ResourceCluture
- {
- /// <summary>
- /// 設定語言環境
- /// </summary>
- /// <param name="strClutrue"></param>
- public static void SetLocalClutrue(string strClutrue)
- {
- if(string.IsNullOrEmpty(strClutrue))
- {
- strClutrue = "zh-CN";
- }
- CultureInfo currentClutrue = new CultureInfo(strClutrue);
- Thread.CurrentThread.CurrentCulture = currentClutrue;
- }
- /// <summary>
- /// 取值
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- public static string GetString(string id)
- {
- string strValue = string.Empty;
- try
- {
- ResourceManager resManager = new ResourceManager("ApplicationActive.Properties.Resource", Assembly.GetExecutingAssembly());
- strValue = resManager.GetString(id, Thread.CurrentThread.CurrentCulture);
- }
- catch
- {
- strValue = "No id:" + id + "please add";
- }
- return strValue;
- }
- }
設定控制元件文字的程式碼:
- /// <summary>
- /// 根據不同的語言文化,設定介面控制元件的文字
- /// </summary>
- /// <param name="strClutrue">"en-US","ch-CN","ja-JP" etc..<</param>
- private void SetFormTextByLanguage(string strClutrue)
- {
- ResourceCluture.SetLocalClutrue(strClutrue);
- this.lblPath.Text = ResourceCluture.GetString("lblPath_Name");
- this.tsmi_language.Text = ResourceCluture.GetString("tsmi_language_Name");
- this.tsmi_chiniese.Text = ResourceCluture.GetString("tsmi_chiniese_Name");
- this.tsmi_english.Text = ResourceCluture.GetString("tsmi_english_Name");
- this.tsmi_japanese.Text = ResourceCluture.GetString("tsmi_japanese_Name");
- this.tsmi_close.Text = ResourceCluture.GetString("tsmi_close_Name");
- this.gbx_file.Text = ResourceCluture.GetString("gbx_file_Name");
- this.lblPath.Text = ResourceCluture.GetString("lblPath_Name");
- this.chkExpire.Text = ResourceCluture.GetString("chkExpire_Name");
- this.btn_startPgm.Text = ResourceCluture.GetString("btn_startPgm_Name");
- this.lbl_Note.Text = ResourceCluture.GetString("lbl_Note_Name");
- this.groupBox_shortcut.Text = ResourceCluture.GetString("groupBox_shortcut_Name");
- this.lbl_shortcutName.Text = ResourceCluture.GetString("lbl_shortcutName_Name");
- this.btn_CreateIcon.Text = ResourceCluture.GetString("btn_CreateIcon_Name");
- }
4> 基本完成,看看效果圖
相關文章
- WinForm的Socket實現簡單的聊天室 IMORM
- springboot、Thymeleaf、國際化的簡單使用Spring Boot
- Flutterの使用Provider進行簡單的國際化FlutterIDE
- Java模組化的國際化實現- GunnarJava
- 在Spring Boot實現國際化的案例Spring Boot
- 小程式國際化實現方式
- WinForm依賴注入簡單使用ORM依賴注入
- 從module的簡單實現到模組化
- 進擊的模組化+webpack的簡單實現Web
- ArrayList的簡單實現
- 實現簡單的BitMap
- AOP的簡單實現
- 簡單的 HashMap 實現HashMap
- Go語言實現簡單的反序列化Go
- winform實現委託ORM
- 使用vue-i18n實現國際化Vue
- Android國際化(多語言)實現,支援8.0Android
- [Linux]簡單的shell實現Linux
- java實現簡單的JDBCJavaJDBC
- 簡單的實現vue原理Vue
- 簡單的實現React原理React
- 實用的 Flutter 國際化指南Flutter
- 簡單實現 VUE 中 MVVM – step4 – 優化Watcher實現VueMVVM優化
- C# 簡單反射實現winform左側樹形導航,右側切換內容C#反射ORM
- AspectJ簡單實現
- FastClick簡單實現AST
- Promise 簡單實現Promise
- ReadableStream 簡單實現
- Express 簡單實現Express
- golang 簡單實現介面資料格式化Golang
- Webnovel 國際化實踐Web
- Spring Boot實際專案用簡單的AOPSpring Boot
- 【SpringBoot學習(四) 使用 thymeleaf實現國際化功能】Spring Boot
- Unity實現簡單的物件池Unity物件
- 簡單、好懂的Svelte實現原理
- Promise 基本方法的簡單實現Promise
- netty 實現簡單的rpc呼叫NettyRPC
- Android中SharePreferences的簡單實現Android
- SpringBoot與WebService的簡單實現Spring BootWeb