1. 程式人生 > >Winform下多語言的一種簡單實現

Winform下多語言的一種簡單實現

思路:

基於c#的Winform程式,涉及到多語言的資源集中到字串和圖片上,資源儲存在資原始檔中,針對每一種語言設定一個資原始檔,介面上的文字和圖片等資源從資原始檔中通過ResourceManager來讀取並設定到介面上。資原始檔的命名與語言名稱對應,通過設定程式的語言環境來實現多語言的切換。


資原始檔的設定和獲取

新建winform程式demo,則在工程目錄下有一個子目錄Properties,其中有兩個檔案Resources.Designer.cs和Resources.resx。在其中新增一個字串str1,值設定為"你好"。

通過ResourceManager獲取該字串的程式碼為:


System.Resources.ResourceManager rm = new System.Resources.ResourceManager(
            System.Windows.Forms.Application.ProductName + ".Properties.Resources"
            , System.Reflection.Assembly.GetEntryAssembly());
rm.GetString("str1")

返回"你好"。

建立ResourceManager示例時,第一個引數指定了查詢的資源名,第二個指定了查詢資源的程式集。

此時在新增一個資原始檔Resources.en-US,將會生成兩個檔案Resources.en-US.Designer.cs和Resources.en-US.resx,在其中新增一個字串str1,值設定為”hello”。上述程式碼無需修改,在main函式中加一條語句:
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");

則rm.GetString(“str1”);返回的是”hello”。

這樣就實現了對多語言的支援。

Tips1

實際上在編譯Resources.resx時,會被編譯為一個Properties.Resources類,可以在程式碼中直接訪問。

Tips2

若程式分為demo.dll和demo.exe,資原始檔在.exe程式中,在.dll程式中需要獲取資源,該怎麼做?實際上這就是上述在建立ResourceManager例項時第二個引數的作用了,設定為System.Reflection.Assembly.GetEntryAssembly(),表示從整個程式的執行控制元件程式集中查詢資源,若設定為GetExecutingAssembly()

,則只會在.dll程式集中查詢資源。