Question

J'ai un site Web avec trois domaines .com, .de et .it

Chaque domaine doit faire défaut à la langue / culture locale du pays. J'ai créé une page de base et ajouté une initializéculture

  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

C'est bon. Le problème se produit maintenant car nous voulons également trois boutons de sélection de langue sur la page d'accueil afin que l'utilisateur puisse remplacer la langue du domaine.

Donc, sur mon par défaut.asp.vb, nous avons trois événements de bouton comme celui-ci ...

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

Mais bien sûr, l'InititalizeCulture remplace alors la sélection des bouton. Existe-t-il un moyen de vérifier si un clic de bouton s'est produit et si oui, sauter la routine?

Tout conseil serait grandement apprécié, merci.

Était-ce utile?

La solution

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

Autres conseils

Ma solution est de diviser cela en deux parties:

  1. Au début de la session, je stockez la culture dérivée du domaine dans une variable de session
  2. Dans Initializéculture, je prends la valeur de la variable de session pour initialiser la culture

Pour changer la langue, je n'ai qu'à modifier la variable de session et à réinitialiser la page.

Si l'utilisateur sélectionne la langue, vous pouvez simplement rediriger vers le domaine approprié? Si l'utilisateur passe sa langue à "italien", vous pouvez le répondre. Après cela, votre méthode "initialiseculture" prendra soin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top