Подтвердить что ты не робот

Является ли атрибут enableClientBasedCulture в Web.config вообще?

В Интернете я вижу множество примеров, в которых в разделе глобализации используется следующая комбинация атрибутов: 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 используется где угодно вообще, и если да, как мне настроить тестовую программу, чтобы доказать себе, что она имеет какой-то эффект?

4b9b3361

Ответ 1

MSDN говорит, что enableClientBasedCulture не используется.

"enableClientBasedCulture - необязательный атрибут. Этот атрибут не используется в настоящее время.

Ответ 2

Возможно, вы захотите попробовать:

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

Я полагаю, что это будет использовать культуру из первого заголовка AcceptLanguage, если он доступен, иначе отмените заданный по умолчанию.

Ответ 3

Вам нужно будет реализовать свое собственное распознавание Accept-Lang и переключиться на соответствующие культуры.

.NET не поддерживает переключение "auto-magic".

enableClientBasedCulture ничего не делает.

Настройка культуры на auto также ничего не делает. Вы можете видеть, что, установив "auto: en" на обоих и удалив датский язык с вашего браузера, вы заметите, что он по умолчанию будет датским в любом случае.

Удачи.