我期待在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