Windows 窗体编程 演练:本地化 Windows 窗体 (本地化经典例子)
2006-09-07 21:44
302 查看
Windows 窗体编程 |
演练:本地化 Windows 窗体 |
使项目系统为可本地化的用户界面元素(如窗体上的文本和图像)生成资源文件。然后将该资源文件生成到附属程序集中。
添加一个资源文件模板然后使用 XML 设计器编辑该模板。采取后一种方法的原因之一是为了生成在对话框和错误信息中出现的可本地化字符串。然后,必须编写代码以访问这些资源。
本演练主题在一个 Windows 应用程序项目中演示这两种过程。
还可以将文本文件转换为资源文件;有关更多信息,请参见文本文件格式中的资源和资源文件生成器 (Resgen.exe)。
使 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),则可以在控制面板中更改用户界面语言。有关更多信息,请参阅 Windows Server 2003, Windows XP & Windows 2000 MUI 站点。如果未安装 MUI,则可以用编程方式更改当前的 UI 区域性,如下所述。 |
设置用户界面区域性以查看特定资源
在“代码编辑器”中,在模块开始处将下面的代码添加到 Form1 声明之前:复制代码 | |
---|---|
' Visual Basic Imports System.Globalization Imports System.Threading // C# using System.Globalization; using System.Threading; // Visual J# import System.Globalization.*; import System.Threading.*; |
复制代码 | |
---|---|
' 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 Basic Imports System.Resources // C# using System.Resources; // Visual J# import System.Resources.*; |
在本演练中,不声明任何命名空间,因此 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”检索相同的资源),则可以将资源管理器的 IgnoreCase 属性设置为 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
相关文章推荐
- Windows 窗体编程 如何:使用后台线程搜索文件 (线程经典例子)
- 经典windows编程-----printf
- Windows下C语言的Socket编程例子(TCP和UDP)
- C#实例:5个.net经典例子(窗体与界面设计)
- C#编程人员需要熟知的windows窗体上的控件
- Windows 编程[1] - 窗体生成的过程一
- C++中关于windows窗体的编程
- windows编程几个小例子(三)
- Windows 编程[2] - 学习窗体生成的过程二
- Windows 编程[5] - 学习窗体生成的过程五
- 演练:使用 Visual C# 从 Windows 窗体控件继承
- map集合最经典的编程例子(包含重写equals和hashcode,toSting)
- Windows下C语言的Socket编程例子(TCP和UDP)
- 经典编程书籍(C++, 网络, Windows, Linux)
- Windows 中不规则窗体的编程实现
- [C++] Windows下的socket编程(这是一个简单的TCP/IP例子)
- C#实例:5个.net经典例子(窗体与界面设计)
- Windows 中不规则窗体的编程实现
- Windows窗体编程基础学习:文件读写
- Windows窗体编程基础学习:更改TabControl 的外观(如qq用的)