在当今的软件开发业务模式中,设计和实际实现往往分布在两个不同的国家,这导致了文化差异。例如,日本表达日期和字符的方式与阿联酋或澳大利亚不同。西班牙的数据库与美国的数据库在货币信息的存储上也有所不同。开发者必须能够实现一个外国设计,以满足海外的预期结果。
.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
当排序结果与其他文化进行比较时,例如与捷克、法国、丹麦、西班牙或英语比较时,应该使用文化不变的排序。