跨不同子域的多语言站点的最佳实践

时间:2010-02-16 12:14:31

标签: asp.net localization multilingual

我希望在ASP.NET中构建一个站点。我需要使用法语和英语,域名设置如下:

en.mysite.com  fr.mysite.com

如果可能,我不想复制代码或必须将文件上传到这两个域。

最好将所有文件放在www.mydomain.com上,然后使用资源文件对翻译进行排序。

在ASP.NET中设置它的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

我的解决方案是在BeginRequest

中的global.asax中设置lang
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

当用户使用用户的浏览器语言首选项点击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角度来看它更好(如果它对您的网站很重要)

答案 1 :(得分:0)

据我所知,您希望将所有文件放在根目录中,但将子域用于不同的语言。

我认为en.mysite.com和fr.mysite.com必须只是别名,并且应该告诉asp.net应用程序使用什么语言。您可以使用代码更改文化设置。这是很好的描述here

但是从我的观点来看,这是一种更好的方法,可以在主域上提供语言设置,并提供一些默认语言和在语言之间切换的能力。如果用户建议更改语言 - 他只需点击一个链接即可。语言设置此案例可以存储在任何地方(用户档案,cookie,会话,数据库,如果注册用户等)。

答案 2 :(得分:0)

如果我要实现这个,我会这样做: 将en.mysie.com映射到www.mysite.com/page?lang=en 将fr.mysite.com映射到www.mysite.com/page?lang=fr

然后在母版页中,使用全球化根据参数设置您的语言,如果找到具有相同语言代码的正确app_localresource文件,asp.net页面将自动以该语言提供。

希望这有帮助