ASP.NET Настройка культуры с InitializeCulture - PullRequest
0 голосов
/ 08 марта 2010

У меня есть сайт с тремя доменами .com, .de и .it

Каждый домен должен по умолчанию соответствовать местному языку / культуре страны. Я создал базовую страницу и добавил InitializeCulture

  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

Но, конечно, InititalizeCulture затем переопределяет любой выбранный выбор кнопки. Есть ли способ, чтобы InitialCulture мог проверить, произошло ли нажатие кнопки, и если это так, пропустите процедуру?

Любой совет будет принята с благодарностью, спасибо.

Ответы [ 3 ]

4 голосов
/ 08 марта 2010
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 голос
/ 08 марта 2010

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

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

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

0 голосов
/ 08 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...