搜索网络时,我看到很多实例在全球化部分使用以下属性组合: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属性是否实际上在任何地方都被使用,如果是这样,我应该如何配置测试程序以证明它有任何影响?
您可能想尝试:
<globalization uiCulture="auto:da-DK" culture="auto:da-DK" requestEncoding="utf-8" responseEncoding="utf-8" />
Run Code Online (Sandbox Code Playgroud)
我相信这将使用第一个AcceptLanguage标头中的文化(如果可用),否则回退到指定的默认值.
| 归档时间: |
|
| 查看次数: |
11084 次 |
| 最近记录: |