Web.config中的enableClientBasedCulture属性是否可用?

Joe*_*ech 21 .net asp.net

搜索网络时,我看到很多实例在全球化部分使用以下属性组合:culture ="auto",uiCulture ="auto",enableClientBasedCulture ="true",例如:

<globalization uiCulture="auto" culture="auto" requestEncoding="utf-8" responseEncoding="utf-8" enableClientBasedCulture="true"/>
Run Code Online (Sandbox Code Playgroud)

文档说:http://msdn.microsoft.com/en-us/library/system.web.configuration.globalizationsection.enableclientbasedculture(v=VS.90).aspx

启用EnableClientBasedCulture属性后,Culture和UICulture属性基于客户端浏览器发送的AcceptLanguage标头字段值.如果AcceptLanguage标头值无法映射到特定区域性,则使用Culture和UICulture值.默认值为false.

对于culture和uiCulture属性,"auto"应该是指http://msdn.microsoft.com/en-us/library/bz9tc508(v=VS.90).aspx

要让ASP.NET将UI文化和文化设置为当前浏览器设置中指定的第一种语言,请将UICulture和Culture设置为auto.或者,您可以将此值设置为auto:culture_info_name,其中culture_info_name是区域性名称.有关文化名称的列表,请参阅CultureInfo.您可以在@ Page指令或Web.config文件中进行此设置.

假设浏览器在AcceptLanguage标头字段值中发送无效或无文化名称.因为enableClientBasedCulture ="true",应用程序服务器应该尝试使用AcceptLanguage头字段中的任何内容,但是如果文化名称无效,则无法执行此操作并返回culture ="auto"和uiCulture ="auto ",但自动/自动设置本身将无法使用无效数据.

现在假设我们确实向服务器发送了一个有效的文化名称,例如"de-DE".仍然告诉应用程序服务器使用AcceptLanguage头字段值,因为enableClientBasedCulture ="true",但由于culture和uiCulture设置为"auto",他们无论如何都会使用该值.

我的第一个问题是:将auto/auto与true结合起来有什么意义?我自己的信念是,如果culture ="auto"和uiCulture ="auto",使用enableClientBasedCulture ="true"将是多余的.我自己的测试表明,auto和auto的工作方式与在与enableClientBasedCulture属性结合使用时一样,但是当我看到web上的许多示例中都提到了auto/auto/true组合时,我想知道是否我忽略了一些东西.

我尝试过使用enableClientBasedCulture ="true"而没有自动/自动设置,例如

<globalization requestEncoding="utf-8" responseEncoding="utf-8" enableClientBasedCulture="true"/>
Run Code Online (Sandbox Code Playgroud)

这似乎根本不起作用; 似乎客户端强制提供服务器的culture和uiCulture设置,即使enableClientBasedCulture ="true"应该(隐式地)将这些属性设置为AcceptLanguage头字段值的属性.

然后我尝试将enableClientBasedCulture与文化和uiCulture的特定文化相结合,例如

<globalization uiCulture="da-DK" culture="da-DK" requestEncoding="utf-8" responseEncoding="utf-8" enableClientBasedCulture="true"/>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,无论语言设置如何,客户端浏览器都被迫使用"da-DK".

看看http://msdn.microsoft.com/en-us/library/hy4kkhe0(v=VS.90).aspx我看到这个for enableClientBasedCulture:

此属性目前尚未使用.

使用.NET Reflector,我已经反编译了所有.NET 3.5 Framework程序集并搜索了enabledClientBasedCulture.我在System.Web.Configuration\GlobalizationSection中找到了一些代码,它们读取值并通过属性使其可用,但是对它没有任何作用.

在Hosting\HostingEnvironment中,我找到一个名为SetCultures的方法,它从GlobalizationSection参数中获取culture和uiCulture值,但我还没有找到任何使用enableClientBasedCulture属性的代码.

所以我的第二个问题是:enableClientBasedCulture属性是否实际上在任何地方都被使用,如果是这样,我应该如何配置测试程序以证明它有任何影响?

Dmi*_*har 8

MSDN表示enableClientBasedCulture没有使用.

"enableClientBasedCulture - 可选属性.此属性目前尚未使用."


Joe*_*Joe 5

您可能想尝试:

<globalization uiCulture="auto:da-DK" culture="auto:da-DK" requestEncoding="utf-8" responseEncoding="utf-8" />  
Run Code Online (Sandbox Code Playgroud)

我相信这将使用第一个AcceptLanguage标头中的文化(如果可用),否则回退到指定的默认值.