首页 文章

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

提问于
浏览
20

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

<globalization uiCulture="auto" culture="auto" requestEncoding="utf-8" responseEncoding="utf-8" enableClientBasedCulture="true"/>

文档说: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” . 仍然告诉应用程序服务器使用AcceptLanguage头字段值,因为enableClientBasedCulture =“true”,但由于culture和uiCulture设置为“auto”,他们无论如何都会使用该值 .

My first question is :将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"/>

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

然后我尝试将enableClientBasedCulture与用于培养和uiCulture的特定培养物结合起来,例如,

<globalization uiCulture="da-DK" culture="da-DK" requestEncoding="utf-8" responseEncoding="utf-8" enableClientBasedCulture="true"/>

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

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

此属性目前尚未使用 .

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

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

So my second question is :enableClientBasedCulture属性是否实际上在任何地方都被使用?如果是,我应该如何配置测试程序以证明它有任何影响?

3 回答

  • 8

    MSDN说没有使用 enableClientBasedCulture .

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

  • 5

    您可能想尝试:

    <globalization uiCulture="auto:da-DK" culture="auto:da-DK" requestEncoding="utf-8" responseEncoding="utf-8" />
    

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

  • 0

    您必须实施自己的Accept-Lang检测并切换到相应的文化 .

    .NET不支持“自动魔术”切换 .

    enableClientBasedCulture不做任何事情 .

    将文化设置为auto也不会执行任何操作 . 你可以看到,通过在两者上设置“auto:en”并从浏览器语言中删除丹麦语,你会发现它会无论如何,默认为丹麦语 .

    祝好运 .

相关问题