1

我正在寻找使网站基本上具有以下功能的方法:

http://mysite.com/ en-US /index.aspx`

“en-US”可能因文化而异。

然后,URL 中的这种文化将基本上CurrentUICulture为应用程序设置 ..

基本上,我们目前有一个页面,用户明确点击它,但有些人喜欢过去,这导致了一些问题..

我知道这种事情在 ASP.NET MVC 中很容易完成,但是我们这些仍在 2.0 中工作的人呢?你们能提供任何可以让我开始的建议/指针/任何东西吗?这对我来说是新的:)

我确定必须有某种方法来接收请求并酌情设置/退回..HttpModule也许?

更新

刚刚想到.. 最好在 IIS 中创建 VirtDirs,然后从请求的 URL 中提取适当的部分并将文化设置为InitializeCulture

4

4 回答 4

3

将选择存储在 cookie 中是不可能的吗?你们很高兴为用户提供选择,但为什么不直接使用用户客户端/Web 浏览器设置?

如果他们为页面添加了书签并且丢失了 cookie,您可以退回到默认设置,如果这是您不支持的文化,则进一步退回到 en-US。

如果你想保留你的解决方案,你可以使用重写引擎。我过去使用过http://www.managedfusion.com/products/url-rewriter/。有关引擎列表,请参阅http://en.wikipedia.org/wiki/Rewrite_engine#IIS

于 2008-12-11T11:02:27.557 回答
1

您可以通过 Web 表单轻松使用为 MVC 开发的路由功能。这个 SO question 解决了这样做的问题:

带有 Web 窗体的 ASP.NET 路由

如果您不能使用 3.5 框架,则有许多 URL 重写模块。我没有任何经验可以提出建议。

于 2008-12-11T10:54:44.047 回答
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

最后,我使用根目录中的 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 的博客
* Chris Cavanagh 的博客
* MSDN

于 2008-12-11T11:18:09.040 回答
0

只需尝试添加该参数

http://yoursite/yourPage.aspx?lang=en-US

如果您正在使用资源文件,它将自动运行。

祝你好运

于 2013-12-15T18:01:23.367 回答