質問

私は3つのドメインを持つウェブサイトを持っています.com、.de、および.it

各ドメインは、国の現地言語/文化にデフォルトする必要があります。ベースページを作成し、IniveryizeCultureを追加しました

  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

しかし、もちろん、InitatiatiatizeCultureは、ボタンの選択が行われたものをオーバーライドします。最初のカルチャーがボタンクリックが発生したかどうかを確認し、その場合はルーチンをスキップできる方法はありますか?

どんなアドバイスでも大歓迎です、ありがとう。

役に立ちましたか?

解決

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

他のヒント

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

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

言語を変更するには、セッション変数を変更してページを再現するだけです。

ユーザーが言語を選択した場合、適切なドメインにリダイレクトするだけですか?ユーザーが自分の言語を「イタリア語」に切り替えた場合、「www.domain.it」にresedirectirectすることができます。その後、「初期化」方法が注意します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top