2010-02-16 145 views
4

我期待在ASP.NET中構建網站。我需要它是在法語和英語與域設置像這樣:跨不同子域的多語言網站的最佳實踐

en.mysite.com fr.mysite.com

我不想重複的代碼或有上傳文件到兩個如果可能的話域。

這將是www.mydomain.com上所有文件的理想選擇,然後使用資源文件對翻譯進行排序。

什麼是最好的方式來設置這在ASP.NET中?

回答

3

我的解決辦法是在global.asax

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) 
    Dim lang As String = "es" ''//default 
    If Request.Url.ToString.ToLower.StartsWith("http://es.") 
     lang = "es" 
    ElseIf Request.Url.ToString.ToLower.StartsWith("http://en.") Then 
     lang = "en" 
    End If 
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang) 
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang) 

    Site.Idioma = lang ''//static variable that I use in other parts of the site 
End Sub 

設置郎在BeginRequest不要忘記當用戶點擊www.mysite.com設置重定向,利用用戶的瀏覽器語言首選項

Imports System.Globalization 
Partial Class redirect_Default 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal s As Object, ByVal e As System.EventArgs) _ 
                   Handles Me.Load 

     Select Case Mid(Request.UserLanguages(0).ToString(), 1, 2).ToLower 
      Case "en" 
       Response.Redirect("http://en.mysite.com") 
      Case Else 
       Response.Redirect("http://es.mysite.com") 
     End Select 

    End Sub 
End Class 

作爲一個方面來看,我建議你使用http://www.mysite.com/en,因爲它是從更好SEO的角度來看(如果它對你的網站很重要)

+0

+1 - 非常好的答案。 global.asax絕對是放置重要文化信息的最佳選擇。 – 2010-02-16 13:11:30

0

據我所知,你想將所有文件放在根目錄下,但是使用不同語言的子域。

我認爲en.mysite.com和fr.mysite.com必須是別名,並且應該告訴asp.net應用程序使用什麼語言。您可以使用代碼更改文化設置。這是很好的描述here

但從我的角度來看,它是一種更好的方式,在主域上提供一些默認語言和能夠在不同語言之間切換的語言設置。如果用戶建議改變語言 - 他只需點擊一個鏈接。語言設置шт這種情況下可以存儲在任何地方(用戶配置文件,cookie,會話,數據庫,如果註冊用戶等)。

0

如果我要實現這個,我會這樣做: 將en.mysie.com映射到www.mysite.com/page?lang=en 將fr.mysite.com映射到www.mysite .com/page?lang = fr

然後在母版頁中,根據使用全球化的參數設置您的語言,並且如果使用相同的語言代碼找到正確的app_localresource文件,則會自動以該語言提供asp.net頁面。

希望這有助於