分享
 
 
 

用.NET的System.Globalization来创建多语言应用程序

王朝c#·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

如果你计划在你的应用程序中包括对使用各种语言的用户的支持,那么开发它的代价不会比开发只支持英语的版本要高很多。但是如果你需要翻新一个已有应用程序,那么其代价和重新开发它差不了多少。

.NET框架在它的System.Globalization名字空间中提供了对全球化(globalization,指得是支持多种语言)的支持,这样你就可以在你的应用程序中实现多语种支持了。这个名字空间包括了若干类,用来处理许多重要的全球化问题,如文明识别字符串比较、日期和时间格式、数字格式和支持阳历和其它历法的日历。你首先需要知道的一个关键的类就是CultureInfo类。(译者注:这里的文明即culture,主要指得是语种,也包括记录时间日期的习惯等等)

使用CultureInfo类

CultureInfo类提供了文明参数选择的支持以及可以在每个线程(per-thread)基础上的控制。CurrentCulture合适的处数据和数字格式、字符串比较和大小写。CurrentUICulture属性由开发者来设置,CLR用它来为用户界面装载适当的资源。你可以用CultureInfo类来为当前线程设置CurrentCulture和CurrentUICulture,如下所示:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("ja")

Thread.CurrentThread.CurrentCulture = new CultureInfo("ja-JP")

还有一些API函数可以用CultureInfo类来控制输出:

Str = DateTime.Now.ToString(cultureInfo);

所有与文明有关的(culture-aware)类都是默认为文明敏感的(culture-sensitive),因此你只要简单的设置当前线程的文明就可以自动给System.Globalization名字空间中的类(如CompareInfo、StringInfo和Calendar)以及核心系统类(如Resources、DataTime和String)提供针对特定文明的支持。

为了可以支持更多的文明种数,你还需要在你的应用程序中全部使用符合统一字符编码标准的字符串(Unicode string)。尽管.NET框架提供了对Unicode字符串的完全支持,不过你仍需要在编写代码的时候意识到所有的字符串都写成Unicode格式。而且你还需要清楚许多依靠操作系统的操作(包括对文件系统的访问和某些控制)并不支持Unicode格式的字符串,因此你还必须在执行这些操作之前进行显式格式转换。

规划本地化

全球化将某些关键的数据以我们熟悉的国际通用(international)格式保存,但是如果你希望让你的用户得到专门为他们的文明而开发的应用程序,你就需要本地化你的应用程序。本地化包括了为特定文明创建特定资源然后再写你的应用程序,这样它针对程序所设定或者检测出来的某种文明而装载合适的资源。让我们详细看看资源模型。

资源模型

.NET框架的资源模型包括了对任何可串行化对象(serializable object)的支持,它还可以扩展以支持新的格式。这就意味着除了提示符、标签以及其它用户界面元素上的针对特定文明的字符串之外,你还可以把声音、图像和其它二进制数据当作资源使用。ASP.NET(包括.NET Compact Framwork,它在设备的运行时间和内存的大小上有限制)和Windows Form支持该资源模型。

为了本地化应用程序,你需要识别特定文明资源(你需要用它们来展开程序),然后把它们放置到一个资源文件中。简单的应用程序只需要字符串资源(字符串中保存“名字――值”对),你可以创建特定文明的文本文件。尽管自己演示一番很有趣,但你应该用微软ResX格式来创建资源文件。Visual Studio中有一个工具支持创建.resx文件(它包括了用XML格式对资源的描述)和.resources文件(它包括了二进制已编译文件)。你即可以把这些文件随同你的程序一同发布,也可以把它们编译到一个附属汇编(satellite assembly)中去。

在命名和保存你的资源文件时,你应该保持一致性。微软建议在命名.resources文件时,文件名应该嵌入文明名(例如,..resources),一个资源文件对应于你支持的一种文明。附属资源汇编应该以项目名称命名(如,.resources.dll),然后把它们放到不同的子目录下(每个子目录对应一种文明)。

在运行时使用资源文件

一旦创立了资源文件,你就可以用资源管理器(resource manager)来在运行时载入字符串和对象。资源即可以根据CurrentThread中的CurrentUICulture设置来载入(例如:RM.GetObject("Button1.Cursor")),你也可以在载入某个资源时指明文明(例如:RM.GetString("mystring", new CultureInfo("en-NZ"))。

ASP.NET、.NET Compact Framework以及Windows Forms应用程序中都有资源管理器。而且Windows Forms引擎提供了额外的本地化支持。每个form都有一个可以设置的本地化属性。当设置为“真”时,项目系统会自动跟踪form的不同语言版本并把不同语言的form编译到附属汇编中去。

只要你在你的原设计中考虑到本地化,那么建立international应用程序并不建立支持单一文明的应用程序难很多。在建议一个假定只支持英语用户界面的应用程序之前,.NET体系应该询问针对其它文明所期望提供支持的特定问题。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有