1

ローカライズを実行するために、次のような 2 つのルートを作成しました。

routes.MapRoute(
                "Default", // Route name
                "{language}/{controller}/{action}/{id}", // URL with parameters
                new { language = "en", controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
               );

routes.MapRoute(
                "Default2", 
                "{language}/{controller}/{action}/{id}/{slug}",
                new { language = "en", controller = "Home", action = "Index", id = UrlParameter.Optional, slug = UrlParameter.Optional }
               );

今、私は2つの問題を抱えています:

  1. デフォルトでは、URL にwww.mydomainname.com自動的に追加されません。enDesire result: 入力www.mydomainame.comすると、自動的に に変わりwww.mydomainname.com/enます。

  2. 文化を変えるとき。language segment's valueルートのデフォルトTwoLetterISOLanguageNameをそのカルチャに置き換えるにはどうすればよいですか?

ご意見をお聞かせください

4

1 に答える 1

1

これはおおよその答えなので、正しい軌道に乗ることを願っています。

CultureInfo.TwoLetterISOLanguageName は非静的フィールドであり、ユーザーに依存するため、リダイレクトを使用してこれを実現する必要があります (global.asax ファイルでは設定できません)。

これを行う 1 つの方法は、ユーザーがドメイン名を要求したときに、通常のデフォルト ルートを使用してそれらをホーム コントローラーにルーティングすることです。

 routes.MapRoute(
    name: "TypicalDefault",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
 );

ホームコントローラー内で、それらを適切なルートにリダイレクトします

 public ActionReult Index(){
    var routeDataDict = HttpContext.Request.RequestContext.RouteData.Values;
    routeDataDict.Add("language", CultureInfo.TwoLetterISOLanguageName);
    Response.RedirectToRoute(routeDataDict);
 }
于 2013-06-02T09:31:58.630 に答える