我有一个带有三个域.com,.de和.it的网站

每个领域都需要默认为该国的本地语言/文化。我创建了一个基页并添加了一个初始文化

  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

这可以。现在发生问题是因为我们还希望在主页上使用三个语言选择按钮,以便用户可以覆盖域语言。

因此,在我的default.asp.vb上,我们有三个这样的按钮事件...

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

但是,当然,启动宗教随后覆盖已进行的任何按钮选择。有什么方法可以使初始文化可以检查是否发生了按钮点击,并且是否会跳过例程?

感谢任何建议,谢谢。

有帮助吗?

解决方案

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

其他提示

我的解决方案是将其分为两个部分:

  1. 在会话开始时,我将源自域的文化存储在会话变量中
  2. 在初始宗教中,我从会话变量中获取价值来初始化文化

要更改语言,我只需要更改会话变量并重新开始页面即可。

如果用户选择该语言,则可以重定向到适当的域?如果用户将他的语言切换为“意大利语”,则可以响应。将他重新为“ www.domain.it”。之后,您的“初始宗教”方法将注意。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top