2016-04-06 58 views
0

我有一个具有多语言功能的网站。我仍然使用cookie来检测语言,例如,如果用户选择“英文”,那么我会将cookie值更改为“EN”并向用户提供“英文页面”。MVC中的多语言支持

我想更改此行为并从URL而不是cookie中读取语言。因此,例如,如果产品页面当前URL是

www.ezstore.com/product/asus-gtx970 

我想要的网址更改为

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

我想改变RouteConfig和读取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

我会考虑使用浏览器发送的HTTP_ACCEPT_LANGUAGE头。这是用户喜欢的语言。 –

+0

看看[this](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路线参数,如下所示: -

public ActionResult Index(string langcode) 
{....} 
+0

我实际上有''MapRoute'在我的'RouteConfig',这是否意味着我需要在每个'MapRoute'中添加'{langcode}'?还是有更高效的解决方案? – warheat1990

+0

@ warheat1990 ...是的..在网址中你想要'langcode'的网页,你必须改变他们的路线,如答案中所示。 –