我正在寻找使网站基本上具有以下内容的方法:
http://mysite.com/的的en-US / index.aspx`
“en-US”可能因文化而异。
然后,URL中的这种文化基本上会为应用程序设置CurrentUICulture
..
基本上,我们目前有一个用户明确点击它的页面,但有些人喜欢过去,这会导致一些问题..
我知道这种事情很容易在ASP.NET MVC中完成,但是我们这些仍然在2.0中工作的人呢?你们所有的智慧可以提供任何建议/指示/任何可能让我开始的东西吗?这对我来说是新的:)
我确信必须有某种方式来接收请求并根据需要设置/退回.. HttpModule
可能吗?
刚想过..最好在IIS中创建VirtDirs然后从请求的URL中提取相应的部分并在InitializeCulture
中设置文化?
答案 0 :(得分:3)
是否将选项存储在cookie中? 很高兴为用户提供选择,但为什么不默认用户客户端/ Web浏览器设置?
如果他们为某个网页添加书签并丢失了该Cookie,则可能会退回到默认状态,如果这是一种您不支持的文化,则可以进一步退回到en-US。
如果您想保留解决方案,可以使用重写引擎。我过去曾使用http://www.managedfusion.com/products/url-rewriter/。有关引擎列表,请参阅http://en.wikipedia.org/wiki/Rewrite_engine#IIS
答案 1 :(得分:1)
您可以使用webforms轻松使用为MVC开发的路由功能。这个问题解决了这个问题:
ASP.NET Routing with Web Forms
如果你不能使用3.5框架,那里有很多URL重写模块。我没有任何能够提出建议的经验。
答案 2 :(得分:1)
我在一些使用ASP.net路由的网站上这样做。
以下是代码:
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs on application startup
RegisterRoutes(RouteTable.Routes)
End Sub
Public Sub RegisterRoutes(ByVal routes As RouteCollection)
Dim reportRoute As Route
Dim DefaultLang As String = "es"
reportRoute = New Route("{lang}/{page}", New LangRouteHandler)
'* if you want, you can contrain the values
'reportRoute.Constraints = New RouteValueDictionary(New With {.lang = "[a-z]{2}"})
reportRoute.Defaults = New RouteValueDictionary(New With {.lang = DefaultLang, .page = "home"})
routes.Add(reportRoute)
End Sub
然后LangRouteHandler.vb类:
Public Class LangRouteHandler
Implements IRouteHandler
Public Function GetHttpHandler(ByVal requestContext As System.Web.Routing.RequestContext) As System.Web.IHttpHandler _
Implements System.Web.Routing.IRouteHandler.GetHttpHandler
'Fill the context with the route data, just in case some page needs it
For Each value In requestContext.RouteData.Values
HttpContext.Current.Items(value.Key) = value.Value
Next
Dim VirtualPath As String
VirtualPath = "~/" + requestContext.RouteData.Values("page") + ".aspx"
Dim redirectPage As IHttpHandler
redirectPage = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, GetType(Page))
Return redirectPage
End Function
End Class
最后,我使用root中的default.aspx重定向到浏览器列表中使用的默认语言。
也许这可以通过route.Defaults来完成,但是在Visual Studio中不起作用(也许它可以在服务器中运行)
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim DefaultLang As String = "es"
Dim SupportedLangs As String() = {"en", "es"}
Dim BrowserLang As String = Mid(Request.UserLanguages(0).ToString(), 1, 2).ToLower
If SupportedLangs.Contains(BrowserLang) Then DefaultLang = BrowserLang
Response.Redirect(DefaultLang + "/")
End Sub
有些消息来源:
* Mike Ormond's blog
* Chris Cavanagh’s Blog
* MSDN
答案 3 :(得分:0)
尝试添加该参数
http://yoursite/yourPage.aspx?lang=en-US
如果您正在使用资源文件,它将自动生效。
祝你好运