2010-03-08 89 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予取 從會話中值變量 初始化文化

要更改語言,我只需要更改會話變量並重新初始化頁面。