Локализованный сайт, 1 ошибка: событие обратной передачи не работает
Я почти закончил локализацию крупного сайта в ASP.NET. Я использую CurrentUICulture, чтобы влиять на мою локализацию. Все идет хорошо, за исключением ситуации, когда у меня есть событие обратной передачи.
Если я запускаю это событие обратной передачи, со страницы, на которой была изменена его культура, событие обратной передачи использует значение OLD CurrentUICulture. Это работает правильно, если я сначала посетил некоторые другие страницы на сайте.
Я использую правильно локализованную страницу, чтобы вызвать это событие, поэтому я уверен, что локализация сработала.
Событие обратной передачи находится в другом потоке? Я что-то пропустил? Я не могу опубликовать код из проекта. Единственный параметр, который я использую, - это Thread.CurrentUICulture в статическом классе-обертке для установки и получения моей локализации. Класс содержит только статические свойства.
РЕДАКТИРОВАТЬ: мы устанавливаем currentUIculture в OnInit на странице загрузки. Мы поддерживаем культуру пользовательского интерфейса, устанавливая ее каждый раз с сессии.
2 ответа
Я просто понял, что не ответил на этот вопрос.
Оказывается, что постбэк (который, наконец, перенаправляет) в другой домен, заставляет сеанс исчезнуть (очевидно, в любом случае, безусловно, это полезно знать).
Мы использовали настройку домена httpCookie, чтобы всегда устанавливать все файлы cookie для основного домена, поэтому сеансы распределяются между различными поддоменами (en.website.com и nl.website.com) .
Вместо установки культуры в событии OnInit страницы переопределите событие InitializeCulture.
Вот пример в VB, но вы поняли идею.
Protected Overrides Sub InitializeCulture()
Dim locale As String = Request.QueryString("lc")
If locale IsNot Nothing AndAlso locale = "fr-ca" Then
Me._LocaleID = 3084
End If
Dim culture As New System.Globalization.CultureInfo(Me._LocaleID)
System.Threading.Thread.CurrentThread.CurrentCulture = culture
System.Threading.Thread.CurrentThread.CurrentUICulture = culture
End Sub