1

私は、サイトが基本的に次のようなものを持つことを可能にする方法を探しています。

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

「en-US」は文化によって異なる場合があります。

URLのこのカルチャは、基本的CurrentUICultureにアプリケーションのを設定します。

基本的に、現在、ユーザーが明示的にクリックするページがありますが、それを超えて好意的なページもあり、いくつかの問題を引き起こしています。

この種のことはASP.NETMVCで簡単に実行できることは知っていますが、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

MVC 向けに開発されたルーティング機能を Web フォームで簡単に使用できます。This 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 に答える