.NET全球化实践指南

在当今的软件开发业务模式中,设计和实际实现往往分布在两个不同的国家,这导致了文化差异。例如,日本表达日期和字符的方式与阿联酋或澳大利亚不同。西班牙的数据库与美国的数据库在货币信息的存储上也有所不同。开发者必须能够实现一个外国设计,以满足海外的预期结果。

.NET框架为提供了处理全球化问题的对象。还有多种方法可以比较和排序不同的文化格式。将公历日期转换为回历日期只需一个调用。

文化和地区设置

.NET框架中有两种设置文化的方法。这两个属性都属于System.Threading命名空间。它们是Thread.CurrentThread.CurrentCulture和Thread.CurrentThread.CurrentUICulture。CurrentCulture属性用于计算特定文化格式的变量值。CurrentUICulture属性决定了值的实际显示格式。

要设置这些属性,需要创建一个CultureInfo对象的实例。

using System.Globalization; CultureInfo ci = new CultureInfo("en-US");

字符串“en-US”告诉.NET运行时,中性文化是英语,地区是美国。CultureInfo实例有许多只读属性,开发者用这些属性来确定特定的文化设置。

自定义文化

可以通过创建CultureAndRegionInfoBuilder属性的实例来创建自定义文化。应该调用这个对象实例的Register()方法来将文化保存到注册表。下面的例子展示了如何从现有文化创建新文化:

CultureAndRegionInfoBuilder cb = new CultureAndRegionInfoBuilder("fr-AB", CultureAndRegionModifiers.None); cb.LoadDataFromCultureInfo(new CultureInfo("fr-FR")); cb.LoadDataFromRegionInfo(new RegionInfo("FR"));

这创建了一个新的文化“fr-AB”,复制了法国的法国文化设置。要注册新文化,必须以管理员权限执行程序集。

排序和比较字符串

字符串排序是文化之间的关键差异。字符在排序顺序中被不同地对待,文化通常支持多种排序顺序。例如,德国的德国文化有两种排序顺序;一种是字典排序顺序,另一种是电话簿排序顺序。匈牙利有默认和技术支持排序顺序,格鲁吉亚有传统和现代排序顺序!设计应该在批准之前指定排序顺序要求。

要使用替代排序顺序,需要使用十六进制的地区标识符(LCID)创建CultureInfo类的实例。匈牙利技术支持排序的LCID是0x0001040e。因此,CultureInfo实例被创建为:

CultureInfo ci = new CultureInfo(0x0001040e);

然后,将实例化的对象分配给CurrentCulture属性。.NET中的排序方法(例如,在集合对象中)然后可以使用。数据将按照CultureInfo.LCID属性的LCID格式进行排序。

比较两种文化

要比较两种文化之间的值,必须确保任何比较都是在其中一种或另一种文化中进行的。还可以在不变文化中执行比较。要执行文化不变的比较,将CurrentCulture属性设置为CultureInfo.InvariantCulture。

有一组随机字符串,希望对其进行排序。文本文件在挪威。字符串是:

ädgd asdj udfjt xhr üsdg

在挪威文化(“nn-NO”)中排序的字符串是:

asdj udfjt xhr üsdg ädgd

ü和ä字符的位置在z字符之后。文化不变的字符串是:

ädgd asdj udfjt üsdg xhr

当排序结果与其他文化进行比较时,例如与捷克、法国、丹麦、西班牙或英语比较时,应该使用文化不变的排序。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485