在开发能具备多个国家用户访问的应用程序时,需要用到.NET的全球化和本地化。全球化就是指我们的应用程序非特定区域性和非特定语言的,也就是不单一的依赖一个国家或者地区的语言时间格式等区域性信息。在进行全球化的过程中,通常的做法是将和区域性相关的信息放在资源文件里面。本地化
Culture类:此类保存区域性特定的信息,如关联的语言、子语言、国家/地区、日历和区域性约定。Thread.CurrentThread.CurrentUICulture就是一个CultureInfo类,.NET资源管理器主要是根据这个属性来获取相应的资源文件,我们可以这样设置这个属性Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN"),当这样进行设置时和区域性信息相关的类将自动受影响,比如:CompareInfo, StringInfo, Calendar。通常是通过区域性信息来new一个CultureInfo类。
资源文件:前面提到过在进行全球化的过程中是将和区域性相关的信息放在资源文件里面,如页面上要标识的语言。
例如,您可以创建下列文件:
-
WebResources.resx
这是默认(回退)资源文件。
-
WebResources.es.resx
西班牙语的资源文件。
-
WebResources.es-mx.resx
专用于西班牙语(墨西哥)的资源文件。
-
WebResources.de.resx
德语的资源文件。
在本例中,默认资源文件是 WebResource.resx。
也可以创建本地资源文件,这些文件存储单个 ASP.NET 网页(.aspx 文件)的资源。
全局资源文件
此外,ASP.NET 还会生成一个强类型对象,从而提供了一种以编程方式访问全局资源的简便方法。
本地资源文件
通过使用资源文件的名称,可以将一组资源文件与特定的网页关联起来。
例如,如果在 App_LocalResources 文件夹中有一个名为 Default.aspx 的页,则可以创建下列文件:
-
这是未找到语言匹配项时的默认本地资源文件(回退资源文件)。
-
这是西班牙语的资源文件,其中不包含区域性信息。
-
这是专用于西班牙语(墨西哥)的资源文件。
-
这是法语的资源文件,其中不包含区域性信息。
文件的基名称与页文件名相同,后跟语言和区域性名称,最后以扩展名 .resx 结尾。
在全局和本地资源文件之间选择
全局资源文件中的资源还是强类型的,用于以编程方式访问。
此外,如果多个开发人员要处理不同的页但在同一个资源文件中工作时,全局资源文件也会更难于管理。
对于包含大量文件夹和使用多种语言的网站,本地资源可使应用程序域中的程序集数目迅速攀升。
添加附属资源文件时,将不会导致重新编译资源,但会重新启动 ASP.NET 应用程序。
Resource相关类:
前面提到过,运行时会根据当前线程的CurrentUICulture来加载合适的资源文件,ResourceManager类就是用来完成这个功能的。通过 ResourceManager 的方法,调用方可使用 GetObject 和 GetString 两种方法访问特定区域性的资源。默认情况下,这些方法返回某区域性的资源,该区域性由执行调用的线程的当前区域性设置决定。
相关链接:http://msdn.microsoft.com/zh-cn/library/kx54z3k7(v=VS.80).aspx (CultureInfo的区域性信息)
http://msdn.microsoft.com/zh-cn/library/c6zyy3s9.aspx (asp.net全球化和本地化)
http://msdn.microsoft.com/zh-cn/library/f45fce5x(v=VS.80).aspx (应用程序中的资源)
http://www.codeproject.com/KB/aspnet/localization_websites.aspx (Createing Multilngual Website)