7

次のようなURLを使用して、多言語Webサイトを作成する必要があります

www.domain.com/en/home.aspx for english
www.domain.com/es/home.aspx for spanish

以前は、IIS に 2 つの仮想ディレクトリを設定し、global.aspx で URL を検出し、URL に従って言語を変更していました。

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
    Dim lang As String
    If HttpContext.Current.Request.Path.Contains("/en/") Then
        lang = "en"
    Else
        lang = "es"
    End If
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang)
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang)


End Sub

解決策はハックに似ています。新しい Web サイトにルーティングを使用することを考えています。

それを行うためのより良い、またはよりエレガントな方法を知っていますか?

編集: 質問は、リソースなどではなく、URL の処理に関するものです。

4

7 に答える 7

7

新しい ASP.net ルーティングを使用することにしました。
urlRewriting を使わないのはなぜですか? ルーティングによって提供されるクリーンな URL を変更したくないためです。

コードは次のとおりです。

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-09-17T20:16:36.593 に答える
1
  1. asp.net Web フォームには urlrewriteing.net を使用するか、mvc でルーティングします。www.site.com/en/something.aspx を URL: page.aspx?lang=en に書き換えます。
    UrlRewriteing.net は、web.config の正規表現を使用して簡単に構成できます。Webフォームでルーティングを使用することもできます。おそらく似ています...
  2. Webフォームでは、すべてのaspxページがBasePageクラスから継承され、次にPageクラスから継承されます。
    問題で説明したように、 BasePage クラスで「InitializeCulture()」をオーバーライドし、カルチャ情報をスレッドに設定します。
    1. URL で Lang パラメータを確認する、2. Cookie を確認する、3. デフォルトの言語を設定する、の順序で行うとよいでしょう。
  3. ページ上の静的コンテンツ (テキスト、写真の URL) の場合は、LocalResources を使用するか、コンテンツがサイト全体で繰り返される場合は Global を使用します。グローバル/ローカル解像度を使用してビデオキャストを見ることができます。www.asp.netで
  4. 複数の言語用に db を準備します。しかし、それは別の話です。
于 2008-09-17T12:42:44.437 に答える
0

UrlRewritingは進むべき道です。

それを行うための最良の方法については、MSDNに良い記事があります。

http://msdn.microsoft.com/en-us/library/ms972974.aspx

于 2008-09-17T15:44:43.160 に答える
0

私は個人的にリソースファイルを使用しています。

非常に効率的で、非常にシンプルです。

于 2008-09-17T12:29:51.893 に答える
0

接線のようなものですが、異なる言語が互いに完全に分離されたコンテンツでない限り、実際には異なるパスでこれを行うことは避けたいと思います.

Google ランク、または URL を共有するユーザー (「クリーンな」URL の大きな利点の 1 つ) のために、アドレスをできるだけ一定に保つ必要があります。

ユーザーの言語設定は、ブラウザの設定から確認できます。

CultureInfo.CurrentUICulture

次に、英語またはスペイン語の URL:

www.domain.com/products/newproduct

どの言語でも同じアドレスですが、ユーザーは選択した言語でページを取得します。

カナダではこれを使用して、英語とフランス語のシステムを同時に提供しています。

于 2008-10-09T11:08:28.037 に答える
0

また、新しい IIS 7.0 - URL Rewriting にも注目してください。ここの優れた記事http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

私はこの部分が好きでした どのオプションを使用する必要がありますか?

  1. ASP.NET MVC または ASP.NET 動的データ テクノロジを使用する新しい ASP.NET Web アプリケーションを開発している場合は、ASP.NET ルーティングを使用します。アプリケーションは、Web ページ内のリンクのクリーン URL の生成など、クリーン URL のネイティブ サポートの恩恵を受けることができます。ASP.NET ルーティングは、標準の Web フォーム アプリケーションをまだサポートしていませんが、将来サポートする計画があることに注意してください。

  2. 従来の ASP.NET Web アプリケーションが既にあり、それを変更したくない場合は、URL 書き換えモジュールを使用してください。URL 書き換えモジュールを使用すると、検索エンジンに適した URL をアプリケーションで現在使用されている形式に変換できます。また、検索エンジン クローラーをクリーンな URL にリダイレクトするために使用できるリダイレクト ルールを作成することもできます。 http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

ありがとう、モーリック。

于 2008-12-17T10:49:41.543 に答える
0

URL ルーティングでこれを行うには、次の投稿を参照してください。

URL ルーティングによるフレンドリ URL

于 2008-11-07T21:02:55.073 に答える