(2). 比如当前CurrentUICulture对应的区域性是en,因为en是非特定区域性的,那么首先找其默认关联的特定区域性en-US的资源文件MyResource.en-US.resx是否存在,如存在则从中取值;如不存在,则看MyResource.en.resx是否存在。
(3). 比如当前CurrentUICulture对应的区域性是en-GB,那么首先找资源文件MyResource.en-GB.resx,如不存在,则看MyResource.en.resx是否存在,如存在则从中取值;如也不存在,则看en关联的默认特定区域性en-US的资源文件MyResource.en-US.resx是否存在,如果此时MyResource.en-US.resx不存在,但是MyResource.en-CA.resx存在,则程序依然会抛出找不到合适资源文件的异常。
因此我们可以总结一下,当前线程CurrentUICulture对应的是特定区域性时,资源管理器优先查找此特定区域性对应的资源文件,如果没找到,则去找其非特定区域性的资源文件,如果还没找到,再去找其非特定区域性关联的默认区域性的资源文件。当前线程CurrentUICulture对应的是非特定区域性时,资源管理器优先查找此非特定区域性对应的默认特定区域性的资源文件是否存在,如果不存在,则去看此非特定区域性对应的资源文件是否存在,如果也不存在则抛出异常。
4.如何处理未提供本地化支持的区域性?
如果站点没有提供相应的资源文件支持用户默认的区域性,那么必须将其当前线程的CurrentUICulture转化为你站点默认的区域性,比如en-US或zh-CN。转化的时机有两个:
一是当你在获得Request.UserLanguages[0]时,用其与配置文件中预先设定的被支持的区域性进行比较,如果确认其为不被支持的,那么立刻设置CurrentUICulture为默认区域性。
二是在使用ResourceManager的GetString方法进行取值的时候,使用try catch结构,捕获MissingManifestResourceException异常,在异常处理中,首先将CurrentUICulture设为默认区域性,之后再重新使用GetString取值。
5. 通过Web.config设定站点默认的culture和uiCulture
<globalization requestEncoding="utf-8" responseEncoding="utf-8" uiCulture="zh-CN" culture="en-US"/>
如上所示:规定站点的默认culture为en-US(此处必须为特定区域性),uiCulture为zh-CN。
当然你也可以在每个页面的Page标签中进行逐页设定:<@Page Culture=“zh-CN” UICulture=“en”>。这里就不管web.config是如何设置的,页面会按照Page标签的设定进行显示。
三.在Asp.net2.0 中实现资源本地化
Asp.net2.0中为资源本地化提供了更加多样的实现方法。我这里着重谈其与Asp.net1.1中的不同之处。
1.通过Web.config设定站点默认的culture和uiCulture
在Asp.net1.1中使用web.config文件进行站点区域性设定的方法已经讲过了,而在Asp.net2.0中其更加灵活。通常,您会想要站点中的所有页面都符合相同的区域性设置。只需按如下所示在web.config中,为globalization元素的UICulture 和 Culture(区域性)属性分配一个站点范围的“auto”值, 注意这个“auto”值在Asp.net1.1中是不被接受的。<globalization uiCulture="auto" culture="auto" /> auto的意义在于ASP.NET 通过检查浏览器发送的 HTTP 标题获取到的用户首选区域性设置,并使用这个区域性设置站点的默认区域性,即当前线程的CurrentUICulture和CurrentCulture属性。
除了自动设置以外,您还可以为 Asp.net 指定一个站点的默认区域性: <globalization uiCulture="auto:zh-CN" culture="auto:zh-CN" /> 注意:只有当ASP.NET无法找到 HTTP 标题来确定用户的首选区域性,比如浏览器的“属性”->“语言”中没有任何区域性设置完全是空的时候,auto后面设定的默认区域性才会生效。
在web.config中进行了globalization配置之后,你的应用程序不需要写任何代码,线程的CurrentUICulture和CurrentCulture就会按照在globalization元素中设置的uiCulture和culture属性值获得区域性设置。如果没有进行globalization配置,则线程的CurrentUICulture和CurrentCulture就会默认为en-US。
2.使用Web.config文件跟踪用户的区域性选择
在Asp.net1.1中,那些提供了区域性选择的站点,一般使用会话来记录用户的选择,以便在用户每次对站点发出请求时,都按照用户选择的区域性对显示内容进行本地化。在Asp.net2.0中提供了另一个方法,那就是使用web.config文件来跟踪用户的区域性选择。
您可以在web.config文件中添加一个名为 LanguagePreference 的基于字符串的配置文件属性来支持匿名识别用户区域性的功能。请注意anonymousIdentification元素的enabled属性必须为“true”,否则匿名识别功能就不可用。
<anonymousIdentification enabled="true"/>
<profile>
<properties>
<add name="LanguagePreference" type="string" defaultValue="auto" allowAnonymous="true" />
</properties>
</profile>
下面我将阐述在Asp.net2.0中如何针对LanguagePreference属性编程。首先,可以写一个PageBase类,它继承自System.Web.UI.Page,并作为站点中所有页面类的基类。这么做的目的其实很简单,就是为了将各个页面中一些共同的处理过程提炼出来放到基类中,以减少代码重复,提高可维护性。然后在PageBase类中写如下代码:protected override void InitializeCulture()
{
base.InitializeCulture();
string LanguagePreference = ((ProfileCommon)this.Context.Profile).LanguagePreference;
//该用户首次访问本站,Profile.LanguagePreference为空时,识别用户浏览器的语言设置
if(string.IsNullOrEmpty(LanguagePreference))
{
if (this.Context.Request.UserLanguages != null)
{
LanguagePreference = this.Context.Request.UserLanguages[0];
((ProfileCommon)Context.Profile).LanguagePreference = LanguagePreference;
}
}
else
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




