2010-03-08 87 views
0

我有一个网站有三个域.com,.de和.itASP.NET设置文化与InitializeCulture

每个域需要默认为本国语言/文化。 我创建了一个基本页面,并增加了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 

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

所以我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 

但当然InititalizeCulture然后将覆盖任何按钮已经做出选择。 InitialCulture是否有任何方法可以检查是否发生了按钮单击,如果是这样,则跳过该例程?

任何意见将不胜感激,谢谢。

回答

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

完美的,这样一个干净的解决方案。谢谢。 – Helen 2010-03-09 20:19:38

0

如果用户选择语言,您可以重定向到相应的域名?如果用户将他的语言切换到“意大利语”,您可以将Response.Redirect转到“www.domain.it”。之后,您的“InitializeCulture”方法将保持谨慎。

1

我的解决办法是在两个部分拆分此:

  1. 在会话开始我存储从域衍生的培养 在会话 可变
  2. 在InitializeCulture予取 从会话中值变量 初始化文化

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