ASP.NET设计国际电子商务项目中的本地化支持

    在之前的文章中,我已经讨论过如何进行多语言的处理,但是最近发现,本地化支持中,多语言也只能算做其中一部分,还有其它一些同样重要的内容需要考虑,比如日期格式和数字格式。其实这部分都是出现在表现层的,不影响数据库里的存储,也不影响实际业务的操作,但是如果处理不当,却会引起非常大的麻烦,比如日期格式,中国和印尼的样式就是不一样的,“月”和“日”所处的位置不一样,如果只按中国的格式来发布,会在当地造成误解,甚至误操作;对于数字格式,更是需要注意,在中国,用“.”表示小数点儿,而“,”表示千分符,这个表示方法,在印尼正是反着的,所以这个有可能会造成更大的误会,在电子商务中,大部分内容都是在和时间和金钱打交道,所以很有必要提前考虑这些事情。
    在本地化支持中的多语言部分,在本文不再讨论,只来说明一下上述的显示格式问题。在本地化支持中,有一个很重要的类就是Culture,通过对这个类的使用,可以控制上述日期及数字的格式。在页面中,需要处理的控件有多种多样,比如Label,GridView等,在格式处理方面,与多语言部分不同,不能把控件中的内容取出来后再做处理,因为反取出来的时候,已经全部变成了字符串型,不能正常的还原为原来的格式,为此,需要在其它地方处理。
    上面说了半天,那么如何知道要按哪种环境来处理呢?有些网站的做法是根据当前IE来判断当前的环境,但是这种做法有时会带来不方便,所以我的做法是把系统支持的语言全部列出来,供用户选择。
    在系统中,语言表存储以下几个主要字段:
         LANG_CODE
    语言代码
         LANG_NAME
    语言名称
         CULTURE
    该语言所对应的本地化信息,比如:
    LANG_CODE=CN LANG_NAME=中国 CULTURE=zh-CN
     在使用的时候,先要修改的页面就是登录页面,在登录页面上,需要增加一个语言列表的下拉框,这个下拉框中的内容来源于以上的语言表,当登录成功后,需要把该语言所对应的culture同时记录在Session中,如下例:
    Session["CULTURE"] = culture值;
    当Session中有值后,其它页面就可以直接引用这个值了。下面就来看一下如何使用这个值。在我得到正确的解决方案之前,我试验了很多的方式来实现这个本地化功能,最后发现,原来走的很多都是弯路,只需要几句简单的处理就可以搞定一切,我们要做的就是在指定的页面做一个重载,代码如下:
protected override void InitializeCulture()
{
string s = Request["CULTURE"];
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(s);
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(s);
base.InitializeCulture();
}
    经过上面的重载,该页面上所有的输出,都会自动转换成指定的本地化格式了,甚至包括GridView,不用做任何处理,就可以了。
    总之一句话,有简单的方式一定要用,不要绕不必要的弯路。
posted on 2010-04-06 13:28  Aicken(李鸣)  阅读(1001)  评论(1编辑  收藏  举报