.NET应用程序的资源开发(二)

在上一章.NET应用程序资源开发(一)关于.NET应用程序资源开发的基本概念介绍完了,也该实际演练一下了,接下来就用一个WinForm例子来看一下在.NET中实现资源开发都有哪些技术。

我们首先建立一个项目,打开你的VS.NET 2005,建立一个新的C# Windows 应用程序。

Step 1-窗体的Language和Localizable属性

我们要为该窗体的资源建立多语言的版本,注意在窗体的属性中,最后两个分别是Language和Localizable:



如果你的应用程序中的窗体要实现本地化,Localizable属性就必须设成true,而通过Language属性则可以为窗体资源添加不同的区域性,你可以看到,现在Language属性的默认值为(Default),这是什么意思呢?记得前面说过,每个主程序集可以有个默认区域性,Language属性现在的默认值就指明了当前建立的窗体资源就是默认区域性的资源。

Step 2-动态加载资源

首先,我们为项目添加本地化的消息文本资源,在解决方案资源管理器中,鼠标右键点击项目,添加一个程序集资源文件,命名为MultiLanguage.resx,此资源文件不输入任何信息,保存该文件。同样分别建立MultiLanguage.en-US.resx、MultiLanguage.zh-CN.resx和MultiLanguage.zh-TW.resx三个文件,分别在此三个文件中Name值输入"Form1_Text"和Value值分别输入"Globalization Test"、"多语言测试"、"多語言測試",这样就为区域性en-US、zh-CN和zh-TW做好了消息资源,现在项目里的文件看上去应该象下面这样:



Step 3-改变线程的UI语言

回到项目中,先在Form1.cs中添加以下名字空间的引用:

程序代码 程序代码

using System.Globalization;
using System.Threading;
using System.Resources;
using System.Reflection;



然后在Form1类的构造方法的第一行位置添加下面的代码:

程序代码 程序代码

Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-TW");
ResourceManager rm =new ResourceManager("projectNameSpace.MultiLanguage",Assembly.GetAssembly(typeof(Form1)));
this.Text = rm.GetString("Form1_Text"); //多语言测试



编译运行,怎么样,Form1的Text中文繁体的界面出来了吧。

其实上面代码的作用就是把当前线程的UI语言设置成了区域性zh-TW(中文繁体),然后,后面的代码都将工作在这个区域性之中,你可以把当前线程的UI语言设置成任何你想要的区域性,前提是你为窗体建立了该区域性的资源。

代码先建立了一个ResourceManager的实例,它要求在初始化时提供一个根名参数和一个Assembly参数,表明它是使用给定的Assembly从指定的根名导出的。然后使用该ResourceManager的实例从当前区域性资源附属程序集中提取名称(Name)的文本资源,最后在消息框中显示该文本。

编译运行项目,点击窗体上的按钮,消息框里会显示出我们添加的消息文本,你还可以把当前线程的UI语言设置成zh-CHT再试试,会发现,消息文本根据当前区域性的不同而不同。当然你还可以往项目里添加其它区域性的资源,只要资源文件的名称符合下面的格式:
       <BaseName>.<Language-Country/Region>.resx

然后记住把当前线程的UI语言设置成你想要的区域性。程序集资源文件里还可以包含图像、图标等其它类型的资源。

posted @ 2008-10-23 10:53  Landy_di  阅读(167)  评论(0编辑  收藏  举报