2012-01-16 22 views
18

搜索網頁,我看到很多地方以下屬性的組合在全球化部分用於實例:文化=「自動」,的UICulture =「自動」,enableClientBasedCulture =「真」,如:Web.config中的enableClientBasedCulture屬性是否可以工作?

<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財產,文化和 的UICulture屬性是基於AcceptLanguage標頭字段是由客戶端瀏覽器發送 值。如果AcceptLanguage標頭 值無法映射到特定文化,則使用Culture和 UICulture值。默認值是false。

對於Culture和UICulture屬性,「自動」的解釋是:http://msdn.microsoft.com/en-us/library/bz9tc508(v=VS.90).aspx

要讓ASP.NET設置UI文化和文化到在當前瀏覽器中指定的第一語言 設置,設置UICulture和 文化自動。或者,您可以將此值設置爲 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」,因此無論如何他們都會使用該值。

我的第一個問題是:將auto/auto與true結合起來有什麼意義?我自己的看法是,如果culture =「auto」和uiCulture =「auto」,則使用enableClientBasedCulture =「true」將是多餘的。我自己的測試表明auto/auto的工作方式與使用enableClientBasedCulture屬性時的工作方式一樣好,但正如我在網上的許多示例中看​​到的auto/auto/true組合一樣,我想知道如果我忽略了某些東西。

我已經嘗試使用enableClientBasedCulture =「true」,但沒有自動/自動設置,例如,

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

這似乎並不奏效;儘管enableClientBasedCulture =「true」應該(隱式地?)負責將這些屬性設置爲AcceptLanguage頭字段值的屬性,但似乎客戶端強制性地支持 服務器的文化和uiCulture設置。

然後,我嘗試將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參數中獲取文化和uiCulture值,但我還沒有找到任何使用enableClientBasedCulture屬性的代碼。

所以我的第二個問題是:enableClientBasedCulture屬性實際上是否在任何地方被使用,如果是這樣,我應該如何配置一個測試程序來證明它對它有什麼影響?

回答

5

你可能也想嘗試:

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

我相信,這將使用文化從第一AcceptLanguage標頭(如果可用),否則退回到指定的默認。

+1

是的,但問題是1)將所有三個屬性包含在auto/auto/true值中的目的是什麼,2)是用於任何事情的enableClientBasedCulture屬性。 您的示例不包含enableClientBasedCulture屬性用法的示例。 – 2012-01-16 13:15:13

+1

@Joergen:文檔爲<全球化> enableClientBasedCulture的元素狀態:「此屬性此時未使用」 - http://msdn.microsoft.com/en-us/library/hy4kkhe0(v=VS .100).aspx所以我會得出結論,它目前沒有用於任何事情,這似乎與您的經驗相符。 – Joe 2012-01-16 14:08:56

+0

是的,正如你所看到的,我鏈接到了3。5版本的問題,它確認了我在源代碼中看到(或不是)的內容,但是在GlobalizationSection類文檔中,沒有提到此屬性應該沒有任何作用。該屬性在各種博客文章和安裝說明中都有提及,這就是爲什麼在我這樣做之前我正在尋找一些硬性事實。我看到有人改變使用這個設置的唯一地方是http://www.devexpress.com/Support/Center/p/B150103.aspx - 但除了「過時」的評論,沒有其他細節。 – 2012-01-16 14:50:16

7

MSDN說沒有使用enableClientBasedCulture

「enableClientBasedCulture - 可選屬性。此屬性此時未使用。」

0

您必須執行您自己的Accept-Lang檢測並切換到您提供的相應文化。

.NET不支持「自動魔術」切換。

enableClientBasedCulture不做任何事情。

將文化設置爲自動也不會做任何事情。您可以通過在兩者上設置「auto:en」並從瀏覽器語言中刪除丹麥語來看到,您會注意到它將默認爲丹麥語。

祝你好運。

相關問題