Frage

Ich habe eine Website mit drei Domains .com, .de und .it

Jede Domäne muss standardmäßig in die Landessprache/Kultur des Landes standhalten. Ich habe eine Basisseite erstellt und eine Initializecultur hinzugefügt

  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

Das ist in Ordnung. Das Problem tritt nun auf, da wir auch drei Sprachauswahlschaltflächen auf der Startseite wünschen, damit der Benutzer die Domänensprache überschreiben kann.

Also auf meinem Standard.

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

Aber natürlich überschreibt die Inititalizekultur die Auswahl der Taste, die getroffen wurde. Gibt es eine Möglichkeit, wie die InitialCulture prüfen kann, ob ein Schaltflächenklick aufgetreten ist und ob dies die Routine überspringt?

Jeder Rat wäre sehr geschätzt, danke.

War es hilfreich?

Lösung

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

Andere Tipps

Meine Lösung ist es, dies in zwei Teile zu teilen:

  1. Bei der Sitzungsstart speichere ich die von der Domain abgeleitete Kultur in einer Sitzungsvariablen
  2. In der Initializeculture nehme ich den Wert aus der Sitzungsvariablen, um die Kultur zu initialisieren

Um die Sprache zu ändern, muss ich nur die Sitzungsvariable ändern und die Seite neu initialisieren.

Wenn der Benutzer die Sprache auswählt, können Sie sich nur auf die entsprechende Domäne umführen? Wenn der Benutzer seine Sprache auf "Italienisch" umstellt, können Sie ihn auf "www.domain.it" reagieren. Danach kümmert sich Ihre "Initializeculture" -Methode.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top