如何在ASP.NET中使用请求URL / URL重写进行本地化 - 使用HTTP模块或Global.asax代码

时间:2010-03-31 16:39:48

标签: .net asp.net localization url-rewriting httpmodule

我想看看是否有办法使用请求URL / URL重写来设置通过检查ASP.NET中的部分URL来呈现页面的语言。我们有已经与ASP.NET资源本地化一起工作的站点和用户可以更改他们在网站上看到页面/资源的语言,但是由于每种语言的语言变体都显示为一页,因此当前机制不是非常适合搜索引擎。如果我们可以拥有像www.site.com/en-mx/realfolder/realpage.aspx这样的页面,它们可以更好地链接到特定文化版本的页面。

我知道很多人之前可能已经通过URL结构进行了本地化,我想知道你们中的一个人是否可以在Global.asax文件或HTTP模块中共享如何执行此操作(指向链接到博客帖子也很棒。我们限制该网站基于ASP.NET 2.0(所以我们还不能使用3.5+功能)。

以下是示例方案:

  

真实页面退出:   www.site.com/realfolder/realpage.aspx

     

该页面为用户提供了一种机制   更改显示的语言   通过下拉列表。

     

有搜索引擎优化   和用户链接共享的好处   这样做,因为人们可以链接   直接到有内容的页面   适用于某种情况   语言(这也可能包括   从右到左的语言布局   像日本人一样。)

     

我想使用HTTP模块   看看后面的URL的第一部分   www.site.com,site.com,   subdomain.site.com等包含一个   有效的文化代码(例如en-us,es-mx)   然后使用该值来设置   本土文化   基于该URL的页面/资源。

     

因此,如果用户访问该URL   www.site.com/en-MX/realfolder/realpage.aspx

     

然后页面将在墨西哥呈现   西班牙语的变体。

     

如果用户去了   www.site.com/realfolder/realpage.aspx   直接页面只会使用他们的   浏览器的语言设置。

1 个答案:

答案 0 :(得分:0)

我在global.asax中执行此操作,就像这个answer explains一样,然后我在母版页中设置了不同的网址,根据当前的情况更改语言:

即:

    If Request.Path.Contains("/en/") Then
        DestinationPathEs = Request.Path.Replace("/en/", "/es/")
        DestinationPathPt = Request.Path.Replace("/en/", "/pt/")

        litLangBar.Text = "<span id='langbares'><a href='" & DestinationPathEs & "'>Español</a></span>"
        litLangBar.Text += "<span id='langbarpt'><a href='" & DestinationPathPt & "'>Portugues</a></span>"
        litLangBar.Text += "<span id='langbaren' class='active'>English</span>"