ASP.NET设置文化具有初始文化
-
18-09-2019 - |
题
我有一个带有三个域.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
其他提示
我的解决方案是将其分为两个部分:
- 在会话开始时,我将源自域的文化存储在会话变量中
- 在初始宗教中,我从会话变量中获取价值来初始化文化
要更改语言,我只需要更改会话变量并重新开始页面即可。
如果用户选择该语言,则可以重定向到适当的域?如果用户将他的语言切换为“意大利语”,则可以响应。将他重新为“ www.domain.it”。之后,您的“初始宗教”方法将注意。
不隶属于 StackOverflow