Я работаю над веб-решением ASP.NET 2.0, которое в настоящее время использует языки en-GB и zh-HK в качестве двух текущих языков для сайта. Другие будут добавлены позже.
Одним из требований является то, что пользователь может переопределить отображаемый язык на другой язык. Поэтому пользователи в Гонконге могут просматривать сайт на английском языке и наоборот.
Мои 2 файла ресурсов:
- Resources.resx (для английского языка - переводы по умолчанию)
- Resources.zh-HK.resx (для китайского)
Сайт выполняет эту логику
- Загрузить данные пользователя
- Проверьте, не переопределил ли пользователь предпочитаемый язык
- Если они есть, установите для Thread.CurrentThread.CurrentUICulture этот язык.
- Если нет, используйте браузер по умолчанию.
Это реализовано в следующем коде:
//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 Вот изображение проблемы в действии:
Обновление 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:
Похоже, что если другой пользователь сайта изменит предпочитаемый язык, это повлияет на всех остальных пользователей сайта! Хотя их предпочтительный язык установлен, каким-то образом переключение языка другого пользователя влияет на других пользователей сайта!