2010-02-16 142 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页面。

希望这有助于

相关问题