0

.com、.de、.itの3つのドメインを持つWebサイトがあります

各ドメインは、デフォルトでその国の現地の言語/文化に設定する必要があります。ベースページを作成し、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

これで結構です。ユーザーがドメイン言語を上書きできるように、ホームページに3つの言語選択ボタンも必要なため、この問題が発生します。

したがって、私のDefault.asp.vbには、このような3つのボタンイベントがあります...

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がボタンクリックが発生したかどうかを確認し、発生した場合はルーチンをスキップする方法はありますか?

何かアドバイスをいただければ幸いです。

4

3 に答える 3

4
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
于 2010-03-08T15:27:00.397 に答える
1

私の解決策は、これを2つの部分に分割することです。

  1. セッションの開始時に、ドメインから派生したカルチャをセッション変数に保存します
  2. InitializeCultureでは、セッション変数から値を取得してカルチャを初期化します

言語を変更するには、セッション変数を変更してページを再初期化する必要があります。

于 2010-03-08T15:13:35.277 に答える
0

ユーザーが言語を選択した場合、適切なドメインにリダイレクトできますか?ユーザーが自分の言語を「イタリア語」に切り替えた場合は、Response.Redirectを「www.domain.it」に変更できます。その後、「InitializeCulture」メソッドが処理します。

于 2010-03-08T14:21:40.133 に答える