Почему мой язык переключается автоматически в версии ASP.NET 2.0?
-
19-09-2019 - |
Вопрос
Я работаю над веб-решением ASP.NET 2.0, которое в настоящее время использует языки en-GB и zh-HK в качестве двух текущих языков для сайта.Другие будут добавлены позже.
Одним из требований является то, что пользователь может заменить отображаемый язык другим языком.Таким образом, пользователи в Гонконге могут просматривать сайт на английском языке и наоборот.
Моими двумя файлами ресурсов являются
- 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"/>
По какой-то очень-очень странной причине некоторые пользователи (даже пользователи из Великобритании) обнаруживают, что язык переключается через zh-HK без всякой причины - иногда между страницами!Я добавил на эти страницы некоторый отладочный код, который должен предоставить больше информации в ближайшие дни.Все, что пока выяснилось, это то, что пользователи не обязательно из zh-HK, некоторые из zh-CN или zh-TW.Хотя это могло бы помочь, поскольку пользователи en-GB видят zh-HK, я думаю, что это просто отвлекающий маневр.
Что я заметил, так это то, что переключение происходит с содержимым страницы (с теми, которые наследуются от базовой страницы, на которой существует метод IntializeCulture()).Пользовательские пользовательские элементы управления, которые я написал, не сталкиваются с этой проблемой и отображаются на правильном языке, настроенном пользователем.Следовательно, страница будет содержать комбинации контента как на английском, так и на китайском языках - ик!
Кто-нибудь может дать рекомендации относительно того, правильно ли я это кодирую, или альтернативный способ приблизиться к требованиям.
Заранее благодарю,
Доминик
P.S.Это временная проблема, а не постоянная.Похоже, что не существует общего действия, которое повторило бы эту проблему.Это просто - случается.
P.P.S Вот изображение проблемы в действии:
Обновление от 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 / идентификатор сеанса для всех фреймов.
Другие советы
Разве это не должно быть использование страницы.Культура, а не поток?