2

プロジェクトでwestwind グローバリゼーション ライブラリhttp://west-wind.com/westwind.globalization/を使用して、複数の言語を実装しました。すべてが正常に機能しています。唯一の問題は、URL の最後にhttp://localhost:18106/LangTest?LocaleId=enとしてカルチャ参照変数を取得することです。

http://localhost:18106/en/LangTestのように、ドメインとページ名の間にカルチャ参照変数が必要です。

実際には、たとえばMicrosoft の Web サイトhttp://www.microsoft.com/en-us/default.aspxのようにしたいと考えています。

4

1 に答える 1

2

IRouteHandlerを使用する必要があり、カスタム ルートを作成する必要があります。

デフォルトでは、Web フォームはファイル システム要求処理を使用します。たとえば、MyWebsite/contact.aspx要求は、ルート メニューの下にある contact.aspx ファイル を検索します。MyWebsite/superheroes/superheroes.aspxは、ルート メニューの superheroes ファイル内にあるsuperheroes.aspxファイルを探す必要があります。

global.asaxファイルを使用して、独自の処理を追加できます。必要なのは、 Application_Startメソッド内から、 RouteCollectionパラメーターを持つメソッドを呼び出すことだけです。したがって、 RegisterRoutesというメソッドを作成し、MyRouteConfig.csという新しいファイル内に配置する必要があります。

次に例を示します。

using System;
using Microsoft.AspNet.FriendlyUrls;
using System.Web.Routing;
using System.Web;
using System.Web.UI;
using System.Web.Compilation;


public static class MyRouteConfig
{
   public static void RegisterRoutes(RouteCollection routes)
   {
        routes.EnableFriendlyUrls();     
        routes.MapPageRoute("superheroes", "superhero/{SuperheroName}", "~/superheroes.aspx");
        routes.MapPageRoute("languageSuperheroes", "{language}/superhero/{SuperheroName}", "~/superheroes.aspx");     
        routes.Add(new System.Web.Routing.Route("{language}/{*page}", new LanguageRouteHandler()));
  } 

   public class LanguageRouteHandler : IRouteHandler
   {
       public IHttpHandler GetHttpHandler(RequestContext requestContext)
       {
           string page = CheckForNullValue(requestContext.RouteData.Values["page"]);
           string virtualPath = "~/" + page;

           if (string.IsNullOrEmpty(page))
           {
               string language= CheckForNullValue(requestContext.RouteData.Values["language"]);
               string newPage = "/home";

               if (!string.IsNullOrEmpty(language))
                   newPage = "/" + language + newPage;
               HttpContext.Current.Response.Redirect(newPage, false);
               HttpContext.Current.Response.StatusCode = 301;
               HttpContext.Current.Response.End();

              //Otherwise, route to home
              //page = "home";
           }

          if (!virtualPath.Contains(".aspx"))
                virtualPath += ".aspx";

           try
           {
               return BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(Page)) as IHttpHandler;
           }
           catch
           {
               return null;
           }
       }
   }
}

この記事をご覧ください: http://dotnethints.com/blogs/localization-using-routing-system-on-a-web-forms-project-

于 2015-07-15T09:26:49.243 に答える