2010-03-08 10 views
0

J'ai un site Web avec trois domaines .com, .de et .itASP.NET Réglage de la culture avec InitializeCulture

Chaque domaine doit par défaut la langue locale/culture du pays. J'ai créé une page de base et ajouté une 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 

C'est très bien. Le problème se produit maintenant parce que 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 Default.asp.vb nous avons trois événements 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, le InititalizeCulture remplace alors tout ce que la sélection a été faite bouton. Est-il possible que l'InitialCulture puisse vérifier si un clic sur un bouton s'est produit et si oui, ignorer la routine?

Tout conseil serait grandement apprécié, merci.

Répondre

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 
+0

Parfait, et une telle solution propre. Je vous remercie. – Helen

0

Si l'utilisateur sélectionne la langue, vous pouvez simplement rediriger vers le domaine approprié? Si l'utilisateur passe sa langue à "italien", vous pouvez Response.Redirect lui "www.domain.it". Après cela, votre méthode "InitializeCulture" prendra soin de vous.

1

Ma solution est de diviser ce en deux parties:

  1. à la variable début de la session I stocker la culture dérivée du domaine dans une session
  2. En InitializeCulture je prends la valeur de la session variable pour initialiser la culture

Pour changer la langue, il me suffit de modifier la variable de session et de réinitialiser la page.

Questions connexes