Почему мой язык переключается автоматически в версии ASP.NET 2.0?

StackOverflow https://stackoverflow.com/questions/1327442

Вопрос

Я работаю над веб-решением ASP.NET 2.0, которое в настоящее время использует языки en-GB и zh-HK в качестве двух текущих языков для сайта.Другие будут добавлены позже.

Одним из требований является то, что пользователь может заменить отображаемый язык другим языком.Таким образом, пользователи в Гонконге могут просматривать сайт на английском языке и наоборот.

Моими двумя файлами ресурсов являются

  • Resources.resx (для переводов на английский язык по умолчанию)
  • Resources.zh-HK.resx (для китайского языка)

Сайт выполняет эту логику

  1. Загрузить сведения о пользователе
  2. Проверьте, не переопределил ли пользователь предпочитаемый язык
  3. Если они есть, задайте для Thread.currentThread.CurrentUICulture этот язык.
  4. Если они этого не сделали, используйте браузеры по умолчанию.

Это реализовано в следующем коде:

//This method is written in a base page, which all pages in the site derive from
protected override void InitializeCulture()
{ 
    User user = /*Load custom user object...*/;
    string threadLanguage = Thread.CurrentThread.CurrentUICulture.IetfLanguageTag;

    //If the browser is using a different language, 
    //but the has chosen a preferred language, 
    //change the CurrentUICulture over.
    if (!threadLanguage.Equals(user.Language, StringComparison.OrdinalIgnoreCase))
    {
        CultureInfo userLanguageCulture = CultureInfo.CreateSpecificCulture(user.Language);
        Thread.CurrentThread.CurrentUICulture = userLanguageCulture;
    }

    base.InitializeCulture();
}

Я также настроил web.config для автоматического подбора UICulture с помощью

<globalization uiCulture="auto"/>

По какой-то очень-очень странной причине некоторые пользователи (даже пользователи из Великобритании) обнаруживают, что язык переключается через zh-HK без всякой причины - иногда между страницами!Я добавил на эти страницы некоторый отладочный код, который должен предоставить больше информации в ближайшие дни.Все, что пока выяснилось, это то, что пользователи не обязательно из zh-HK, некоторые из zh-CN или zh-TW.Хотя это могло бы помочь, поскольку пользователи en-GB видят zh-HK, я думаю, что это просто отвлекающий маневр.

Что я заметил, так это то, что переключение происходит с содержимым страницы (с теми, которые наследуются от базовой страницы, на которой существует метод IntializeCulture()).Пользовательские пользовательские элементы управления, которые я написал, не сталкиваются с этой проблемой и отображаются на правильном языке, настроенном пользователем.Следовательно, страница будет содержать комбинации контента как на английском, так и на китайском языках - ик!

Кто-нибудь может дать рекомендации относительно того, правильно ли я это кодирую, или альтернативный способ приблизиться к требованиям.

Заранее благодарю,

Доминик

P.S.Это временная проблема, а не постоянная.Похоже, что не существует общего действия, которое повторило бы эту проблему.Это просто - случается.

P.P.S Вот изображение проблемы в действии:

Web page showing Chinese/English problem


Обновление от 23 сентября 09:

После попытки изменить его на страницу.Культура, у меня все еще возникают более периодические проблемы.

У меня есть пара идей о том, почему это могло произойти, но я не могу обосновать свою "гипотезу":

  • Мы используем режим изоляции IIS 5.0, что означает, что для каждого экземпляра IIS выполняется только aspnet_wp.exe, а не w3wp.exe.
  • На сервере также запущены службы Reporting Services, генерирующие отчеты для Гонконга.
  • Ошибка возникает чаще, когда сайт находился под большой нагрузкой - я предполагаю, из-за создания больших отчетов.

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

Обновление от 25 сентября 09:

Я думаю, мы, возможно, решили бы эту проблему.В нашем Web.config есть тег, который был настроен следующим образом:

<globalization uiCulture="auto" culture="auto"/>

После удаления этого, после первоначального тестирования, оно еще не появилось!

Обновление от 13 октября 09:

Проблема снова возникла:-(

Обновление от 26 октября 09:

Похоже, что если другой пользователь сайта меняет предпочитаемый им язык, это влияет на всех остальных пользователей сайта!Хотя их предпочтительный язык установлен, каким-то образом переключение языка кем-то другим влияет на других пользователей сайта!

Это было полезно?

Решение 2

Спустя долгое-долгое время я, наконец, понял, почему возникла эта проблема.

Сайт начинался как frameset.asp, на котором размещались 3 .NET фрейма - верхний, средний, нижний.Что я заметил, так это то, что .СЕТЬ сгенерировала 3 сеанса, и поэтому любые изменения затрагивали только один кадр.

В некотором смысле, это не полностью объясняет, почему работали только части страницы, но это решило немало проблем, связанных с некоторыми странными повторениями.Перенаправления, которые мы собирались использовать.

Таким образом, frameset.asp был заменен frameset.aspx, который генерирует один файл cookie / идентификатор сеанса для всех фреймов.

Другие советы

Разве это не должно быть использование страницы.Культура, а не поток?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top