您的位置:首页 > 编程语言 > C#

使用C# 完美实现多语言版本Windows应用程序

2008-03-22 03:37 441 查看
Visual Studio 对于.NET 程序的本地化提供了完整的支持,这里仅介绍实现多语言版本本地化程序的简单步骤.
注意黑体处为关键点.
一. 窗体本地化
对于Windows 窗体,你需要做的第一步是确定你的默认界面语言,默认语言是指当执行程序无法找到已定义的本地化资源时,默认使用的语言,由于.net使用utf-8作为默认编码,一般情况下在任何语言的系统上都能正常显示.
本地化窗体一个关键的步骤是将窗体的本地化属性(Localizable)设置为True,此时窗体代码中自动生成的代码部分的字符串(Text属性)将由原来的"this.Text = Form1"变为resources.ApplyResources(this, "$this")",并且窗体文件名下面会多出一个资源文件"Form1.resx",双击该资源文件可以看到字符串已经生成为资源了
像往常一样在窗体上加入你需要的控件,并设置好属性,控件的Text属性同样会自动生成为资源(双击Form1.resx看看吧~),简单吧,我们来看下一步,本地化窗体.
下面我们来添加英语环境下的窗体.在窗体属性窗口中找到Language属性(挨着Localizable),选择"英语(美国)",现在我们把窗体上的各个字符串翻译成英文,并修改窗体的默认字体为Arial,字号8,完成后你会看到窗体文件名下面多出一个Form1.en-US.resx,这里用来保存已本地化为英文的资源.编译程序,拷贝到英文系统下执行程序看看,效果怎么样?(什么?你没有英文环境?好吧,后面会提供解决办法)
现在你已经成功的实现了中文简体与英文美国的完美支持,如果需要其他语种的支持,选择Language属性列表中相应的语种重复上述步骤即可.需要注意的是.net使用的是unicode编码,需要用unicode编码其他语种后输入到界面上,否则特别像繁体字容易出现乱码.
需要注意的情况:如果需要在窗体上添加删除控件,必须把窗体语言属性(Language)修改为默认后才可以进行修改.
下面我们来看一下资源文件如何处理

二. 资源本地化
在工程名称上点击右键,选择添加新项目,生成Resource1.resx文件,双击打开该文件,默认为字符串资源编辑器,在这里你可以定义字符串资源,在字符串值中输入"Hello World"(不包含双引号),现在就可以在代码中直接用Resource1.String1来引用了,注意这里的资源也是同窗体一样,是默认语言下的资源,在解释如何添加其他语言前,我们先介绍一下.net解析资源的步骤
.net 资源文件名(这里是Resource1.resx)由根名称(即Resource1),本地语言名称(默认情况下还没有)及扩展名组成,在读取资源时,资源管理器会根据当前环境决定需要的本地语言名称,例如英语,然后试图以全名读取资源,美国英语的本地名称为en-US(更多语言名称可以从MSDN中查询CultureInfo信息得到),那么资源全名为Resource1.en-US.resx,如果存在该文件,则载入该文件作为资源文件,如果没有则使用默认值Resource1.resx,确定好资源文件后开始查找指定的资源(例如"String1"),如果在本地资源文件中没有找到,则向上查找上一级的本地资源文件,最终找到根名称Resource1为止.更多信息参考文章最后所附连接.
现在我们来添加美国英语资源,使用项目菜单添加新项,添加一个新的资源文件,命名为Resource1.en-US.resx,双击打开,把Resource1.resx中的资源翻译成英语填入其中,在代码中添加一个窗体载入事件,在事件处理代码中添加一行MessageBox.Show(Resource1.String1);编译运行程序,观察在中文简体系统和英文系统下的显示内容.
不停的在不同语言系统环境下切换很麻烦,下面提供可以在一台电脑上测试不同语种的解决方案.
三. 切换显示语言
C# 窗体程序使用CultureInfo来管理当前语言,这里CultureInfo分为两种,一种决定语言格式,一种决定语言资源(这里我们仅需要后者),只需简单的设置如下两个变量即可改变程序显示语言:
System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentUICulture;
在窗体初始化之前,我们设置
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
即可把程序执行语言切换为美国英语,编译程序试试看吧
四. 示例代码
为更好的理解多语言版本的制作方式,本文章附源代码,请到本人空间资源区下载(注:需要vs.net2008编译)

资源本地化参考文章:

http://msdn2.microsoft.com/zh-cn/library/y99d1cd3(VS.80).aspx

居然diybl网站曾经转载了我的文章啦,真是感谢如来,感谢孙悟空,感谢唐僧...,终于找回来了
文章出处:http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/2008324/106258.html

另外,再次抗议csdn丢失我的文章内容的行为!!!

顺便bs有人转我文章不加注出处的行为!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: