Почему мой язык автоматически переключается в ASP.NET 2.0? - PullRequest
1 голос
/ 25 августа 2009

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

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

Мои 2 файла ресурсов:

  • 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"/>

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

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

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

Заранее спасибо,

Dominic

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

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

Web page showing Chinese/English problem


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

После попытки изменить его на Page.Culture у меня по-прежнему возникают проблемы с перебоями.

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

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

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

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

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 12 мая 2010

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

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

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

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

0 голосов
/ 25 августа 2009

Разве не следует использовать Page.Culture, а не Thread?

...