你的位置:首页 > ASP.net教程

[ASP.net教程]globalization与全球化

本配置节是关于配置应用程序的全球化设置。

   

<globalization<!--以下两个特性默认编码为 UTF-8,该编码在 Machine.config 文件(在安装 .NET Framework 时创建)的 globalization 节中指定。 如果在 Machine.config 或 Web.config 文件中未指定响应编码,则编码默认为计算机的"区域选项"区域设置。在单服务器应用程序中,此特性和responseEncoding 特性应该相同。 对于不常见的情况(默认服务器编码不同的多服务器应用程序),可以使用本地 Web.config 文件改变请求和响应编码。--><!--指定每一传入请求的假定的编码,包括已传递的数据和查询字符串。如果请求附带包含一个 Accept-Charset 特性的请求标头,它将重写配置中的该特性。-->requestEncoding="any valid encoding string"<!--指定响应的内容编码。-->responseEncoding="any valid encoding string" fileEncoding="any valid encoding string"responseHeaderEncoding = "any valid encoding string" resourceProviderFactoryType = string  <!--目前不使用此特性-->enableClientBasedCulture="true|false"enableBestFitResponseEncoding = "true|false"  <!--以下两个特性的内容可参见System.Globalization.CultureInfo,通常情况下中国简体是"zh-ch", JA-JP EN-US 日语和英语 (美国)--><!--为处理传入的 Web 请求指定默认的区域性。此特性还可以设置为 auto。-->culture="any valid culture string"<!--为处理依赖于区域设置的资源搜索指定默认的区域性。此特性还可以设置为 auto。-->uiCulture="any valid culture string"/>

例如如下设置

<globalization requestEncoding="iso-8859-1"responseEncoding="iso-8859-1"/>

 

请求时出现中文(字符编码不对),则会出现乱码,同样响应的页面中的中文也会出现乱码,正常配置时如下图所示

设置了响应编码为iso-8859-1或其他诸如此类ASCII让中文显示乱码的编码,则会出现

其响应的内容均使用了iso-8859-1而使得中文不能正常显示。

假若使用了UNICODE作为响应编码,中文能正常显示,但是js有报错,jquery的脚本出现乱码。

   

   

另外在特性中有两个特性——uiCulture和resourceProviderFactoryType 是和资源相关的,即*.resx这部分的内容,实际上资源并不局限于*.resx,这个可以参考蒋金楠老师的博文。uiCulture是指定ui界面的区域语言。resourceProviderFactoryType则是指定自定义的资源提供者工厂类的完全限定名。例如

<globalization uiCulture="zh-CN" resourceProviderFactoryType="FastDoge.Bussiness.MyResourceProviderFactory, FastDoge.Bussiness"/>

 

这个类FastDoge.Bussiness.MyResourceProviderFactory继承抽象类ResourceProviderFactory。重写两个方法

public override IResourceProvider CreateGlobalResourceProvider(string classKey);public override IResourceProvider CreateLocalResourceProvider(string virtualPath);

 

两个方法区别在于前者是用的是全局资源的ResourceProvider,而后者是对于每个页面自带的资源的ResourceProvider。

构造的ResourceProvider实现IResourceProvider接口。实现方法

public object GetObject(string resourceKey, System.Globalization.CultureInfo culture)

 

和getter属性

public System.Resources.IResourceReader ResourceReader

 

   

GetObject方法是获取某个资源名的资源值;ResourceReader属性获取的IResourceReader获取整套资源集合的读取器。ResourceProvider的大致作用则是如此。

在代码中获取资源值时调用System.Web.HttpContext的静态方法GetGlobalResourceObject方法和GetLocalResourceObject

   

参考文章

.NET的资源并不限于.resx文件,你可以采用任意存储形式[上篇]

http://www.cnblogs.com/artech/archive/2010/12/16/Reource_framewok_01.html

.NET的资源并不限于.resx文件,你可以采用任意存储形式[下篇]

http://www.cnblogs.com/artech/archive/2010/12/17/Reource_framewok_02.html

如何让ASP.NET默认的资源编程方式支持非.ResX资源存储

http://www.cnblogs.com/artech/archive/2010/12/30/ResourceProvider.html