В Интернете я вижу множество примеров, в которых в разделе глобализации используется следующая комбинация атрибутов: 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 включено, культура и Свойства UICulture основаны на поле заголовка AcceptLanguage значение, которое отправляется клиентским браузером. Если заголовок AcceptLanguage ценность не может быть сопоставлена с определенной культурой, Культурой и Используются значения UICulture. Значение по умолчанию - false.
Для атрибутов культуры и uiCulture термин "авто" должен означать http://msdn.microsoft.com/en-us/library/bz9tc508(v=VS.90).aspx
Чтобы ASP.NET установил культуру и культуру пользовательского интерфейса на первый язык который указан в текущих настройках браузера, установите UICulture и Культура для авто. В качестве альтернативы вы можете установить это значение для auto: culture_info_name, где имя_культуры_имя - название культуры. Для список названий культур, см. CultureInfo. Вы можете сделать эту настройку либо в директиве @Page или файле Web.config.
Предположим, браузер отправляет недопустимое имя или имя культуры в поле заголовка AcceptLanguage. Поскольку enableClientBasedCulture = "true" , сервер приложений должен попытаться использовать все, что находится в поле заголовка AcceptLanguage, но с недопустимым именем культуры, он не может этого сделать и возвращается к культуре = "авто" и uiCulture = "авто", но сами настройки авто/авто не смогут использовать недопустимые данные.
Теперь предположим, что мы отправляем серверу допустимое имя культуры, например. "Де-DE". Сервер приложений все равно должен использовать значение поля заголовка AcceptLanguage, поскольку enableClientBasedCulture = "true" , но поскольку для культуры и 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"/>
Это вообще не работает; кажется, что клиент принудительно серверную культуру и настройки uiCulture, хотя allowClientBasedCulture = "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, который считывает значение и делает его доступным через свойство, но в противном случае ничего не делает с ним.
В хостинге \HostingEnvironment я нахожу метод с именем SetCultures, который захватывает значения культуры и uiCulture из параметра GlobalizationSection, но мне еще не найти код, который использует атрибут enableClientBasedCulture.
Итак, мой второй вопрос:: действительно ли атрибут enableClientBasedCulture используется где угодно вообще, и если да, как мне настроить тестовую программу, чтобы доказать себе, что она имеет какой-то эффект?