Я нашел решение проблемы.
1) Мне пришлось сохранить пользовательские настройки в сеансе.
2) Каждый раз, когда страница загружается, я теперь устанавливаю Thread.CurrentThread.CurrentCulture
после построения cultureInfo
на основе предпочтения пользователя, сохраненного в сеансе. Смысл кода, который я делаю, заключается в переопределении InitializeCulture. Другими словами, мои страницы переопределяют InitializeCulture следующим образом:
Protected Overrides Sub InitializeCulture()
Dim l_languageChosen As String = Session("language")
' Code for CultureInfo
Dim cultureInfo As System.Globalization.CultureInfo
cultureInfo = New System.Globalization.CultureInfo(l_languageChosen)
' Code for Setting the CurrentCulture
Thread.CurrentThread.CurrentCulture = cultureInfo
Thread.CurrentThread.CurrentUICulture = cultureInfo
MyBase.InitializeCulture()
End Sub
3) Чтобы избежать переопределения всех моих страниц этим методом и избежать повторения кода, я создал суперкласс "MyWebPage", который выполняет переопределение (и который наследуется от System.Web.UI.Page
), а затем я сделал все свои страницы наследуются от MyWebPage.
4) Конечно, серверный код, который отвечал на запросы пользователя о смене языка, изменился соответственно, чтобы сохранить языковые предпочтения в сеансе, после установки Thread.CurrentThread.CurrentCulture и CurrentUICulture.
5) Я также установил тег globalization
в моем web.config
следующим образом:
<globalization
uiCulture="auto"
culture="auto"
enableClientBasedCulture="true" />
Это позволило мне определить языковые предпочтения пользователя, заданные в его / ее браузере, чтобы я мог изначально установить предпочтительный язык.
6) В моем global.asax
я сохраняю языковые предпочтения, обнаруженные в браузере, следующим образом:
Session.Add("language", System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName)
Теперь все работает как положено.