2016-04-06 24 views
0

私は多言語機能を持つサイトを持っています。私はまだ言語を検出するためにCookieを使用しています。たとえば、ユーザーが「英語」を選択した場合は、Cookieの値を「EN」に変更し、ユーザーに「英語のページ」を提供します。MVCの多言語サポート

この動作を変更して、クッキーの代わりにURLから言語を読み取る必要があります。例えば、製品ページの現在のURLが

www.ezstore.com/product/asus-gtx970 

ある場合ので、私はRouteConfigを変更を考えていた

www.ezstore.com/en/product/asus-gtx970 for english 
www.ezstore.com/fr/product/asus-gtx970 for french 

にURLを変更し、言語の値を取得するためのURLを読みたいです。これは可能ですか?

私の現在のRouteConfigがある:

routes.MapRoute("Product", "Product/{id}", new { 
    controller = "Product", 
    action = "Index", 
    id = UrlParameter.Optional 
}); 

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

public ActionResult Index(string langcode) {....} 
Iは、ブラウザによって送信されたHTTP_ACCEPT_LANGUAGEヘッダーを使用して検討します。それはユーザーが好む言語です。 –

+0

[こちら](http://www.wiliam.com.au/wiliam-blog/web-design-sydney-using-mvc-routing-for-seo-friendly-urls-on-multilingual-sites)の記事をご覧ください。 –

+0

これはあなたが必要とする答えだと思います[http://stackoverflow.com/questions/1712167/asp-net-mvc-localization-route#answer-1712320](http://stackoverflow.com/questions/1712167/asp) -net-mvc-localization-route#answer-1712320) –

答えて

1

示すように、あなたはあなたのカスタムルートを変更することができます -

routes.MapRoute("Product", "{langcode}/Product/{id}", new { 
    controller = "Product", 
    action = "Index", 
    id = UrlParameter.Optional 
}); 

ここlangcodeは言語のための経路パラメータとなります。

と示すように、コントローラのアクションにlangcodeルートパラメータを取得: -

+0

私は実際に私の 'RouteConfig'に' MapRoute'をたくさん持っています。それはすべての 'MapRoute'に' {langcode} 'を追加する必要があるのでしょうか?または、より効率的なソリューションがありますか? – warheat1990

+0

@ warheat1990 ...はい。これまで、URLに 'langcode'を書いておきたいページは、answerで示されているようにルートを変更する必要があります。 –