Вопрос

У меня есть веб -сайт с тремя доменами .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

Другие советы

Мое решение состоит в том, чтобы разделить это на две части:

  1. В Session Start I хранить культуру, полученную из домена в переменной сеанса
  2. В инициализации я беру значение из переменной сеанса, чтобы инициализация культуры

Чтобы изменить язык, мне просто нужно изменить переменную сеанса и повторно обретать страницу.

Если пользователь выбирает язык, вы можете просто перенаправить в соответствующий домен? Если пользователь переключает свой язык на «итальянский», вы можете ответить. Пересмотреть его на «www.domain.it». После этого ваш метод «инициализации» позаботится.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top