我期待在ASP.NET中構建網站。我需要它是在法語和英語與域設置像這樣:跨不同子域的多語言網站的最佳實踐
en.mysite.com fr.mysite.com
我不想重複的代碼或有上傳文件到兩個如果可能的話域。
這將是www.mydomain.com上所有文件的理想選擇,然後使用資源文件對翻譯進行排序。
什麼是最好的方式來設置這在ASP.NET中?
我期待在ASP.NET中構建網站。我需要它是在法語和英語與域設置像這樣:跨不同子域的多語言網站的最佳實踐
en.mysite.com fr.mysite.com
我不想重複的代碼或有上傳文件到兩個如果可能的話域。
這將是www.mydomain.com上所有文件的理想選擇,然後使用資源文件對翻譯進行排序。
什麼是最好的方式來設置這在ASP.NET中?
我的解決辦法是在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的角度來看(如果它對你的網站很重要)
據我所知,你想將所有文件放在根目錄下,但是使用不同語言的子域。
我認爲en.mysite.com和fr.mysite.com必須是別名,並且應該告訴asp.net應用程序使用什麼語言。您可以使用代碼更改文化設置。這是很好的描述here。
但從我的角度來看,它是一種更好的方式,在主域上提供一些默認語言和能夠在不同語言之間切換的語言設置。如果用戶建議改變語言 - 他只需點擊一個鏈接。語言設置шт這種情況下可以存儲在任何地方(用戶配置文件,cookie,會話,數據庫,如果註冊用戶等)。
如果我要實現這個,我會這樣做: 將en.mysie.com映射到www.mysite.com/page?lang=en 將fr.mysite.com映射到www.mysite .com/page?lang = fr
然後在母版頁中,根據使用全球化的參數設置您的語言,並且如果使用相同的語言代碼找到正確的app_localresource文件,則會自動以該語言提供asp.net頁面。
希望這有助於
+1 - 非常好的答案。 global.asax絕對是放置重要文化信息的最佳選擇。 – 2010-02-16 13:11:30