Domanda

Ho un sito web con tre domini .com, .de e .it

Ogni dominio ha bisogno per difetto alla lingua locale / cultura del paese. Ho creato una pagina di base e ha aggiunto un 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

Questo va bene. Il problema ora si verifica perché vogliamo anche tre pulsanti di scelta della lingua nella home page in modo che l'utente può ignorare la lingua del dominio.

Quindi sul mio Default.asp.vb abbiamo tre eventi dei pulsanti come questo ...

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

Ma naturalmente l'InititalizeCulture poi ignora qualsiasi pulsante di selezione è stato fatto. C'è un modo che l'InitialCulture può controllare se si è verificato un clic del pulsante e se è così saltare la routine?

Qualche consiglio sarebbe molto apprezzato, grazie.

È stato utile?

Soluzione

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

Altri suggerimenti

La mia soluzione è quella di dividere in due parti:

  1. All'avvio della sessione devo conservare la cultura derivato dal dominio in una sessione variabile
  2. In InitializeCulture Colgo il valore della variabile di sessione per inizializzare la cultura

Per modificare la lingua non mi resta che cambiare la variabile di sessione e reinizializzare la pagina.

Se l'utente seleziona la lingua, si può solo reindirizzare al dominio appropriato? Se l'utente cambia il suo linguaggio a "italiano", lui "www.domain.it" si potrebbe Response.Redirect. Dopo che il metodo "InitializeCulture" si prenderà cura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top