ASP.NET Установка культуры с инициализацией
-
18-09-2019 - |
Вопрос
У меня есть веб -сайт с тремя доменами .com, .de и .it
Каждому домену необходимо по умолчанию на местный язык/культуру страны. Я создал базовую страницу и добавил инициализацию
Protected Overrides Sub InitializeCulture()
Dim url As System.Uri = Request.Url
Dim hostname As String = url.Host.ToString()
Dim SelectedLanguage As String
If HttpContext.Current.Profile("PreferredCulture").ToString Is Nothing Then
Select Case hostname
Case "www.domain.de"
SelectedLanguage = "de"
Thread.CurrentThread.CurrentUICulture = New CultureInfo(SelectedLanguage)
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(SelectedLanguage)
Case "www.domain.it"
SelectedLanguage = "it"
Thread.CurrentThread.CurrentUICulture = New CultureInfo(SelectedLanguage)
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(SelectedLanguage)
Case Else
SelectedLanguage = "en"
Thread.CurrentThread.CurrentUICulture = New CultureInfo(SelectedLanguage)
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(SelectedLanguage)
End Select
End If
End Sub
Это хорошо. Проблема сейчас возникает потому, что мы также хотим, чтобы на главной странице было три кнопки выбора языка, чтобы пользователь мог переопределить язык доменов.
Итак, на моем default.asp.vb у нас есть три кнопки, подобные ...
Protected Sub langEnglish_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles langEnglish.Click
Dim SelectedLanguage As String = "en"
'Save selected user language in profile'
HttpContext.Current.Profile.SetPropertyValue("PreferredCulture", SelectedLanguage)
'Force re-initialization of the page to fire InitializeCulture()'
Context.Server.Transfer(Context.Request.Path)
End Sub
Но, конечно, инициализация затем переопределяет любые выборы кнопок. Есть ли способ, которым начальная культура может проверить, произошла ли нажатие кнопки, и если это так пропустить рутину?
Любой совет был бы очень признателен, спасибо.
Решение
Protected Overrides Sub InitializeCulture()
'Set the PreferredCulture as the SelectedLanguage by default'
Dim SelectedLanguage As String = HttpContext.Current.Profile("PreferredCulture").ToString()
'If there is no PreferredCulture, use these defaults'
If [String].IsNullOrEmpty(SelectedLanguage) = True Then
Select Case Request.Url.Host.ToString()
Case "www.domain.de"
SelectedLanguage = "de"
Case "www.domain.it"
SelectedLanguage = "it"
Case Else
SelectedLanguage = "en"
End Select
End If
'Finally set the culture'
Thread.CurrentThread.CurrentUICulture = New CultureInfo(SelectedLanguage)
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(SelectedLanguage)
End Sub
Другие советы
Мое решение состоит в том, чтобы разделить это на две части:
- В Session Start I хранить культуру, полученную из домена в переменной сеанса
- В инициализации я беру значение из переменной сеанса, чтобы инициализация культуры
Чтобы изменить язык, мне просто нужно изменить переменную сеанса и повторно обретать страницу.
Если пользователь выбирает язык, вы можете просто перенаправить в соответствующий домен? Если пользователь переключает свой язык на «итальянский», вы можете ответить. Пересмотреть его на «www.domain.it». После этого ваш метод «инициализации» позаботится.