ASP.NET InitialIzeCultureを使用した文化を設定します
-
18-09-2019 - |
質問
私は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つの部分に分割することです。
- セッション開始時に、セッション変数にドメインから派生した文化を保存します
- IniveryIzeCultureでは、セッション変数から値を取得して、文化を初期化します
言語を変更するには、セッション変数を変更してページを再現するだけです。
ユーザーが言語を選択した場合、適切なドメインにリダイレクトするだけですか?ユーザーが自分の言語を「イタリア語」に切り替えた場合、「www.domain.it」にresedirectirectすることができます。その後、「初期化」方法が注意します。
所属していません StackOverflow