您的位置:首页 > 其它

[原创].NET应用程序的资源开发 Part 2-实战演练

2006-01-19 11:25 357 查看
本篇主题是续上篇.NET应用程序的资源开发 Part 1-基本概念的。
关于.NET应用程序资源开发的基本概念介绍完了,也该实际演练一下了,接下来就用一个简单的WinForm例子来看一下在.NET中实现资源开发都有哪些技术,项目代码可以在这里下载/Files/tonybain/Globalization.zip

我们首先建立一个项目,打开你的VS.NET,建立一个新的名称为“Globalization”的C# Windows 应用程序,然后在窗体Form1中添加一个Button控件。

Step 1[/b]-窗体的Language[/b]和Localizable[/b]属性[/b]

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

using System.Globalization;
using System.Threading;

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

Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CHT");
编译运行,怎么样,中文繁体的界面出来了吧。其实上面代码的作用就是把当前线程的UI语言设置成了区域性zh-CHT(中文繁体),然后,后面的代码都将工作在这个区域性之中,你可以把当前线程的UI语言设置成任何你想要的区域性,前提是你为窗体建立了该区域性的资源。
你也许会问,那要是设置了一个不存在资源的区域性会发生什么事?我门可以做个小实验,我们把当前线程的UI语言设置成法语-法国:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
你可能已经看到了,这次出来的是英语的界面,原因很简单,按照运行库定位资源的顺序,它找不到指定区域性的资源,就会使用默认区域性,而我们在前面已经把窗体默认区域性资源做成了英语的。这就又给我们一个启发:默认区域性可以(也应该)作为应用程序的后备区域性来使用,它是在用户的区域性不可预见的情况下,为用户提供的一个缺省区域性。顺便再提一句,如果不是在VS.NET中,你也可以使用.NET Framework提供的Winres.exe工具来本地化窗体,具体的使用方法可以参考MSDN。
好了,休息一下,后面还有更有趣的内容等着你呢。

Step 3[/b]-动态加载资源[/b][/b]

前面所说的,都是资源已经在程序编译之前就已经存在的情况,如果要在程序运行过程中动态地加载资源,比如要在一个弹出的消息框里显示本地化的消息,那又该如何做呢?
首先,我们为项目添加本地化的消息文本资源,在解决方案资源管理器中,鼠标右键点击项目Globalization,添加一个程序集资源文件,命名为String.resx.,然后在里面增加一条资源,资源的Name为“Message”,Value为“Hello,this is a globalization application.”,保存该文件。接下来在项目里复制该文件两次,并把它们的文件名分别改成String.zh-CHS.resx和String.zh-CHT.resx,最后要做的就是分别把前面这两个文件中Name为“Message”的资源的Value值改成“你好,这是一个国际化应用程序。”和“你好,這是一個國際化應用程式。”,这样就为区域性zh-CHS和zh-CHT也做好了消息文本资源,现在项目里的文件看上去应该象下面这样:

using System.Resources;
using System.Reflection;
还要为Button1添加Click事件处理代码:

private void button1_Click(object sender, System.EventArgs e) {

ResourceManager rm =new ResourceManager("Globalization.String",Assembly.GetAssembly(typeof(Form1)));
string msg = rm.GetString("Message");
MessageBox.Show(msg);
}
上面的代码先建立了一个ResourceManager的实例,它要求在初始化时提供一个根名参数和一个Assembly参数,表明它是使用给定的Assembly从指定的根名导出的。然后使用该ResourceManager的实例从当前区域性资源附属程序集中提取名称为“Message”的文本资源,最后在消息框中显示该文本。
编译运行项目,点击窗体上的按钮,消息框里会显示出我们添加的消息文本,你还可以把当前线程的UI语言设置成zh-CHT再试试,会发现,消息文本根据当前区域性的不同而不同。当然你还可以往项目里添加其它区域性的资源,只要资源文件的名称符合下面的格式:
<BaseName>.<Language-Country/Region>.resx

然后记住把当前线程的UI语言设置成你想要的区域性。程序集资源文件里还可以包含图像、图标等其它类型的资源,对于它,同样有个Framework工具可以使用,那就是Reseditor.exe程序,用它可以方便地编辑程序集资源文件。

好了,基本的资源开发技术也介绍完了,本主题也要告一段落了,祝你好运!

参考文档:
1、Microsoft MSDN
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: