Windows 表單編程 |
演練:本地化 Windows 表單 |
Visual Studio 項目系統為本地化 Windows 表單應用程式提供相當大的支援。下面是兩種使用 Visual Studio 開發環境產生資源檔的方法:
本演練主題在一個 Windows 應用程式項目中示範這兩種過程。
還可以將文字檔轉換為資源檔;有關更多資訊,請參見和。
使 Visual Studio 產生資源檔
建立名為“WindowsApplication1”的新 Windows 應用程式。有關詳細資料,請參見如何:建立 Windows 應用程式項目。
在“屬性”視窗中,將表單的 Localizable 屬性設定為 true。
Language 屬性已經設定為“(預設值)”。
將 Button 控制項從“工具箱”的“Windows 表單”選項卡拖到表單上,然後將其 Text 屬性設定為 Hello World。
將該表單的 Language 屬性設定為“德語(德國)”。
將該按鈕的 Text 屬性設定為 Hallo Welt。
將該表單的 Language 屬性設定為“法語(法國)”。
將該按鈕的 Text 屬性設定為 Bonjour le Monde。如果需要的話,可調整該按鈕的大小以容納較長的字串。
儲存和產生解決方案。
單擊“方案總管”中的“顯示所有檔案”按鈕。
資源檔出現在 Form1.vb、Form1.cs 或 Form1.jsl 下面。Form1.resx 是預設區域性的資源檔,它將產生到主程式集中。Form1.de-DE.resx 是在德國講的德語的資源檔。Form1.fr-FR.resx 是在法國講的法語的資源檔。
此外,您將看到名為 Form1.de.resx 和 Form1.fr.resx 的檔案。Visual Studio 自動建立這些檔案,以便解決 Visual SourceSafe 中存在的一個限制,即 Visual SourceSafe 不得不在儲存操作期間處理將新檔案添加到項目中的操作。.resx 檔案為空白並且不包含任何資源。
按 F5 鍵或從“調試”菜單中選擇“啟動”。
現在將看到對話方塊中出現英語、法語或德語的問候,具體看到哪一種取決於作業系統的 UI 語言。
注意 |
Windows 中使用的使用者介面語言是“CurrentUICulture”設定的一種功能。如果您的 Windows 副本裝有多語系使用者介面 (MUI) 套件 (MUI),則可以在控制台中更改使用者介面語言。有關更多資訊,請參閱 網站。如果未安裝 MUI,則可以用編程方式更改當前的 UI 文化特性,如下所述。 |
下面的過程說明如何設定使用者介面地區性,以便該應用程式顯示法語資源。在實際應用程式中,不用這種方式寫入程式碼使用者介面地區性。使用者介面地區性的設定將取決於使用者佈建或應用程式設定。
設定使用者介面地區性以查看特定資源
在“代碼編輯器”中,在模組開始處將下面的代碼添加到 Form1 聲明之前:
|
複製代碼 |
' Visual BasicImports System.GlobalizationImports System.Threading// C#using System.Globalization;using System.Threading;// Visual J#import System.Globalization.*;import System.Threading.*; |
添加下列代碼。在 Visual Basic 中,調用 InitializeComponent 函數前應使用 New 函數。在 Visual C# 和 Visual J# 中,應使用 Form1,並且也在調用 InitializeComponent 函數之前。
|
複製代碼 |
' Visual Basic' Sets the UI culture to French (France).Thread.CurrentThread.CurrentUICulture = New CultureInfo("fr-FR")// C#// Sets the UI culture to French (France).Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");// Visual J#// Sets the UI culture to French (France).System.Threading.Thread.get_CurrentThread().set_CurrentUICulture( new CultureInfo("fr-FR")); |
儲存和產生解決方案。
按 F5 鍵或從“調試”菜單中選擇“啟動”。
現在該表單將始終以法語顯示。如果早已更改了該按鈕的大小以容納較長的法語字串,則請注意,在法語資源檔中也已經保持了該按鈕的大小。
手動向項目中添加資源檔並編輯它們
在“項目”菜單上單擊“添加新項”。
在“模板”框中選擇“程式集資源檔”模板。在“名稱”框中鍵入檔案名稱“WinFormStrings.resx”。WinFormStrings.resx 檔案將包含英語的後備資源。每當應用程式找不到更適合於使用者介面地區性的資源時,就將訪問這些資源。
該檔案被添加到“方案總管”中的項目中,並在 XML 設計器內的“資料”視圖裡自動開啟。
在“資料表”窗格中選擇“data”。
在“資料”窗格中,單擊一個空行,並在“名稱”列中輸入 strMessage,在“值”列中輸入 Hello World。
無需指定字串的類型或 MIME 類型;它們用於對象。類型說明符保留所儲存對象的資料類型。如果對象由位元據組成,則 MIME 類型說明符保持所儲存的二進位資訊的基底類型 (base64)。
在[檔案] 功能表上,單擊“儲存 WinFormStrings.resx”。
再執行步驟 1-5 兩次以建立兩個分別名為 WinFormStrings.de-DE.resx 和 WinFormStrings.fr-FR.resx 的資源檔,並且這兩個檔案具有在下表中指定的字串資源。WinFormStrings.de-DE.resx 檔案將包含特定於在德國講的德語的資源。WinFormStrings.fr-FR.resx 檔案將包含特定於在法國講的法語的資源。
資源檔名 |
名稱 |
值 |
WinFormStrings.de-DE.resx |
strMessage |
Hallo Welt |
WinFormStrings.fr-FR.resx |
strMessage |
Bonjour le Monde |
訪問手動添加的資源
在“代碼編輯器”中,在代碼模組的開始處匯入 System.Resources
命名空間。
|
複製代碼 |
' Visual BasicImports System.Resources// C#using System.Resources;// Visual J#import System.Resources.*; |
在“設計”視圖中,雙擊該按鈕以顯示其 Click 事件處理常式的代碼並添加下面的代碼。ResourceManager 建構函式帶兩個參數。第一個參數是資源的根名稱,即不帶地區性和 .resx 尾碼的資源檔的名稱。第二個參數是主程式集。
在本演練中,不聲明任何命名空間,因此 ResourceManager 建構函式的第一個參數可以採用 ProjectName.ResourceFileRootName
的形式。但是,在實際的應用程式中,您應設定 DefaultNamespace 屬性。在該情況下,您將需要通過資源檔的完整根名稱(包括其命名空間)聲明資源管理員。例如,如果預設命名空間為 MyCompany.MyApplication.MyComponent
,則 ResourceManager 建構函式的第一個參數可以為 MyCompany.MyApplication.MyComponent.WinFormStrings
。
|
複製代碼 |
' Visual Basic' Declare a Resource Manager instance.Dim LocRM As New ResourceManager("WindowsApplication1.WinFormStrings", GetType(Form1).Assembly)' Assign the string for the "strMessage" key to a message box.MessageBox.Show(LocRM.GetString("strMessage"))// C#// Declare a Resource Manager instance.ResourceManager LocRM = new ResourceManager("WindowsApplication1.WinFormStrings",typeof(Form1).Assembly);// Assign the string for the "strMessage" key to a message box.MessageBox.Show(LocRM.GetString("strMessage"));// Visual J#// Declare a Resource Manager instance.ResourceManager LocRM = new ResourceManager("WindowsApplication1.WinFormStrings", System.Type. GetType("WindowsApplication1.Form1").get_Assembly());// Assign the string for the "strMessage" key to a message box.MessageBox.Show(LocRM.GetString("strMessage")); |
注意 |
預設情況下,ResourceManager 對象區分大小寫。如果希望執行不區分大小寫尋找(例如使“TXTWELCOME”與“txtWelcome”檢索相同的資源),則可以將資源管理員的 屬性設定為 true。但是,為了提高效能,最好始終為資源名稱指定正確的大小寫。如果執行不區分大小寫資源尋找,則可能會導致效能問題。 |
產生並運行表單。單擊按鈕。
訊息框將顯示適合於使用者介面地區性設定的字串;或者如果它不能找到該使用者介面地區性的資源,它將顯示來自後備資源的字串。
Reference from :
ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_mancli/html/9a96220d-a19b-4de0-9f48-01e5d82679e5.htm