互联网的无国界性,使得任何有国际化运作目标的webapplication(网站也属于webapplication的范畴)都必须要关注多国语言的版本处理问题。这个问题必须在架构初期就应该考虑的到。但具体如何入手,目前一些成熟的开源项目已经给我们提供了一个很好的参考,CS是其中一个很好的例子。

一般情况下,需要进行多国语言处理的,主要有几个方面:程序中的页面提示和操作描述文字、出错信息、出错后跳转的解释页面、帮助页面、页面中的任何导航信息等。可以把这些通称为文字资源,鉴于.net对xml的强大支持,可以考虑将上述的一些操作提示和出错信息使用xml结构文件存储,而解释页面帮助页面则分别制作成html页面,放到单独的文件夹中。这样就构成了一个语言包,那么,同理可以制作其他语言的语言包,分别以语言的名字来命名。

有了资源,那么只要再构造成一个资源管理器即可实现对不同资源内容的读取,这个ResourceManager仅仅是对xml文件的读取,可以参照asp.net 的configuration来做。我们来看看cs的resource.xml结构

<?xml version="1.0" encoding="UTF-8" ?> <root> <!-- Main Navigation --> <resource name="weblogs">博客</resource> <resource name="forums">论坛</resource> <resource name="photos">相册</resource> <resource name="admin">管理</resource> <!--....--> </root>

可以看到这个结构很简洁,同样它把出错信息仿照windows的errorcode做在另外一个message.xml文件里,格式如下

<?xml version="1.0" encoding="UTF-8" ?> <root> <message id="1"> <title>无权限登录</title> <body>您不是超级管理员.</body> </message>

而resourcemanager类实现就是用来方便的管理这些结构化的信息,中间的具体实现就不详细介绍了,无非就是读取一下XML信息返回字符串型值,那么封装后的类,我们可以在需要显示提示信息的时候很方便的来调用这些静态的方法

throw new Exception(ResourceManager.GetString("exception_norssurl","zh-CN"));

现在要考虑的一点是:是根据用户的浏览器来动态切换语言,还是已知用户的使用环境在web.config里配置使用的语言包。其实,这两种做法可以综合在一起,在asp.net的web.config里面配置默认的语言包,然后再根据用户的机器信息来判断使用何种语言。

那么,怎么实现动态切换呢?可以再提供一个language.xml,将所有的语言包所在的文件夹名称配置进来,然后通过程序读取这个配置,就能动态的找到所需的语言包地址,然后再在指定的语言包里读取指定的信息。在看一下这个languages.xml的结构:

<?xml version="1.0" encoding="UTF-8" ?> <root> <!-- Specify enabled languages here --> <language name="U.S. English" key="en-US" /> <language name="简体中文" key="zh-CN" /> <language name="繁體中文" key="zh-TW" /> <language name="Danish" key="da-DK" /> <language name="Hellenic" key="el-GR" /> </root>
至此,整个webapplication即可实现很方便的多国语言切换了。呵呵,现在看来是不是很简单,当然,多国语言的实现还有其他的方法,比如直接建立资源文件,然后利用.net类库中读取资源的方法来实现,反正方法都是大同小异,不过cs这种多国语言处理模式可以直接把现有的代码和xml结构等直接拿过来用到其他任何webapplication上,几乎是百分之百重用 。
posted on 2005-08-19 21:18  Shake. Wang's blog  阅读(536)  评论(0编辑  收藏  举报